[openlayers] 32/41: Imported Upstream version 2.12+ds1

Bas Couwenberg sebastic at xs4all.nl
Fri Dec 26 02:41:42 UTC 2014


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch master
in repository openlayers.

commit f0350f63b2b2037e08a6937f6dcf9564014721e0
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Dec 26 03:02:35 2014 +0100

    Imported Upstream version 2.12+ds1
---
 .gitignore                                         |    7 +
 apidoc_config/Data/ClassHierarchy.nd               |  Bin 37616 -> 35570 bytes
 apidoc_config/Data/ConfigFileInfo.nd               |  Bin 26 -> 26 bytes
 apidoc_config/Data/FileInfo.nd                     |  626 ++-
 apidoc_config/Data/ImageFileInfo.nd                |  Bin 252 -> 219 bytes
 apidoc_config/Data/ImageReferenceTable.nd          |  Bin 494 -> 638 bytes
 apidoc_config/Data/IndexInfo.nd                    |  Bin 267 -> 267 bytes
 apidoc_config/Data/PreviousMenuState.nd            |  Bin 29654 -> 26101 bytes
 apidoc_config/Data/PreviousSettings.nd             |  Bin 139 -> 117 bytes
 apidoc_config/Data/SymbolTable.nd                  |  Bin 605942 -> 602851 bytes
 apidoc_config/Menu.txt                             |  340 +-
 doc/authors.txt => authors.txt                     |    0
 build/OpenLayers.js                                | 2885 ----------
 build/README.txt                                   |    3 +
 build/build.py                                     |   53 +-
 build/closure-compiler/Externs.js                  |   50 +
 build/full.cfg                                     |    1 +
 build/library.cfg                                  |   48 -
 build/license.txt                                  |   80 +-
 build/light.cfg                                    |   32 +
 build/mobile.cfg                                   |    5 +-
 doc/apidocs/files/OpenLayers-js.html               |   15 +-
 doc/apidocs/files/OpenLayers/Ajax-js.html          |   65 -
 doc/apidocs/files/OpenLayers/Animation-js.html     |   39 +
 doc/apidocs/files/OpenLayers/BaseTypes-js.html     |   28 +-
 .../files/OpenLayers/BaseTypes/Bounds-js.html      |   40 +-
 .../files/OpenLayers/BaseTypes/Class-js.html       |   14 +-
 .../files/OpenLayers/BaseTypes/Date-js.html        |    4 +-
 .../files/OpenLayers/BaseTypes/Element-js.html     |   14 +-
 .../files/OpenLayers/BaseTypes/LonLat-js.html      |   10 +-
 .../files/OpenLayers/BaseTypes/Pixel-js.html       |   18 +-
 .../files/OpenLayers/BaseTypes/Size-js.html        |    6 +-
 doc/apidocs/files/OpenLayers/Console-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Control-js.html       |   13 +-
 .../files/OpenLayers/Control/ArgParser-js.html     |   10 +-
 .../files/OpenLayers/Control/Attribution-js.html   |    8 +-
 .../files/OpenLayers/Control/Button-js.html        |    4 +-
 .../files/OpenLayers/Control/CacheRead-js.html     |   51 +
 .../files/OpenLayers/Control/CacheWrite-js.html    |   57 +
 .../files/OpenLayers/Control/DragFeature-js.html   |    4 +-
 .../files/OpenLayers/Control/DragPan-js.html       |    6 +-
 .../files/OpenLayers/Control/DrawFeature-js.html   |   18 +-
 .../OpenLayers/Control/EditingToolbar-js.html      |   10 +-
 .../files/OpenLayers/Control/Geolocate-js.html     |   14 +-
 .../files/OpenLayers/Control/GetFeature-js.html    |   14 +-
 .../files/OpenLayers/Control/Graticule-js.html     |    4 +-
 .../OpenLayers/Control/KeyboardDefaults-js.html    |    8 +-
 .../files/OpenLayers/Control/LayerSwitcher-js.html |    8 +-
 .../files/OpenLayers/Control/Measure-js.html       |   18 +-
 .../files/OpenLayers/Control/ModifyFeature-js.html |   20 +-
 .../files/OpenLayers/Control/MouseDefaults-js.html |   47 -
 .../files/OpenLayers/Control/MousePosition-js.html |    6 +-
 .../files/OpenLayers/Control/MouseToolbar-js.html  |   51 -
 .../files/OpenLayers/Control/NavToolbar-js.html    |    4 +-
 .../files/OpenLayers/Control/Navigation-js.html    |    6 +-
 .../OpenLayers/Control/NavigationHistory-js.html   |    4 +-
 .../files/OpenLayers/Control/OverviewMap-js.html   |    8 +-
 doc/apidocs/files/OpenLayers/Control/Pan-js.html   |    4 +-
 .../files/OpenLayers/Control/PanPanel-js.html      |    4 +-
 .../files/OpenLayers/Control/PanZoom-js.html       |    4 +-
 .../files/OpenLayers/Control/PanZoomBar-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Control/Panel-js.html |   36 +-
 .../files/OpenLayers/Control/Permalink-js.html     |    8 +-
 .../files/OpenLayers/Control/PinchZoom-js.html     |    4 +-
 .../files/OpenLayers/Control/SLDSelect-js.html     |   22 +-
 doc/apidocs/files/OpenLayers/Control/Scale-js.html |    4 +-
 .../files/OpenLayers/Control/ScaleLine-js.html     |    4 +-
 .../files/OpenLayers/Control/SelectFeature-js.html |   18 +-
 .../files/OpenLayers/Control/Snapping-js.html      |   18 +-
 doc/apidocs/files/OpenLayers/Control/Split-js.html |   26 +-
 .../OpenLayers/Control/TouchNavigation-js.html     |    4 +-
 .../OpenLayers/Control/TransformFeature-js.html    |   30 +-
 .../files/OpenLayers/Control/UTFGrid-js.html       |   72 +
 .../OpenLayers/Control/WMSGetFeatureInfo-js.html   |   12 +-
 .../OpenLayers/Control/WMTSGetFeatureInfo-js.html  |   12 +-
 doc/apidocs/files/OpenLayers/Control/Zoom-js.html  |   49 +
 .../files/OpenLayers/Control/ZoomBox-js.html       |   14 +-
 .../files/OpenLayers/Control/ZoomIn-js.html        |    4 +-
 .../files/OpenLayers/Control/ZoomOut-js.html       |    4 +-
 .../files/OpenLayers/Control/ZoomPanel-js.html     |    4 +-
 .../OpenLayers/Control/ZoomToMaxExtent-js.html     |    4 +-
 doc/apidocs/files/OpenLayers/Events-js.html        |   54 +-
 .../files/OpenLayers/Events/buttonclick-js.html    |   43 +
 doc/apidocs/files/OpenLayers/Feature-js.html       |   12 +-
 .../files/OpenLayers/Feature/Vector-js.html        |    6 +-
 doc/apidocs/files/OpenLayers/Feature/WFS-js.html   |   43 -
 doc/apidocs/files/OpenLayers/Filter-js.html        |   14 +-
 .../files/OpenLayers/Filter/Comparison-js.html     |    8 +-
 .../files/OpenLayers/Filter/FeatureId-js.html      |    8 +-
 .../files/OpenLayers/Filter/Function-js.html       |    6 +-
 .../files/OpenLayers/Filter/Logical-js.html        |    6 +-
 .../files/OpenLayers/Filter/Spatial-js.html        |    6 +-
 doc/apidocs/files/OpenLayers/Format-js.html        |    6 +-
 doc/apidocs/files/OpenLayers/Format/ArcXML-js.html |   10 +-
 .../OpenLayers/Format/ArcXML/Features-js.html      |   10 +-
 doc/apidocs/files/OpenLayers/Format/Atom-js.html   |   10 +-
 doc/apidocs/files/OpenLayers/Format/CQL-js.html    |    4 +-
 .../files/OpenLayers/Format/CSWGetDomain-js.html   |    4 +-
 .../OpenLayers/Format/CSWGetDomain/v2_0_2-js.html  |    8 +-
 .../files/OpenLayers/Format/CSWGetRecords-js.html  |    4 +-
 .../OpenLayers/Format/CSWGetRecords/v2_0_2-js.html |    8 +-
 .../files/OpenLayers/Format/Context-js.html        |   12 +-
 doc/apidocs/files/OpenLayers/Format/Filter-js.html |    4 +-
 .../files/OpenLayers/Format/Filter/v1-js.html      |   10 +-
 .../files/OpenLayers/Format/Filter/v1_0_0-js.html  |    4 +-
 .../files/OpenLayers/Format/Filter/v1_1_0-js.html  |   10 +-
 doc/apidocs/files/OpenLayers/Format/GML-js.html    |   12 +-
 .../files/OpenLayers/Format/GML/Base-js.html       |   12 +-
 doc/apidocs/files/OpenLayers/Format/GML/v2-js.html |    4 +-
 doc/apidocs/files/OpenLayers/Format/GML/v3-js.html |    4 +-
 doc/apidocs/files/OpenLayers/Format/GPX-js.html    |   16 +-
 .../files/OpenLayers/Format/GeoJSON-js.html        |    4 +-
 doc/apidocs/files/OpenLayers/Format/GeoRSS-js.html |   12 +-
 doc/apidocs/files/OpenLayers/Format/JSON-js.html   |    4 +-
 doc/apidocs/files/OpenLayers/Format/KML-js.html    |   18 +-
 .../OpenLayers/Format/OGCExceptionReport-js.html   |    8 +-
 doc/apidocs/files/OpenLayers/Format/OSM-js.html    |   10 +-
 .../files/OpenLayers/Format/OWSCommon-js.html      |    4 +-
 .../files/OpenLayers/Format/OWSCommon/v1-js.html   |    6 +-
 .../OpenLayers/Format/OWSCommon/v1_0_0-js.html     |    8 +-
 .../OpenLayers/Format/OWSCommon/v1_1_0-js.html     |    8 +-
 .../files/OpenLayers/Format/OWSContext-js.html     |    8 +-
 .../OpenLayers/Format/OWSContext/v0_3_1-js.html    |   10 +-
 .../OpenLayers/Format/QueryStringFilter-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Format/SLD-js.html    |    8 +-
 doc/apidocs/files/OpenLayers/Format/SLD/v1-js.html |    4 +-
 .../files/OpenLayers/Format/SLD/v1_0_0-js.html     |    4 +-
 .../OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html |   43 +
 .../OpenLayers/Format/SOSCapabilities-js.html      |    4 +-
 .../Format/SOSCapabilities/v1_0_0-js.html          |    4 +-
 .../Format/SOSGetFeatureOfInterest-js.html         |   10 +-
 .../OpenLayers/Format/SOSGetObservation-js.html    |    8 +-
 doc/apidocs/files/OpenLayers/Format/Text-js.html   |    6 +-
 .../files/OpenLayers/Format/WCSGetCoverage-js.html |    8 +-
 doc/apidocs/files/OpenLayers/Format/WFS-js.html    |    8 +-
 .../OpenLayers/Format/WFSCapabilities-js.html      |    4 +-
 .../OpenLayers/Format/WFSCapabilities/v1-js.html   |    8 +-
 .../Format/WFSCapabilities/v1_0_0-js.html          |    8 +-
 .../Format/WFSCapabilities/v1_1_0-js.html          |    4 +-
 .../Format/WFSDescribeFeatureType-js.html          |   10 +-
 doc/apidocs/files/OpenLayers/Format/WFST-js.html   |    4 +-
 .../files/OpenLayers/Format/WFST/v1-js.html        |   10 +-
 .../files/OpenLayers/Format/WFST/v1_0_0-js.html    |    4 +-
 .../files/OpenLayers/Format/WFST/v1_1_0-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Format/WKT-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Format/WMC-js.html    |    8 +-
 doc/apidocs/files/OpenLayers/Format/WMC/v1-js.html |   10 +-
 .../files/OpenLayers/Format/WMC/v1_0_0-js.html     |    4 +-
 .../files/OpenLayers/Format/WMC/v1_1_0-js.html     |    4 +-
 .../OpenLayers/Format/WMSCapabilities-js.html      |    4 +-
 .../OpenLayers/Format/WMSCapabilities/v1-js.html   |    8 +-
 .../OpenLayers/Format/WMSCapabilities/v1_1-js.html |    4 +-
 .../Format/WMSCapabilities/v1_1_0-js.html          |    4 +-
 .../Format/WMSCapabilities/v1_1_1-js.html          |    4 +-
 .../Format/WMSCapabilities/v1_1_1_WMSC-js.html     |    4 +-
 .../OpenLayers/Format/WMSCapabilities/v1_3-js.html |    4 +-
 .../Format/WMSCapabilities/v1_3_0-js.html          |    4 +-
 .../OpenLayers/Format/WMSDescribeLayer-js.html     |    4 +-
 .../Format/WMSDescribeLayer/v1_1-js.html           |    4 +-
 .../OpenLayers/Format/WMSGetFeatureInfo-js.html    |   10 +-
 .../OpenLayers/Format/WMTSCapabilities-js.html     |    4 +-
 .../Format/WMTSCapabilities/v1_0_0-js.html         |    4 +-
 .../OpenLayers/Format/WPSCapabilities-js.html      |    4 +-
 .../Format/WPSCapabilities/v1_0_0-js.html          |    8 +-
 .../OpenLayers/Format/WPSDescribeProcess-js.html   |    8 +-
 .../files/OpenLayers/Format/WPSExecute-js.html     |    8 +-
 doc/apidocs/files/OpenLayers/Format/XLS-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Format/XLS/v1-js.html |   10 +-
 .../files/OpenLayers/Format/XLS/v1_1_0-js.html     |    4 +-
 doc/apidocs/files/OpenLayers/Format/XML-js.html    |   10 +-
 .../OpenLayers/Format/XML/VersionedOGC-js.html     |    8 +-
 doc/apidocs/files/OpenLayers/Geometry-js.html      |    6 +-
 .../files/OpenLayers/Geometry/Collection-js.html   |   12 +-
 .../files/OpenLayers/Geometry/Curve-js.html        |    6 +-
 .../files/OpenLayers/Geometry/LineString-js.html   |    4 +-
 .../files/OpenLayers/Geometry/LinearRing-js.html   |   10 +-
 .../OpenLayers/Geometry/MultiLineString-js.html    |    4 +-
 .../files/OpenLayers/Geometry/MultiPoint-js.html   |    4 +-
 .../files/OpenLayers/Geometry/MultiPolygon-js.html |    4 +-
 .../files/OpenLayers/Geometry/Point-js.html        |    8 +-
 .../files/OpenLayers/Geometry/Polygon-js.html      |    6 +-
 .../files/OpenLayers/Geometry/Rectangle-js.html    |   49 -
 doc/apidocs/files/OpenLayers/Handler-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Handler/Box-js.html   |    4 +-
 doc/apidocs/files/OpenLayers/Handler/Click-js.html |    4 +-
 doc/apidocs/files/OpenLayers/Handler/Drag-js.html  |    4 +-
 .../files/OpenLayers/Handler/Feature-js.html       |   10 +-
 doc/apidocs/files/OpenLayers/Handler/Hover-js.html |    4 +-
 .../files/OpenLayers/Handler/Keyboard-js.html      |    4 +-
 .../files/OpenLayers/Handler/MouseWheel-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Handler/Path-js.html  |    6 +-
 doc/apidocs/files/OpenLayers/Handler/Pinch-js.html |    4 +-
 doc/apidocs/files/OpenLayers/Handler/Point-js.html |    8 +-
 .../files/OpenLayers/Handler/Polygon-js.html       |    4 +-
 .../OpenLayers/Handler/RegularPolygon-js.html      |   12 +-
 doc/apidocs/files/OpenLayers/Icon-js.html          |    8 +-
 doc/apidocs/files/OpenLayers/Kinetic-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang-js.html          |    8 +-
 doc/apidocs/files/OpenLayers/Lang/ar-js.html       |    4 +-
 .../files/OpenLayers/Lang/be-tarask-js.html        |    4 +-
 doc/apidocs/files/OpenLayers/Lang/bg-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/br-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/ca-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/cs-CZ-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Lang/da-DK-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Lang/de-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/el-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/en-CA-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Lang/en-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/es-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/fi-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/fr-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/fur-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Lang/gl-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/gsw-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Lang/hr-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/hsb-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Lang/hu-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/ia-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/id-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/io-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/is-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/it-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/ja-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/km-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/ksh-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Lang/lt-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/nb-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/nds-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Lang/nl-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/nn-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/oc-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/pl-js.html       |   39 +
 doc/apidocs/files/OpenLayers/Lang/pt-BR-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Lang/pt-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/ru-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/sk-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/sv-SE-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Lang/te-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/vi-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Lang/zh-CN-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Lang/zh-TW-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Layer-js.html         |   54 +-
 .../files/OpenLayers/Layer/ArcGIS93Rest-js.html    |    6 +-
 .../files/OpenLayers/Layer/ArcGISCache-js.html     |    6 +-
 doc/apidocs/files/OpenLayers/Layer/ArcIMS-js.html  |   10 +-
 doc/apidocs/files/OpenLayers/Layer/Bing-js.html    |   12 +-
 doc/apidocs/files/OpenLayers/Layer/Boxes-js.html   |    4 +-
 .../files/OpenLayers/Layer/EventPane-js.html       |    6 +-
 .../files/OpenLayers/Layer/FixedZoomLevels-js.html |    4 +-
 doc/apidocs/files/OpenLayers/Layer/GML-js.html     |   53 -
 doc/apidocs/files/OpenLayers/Layer/GeoRSS-js.html  |    6 +-
 doc/apidocs/files/OpenLayers/Layer/Google-js.html  |   16 +-
 .../files/OpenLayers/Layer/Google/v3-js.html       |   18 +-
 doc/apidocs/files/OpenLayers/Layer/Grid-js.html    |   44 +-
 .../files/OpenLayers/Layer/HTTPRequest-js.html     |    4 +-
 doc/apidocs/files/OpenLayers/Layer/Image-js.html   |    6 +-
 doc/apidocs/files/OpenLayers/Layer/KaMap-js.html   |   10 +-
 .../files/OpenLayers/Layer/KaMapCache-js.html      |    4 +-
 .../files/OpenLayers/Layer/MapGuide-js.html        |    4 +-
 .../files/OpenLayers/Layer/MapServer-js.html       |    4 +-
 .../OpenLayers/Layer/MapServer/Untiled-js.html     |   47 -
 doc/apidocs/files/OpenLayers/Layer/Markers-js.html |    6 +-
 .../files/OpenLayers/Layer/MultiMap-js.html        |   81 -
 doc/apidocs/files/OpenLayers/Layer/OSM-js.html     |   57 +
 .../files/OpenLayers/Layer/PointGrid-js.html       |   36 +-
 .../files/OpenLayers/Layer/PointTrack-js.html      |   20 +-
 .../OpenLayers/Layer/SphericalMercator-js.html     |   12 +-
 doc/apidocs/files/OpenLayers/Layer/TMS-js.html     |   16 +-
 doc/apidocs/files/OpenLayers/Layer/Text-js.html    |    4 +-
 .../files/OpenLayers/Layer/TileCache-js.html       |   10 +-
 doc/apidocs/files/OpenLayers/Layer/UTFGrid-js.html |   74 +
 doc/apidocs/files/OpenLayers/Layer/Vector-js.html  |   24 +-
 .../OpenLayers/Layer/Vector/RootContainer-js.html  |    4 +-
 .../files/OpenLayers/Layer/VirtualEarth-js.html    |   98 -
 doc/apidocs/files/OpenLayers/Layer/WFS-js.html     |   79 -
 doc/apidocs/files/OpenLayers/Layer/WMS-js.html     |    4 +-
 .../files/OpenLayers/Layer/WMS/Post-js.html        |   50 -
 .../files/OpenLayers/Layer/WMS/Untiled-js.html     |   47 -
 doc/apidocs/files/OpenLayers/Layer/WMTS-js.html    |   32 +-
 .../files/OpenLayers/Layer/WorldWind-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Layer/XYZ-js.html     |   15 +-
 doc/apidocs/files/OpenLayers/Layer/Yahoo-js.html   |   95 -
 doc/apidocs/files/OpenLayers/Layer/Zoomify-js.html |    4 +-
 doc/apidocs/files/OpenLayers/Map-js.html           |  128 +-
 doc/apidocs/files/OpenLayers/Marker-js.html        |    4 +-
 doc/apidocs/files/OpenLayers/Marker/Box-js.html    |    4 +-
 doc/apidocs/files/OpenLayers/Popup-js.html         |    4 +-
 .../files/OpenLayers/Popup/Anchored-js.html        |    4 +-
 .../files/OpenLayers/Popup/AnchoredBubble-js.html  |    6 +-
 doc/apidocs/files/OpenLayers/Popup/Framed-js.html  |    4 +-
 .../files/OpenLayers/Popup/FramedCloud-js.html     |   20 +-
 doc/apidocs/files/OpenLayers/Projection-js.html    |   20 +-
 doc/apidocs/files/OpenLayers/Protocol-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Protocol/CSW-js.html  |   43 +
 .../files/OpenLayers/Protocol/CSW/v2_0_2-js.html   |   47 +
 doc/apidocs/files/OpenLayers/Protocol/HTTP-js.html |   30 +-
 doc/apidocs/files/OpenLayers/Protocol/SOS-js.html  |    4 +-
 .../files/OpenLayers/Protocol/SOS/v1_0_0-js.html   |    6 +-
 doc/apidocs/files/OpenLayers/Protocol/SQL-js.html  |   55 -
 .../files/OpenLayers/Protocol/SQL/Gears-js.html    |   59 -
 .../files/OpenLayers/Protocol/Script-js.html       |   18 +-
 doc/apidocs/files/OpenLayers/Protocol/WFS-js.html  |    4 +-
 .../files/OpenLayers/Protocol/WFS/v1-js.html       |    4 +-
 .../files/OpenLayers/Protocol/WFS/v1_0_0-js.html   |    4 +-
 .../files/OpenLayers/Protocol/WFS/v1_1_0-js.html   |    4 +-
 doc/apidocs/files/OpenLayers/Renderer-js.html      |    8 +-
 .../files/OpenLayers/Renderer/Canvas-js.html       |    4 +-
 .../files/OpenLayers/Renderer/Elements-js.html     |   20 +-
 doc/apidocs/files/OpenLayers/Renderer/NG-js.html   |   47 -
 doc/apidocs/files/OpenLayers/Renderer/SVG-js.html  |    4 +-
 doc/apidocs/files/OpenLayers/Renderer/SVG2-js.html |   59 -
 doc/apidocs/files/OpenLayers/Renderer/VML-js.html  |    4 +-
 doc/apidocs/files/OpenLayers/Request-js.html       |    4 +-
 .../OpenLayers/Request/XMLHttpRequest-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Rule-js.html          |    4 +-
 doc/apidocs/files/OpenLayers/SingleFile-js.html    |    6 +-
 doc/apidocs/files/OpenLayers/Spherical-js.html     |   45 +
 doc/apidocs/files/OpenLayers/Strategy-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Strategy/BBOX-js.html |    4 +-
 .../files/OpenLayers/Strategy/Cluster-js.html      |    4 +-
 .../files/OpenLayers/Strategy/Filter-js.html       |    6 +-
 .../files/OpenLayers/Strategy/Fixed-js.html        |    4 +-
 .../files/OpenLayers/Strategy/Paging-js.html       |    6 +-
 .../files/OpenLayers/Strategy/Refresh-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Strategy/Save-js.html |   12 +-
 doc/apidocs/files/OpenLayers/Style-js.html         |    6 +-
 doc/apidocs/files/OpenLayers/Style2-js.html        |    6 +-
 doc/apidocs/files/OpenLayers/StyleMap-js.html      |    4 +-
 doc/apidocs/files/OpenLayers/Symbolizer-js.html    |    4 +-
 .../files/OpenLayers/Symbolizer/Line-js.html       |    4 +-
 .../files/OpenLayers/Symbolizer/Point-js.html      |    4 +-
 .../files/OpenLayers/Symbolizer/Polygon-js.html    |    4 +-
 .../files/OpenLayers/Symbolizer/Raster-js.html     |    4 +-
 .../files/OpenLayers/Symbolizer/Text-js.html       |    4 +-
 doc/apidocs/files/OpenLayers/Tile-js.html          |   28 +-
 doc/apidocs/files/OpenLayers/Tile/Image-js.html    |   23 +-
 .../files/OpenLayers/Tile/Image/IFrame-js.html     |    8 +-
 doc/apidocs/files/OpenLayers/Tile/UTFGrid-js.html  |   47 +
 doc/apidocs/files/OpenLayers/Tile/WFS-js.html      |   43 -
 doc/apidocs/files/OpenLayers/Tween-js.html         |   10 +-
 doc/apidocs/files/OpenLayers/Util-js.html          |    8 +-
 doc/apidocs/files/deprecated-js.html               |  439 ++
 doc/apidocs/index/Classes.html                     |    8 +-
 doc/apidocs/index/Classes2.html                    |   10 +-
 doc/apidocs/index/Constants.html                   |   42 +-
 doc/apidocs/index/Constructor.html                 |   24 +-
 doc/apidocs/index/Constructor2.html                |   18 +-
 doc/apidocs/index/Constructor3.html                |   12 +-
 doc/apidocs/index/Files.html                       |   10 +-
 doc/apidocs/index/Functions.html                   |   10 +-
 doc/apidocs/index/Functions2.html                  |    8 +-
 doc/apidocs/index/Functions3.html                  |    8 +-
 doc/apidocs/index/Functions4.html                  |   10 +-
 doc/apidocs/index/Functions5.html                  |    8 +-
 doc/apidocs/index/Functions6.html                  |   22 +-
 doc/apidocs/index/Functions7.html                  |    8 +-
 doc/apidocs/index/Functions8.html                  |   16 +-
 doc/apidocs/index/General.html                     |    8 +-
 doc/apidocs/index/General10.html                   |   10 +-
 doc/apidocs/index/General11.html                   |    8 +-
 doc/apidocs/index/General12.html                   |    8 +-
 doc/apidocs/index/General13.html                   |    8 +-
 doc/apidocs/index/General14.html                   |    8 +-
 doc/apidocs/index/General15.html                   |    8 +-
 doc/apidocs/index/General16.html                   |   12 +-
 doc/apidocs/index/General17.html                   |   12 +-
 doc/apidocs/index/General18.html                   |   14 +-
 doc/apidocs/index/General2.html                    |    8 +-
 doc/apidocs/index/General3.html                    |    8 +-
 doc/apidocs/index/General4.html                    |    8 +-
 doc/apidocs/index/General5.html                    |    8 +-
 doc/apidocs/index/General6.html                    |    8 +-
 doc/apidocs/index/General7.html                    |    8 +-
 doc/apidocs/index/General8.html                    |   12 +-
 doc/apidocs/index/General9.html                    |   10 +-
 doc/apidocs/index/Properties.html                  |   16 +-
 doc/apidocs/index/Properties2.html                 |   18 +-
 doc/apidocs/index/Properties3.html                 |   16 +-
 doc/apidocs/index/Properties4.html                 |   20 +-
 doc/apidocs/index/Properties5.html                 |   14 +-
 doc/apidocs/index/Properties6.html                 |   24 +-
 doc/apidocs/index/Properties7.html                 |   38 +
 doc/apidocs/index/Properties8.html                 |   54 +
 doc/apidocs/javascript/searchdata.js               |    6 +-
 doc/apidocs/search/ClassesO.html                   |    2 +-
 doc/apidocs/search/ClassesS.html                   |   20 +
 doc/apidocs/search/ConstantsC.html                 |    2 +-
 doc/apidocs/search/ConstantsD.html                 |    2 +-
 doc/apidocs/search/ConstantsE.html                 |   20 -
 doc/apidocs/search/ConstantsI.html                 |    2 +-
 doc/apidocs/search/ConstantsK.html                 |    2 +-
 doc/apidocs/search/ConstantsL.html                 |    2 +-
 doc/apidocs/search/ConstantsM.html                 |    2 +-
 doc/apidocs/search/ConstantsR.html                 |    2 +-
 doc/apidocs/search/ConstantsS.html                 |    2 +-
 doc/apidocs/search/ConstructorB.html               |    2 +-
 doc/apidocs/search/ConstructorC.html               |    2 +-
 doc/apidocs/search/ConstructorG.html               |    2 +-
 doc/apidocs/search/ConstructorI.html               |    2 +-
 doc/apidocs/search/ConstructorM.html               |    2 +-
 doc/apidocs/search/ConstructorN.html               |    2 +-
 doc/apidocs/search/ConstructorO.html               |    2 +-
 doc/apidocs/search/ConstructorP.html               |    2 +-
 doc/apidocs/search/ConstructorR.html               |    2 +-
 doc/apidocs/search/ConstructorS.html               |    2 +-
 doc/apidocs/search/ConstructorT.html               |    2 +-
 doc/apidocs/search/ConstructorU.html               |    2 +-
 doc/apidocs/search/ConstructorV.html               |    2 +-
 doc/apidocs/search/ConstructorW.html               |    2 +-
 doc/apidocs/search/ConstructorY.html               |    2 +-
 doc/apidocs/search/FilesA.html                     |    2 +-
 doc/apidocs/search/FilesD.html                     |   20 +
 doc/apidocs/search/FunctionsB.html                 |    2 +-
 doc/apidocs/search/FunctionsC.html                 |    2 +-
 doc/apidocs/search/FunctionsD.html                 |    2 +-
 doc/apidocs/search/FunctionsG.html                 |    2 +-
 doc/apidocs/search/FunctionsH.html                 |    2 +-
 doc/apidocs/search/FunctionsI.html                 |    2 +-
 doc/apidocs/search/FunctionsL.html                 |    2 +-
 doc/apidocs/search/FunctionsM.html                 |    2 +-
 doc/apidocs/search/FunctionsR.html                 |    2 +-
 doc/apidocs/search/FunctionsS.html                 |    2 +-
 doc/apidocs/search/FunctionsT.html                 |    2 +-
 doc/apidocs/search/FunctionsU.html                 |    2 +-
 doc/apidocs/search/FunctionsW.html                 |    2 +-
 doc/apidocs/search/GeneralA.html                   |    2 +-
 doc/apidocs/search/GeneralB.html                   |    2 +-
 doc/apidocs/search/GeneralC.html                   |    2 +-
 doc/apidocs/search/GeneralD.html                   |    2 +-
 doc/apidocs/search/GeneralE.html                   |    2 +-
 doc/apidocs/search/GeneralF.html                   |    2 +-
 doc/apidocs/search/GeneralG.html                   |    2 +-
 doc/apidocs/search/GeneralH.html                   |    2 +-
 doc/apidocs/search/GeneralI.html                   |    2 +-
 doc/apidocs/search/GeneralK.html                   |    2 +-
 doc/apidocs/search/GeneralL.html                   |    2 +-
 doc/apidocs/search/GeneralM.html                   |    2 +-
 doc/apidocs/search/GeneralN.html                   |    2 +-
 doc/apidocs/search/GeneralO.html                   |    2 +-
 doc/apidocs/search/GeneralP.html                   |    2 +-
 doc/apidocs/search/GeneralR.html                   |    2 +-
 doc/apidocs/search/GeneralS.html                   |    2 +-
 doc/apidocs/search/GeneralT.html                   |    2 +-
 doc/apidocs/search/GeneralU.html                   |    2 +-
 doc/apidocs/search/GeneralV.html                   |    2 +-
 doc/apidocs/search/GeneralW.html                   |    2 +-
 doc/apidocs/search/GeneralY.html                   |    2 +-
 doc/apidocs/search/GeneralZ.html                   |    2 +-
 doc/apidocs/search/PropertiesA.html                |    2 +-
 doc/apidocs/search/PropertiesC.html                |    2 +-
 doc/apidocs/search/PropertiesD.html                |    2 +-
 doc/apidocs/search/PropertiesE.html                |    2 +-
 doc/apidocs/search/PropertiesF.html                |    2 +-
 doc/apidocs/search/PropertiesG.html                |    2 +-
 doc/apidocs/search/PropertiesH.html                |    2 +-
 doc/apidocs/search/PropertiesI.html                |    2 +-
 doc/apidocs/search/PropertiesK.html                |    2 +-
 doc/apidocs/search/PropertiesL.html                |    2 +-
 doc/apidocs/search/PropertiesN.html                |    2 +-
 doc/apidocs/search/PropertiesO.html                |    2 +-
 doc/apidocs/search/PropertiesP.html                |    2 +-
 doc/apidocs/search/PropertiesR.html                |    2 +-
 doc/apidocs/search/PropertiesS.html                |    2 +-
 doc/apidocs/search/PropertiesT.html                |    2 +-
 doc/apidocs/search/PropertiesU.html                |    2 +-
 doc/apidocs/search/PropertiesW.html                |    2 +-
 doc/apidocs/search/PropertiesZ.html                |    2 +-
 doc/customization                                  |   49 -
 doc/devdocs/files/OpenLayers-js.html               |   15 +-
 doc/devdocs/files/OpenLayers/Ajax-js.html          |  141 -
 doc/devdocs/files/OpenLayers/Animation-js.html     |   51 +
 doc/devdocs/files/OpenLayers/BaseTypes-js.html     |   34 +-
 .../files/OpenLayers/BaseTypes/Bounds-js.html      |   46 +-
 .../files/OpenLayers/BaseTypes/Class-js.html       |   18 +-
 .../files/OpenLayers/BaseTypes/Date-js.html        |    4 +-
 .../files/OpenLayers/BaseTypes/Element-js.html     |   14 +-
 .../files/OpenLayers/BaseTypes/LonLat-js.html      |   10 +-
 .../files/OpenLayers/BaseTypes/Pixel-js.html       |   18 +-
 .../files/OpenLayers/BaseTypes/Size-js.html        |    6 +-
 doc/devdocs/files/OpenLayers/Console-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Control-js.html       |   15 +-
 .../files/OpenLayers/Control/ArgParser-js.html     |   18 +-
 .../files/OpenLayers/Control/Attribution-js.html   |    8 +-
 .../files/OpenLayers/Control/Button-js.html        |    4 +-
 .../files/OpenLayers/Control/CacheRead-js.html     |   63 +
 .../files/OpenLayers/Control/CacheWrite-js.html    |   75 +
 .../files/OpenLayers/Control/DragFeature-js.html   |    4 +-
 .../files/OpenLayers/Control/DragPan-js.html       |   10 +-
 .../files/OpenLayers/Control/DrawFeature-js.html   |   18 +-
 .../OpenLayers/Control/EditingToolbar-js.html      |   10 +-
 .../files/OpenLayers/Control/Geolocate-js.html     |   14 +-
 .../files/OpenLayers/Control/GetFeature-js.html    |   66 +-
 .../files/OpenLayers/Control/Graticule-js.html     |   12 +-
 .../OpenLayers/Control/KeyboardDefaults-js.html    |   10 +-
 .../files/OpenLayers/Control/LayerSwitcher-js.html |   26 +-
 .../files/OpenLayers/Control/Measure-js.html       |   34 +-
 .../files/OpenLayers/Control/ModifyFeature-js.html |   10 +-
 .../files/OpenLayers/Control/MouseDefaults-js.html |   79 -
 .../files/OpenLayers/Control/MousePosition-js.html |    6 +-
 .../files/OpenLayers/Control/MouseToolbar-js.html  |   81 -
 .../files/OpenLayers/Control/NavToolbar-js.html    |    4 +-
 .../files/OpenLayers/Control/Navigation-js.html    |    6 +-
 .../OpenLayers/Control/NavigationHistory-js.html   |    4 +-
 .../files/OpenLayers/Control/OverviewMap-js.html   |   38 +-
 doc/devdocs/files/OpenLayers/Control/Pan-js.html   |    4 +-
 .../files/OpenLayers/Control/PanPanel-js.html      |    4 +-
 .../files/OpenLayers/Control/PanZoom-js.html       |   24 +-
 .../files/OpenLayers/Control/PanZoomBar-js.html    |   16 +-
 doc/devdocs/files/OpenLayers/Control/Panel-js.html |   34 +-
 .../files/OpenLayers/Control/Permalink-js.html     |    8 +-
 .../files/OpenLayers/Control/PinchZoom-js.html     |   12 +-
 .../files/OpenLayers/Control/SLDSelect-js.html     |   38 +-
 doc/devdocs/files/OpenLayers/Control/Scale-js.html |    8 +-
 .../files/OpenLayers/Control/ScaleLine-js.html     |    4 +-
 .../files/OpenLayers/Control/SelectFeature-js.html |   52 +-
 .../files/OpenLayers/Control/Snapping-js.html      |   28 +-
 doc/devdocs/files/OpenLayers/Control/Split-js.html |   38 +-
 .../OpenLayers/Control/TouchNavigation-js.html     |    4 +-
 .../OpenLayers/Control/TransformFeature-js.html    |   36 +-
 .../files/OpenLayers/Control/UTFGrid-js.html       |   82 +
 .../OpenLayers/Control/WMSGetFeatureInfo-js.html   |   44 +-
 .../OpenLayers/Control/WMTSGetFeatureInfo-js.html  |   22 +-
 doc/devdocs/files/OpenLayers/Control/Zoom-js.html  |   59 +
 .../files/OpenLayers/Control/ZoomBox-js.html       |   12 +-
 .../files/OpenLayers/Control/ZoomIn-js.html        |    4 +-
 .../files/OpenLayers/Control/ZoomOut-js.html       |    4 +-
 .../files/OpenLayers/Control/ZoomPanel-js.html     |    4 +-
 .../OpenLayers/Control/ZoomToMaxExtent-js.html     |    4 +-
 doc/devdocs/files/OpenLayers/Events-js.html        |   64 +-
 .../files/OpenLayers/Events/buttonclick-js.html    |   65 +
 doc/devdocs/files/OpenLayers/Feature-js.html       |   22 +-
 .../files/OpenLayers/Feature/Vector-js.html        |   12 +-
 doc/devdocs/files/OpenLayers/Feature/WFS-js.html   |   49 -
 doc/devdocs/files/OpenLayers/Filter-js.html        |   14 +-
 .../files/OpenLayers/Filter/Comparison-js.html     |    8 +-
 .../files/OpenLayers/Filter/FeatureId-js.html      |    8 +-
 .../files/OpenLayers/Filter/Function-js.html       |    6 +-
 .../files/OpenLayers/Filter/Logical-js.html        |    6 +-
 .../files/OpenLayers/Filter/Spatial-js.html        |    6 +-
 doc/devdocs/files/OpenLayers/Format-js.html        |    6 +-
 doc/devdocs/files/OpenLayers/Format/ArcXML-js.html |   16 +-
 .../OpenLayers/Format/ArcXML/Features-js.html      |   10 +-
 doc/devdocs/files/OpenLayers/Format/Atom-js.html   |   20 +-
 doc/devdocs/files/OpenLayers/Format/CQL-js.html    |    4 +-
 .../files/OpenLayers/Format/CSWGetDomain-js.html   |    4 +-
 .../OpenLayers/Format/CSWGetDomain/v2_0_2-js.html  |    8 +-
 .../files/OpenLayers/Format/CSWGetRecords-js.html  |    4 +-
 .../OpenLayers/Format/CSWGetRecords/v2_0_2-js.html |    8 +-
 .../files/OpenLayers/Format/Context-js.html        |   18 +-
 doc/devdocs/files/OpenLayers/Format/Filter-js.html |    4 +-
 .../files/OpenLayers/Format/Filter/v1-js.html      |   20 +-
 .../files/OpenLayers/Format/Filter/v1_0_0-js.html  |    4 +-
 .../files/OpenLayers/Format/Filter/v1_1_0-js.html  |   12 +-
 doc/devdocs/files/OpenLayers/Format/GML-js.html    |   44 +-
 .../files/OpenLayers/Format/GML/Base-js.html       |   22 +-
 doc/devdocs/files/OpenLayers/Format/GML/v2-js.html |    4 +-
 doc/devdocs/files/OpenLayers/Format/GML/v3-js.html |    4 +-
 doc/devdocs/files/OpenLayers/Format/GPX-js.html    |   34 +-
 .../files/OpenLayers/Format/GeoJSON-js.html        |    8 +-
 doc/devdocs/files/OpenLayers/Format/GeoRSS-js.html |   24 +-
 doc/devdocs/files/OpenLayers/Format/JSON-js.html   |    4 +-
 doc/devdocs/files/OpenLayers/Format/KML-js.html    |   16 +-
 .../OpenLayers/Format/OGCExceptionReport-js.html   |    8 +-
 doc/devdocs/files/OpenLayers/Format/OSM-js.html    |   24 +-
 .../files/OpenLayers/Format/OWSCommon-js.html      |    4 +-
 .../files/OpenLayers/Format/OWSCommon/v1-js.html   |    6 +-
 .../OpenLayers/Format/OWSCommon/v1_0_0-js.html     |    8 +-
 .../OpenLayers/Format/OWSCommon/v1_1_0-js.html     |    8 +-
 .../files/OpenLayers/Format/OWSContext-js.html     |   10 +-
 .../OpenLayers/Format/OWSContext/v0_3_1-js.html    |   12 +-
 .../OpenLayers/Format/QueryStringFilter-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Format/SLD-js.html    |    8 +-
 doc/devdocs/files/OpenLayers/Format/SLD/v1-js.html |   10 +-
 .../files/OpenLayers/Format/SLD/v1_0_0-js.html     |    4 +-
 .../OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html |   59 +
 .../OpenLayers/Format/SOSCapabilities-js.html      |    4 +-
 .../Format/SOSCapabilities/v1_0_0-js.html          |    4 +-
 .../Format/SOSGetFeatureOfInterest-js.html         |   10 +-
 .../OpenLayers/Format/SOSGetObservation-js.html    |    8 +-
 doc/devdocs/files/OpenLayers/Format/Text-js.html   |    6 +-
 .../files/OpenLayers/Format/WCSGetCoverage-js.html |    8 +-
 doc/devdocs/files/OpenLayers/Format/WFS-js.html    |   12 +-
 .../OpenLayers/Format/WFSCapabilities-js.html      |    4 +-
 .../OpenLayers/Format/WFSCapabilities/v1-js.html   |   26 +-
 .../Format/WFSCapabilities/v1_0_0-js.html          |   38 +-
 .../Format/WFSCapabilities/v1_1_0-js.html          |   16 +-
 .../Format/WFSDescribeFeatureType-js.html          |   26 +-
 doc/devdocs/files/OpenLayers/Format/WFST-js.html   |    6 +-
 .../files/OpenLayers/Format/WFST/v1-js.html        |   14 +-
 .../files/OpenLayers/Format/WFST/v1_0_0-js.html    |    4 +-
 .../files/OpenLayers/Format/WFST/v1_1_0-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Format/WKT-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Format/WMC-js.html    |   10 +-
 doc/devdocs/files/OpenLayers/Format/WMC/v1-js.html |   18 +-
 .../files/OpenLayers/Format/WMC/v1_0_0-js.html     |    4 +-
 .../files/OpenLayers/Format/WMC/v1_1_0-js.html     |    4 +-
 .../OpenLayers/Format/WMSCapabilities-js.html      |    4 +-
 .../OpenLayers/Format/WMSCapabilities/v1-js.html   |   12 +-
 .../OpenLayers/Format/WMSCapabilities/v1_1-js.html |    4 +-
 .../Format/WMSCapabilities/v1_1_0-js.html          |    4 +-
 .../Format/WMSCapabilities/v1_1_1-js.html          |    4 +-
 .../Format/WMSCapabilities/v1_1_1_WMSC-js.html     |    4 +-
 .../OpenLayers/Format/WMSCapabilities/v1_3-js.html |    4 +-
 .../Format/WMSCapabilities/v1_3_0-js.html          |    4 +-
 .../OpenLayers/Format/WMSDescribeLayer-js.html     |    4 +-
 .../Format/WMSDescribeLayer/v1_1-js.html           |    4 +-
 .../OpenLayers/Format/WMSGetFeatureInfo-js.html    |   14 +-
 .../OpenLayers/Format/WMTSCapabilities-js.html     |    4 +-
 .../Format/WMTSCapabilities/v1_0_0-js.html         |    4 +-
 .../OpenLayers/Format/WPSCapabilities-js.html      |    4 +-
 .../Format/WPSCapabilities/v1_0_0-js.html          |    8 +-
 .../OpenLayers/Format/WPSDescribeProcess-js.html   |    8 +-
 .../files/OpenLayers/Format/WPSExecute-js.html     |    8 +-
 doc/devdocs/files/OpenLayers/Format/XLS-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Format/XLS/v1-js.html |   10 +-
 .../files/OpenLayers/Format/XLS/v1_1_0-js.html     |    4 +-
 doc/devdocs/files/OpenLayers/Format/XML-js.html    |   22 +-
 .../OpenLayers/Format/XML/VersionedOGC-js.html     |   10 +-
 doc/devdocs/files/OpenLayers/Geometry-js.html      |   32 +-
 .../files/OpenLayers/Geometry/Collection-js.html   |   12 +-
 .../files/OpenLayers/Geometry/Curve-js.html        |    6 +-
 .../files/OpenLayers/Geometry/LineString-js.html   |    4 +-
 .../files/OpenLayers/Geometry/LinearRing-js.html   |   10 +-
 .../OpenLayers/Geometry/MultiLineString-js.html    |    6 +-
 .../files/OpenLayers/Geometry/MultiPoint-js.html   |    4 +-
 .../files/OpenLayers/Geometry/MultiPolygon-js.html |    4 +-
 .../files/OpenLayers/Geometry/Point-js.html        |    8 +-
 .../files/OpenLayers/Geometry/Polygon-js.html      |    6 +-
 .../files/OpenLayers/Geometry/Rectangle-js.html    |   61 -
 doc/devdocs/files/OpenLayers/Handler-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Handler/Box-js.html   |    4 +-
 doc/devdocs/files/OpenLayers/Handler/Click-js.html |    4 +-
 doc/devdocs/files/OpenLayers/Handler/Drag-js.html  |    4 +-
 .../files/OpenLayers/Handler/Feature-js.html       |   22 +-
 doc/devdocs/files/OpenLayers/Handler/Hover-js.html |    4 +-
 .../files/OpenLayers/Handler/Keyboard-js.html      |    8 +-
 .../files/OpenLayers/Handler/MouseWheel-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Handler/Path-js.html  |    6 +-
 doc/devdocs/files/OpenLayers/Handler/Pinch-js.html |    4 +-
 doc/devdocs/files/OpenLayers/Handler/Point-js.html |    8 +-
 .../files/OpenLayers/Handler/Polygon-js.html       |   22 +-
 .../OpenLayers/Handler/RegularPolygon-js.html      |   12 +-
 doc/devdocs/files/OpenLayers/Icon-js.html          |   26 +-
 doc/devdocs/files/OpenLayers/Kinetic-js.html       |   10 +-
 doc/devdocs/files/OpenLayers/Lang-js.html          |    8 +-
 doc/devdocs/files/OpenLayers/Lang/ar-js.html       |    4 +-
 .../files/OpenLayers/Lang/be-tarask-js.html        |    4 +-
 doc/devdocs/files/OpenLayers/Lang/bg-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/br-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/ca-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/cs-CZ-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Lang/da-DK-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Lang/de-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/el-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/en-CA-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Lang/en-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/es-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/fi-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/fr-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/fur-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Lang/gl-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/gsw-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Lang/hr-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/hsb-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Lang/hu-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/ia-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/id-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/io-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/is-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/it-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/ja-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/km-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/ksh-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Lang/lt-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/nb-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/nds-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Lang/nl-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/nn-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/oc-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/pl-js.html       |   39 +
 doc/devdocs/files/OpenLayers/Lang/pt-BR-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Lang/pt-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/ru-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/sk-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/sv-SE-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Lang/te-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/vi-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Lang/zh-CN-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Lang/zh-TW-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Layer-js.html         |   72 +-
 .../files/OpenLayers/Layer/ArcGIS93Rest-js.html    |   16 +-
 .../files/OpenLayers/Layer/ArcGISCache-js.html     |   12 +-
 doc/devdocs/files/OpenLayers/Layer/ArcIMS-js.html  |   22 +-
 doc/devdocs/files/OpenLayers/Layer/Bing-js.html    |   14 +-
 doc/devdocs/files/OpenLayers/Layer/Boxes-js.html   |    4 +-
 .../files/OpenLayers/Layer/EventPane-js.html       |    6 +-
 .../files/OpenLayers/Layer/FixedZoomLevels-js.html |    4 +-
 doc/devdocs/files/OpenLayers/Layer/GML-js.html     |   65 -
 doc/devdocs/files/OpenLayers/Layer/GeoRSS-js.html  |    6 +-
 doc/devdocs/files/OpenLayers/Layer/Google-js.html  |   18 +-
 .../files/OpenLayers/Layer/Google/v3-js.html       |   18 +-
 doc/devdocs/files/OpenLayers/Layer/Grid-js.html    |  118 +-
 .../files/OpenLayers/Layer/HTTPRequest-js.html     |    4 +-
 doc/devdocs/files/OpenLayers/Layer/Image-js.html   |   14 +-
 doc/devdocs/files/OpenLayers/Layer/KaMap-js.html   |   12 +-
 .../files/OpenLayers/Layer/KaMapCache-js.html      |    4 +-
 .../files/OpenLayers/Layer/MapGuide-js.html        |    6 +-
 .../files/OpenLayers/Layer/MapServer-js.html       |    6 +-
 .../OpenLayers/Layer/MapServer/Untiled-js.html     |   51 -
 doc/devdocs/files/OpenLayers/Layer/Markers-js.html |    6 +-
 .../files/OpenLayers/Layer/MultiMap-js.html        |   83 -
 doc/devdocs/files/OpenLayers/Layer/OSM-js.html     |   67 +
 .../files/OpenLayers/Layer/PointGrid-js.html       |   44 +-
 .../files/OpenLayers/Layer/PointTrack-js.html      |   20 +-
 .../OpenLayers/Layer/SphericalMercator-js.html     |   22 +-
 doc/devdocs/files/OpenLayers/Layer/TMS-js.html     |   20 +-
 doc/devdocs/files/OpenLayers/Layer/Text-js.html    |    6 +-
 .../files/OpenLayers/Layer/TileCache-js.html       |   12 +-
 doc/devdocs/files/OpenLayers/Layer/UTFGrid-js.html |   78 +
 doc/devdocs/files/OpenLayers/Layer/Vector-js.html  |   26 +-
 .../OpenLayers/Layer/Vector/RootContainer-js.html  |    4 +-
 .../files/OpenLayers/Layer/VirtualEarth-js.html    |  102 -
 doc/devdocs/files/OpenLayers/Layer/WFS-js.html     |  103 -
 doc/devdocs/files/OpenLayers/Layer/WMS-js.html     |   16 +-
 .../files/OpenLayers/Layer/WMS/Post-js.html        |   58 -
 .../files/OpenLayers/Layer/WMS/Untiled-js.html     |   51 -
 doc/devdocs/files/OpenLayers/Layer/WMTS-js.html    |   40 +-
 .../files/OpenLayers/Layer/WorldWind-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Layer/XYZ-js.html     |   19 +-
 doc/devdocs/files/OpenLayers/Layer/Yahoo-js.html   |  101 -
 doc/devdocs/files/OpenLayers/Layer/Zoomify-js.html |   10 +-
 doc/devdocs/files/OpenLayers/Map-js.html           |  162 +-
 doc/devdocs/files/OpenLayers/Marker-js.html        |    8 +-
 doc/devdocs/files/OpenLayers/Marker/Box-js.html    |    4 +-
 doc/devdocs/files/OpenLayers/Popup-js.html         |    4 +-
 .../files/OpenLayers/Popup/Anchored-js.html        |   24 +-
 .../files/OpenLayers/Popup/AnchoredBubble-js.html  |    6 +-
 doc/devdocs/files/OpenLayers/Popup/Framed-js.html  |    4 +-
 .../files/OpenLayers/Popup/FramedCloud-js.html     |   20 +-
 doc/devdocs/files/OpenLayers/Projection-js.html    |   20 +-
 doc/devdocs/files/OpenLayers/Protocol-js.html      |   36 +-
 doc/devdocs/files/OpenLayers/Protocol/CSW-js.html  |   43 +
 .../files/OpenLayers/Protocol/CSW/v2_0_2-js.html   |   57 +
 doc/devdocs/files/OpenLayers/Protocol/HTTP-js.html |   42 +-
 doc/devdocs/files/OpenLayers/Protocol/SOS-js.html  |    6 +-
 .../files/OpenLayers/Protocol/SOS/v1_0_0-js.html   |    6 +-
 doc/devdocs/files/OpenLayers/Protocol/SQL-js.html  |   59 -
 .../files/OpenLayers/Protocol/SQL/Gears-js.html    |   97 -
 .../files/OpenLayers/Protocol/Script-js.html       |   22 +-
 doc/devdocs/files/OpenLayers/Protocol/WFS-js.html  |    8 +-
 .../files/OpenLayers/Protocol/WFS/v1-js.html       |   10 +-
 .../files/OpenLayers/Protocol/WFS/v1_0_0-js.html   |    4 +-
 .../files/OpenLayers/Protocol/WFS/v1_1_0-js.html   |    4 +-
 doc/devdocs/files/OpenLayers/Renderer-js.html      |   40 +-
 .../files/OpenLayers/Renderer/Canvas-js.html       |   42 +-
 .../files/OpenLayers/Renderer/Elements-js.html     |   56 +-
 doc/devdocs/files/OpenLayers/Renderer/NG-js.html   |   57 -
 doc/devdocs/files/OpenLayers/Renderer/SVG-js.html  |   40 +-
 doc/devdocs/files/OpenLayers/Renderer/SVG2-js.html |  113 -
 doc/devdocs/files/OpenLayers/Renderer/VML-js.html  |   38 +-
 doc/devdocs/files/OpenLayers/Request-js.html       |   26 +-
 .../OpenLayers/Request/XMLHttpRequest-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Rule-js.html          |    4 +-
 doc/devdocs/files/OpenLayers/SingleFile-js.html    |   17 +-
 doc/devdocs/files/OpenLayers/Spherical-js.html     |   45 +
 doc/devdocs/files/OpenLayers/Strategy-js.html      |    6 +-
 doc/devdocs/files/OpenLayers/Strategy/BBOX-js.html |    8 +-
 .../files/OpenLayers/Strategy/Cluster-js.html      |    4 +-
 .../files/OpenLayers/Strategy/Filter-js.html       |    6 +-
 .../files/OpenLayers/Strategy/Fixed-js.html        |    8 +-
 .../files/OpenLayers/Strategy/Paging-js.html       |    6 +-
 .../files/OpenLayers/Strategy/Refresh-js.html      |    4 +-
 doc/devdocs/files/OpenLayers/Strategy/Save-js.html |   12 +-
 doc/devdocs/files/OpenLayers/Style-js.html         |   16 +-
 doc/devdocs/files/OpenLayers/Style2-js.html        |    6 +-
 doc/devdocs/files/OpenLayers/StyleMap-js.html      |    8 +-
 doc/devdocs/files/OpenLayers/Symbolizer-js.html    |    4 +-
 .../files/OpenLayers/Symbolizer/Line-js.html       |    4 +-
 .../files/OpenLayers/Symbolizer/Point-js.html      |    4 +-
 .../files/OpenLayers/Symbolizer/Polygon-js.html    |    4 +-
 .../files/OpenLayers/Symbolizer/Raster-js.html     |    4 +-
 .../files/OpenLayers/Symbolizer/Text-js.html       |    4 +-
 doc/devdocs/files/OpenLayers/Tile-js.html          |   50 +-
 doc/devdocs/files/OpenLayers/Tile/Image-js.html    |   57 +-
 .../files/OpenLayers/Tile/Image/IFrame-js.html     |   24 +-
 doc/devdocs/files/OpenLayers/Tile/UTFGrid-js.html  |   71 +
 doc/devdocs/files/OpenLayers/Tile/WFS-js.html      |   63 -
 doc/devdocs/files/OpenLayers/Tween-js.html         |   30 +-
 doc/devdocs/files/OpenLayers/Util-js.html          |   54 +-
 doc/devdocs/files/deprecated-js.html               |  801 +++
 doc/devdocs/index/Classes.html                     |    8 +-
 doc/devdocs/index/Classes2.html                    |   10 +-
 doc/devdocs/index/Constants.html                   |   42 +-
 doc/devdocs/index/Constructor.html                 |   24 +-
 doc/devdocs/index/Constructor2.html                |   18 +-
 doc/devdocs/index/Constructor3.html                |   12 +-
 doc/devdocs/index/Files.html                       |   10 +-
 doc/devdocs/index/Functions.html                   |   10 +-
 doc/devdocs/index/Functions10.html                 |    8 +-
 doc/devdocs/index/Functions11.html                 |   12 +-
 doc/devdocs/index/Functions12.html                 |   12 +-
 doc/devdocs/index/Functions13.html                 |    8 +-
 doc/devdocs/index/Functions14.html                 |    8 +-
 doc/devdocs/index/Functions15.html                 |    8 +-
 doc/devdocs/index/Functions16.html                 |    8 +-
 doc/devdocs/index/Functions17.html                 |   12 +-
 doc/devdocs/index/Functions18.html                 |   10 +-
 doc/devdocs/index/Functions19.html                 |   38 -
 doc/devdocs/index/Functions2.html                  |    8 +-
 doc/devdocs/index/Functions3.html                  |    8 +-
 doc/devdocs/index/Functions4.html                  |    8 +-
 doc/devdocs/index/Functions5.html                  |    8 +-
 doc/devdocs/index/Functions6.html                  |    8 +-
 doc/devdocs/index/Functions7.html                  |    8 +-
 doc/devdocs/index/Functions8.html                  |    8 +-
 doc/devdocs/index/Functions9.html                  |   12 +-
 doc/devdocs/index/General.html                     |   10 +-
 doc/devdocs/index/General10.html                   |   10 +-
 doc/devdocs/index/General11.html                   |    8 +-
 doc/devdocs/index/General12.html                   |    8 +-
 doc/devdocs/index/General13.html                   |    8 +-
 doc/devdocs/index/General14.html                   |    8 +-
 doc/devdocs/index/General15.html                   |    8 +-
 doc/devdocs/index/General16.html                   |    8 +-
 doc/devdocs/index/General17.html                   |    8 +-
 doc/devdocs/index/General18.html                   |    8 +-
 doc/devdocs/index/General19.html                   |    8 +-
 doc/devdocs/index/General2.html                    |    8 +-
 doc/devdocs/index/General20.html                   |    8 +-
 doc/devdocs/index/General21.html                   |    8 +-
 doc/devdocs/index/General22.html                   |    8 +-
 doc/devdocs/index/General23.html                   |   12 +-
 doc/devdocs/index/General3.html                    |    8 +-
 doc/devdocs/index/General4.html                    |    8 +-
 doc/devdocs/index/General5.html                    |    8 +-
 doc/devdocs/index/General6.html                    |    8 +-
 doc/devdocs/index/General7.html                    |    8 +-
 doc/devdocs/index/General8.html                    |    8 +-
 doc/devdocs/index/General9.html                    |    8 +-
 doc/devdocs/index/Properties.html                  |   10 +-
 doc/devdocs/index/Properties10.html                |   10 +-
 doc/devdocs/index/Properties11.html                |   10 +-
 doc/devdocs/index/Properties12.html                |    8 +-
 doc/devdocs/index/Properties13.html                |    8 +-
 doc/devdocs/index/Properties14.html                |   10 +-
 doc/devdocs/index/Properties15.html                |   16 +-
 doc/devdocs/index/Properties2.html                 |    8 +-
 doc/devdocs/index/Properties3.html                 |    8 +-
 doc/devdocs/index/Properties4.html                 |    8 +-
 doc/devdocs/index/Properties5.html                 |    8 +-
 doc/devdocs/index/Properties6.html                 |   10 +-
 doc/devdocs/index/Properties7.html                 |   12 +-
 doc/devdocs/index/Properties8.html                 |    8 +-
 doc/devdocs/index/Properties9.html                 |    8 +-
 doc/devdocs/javascript/searchdata.js               |    6 +-
 doc/devdocs/search/ClassesO.html                   |    2 +-
 doc/devdocs/search/ClassesS.html                   |   20 +
 doc/devdocs/search/ConstantsC.html                 |    2 +-
 doc/devdocs/search/ConstantsD.html                 |    2 +-
 doc/devdocs/search/ConstantsE.html                 |   20 -
 doc/devdocs/search/ConstantsI.html                 |    2 +-
 doc/devdocs/search/ConstantsK.html                 |    2 +-
 doc/devdocs/search/ConstantsL.html                 |    2 +-
 doc/devdocs/search/ConstantsM.html                 |    2 +-
 doc/devdocs/search/ConstantsR.html                 |    2 +-
 doc/devdocs/search/ConstantsS.html                 |    2 +-
 doc/devdocs/search/ConstructorB.html               |    2 +-
 doc/devdocs/search/ConstructorC.html               |    2 +-
 doc/devdocs/search/ConstructorG.html               |    2 +-
 doc/devdocs/search/ConstructorI.html               |    2 +-
 doc/devdocs/search/ConstructorM.html               |    2 +-
 doc/devdocs/search/ConstructorN.html               |    2 +-
 doc/devdocs/search/ConstructorO.html               |    2 +-
 doc/devdocs/search/ConstructorP.html               |    2 +-
 doc/devdocs/search/ConstructorR.html               |    2 +-
 doc/devdocs/search/ConstructorS.html               |    2 +-
 doc/devdocs/search/ConstructorT.html               |    2 +-
 doc/devdocs/search/ConstructorU.html               |    2 +-
 doc/devdocs/search/ConstructorV.html               |    2 +-
 doc/devdocs/search/ConstructorW.html               |    2 +-
 doc/devdocs/search/ConstructorY.html               |    2 +-
 doc/devdocs/search/FilesA.html                     |    2 +-
 doc/devdocs/search/FilesD.html                     |   20 +
 doc/devdocs/search/FilesW.html                     |    2 +-
 doc/devdocs/search/FunctionsA.html                 |    2 +-
 doc/devdocs/search/FunctionsB.html                 |    2 +-
 doc/devdocs/search/FunctionsC.html                 |    2 +-
 doc/devdocs/search/FunctionsD.html                 |    2 +-
 doc/devdocs/search/FunctionsE.html                 |    2 +-
 doc/devdocs/search/FunctionsF.html                 |    2 +-
 doc/devdocs/search/FunctionsG.html                 |    2 +-
 doc/devdocs/search/FunctionsH.html                 |    2 +-
 doc/devdocs/search/FunctionsI.html                 |    2 +-
 doc/devdocs/search/FunctionsL.html                 |    2 +-
 doc/devdocs/search/FunctionsM.html                 |    2 +-
 doc/devdocs/search/FunctionsN.html                 |    2 +-
 doc/devdocs/search/FunctionsO.html                 |    2 +-
 doc/devdocs/search/FunctionsP.html                 |    2 +-
 doc/devdocs/search/FunctionsQ.html                 |    2 +-
 doc/devdocs/search/FunctionsR.html                 |    2 +-
 doc/devdocs/search/FunctionsS.html                 |    2 +-
 doc/devdocs/search/FunctionsSymbols.html           |    2 +-
 doc/devdocs/search/FunctionsT.html                 |    2 +-
 doc/devdocs/search/FunctionsU.html                 |    2 +-
 doc/devdocs/search/FunctionsW.html                 |    2 +-
 doc/devdocs/search/FunctionsZ.html                 |    2 +-
 doc/devdocs/search/GeneralA.html                   |    2 +-
 doc/devdocs/search/GeneralB.html                   |    2 +-
 doc/devdocs/search/GeneralC.html                   |    2 +-
 doc/devdocs/search/GeneralD.html                   |    2 +-
 doc/devdocs/search/GeneralE.html                   |    2 +-
 doc/devdocs/search/GeneralF.html                   |    2 +-
 doc/devdocs/search/GeneralG.html                   |    2 +-
 doc/devdocs/search/GeneralH.html                   |    2 +-
 doc/devdocs/search/GeneralI.html                   |    2 +-
 doc/devdocs/search/GeneralJ.html                   |    2 +-
 doc/devdocs/search/GeneralK.html                   |    2 +-
 doc/devdocs/search/GeneralL.html                   |    2 +-
 doc/devdocs/search/GeneralM.html                   |    2 +-
 doc/devdocs/search/GeneralN.html                   |    2 +-
 doc/devdocs/search/GeneralO.html                   |    2 +-
 doc/devdocs/search/GeneralP.html                   |    2 +-
 doc/devdocs/search/GeneralQ.html                   |    2 +-
 doc/devdocs/search/GeneralR.html                   |    2 +-
 doc/devdocs/search/GeneralS.html                   |    2 +-
 doc/devdocs/search/GeneralSymbols.html             |    2 +-
 doc/devdocs/search/GeneralT.html                   |    2 +-
 doc/devdocs/search/GeneralU.html                   |    2 +-
 doc/devdocs/search/GeneralV.html                   |    2 +-
 doc/devdocs/search/GeneralW.html                   |    2 +-
 doc/devdocs/search/GeneralX.html                   |    2 +-
 doc/devdocs/search/GeneralY.html                   |    2 +-
 doc/devdocs/search/GeneralZ.html                   |    2 +-
 doc/devdocs/search/PropertiesA.html                |    2 +-
 doc/devdocs/search/PropertiesB.html                |    2 +-
 doc/devdocs/search/PropertiesC.html                |    2 +-
 doc/devdocs/search/PropertiesD.html                |    2 +-
 doc/devdocs/search/PropertiesE.html                |    2 +-
 doc/devdocs/search/PropertiesF.html                |    2 +-
 doc/devdocs/search/PropertiesG.html                |    2 +-
 doc/devdocs/search/PropertiesH.html                |    2 +-
 doc/devdocs/search/PropertiesI.html                |    2 +-
 doc/devdocs/search/PropertiesJ.html                |    2 +-
 doc/devdocs/search/PropertiesK.html                |    2 +-
 doc/devdocs/search/PropertiesL.html                |    2 +-
 doc/devdocs/search/PropertiesM.html                |    2 +-
 doc/devdocs/search/PropertiesN.html                |    2 +-
 doc/devdocs/search/PropertiesO.html                |    2 +-
 doc/devdocs/search/PropertiesP.html                |    2 +-
 doc/devdocs/search/PropertiesQ.html                |    2 +-
 doc/devdocs/search/PropertiesR.html                |    2 +-
 doc/devdocs/search/PropertiesS.html                |    2 +-
 doc/devdocs/search/PropertiesSymbols.html          |    2 +-
 doc/devdocs/search/PropertiesT.html                |    2 +-
 doc/devdocs/search/PropertiesU.html                |    2 +-
 doc/devdocs/search/PropertiesV.html                |    2 +-
 doc/devdocs/search/PropertiesW.html                |    2 +-
 doc/devdocs/search/PropertiesX.html                |    2 +-
 doc/devdocs/search/PropertiesY.html                |    2 +-
 doc/devdocs/search/PropertiesZ.html                |    2 +-
 doc/readme.txt                                     |    7 -
 doc/walkthru.html                                  |   96 -
 doc_config/Data/ClassHierarchy.nd                  |  Bin 37616 -> 35570 bytes
 doc_config/Data/ConfigFileInfo.nd                  |  Bin 26 -> 26 bytes
 doc_config/Data/FileInfo.nd                        |  626 ++-
 doc_config/Data/ImageFileInfo.nd                   |  Bin 252 -> 219 bytes
 doc_config/Data/ImageReferenceTable.nd             |  Bin 494 -> 638 bytes
 doc_config/Data/IndexInfo.nd                       |  Bin 267 -> 267 bytes
 doc_config/Data/PreviousMenuState.nd               |  Bin 29654 -> 26068 bytes
 doc_config/Data/PreviousSettings.nd                |  Bin 139 -> 117 bytes
 doc_config/Data/SymbolTable.nd                     |  Bin 1164493 -> 1148763 bytes
 doc_config/Menu.txt                                |  340 +-
 examples/KMLParser.html                            |    4 +-
 examples/WMSDescribeLayerParser.html               |    2 +-
 examples/accessible-click-control.html             |   69 +
 examples/accessible-click-control.js               |  199 +
 examples/accessible-panel.html                     |  130 +
 examples/accessible-panel.js                       |   64 +
 examples/accessible.html                           |   63 +-
 examples/all-overlays-google.html                  |    4 +-
 examples/all-overlays.html                         |    2 +-
 examples/animator.js                               |   40 +-
 examples/arcgiscache_jsonp.html                    |   18 +-
 examples/attribution.html                          |    2 +-
 examples/bing-tiles-restrictedzoom.html            |    2 +-
 examples/bing-tiles.html                           |    2 +-
 examples/bing.html                                 |   36 +-
 examples/boxes-vector.html                         |    2 +-
 examples/buffer.html                               |    6 +-
 examples/cache-read.html                           |   36 +
 examples/cache-read.js                             |   36 +
 examples/cache-write.html                          |   37 +
 examples/cache-write.js                            |   48 +
 examples/canvas-hit-detection.html                 |    2 +-
 examples/canvas.js                                 |    7 +-
 examples/click.html                                |    2 +-
 examples/clientzoom.html                           |   72 +
 examples/clientzoom.js                             |   39 +
 examples/controls.html                             |   10 +
 examples/cql-format.js                             |    2 +-
 examples/cross-origin-xml.html                     |   32 +
 examples/cross-origin-xml.js                       |   25 +
 examples/custom-control.html                       |    2 +-
 examples/donut.js                                  |    2 +-
 examples/doubleSetCenter.html                      |   38 -
 examples/draw-feature.html                         |   27 +-
 examples/draw-undo-redo.html                       |    2 +-
 examples/editing-methods.html                      |    2 +-
 examples/editing-methods.js                        |   14 +-
 examples/example-list.html                         |    8 +-
 examples/example.html                              |    2 +-
 examples/filter-strategy.js                        |    4 +-
 examples/fullScreen.html                           |    6 +-
 examples/fullScreen.js                             |   41 +-
 examples/fusiontables.html                         |   32 +
 examples/fusiontables.js                           |   46 +
 examples/game-accel-ball.html                      |    2 +-
 examples/geojson.html                              |    2 +-
 examples/georss-flickr.html                        |   29 +-
 examples/getfeatureinfo-control.html               |    2 +-
 examples/gml-layer.html                            |    8 +-
 examples/google-reproject.html                     |   63 -
 examples/google-static.html                        |   39 +
 examples/google-static.js                          |   61 +
 examples/google-v3-alloverlays.html                |    4 +-
 examples/google-v3.html                            |   15 +-
 examples/graphic-name.html                         |    2 +-
 examples/graphic-name.js                           |    7 +-
 examples/graticule.html                            |    4 +-
 examples/gutter.html                               |   49 +-
 examples/img/popupMatrix.jpg                       |  Bin 46095 -> 37469 bytes
 examples/kinetic.js                                |    1 -
 examples/kml-pointtrack.js                         |    7 +-
 examples/late-render.html                          |    2 +-
 examples/layer-opacity.html                        |    2 +-
 examples/layerLoadMonitoring.html                  |    6 +-
 examples/layerswitcher.html                        |    2 +-
 examples/light-basic.html                          |   35 +
 examples/light-basic.js                            |   67 +
 examples/mapbox.html                               |   30 +
 examples/mapbox.js                                 |   35 +
 examples/mapguide.html                             |    4 +-
 examples/measure.html                              |   14 +-
 examples/mm.html                                   |   68 -
 examples/mobile-base.js                            |    7 +-
 examples/mobile-drawing.html                       |   32 +-
 examples/mobile-drawing.js                         |   13 +-
 examples/mobile-jq.html                            |    8 +-
 examples/mobile-jq.js                              |    6 +-
 examples/mobile-layers.html                        |   38 +-
 examples/mobile-layers.js                          |    4 +-
 examples/mobile-navigation.html                    |    4 +-
 examples/mobile-navigation.js                      |    7 +-
 examples/mobile-sencha.html                        |    6 +-
 examples/mobile-wmts-vienna.css                    |  166 +
 examples/mobile-wmts-vienna.html                   |   27 +
 examples/mobile-wmts-vienna.js                     |  266 +
 examples/mobile.html                               |   32 +-
 examples/mobile.js                                 |    2 +-
 examples/modify-feature.html                       |    6 +
 examples/multimap-mercator.html                    |   74 -
 examples/multiserver.html                          |    2 +-
 examples/multitouch.html                           |    2 +-
 examples/mvs.html                                  |    2 +-
 examples/navigation-control.html                   |    2 +-
 examples/offline-storage.html                      |   44 +
 examples/offline-storage.js                        |  199 +
 examples/ordering.html                             |    4 +-
 examples/osm-google.html                           |    4 +-
 examples/osm-google.js                             |    7 +-
 examples/osm-grayscale.html                        |   77 +
 examples/osm-layer.html                            |  126 -
 examples/osm.html                                  |    4 +-
 examples/outOfRangeMarkers.html                    |   68 -
 examples/outOfRangeMarkers.txt                     |    3 -
 examples/overviewmap.html                          |    5 +-
 examples/panel.html                                |   10 -
 examples/point-grid.html                           |    2 +-
 examples/point-grid.js                             |    8 +-
 examples/popupMatrix.html                          |  329 +-
 examples/popups.html                               |  134 -
 examples/projected-map.html                        |   72 -
 examples/protocol-gears.html                       |  265 -
 examples/proxy.cgi                                 |    3 +-
 examples/resize-features.html                      |    2 +-
 examples/restricted-extent.html                    |    6 +-
 examples/rotate-features.html                      |    2 +-
 examples/select-feature-multilayer.html            |    8 +-
 examples/single-tile.html                          |    2 +-
 examples/snap-grid.html                            |    2 +-
 examples/snap-grid.js                              |    6 +-
 examples/snapping.html                             |    2 +-
 examples/spherical-mercator.html                   |  175 +-
 examples/strategy-bbox.html                        |   84 +-
 examples/strategy-cluster.html                     |   75 +-
 examples/strategy-paging.html                      |   73 +-
 examples/style-rules.html                          |    2 +-
 examples/style.css                                 |    4 +
 examples/style.mobile-jq.css                       |    2 +-
 examples/style.mobile.css                          |   25 -
 examples/stylemap.html                             |    2 +-
 examples/styles-context.html                       |    2 +-
 examples/styles-rotation.html                      |    2 +-
 examples/styles-unique.html                        |    6 +-
 examples/sundials-spherical-mercator.html          |    6 +-
 examples/symbolizers-fill-stroke-graphic.html      |    2 +-
 examples/tile-origin.html                          |    2 +-
 examples/tilecache.html                            |   11 -
 examples/transform-feature.html                    |   77 +-
 examples/transition.html                           |    2 +-
 examples/urban.html                                |   51 -
 examples/using-proj4js.html                        |  109 +
 examples/using-proj4js.js                          |  131 +
 examples/utfgrid-geography-class.html              |   51 +
 examples/utfgrid-geography-class.js                |   62 +
 examples/utfgrid.html                              |   64 +
 examples/utfgrid.js                                |   61 +
 examples/utfgrid/bio_utfgrid/1/0/0.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/0/1.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/0/2.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/1/0.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/1/1.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/1/2.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/2/0.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/2/1.json            |    1 +
 examples/utfgrid/bio_utfgrid/1/2/2.json            |    1 +
 examples/utfgrid/geography-class/0/0/0.grid.json   |    1 +
 examples/utfgrid/geography-class/1/0/0.grid.json   |    1 +
 examples/utfgrid/geography-class/1/0/1.grid.json   |    1 +
 examples/utfgrid/geography-class/1/1/0.grid.json   |    1 +
 examples/utfgrid/geography-class/1/1/1.grid.json   |    1 +
 examples/utfgrid/geography-class/2/0/0.grid.json   |    1 +
 examples/utfgrid/geography-class/2/0/1.grid.json   |    1 +
 examples/utfgrid/geography-class/2/0/2.grid.json   |    1 +
 examples/utfgrid/geography-class/2/0/3.grid.json   |    1 +
 examples/utfgrid/geography-class/2/1/0.grid.json   |    1 +
 examples/utfgrid/geography-class/2/1/1.grid.json   |    1 +
 examples/utfgrid/geography-class/2/1/2.grid.json   |    1 +
 examples/utfgrid/geography-class/2/1/3.grid.json   |    1 +
 examples/utfgrid/geography-class/2/2/0.grid.json   |    1 +
 examples/utfgrid/geography-class/2/2/1.grid.json   |    1 +
 examples/utfgrid/geography-class/2/2/2.grid.json   |    1 +
 examples/utfgrid/geography-class/2/2/3.grid.json   |    1 +
 examples/utfgrid/geography-class/2/3/0.grid.json   |    1 +
 examples/utfgrid/geography-class/2/3/1.grid.json   |    1 +
 examples/utfgrid/geography-class/2/3/2.grid.json   |    1 +
 examples/utfgrid/geography-class/2/3/3.grid.json   |    1 +
 examples/utfgrid/world_utfgrid/1/0/0.json          |    1 +
 examples/utfgrid/world_utfgrid/1/0/1.json          |    1 +
 examples/utfgrid/world_utfgrid/1/0/2.json          |    1 +
 examples/utfgrid/world_utfgrid/1/1/0.json          |    1 +
 examples/utfgrid/world_utfgrid/1/1/1.json          |    1 +
 examples/utfgrid/world_utfgrid/1/1/2.json          |    1 +
 examples/utfgrid/world_utfgrid/1/2/0.json          |    1 +
 examples/utfgrid/world_utfgrid/1/2/1.json          |    1 +
 examples/utfgrid/world_utfgrid/1/2/2.json          |    1 +
 examples/utfgrid_twogrids.html                     |   51 +
 examples/utfgrid_twogrids.js                       |   70 +
 examples/ve-novibrate.html                         |   68 -
 examples/ve.html                                   |   74 -
 examples/vector-features-with-text.html            |    6 +-
 examples/vector-features.html                      |    2 +-
 examples/vector-formats.html                       |    7 +-
 examples/web-mercator.js                           |    8 -
 examples/wfs-protocol-transactions.js              |    3 -
 examples/wfs-reprojection.js                       |    7 +-
 examples/wfs-states.js                             |   38 +-
 examples/wms-long-url.js                           |    4 +-
 examples/wms-untiled.html                          |    6 +-
 examples/wms-v13.html                              |    2 +-
 examples/wmts-capabilities.js                      |    9 +-
 examples/wmts-getfeatureinfo.js                    |    9 +-
 examples/wmts.js                                   |    7 +-
 examples/worldwind.html                            |   60 -
 examples/xyz-esri.html                             |   12 +-
 examples/xyz-offset.html                           |   38 -
 examples/xyz-offset.js                             |   37 -
 examples/yahoo.html                                |   52 -
 examples/zoom.html                                 |   68 +
 examples/zoom.js                                   |   34 +
 examples/zoomify.html                              |    6 -
 lib/Firebug/firebug.js                             |    2 +-
 lib/Gears/gears_init.js                            |   88 -
 lib/OpenLayers.js                                  |   85 +-
 lib/OpenLayers/Ajax.js                             |  679 ---
 lib/OpenLayers/Animation.js                        |  108 +
 lib/OpenLayers/BaseTypes.js                        |  146 +-
 lib/OpenLayers/BaseTypes/Bounds.js                 |  162 +-
 lib/OpenLayers/BaseTypes/Class.js                  |   48 +-
 lib/OpenLayers/BaseTypes/Date.js                   |   12 +-
 lib/OpenLayers/BaseTypes/Element.js                |   87 +-
 lib/OpenLayers/BaseTypes/LonLat.js                 |   24 +-
 lib/OpenLayers/BaseTypes/Pixel.js                  |   18 +-
 lib/OpenLayers/BaseTypes/Size.js                   |   10 +-
 lib/OpenLayers/Console.js                          |    6 +-
 lib/OpenLayers/Control.js                          |   23 +-
 lib/OpenLayers/Control/ArgParser.js                |   24 +-
 lib/OpenLayers/Control/Attribution.js              |   18 +-
 lib/OpenLayers/Control/Button.js                   |    6 +-
 lib/OpenLayers/Control/CacheRead.js                |  156 +
 lib/OpenLayers/Control/CacheWrite.js               |  245 +
 lib/OpenLayers/Control/DragFeature.js              |    6 +-
 lib/OpenLayers/Control/DragPan.js                  |   10 +-
 lib/OpenLayers/Control/DrawFeature.js              |   32 +-
 lib/OpenLayers/Control/EditingToolbar.js           |   28 +-
 lib/OpenLayers/Control/Geolocate.js                |   41 +-
 lib/OpenLayers/Control/GetFeature.js               |   54 +-
 lib/OpenLayers/Control/Graticule.js                |   23 +-
 lib/OpenLayers/Control/KeyboardDefaults.js         |   42 +-
 lib/OpenLayers/Control/LayerSwitcher.js            |  224 +-
 lib/OpenLayers/Control/Measure.js                  |   31 +-
 lib/OpenLayers/Control/ModifyFeature.js            |   22 +-
 lib/OpenLayers/Control/MouseDefaults.js            |  368 --
 lib/OpenLayers/Control/MousePosition.js            |    6 +-
 lib/OpenLayers/Control/MouseToolbar.js             |  406 --
 lib/OpenLayers/Control/NavToolbar.js               |    6 +-
 lib/OpenLayers/Control/Navigation.js               |    8 +-
 lib/OpenLayers/Control/NavigationHistory.js        |    6 +-
 lib/OpenLayers/Control/OverviewMap.js              |  149 +-
 lib/OpenLayers/Control/Pan.js                      |    6 +-
 lib/OpenLayers/Control/PanPanel.js                 |    6 +-
 lib/OpenLayers/Control/PanZoom.js                  |   95 +-
 lib/OpenLayers/Control/PanZoomBar.js               |  108 +-
 lib/OpenLayers/Control/Panel.js                    |  119 +-
 lib/OpenLayers/Control/Permalink.js                |   17 +-
 lib/OpenLayers/Control/PinchZoom.js                |   51 +-
 lib/OpenLayers/Control/SLDSelect.js                |   31 +-
 lib/OpenLayers/Control/Scale.js                    |    8 +-
 lib/OpenLayers/Control/ScaleLine.js                |    6 +-
 lib/OpenLayers/Control/SelectFeature.js            |   49 +-
 lib/OpenLayers/Control/Snapping.js                 |   36 +-
 lib/OpenLayers/Control/Split.js                    |   70 +-
 lib/OpenLayers/Control/TouchNavigation.js          |    6 +-
 lib/OpenLayers/Control/TransformFeature.js         |  140 +-
 lib/OpenLayers/Control/UTFGrid.js                  |  240 +
 lib/OpenLayers/Control/WMSGetFeatureInfo.js        |   77 +-
 lib/OpenLayers/Control/WMTSGetFeatureInfo.js       |   26 +-
 lib/OpenLayers/Control/Zoom.js                     |  138 +
 lib/OpenLayers/Control/ZoomBox.js                  |   29 +-
 lib/OpenLayers/Control/ZoomIn.js                   |    6 +-
 lib/OpenLayers/Control/ZoomOut.js                  |    6 +-
 lib/OpenLayers/Control/ZoomPanel.js                |    6 +-
 lib/OpenLayers/Control/ZoomToMaxExtent.js          |    6 +-
 lib/OpenLayers/Events.js                           |  227 +-
 lib/OpenLayers/Events/buttonclick.js               |  179 +
 lib/OpenLayers/Feature.js                          |   10 +-
 lib/OpenLayers/Feature/Vector.js                   |   35 +-
 lib/OpenLayers/Feature/WFS.js                      |   80 -
 lib/OpenLayers/Filter.js                           |   26 +-
 lib/OpenLayers/Filter/Comparison.js                |   21 +-
 lib/OpenLayers/Filter/FeatureId.js                 |   12 +-
 lib/OpenLayers/Filter/Function.js                  |   11 +-
 lib/OpenLayers/Filter/Logical.js                   |    8 +-
 lib/OpenLayers/Filter/Spatial.js                   |   17 +-
 lib/OpenLayers/Format.js                           |   12 +-
 lib/OpenLayers/Format/ArcXML.js                    |   18 +-
 lib/OpenLayers/Format/ArcXML/Features.js           |    9 +-
 lib/OpenLayers/Format/Atom.js                      |   34 +-
 lib/OpenLayers/Format/CQL.js                       |    8 +-
 lib/OpenLayers/Format/CSWGetDomain.js              |    6 +-
 lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js       |    9 +-
 lib/OpenLayers/Format/CSWGetRecords.js             |    6 +-
 lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js      |   16 +-
 lib/OpenLayers/Format/Context.js                   |   11 +-
 lib/OpenLayers/Format/Filter.js                    |    6 +-
 lib/OpenLayers/Format/Filter/v1.js                 |   59 +-
 lib/OpenLayers/Format/Filter/v1_0_0.js             |    6 +-
 lib/OpenLayers/Format/Filter/v1_1_0.js             |    9 +-
 lib/OpenLayers/Format/GML.js                       |   20 +-
 lib/OpenLayers/Format/GML/Base.js                  |    8 +-
 lib/OpenLayers/Format/GML/v2.js                    |    6 +-
 lib/OpenLayers/Format/GML/v3.js                    |    8 +-
 lib/OpenLayers/Format/GPX.js                       |  211 +-
 lib/OpenLayers/Format/GeoJSON.js                   |   10 +-
 lib/OpenLayers/Format/GeoRSS.js                    |   56 +-
 lib/OpenLayers/Format/JSON.js                      |    6 +-
 lib/OpenLayers/Format/KML.js                       |  117 +-
 lib/OpenLayers/Format/OGCExceptionReport.js        |    6 +-
 lib/OpenLayers/Format/OSM.js                       |   16 +-
 lib/OpenLayers/Format/OWSCommon.js                 |    6 +-
 lib/OpenLayers/Format/OWSCommon/v1.js              |   37 +-
 lib/OpenLayers/Format/OWSCommon/v1_0_0.js          |    9 +-
 lib/OpenLayers/Format/OWSCommon/v1_1_0.js          |   11 +-
 lib/OpenLayers/Format/OWSContext.js                |    9 +-
 lib/OpenLayers/Format/OWSContext/v0_3_1.js         |   10 +-
 lib/OpenLayers/Format/QueryStringFilter.js         |   11 +-
 lib/OpenLayers/Format/SLD.js                       |   15 +-
 lib/OpenLayers/Format/SLD/v1.js                    |  337 +-
 lib/OpenLayers/Format/SLD/v1_0_0.js                |   11 +-
 lib/OpenLayers/Format/SLD/v1_0_0_GeoServer.js      |  142 +
 lib/OpenLayers/Format/SOSCapabilities.js           |    6 +-
 lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js    |    8 +-
 lib/OpenLayers/Format/SOSGetFeatureOfInterest.js   |    6 +-
 lib/OpenLayers/Format/SOSGetObservation.js         |    6 +-
 lib/OpenLayers/Format/Text.js                      |   13 +-
 lib/OpenLayers/Format/WCSGetCoverage.js            |    6 +-
 lib/OpenLayers/Format/WFS.js                       |   12 +-
 lib/OpenLayers/Format/WFSCapabilities.js           |    6 +-
 lib/OpenLayers/Format/WFSCapabilities/v1.js        |  143 +-
 lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js    |  218 +-
 lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js    |   45 +-
 lib/OpenLayers/Format/WFSDescribeFeatureType.js    |   14 +-
 lib/OpenLayers/Format/WFST.js                      |    6 +-
 lib/OpenLayers/Format/WFST/v1.js                   |   12 +-
 lib/OpenLayers/Format/WFST/v1_0_0.js               |    6 +-
 lib/OpenLayers/Format/WFST/v1_1_0.js               |    8 +-
 lib/OpenLayers/Format/WKT.js                       |   44 +-
 lib/OpenLayers/Format/WMC.js                       |   12 +-
 lib/OpenLayers/Format/WMC/v1.js                    |   31 +-
 lib/OpenLayers/Format/WMC/v1_0_0.js                |    6 +-
 lib/OpenLayers/Format/WMC/v1_1_0.js                |    6 +-
 lib/OpenLayers/Format/WMSCapabilities.js           |    6 +-
 lib/OpenLayers/Format/WMSCapabilities/v1.js        |  173 +-
 lib/OpenLayers/Format/WMSCapabilities/v1_1.js      |    6 +-
 lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js    |   11 +-
 lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js    |   11 +-
 .../Format/WMSCapabilities/v1_1_1_WMSC.js          |   11 +-
 lib/OpenLayers/Format/WMSCapabilities/v1_3.js      |    6 +-
 lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js    |    6 +-
 lib/OpenLayers/Format/WMSDescribeLayer.js          |    6 +-
 lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js     |    6 +-
 lib/OpenLayers/Format/WMSGetFeatureInfo.js         |   10 +-
 lib/OpenLayers/Format/WMTSCapabilities.js          |   13 +-
 lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js   |   25 +-
 lib/OpenLayers/Format/WPSCapabilities.js           |    6 +-
 lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js    |    6 +-
 lib/OpenLayers/Format/WPSDescribeProcess.js        |    6 +-
 lib/OpenLayers/Format/WPSExecute.js                |   18 +-
 lib/OpenLayers/Format/XLS.js                       |    6 +-
 lib/OpenLayers/Format/XLS/v1.js                    |   11 +-
 lib/OpenLayers/Format/XLS/v1_1_0.js                |   11 +-
 lib/OpenLayers/Format/XML.js                       |   40 +-
 lib/OpenLayers/Format/XML/VersionedOGC.js          |    6 +-
 lib/OpenLayers/Geometry.js                         |   69 +-
 lib/OpenLayers/Geometry/Collection.js              |   12 +-
 lib/OpenLayers/Geometry/Curve.js                   |   10 +-
 lib/OpenLayers/Geometry/LineString.js              |    9 +-
 lib/OpenLayers/Geometry/LinearRing.js              |   16 +-
 lib/OpenLayers/Geometry/MultiLineString.js         |   12 +-
 lib/OpenLayers/Geometry/MultiPoint.js              |   10 +-
 lib/OpenLayers/Geometry/MultiPolygon.js            |   10 +-
 lib/OpenLayers/Geometry/Point.js                   |    8 +-
 lib/OpenLayers/Geometry/Polygon.js                 |   12 +-
 lib/OpenLayers/Geometry/Rectangle.js               |   99 -
 lib/OpenLayers/Geometry/Surface.js                 |   17 -
 lib/OpenLayers/Handler.js                          |    6 +-
 lib/OpenLayers/Handler/Box.js                      |   19 +-
 lib/OpenLayers/Handler/Click.js                    |   17 +-
 lib/OpenLayers/Handler/Drag.js                     |    8 +-
 lib/OpenLayers/Handler/Feature.js                  |   19 +-
 lib/OpenLayers/Handler/Hover.js                    |   11 +-
 lib/OpenLayers/Handler/Keyboard.js                 |   18 +-
 lib/OpenLayers/Handler/MouseWheel.js               |    6 +-
 lib/OpenLayers/Handler/Path.js                     |   32 +-
 lib/OpenLayers/Handler/Pinch.js                    |    9 +-
 lib/OpenLayers/Handler/Point.js                    |   22 +-
 lib/OpenLayers/Handler/Polygon.js                  |   13 +-
 lib/OpenLayers/Handler/RegularPolygon.js           |   24 +-
 lib/OpenLayers/Icon.js                             |   46 +-
 lib/OpenLayers/Kinetic.js                          |   33 +-
 lib/OpenLayers/Lang.js                             |   10 +-
 lib/OpenLayers/Lang/ar.js                          |    6 -
 lib/OpenLayers/Lang/be-tarask.js                   |   24 +-
 lib/OpenLayers/Lang/bg.js                          |    4 -
 lib/OpenLayers/Lang/br.js                          |   24 +-
 lib/OpenLayers/Lang/ca.js                          |   32 -
 lib/OpenLayers/Lang/cs-CZ.js                       |   22 +-
 lib/OpenLayers/Lang/da-DK.js                       |   34 +-
 lib/OpenLayers/Lang/de.js                          |   24 +-
 lib/OpenLayers/Lang/en.js                          |   32 -
 lib/OpenLayers/Lang/es.js                          |   32 -
 lib/OpenLayers/Lang/fr.js                          |   22 -
 lib/OpenLayers/Lang/gl.js                          |   24 +-
 lib/OpenLayers/Lang/gsw.js                         |   24 +-
 lib/OpenLayers/Lang/hr.js                          |   22 +-
 lib/OpenLayers/Lang/hsb.js                         |   24 +-
 lib/OpenLayers/Lang/hu.js                          |   24 +-
 lib/OpenLayers/Lang/ia.js                          |   24 +-
 lib/OpenLayers/Lang/id.js                          |   24 +-
 lib/OpenLayers/Lang/is.js                          |    8 -
 lib/OpenLayers/Lang/it.js                          |   29 -
 lib/OpenLayers/Lang/ja.js                          |   24 +-
 lib/OpenLayers/Lang/km.js                          |    2 -
 lib/OpenLayers/Lang/ksh.js                         |   24 +-
 lib/OpenLayers/Lang/lt.js                          |   28 -
 lib/OpenLayers/Lang/nb.js                          |   29 -
 lib/OpenLayers/Lang/nds.js                         |   22 +-
 lib/OpenLayers/Lang/nl.js                          |   24 +-
 lib/OpenLayers/Lang/nn.js                          |   10 +-
 lib/OpenLayers/Lang/oc.js                          |   24 +-
 lib/OpenLayers/Lang/pl.js                          |   93 +
 lib/OpenLayers/Lang/pt-BR.js                       |   24 +-
 lib/OpenLayers/Lang/pt.js                          |   24 +-
 lib/OpenLayers/Lang/ru.js                          |   24 +-
 lib/OpenLayers/Lang/sk.js                          |   25 +-
 lib/OpenLayers/Lang/sv-SE.js                       |   24 +-
 lib/OpenLayers/Lang/vi.js                          |   24 +-
 lib/OpenLayers/Lang/zh-CN.js                       |   29 -
 lib/OpenLayers/Lang/zh-TW.js                       |   29 -
 lib/OpenLayers/Layer.js                            |  211 +-
 lib/OpenLayers/Layer/ArcGIS93Rest.js               |   24 +-
 lib/OpenLayers/Layer/ArcGISCache.js                |    8 +-
 lib/OpenLayers/Layer/ArcIMS.js                     |   38 +-
 lib/OpenLayers/Layer/Bing.js                       |   54 +-
 lib/OpenLayers/Layer/Boxes.js                      |   30 +-
 lib/OpenLayers/Layer/EventPane.js                  |   21 +-
 lib/OpenLayers/Layer/FixedZoomLevels.js            |   36 +-
 lib/OpenLayers/Layer/GML.js                        |  175 -
 lib/OpenLayers/Layer/GeoRSS.js                     |    7 +-
 lib/OpenLayers/Layer/Google.js                     |   21 +-
 lib/OpenLayers/Layer/Google/v3.js                  |  113 +-
 lib/OpenLayers/Layer/Grid.js                       |  916 +++-
 lib/OpenLayers/Layer/HTTPRequest.js                |   10 +-
 lib/OpenLayers/Layer/Image.js                      |   17 +-
 lib/OpenLayers/Layer/KaMap.js                      |   24 +-
 lib/OpenLayers/Layer/KaMapCache.js                 |   27 +-
 lib/OpenLayers/Layer/MapGuide.js                   |   16 +-
 lib/OpenLayers/Layer/MapServer.js                  |   12 +-
 lib/OpenLayers/Layer/MapServer/Untiled.js          |   72 -
 lib/OpenLayers/Layer/Markers.js                    |   10 +-
 lib/OpenLayers/Layer/MultiMap.js                   |  286 -
 lib/OpenLayers/Layer/OSM.js                        |  123 +
 lib/OpenLayers/Layer/PointGrid.js                  |    8 +-
 lib/OpenLayers/Layer/PointTrack.js                 |   28 +-
 lib/OpenLayers/Layer/SphericalMercator.js          |  109 +-
 lib/OpenLayers/Layer/TMS.js                        |   39 +-
 lib/OpenLayers/Layer/Text.js                       |   11 +-
 lib/OpenLayers/Layer/TileCache.js                  |   20 +-
 lib/OpenLayers/Layer/UTFGrid.js                    |  178 +
 lib/OpenLayers/Layer/Vector.js                     |  141 +-
 lib/OpenLayers/Layer/Vector/RootContainer.js       |    9 +-
 lib/OpenLayers/Layer/VirtualEarth.js               |  389 --
 lib/OpenLayers/Layer/WFS.js                        |  610 ---
 lib/OpenLayers/Layer/WMS.js                        |   39 +-
 lib/OpenLayers/Layer/WMS/Post.js                   |  103 -
 lib/OpenLayers/Layer/WMS/Untiled.js                |   72 -
 lib/OpenLayers/Layer/WMTS.js                       |  114 +-
 lib/OpenLayers/Layer/WorldWind.js                  |    8 +-
 lib/OpenLayers/Layer/XYZ.js                        |   84 +-
 lib/OpenLayers/Layer/Yahoo.js                      |  431 --
 lib/OpenLayers/Layer/Zoomify.js                    |   39 +-
 lib/OpenLayers/Map.js                              |  466 +-
 lib/OpenLayers/Marker.js                           |   28 +-
 lib/OpenLayers/Marker/Box.js                       |    8 +-
 lib/OpenLayers/Popup.js                            |   44 +-
 lib/OpenLayers/Popup/Anchored.js                   |   14 +-
 lib/OpenLayers/Popup/AnchoredBubble.js             |   11 +-
 lib/OpenLayers/Popup/Framed.js                     |    6 +-
 lib/OpenLayers/Popup/FramedCloud.js                |   15 +-
 lib/OpenLayers/Projection.js                       |  145 +-
 lib/OpenLayers/Protocol.js                         |   21 +-
 lib/OpenLayers/Protocol/CSW.js                     |   30 +
 lib/OpenLayers/Protocol/CSW/v2_0_2.js              |  127 +
 lib/OpenLayers/Protocol/HTTP.js                    |   58 +-
 lib/OpenLayers/Protocol/SOS.js                     |    6 +-
 lib/OpenLayers/Protocol/SOS/v1_0_0.js              |    7 +-
 lib/OpenLayers/Protocol/SQL.js                     |   88 -
 lib/OpenLayers/Protocol/SQL/Gears.js               |  561 --
 lib/OpenLayers/Protocol/Script.js                  |   61 +-
 lib/OpenLayers/Protocol/WFS.js                     |    8 +-
 lib/OpenLayers/Protocol/WFS/v1.js                  |    8 +-
 lib/OpenLayers/Protocol/WFS/v1_0_0.js              |    6 +-
 lib/OpenLayers/Protocol/WFS/v1_1_0.js              |    6 +-
 lib/OpenLayers/Renderer.js                         |   79 +-
 lib/OpenLayers/Renderer/Canvas.js                  |  235 +-
 lib/OpenLayers/Renderer/Elements.js                |  124 +-
 lib/OpenLayers/Renderer/NG.js                      |  135 -
 lib/OpenLayers/Renderer/SVG.js                     |  126 +-
 lib/OpenLayers/Renderer/SVG2.js                    |  826 ---
 lib/OpenLayers/Renderer/VML.js                     |   65 +-
 lib/OpenLayers/Request.js                          |  100 +-
 lib/OpenLayers/Request/XMLHttpRequest.js           |    4 +-
 lib/OpenLayers/Rule.js                             |   11 +-
 lib/OpenLayers/SingleFile.js                       |   49 +-
 lib/OpenLayers/Spherical.js                        |   67 +
 lib/OpenLayers/Strategy.js                         |    8 +-
 lib/OpenLayers/Strategy/BBOX.js                    |   35 +-
 lib/OpenLayers/Strategy/Cluster.js                 |    6 +-
 lib/OpenLayers/Strategy/Filter.js                  |    8 +-
 lib/OpenLayers/Strategy/Fixed.js                   |    8 +-
 lib/OpenLayers/Strategy/Paging.js                  |    8 +-
 lib/OpenLayers/Strategy/Refresh.js                 |    6 +-
 lib/OpenLayers/Strategy/Save.js                    |   26 +-
 lib/OpenLayers/Style.js                            |   14 +-
 lib/OpenLayers/Style2.js                           |    8 +-
 lib/OpenLayers/StyleMap.js                         |    8 +-
 lib/OpenLayers/Symbolizer.js                       |    6 +-
 lib/OpenLayers/Symbolizer/Line.js                  |    6 +-
 lib/OpenLayers/Symbolizer/Point.js                 |    6 +-
 lib/OpenLayers/Symbolizer/Polygon.js               |    6 +-
 lib/OpenLayers/Symbolizer/Raster.js                |    6 +-
 lib/OpenLayers/Symbolizer/Text.js                  |    6 +-
 lib/OpenLayers/Tile.js                             |  243 +-
 lib/OpenLayers/Tile/Image.js                       |  766 ++-
 lib/OpenLayers/Tile/Image/IFrame.js                |  307 +-
 lib/OpenLayers/Tile/UTFGrid.js                     |  251 +
 lib/OpenLayers/Tile/WFS.js                         |  192 -
 lib/OpenLayers/Tween.js                            |   66 +-
 lib/OpenLayers/Util.js                             |  317 +-
 lib/Rico/Color.js                                  |    7 +-
 lib/Rico/Corner.js                                 |    6 +-
 lib/Rico/license.js                                |   19 +
 lib/deprecated.js                                  | 5648 ++++++++++++++++++++
 license.txt                                        |    8 +-
 {doc/licenses => licenses}/APACHE-2.0.txt          |    0
 {doc/licenses => licenses}/BSD-LICENSE.txt         |    0
 {doc/licenses => licenses}/MIT-LICENSE.txt         |    0
 notes/2.12.md                                      |  378 ++
 readme.md                                          |   79 +
 readme.txt                                         |   73 -
 release-license.txt                                |    3 -
 repository-license.txt                             |    3 -
 tests/Ajax.html                                    |   27 -
 tests/Animation.html                               |   95 +
 tests/BaseTypes/Bounds.html                        |   81 +-
 tests/BaseTypes/Class.html                         |  140 +-
 tests/BaseTypes/Date.html                          |   14 +-
 tests/BaseTypes/Element.html                       |   42 -
 tests/BaseTypes/LonLat.html                        |   40 +-
 tests/BaseTypes/Pixel.html                         |   20 +-
 tests/Control/Attribution.html                     |    3 +-
 tests/Control/CacheRead.html                       |  108 +
 tests/Control/CacheWrite.html                      |   87 +
 tests/Control/DrawFeature.html                     |   31 +-
 tests/Control/EditingToolbar.html                  |    7 +-
 tests/Control/Graticule.html                       |    2 +-
 tests/Control/KeyboardDefaults.html                |  217 +-
 tests/Control/LayerSwitcher.html                   |   20 +-
 tests/Control/Measure.html                         |    8 +-
 tests/Control/ModifyFeature.html                   |   64 +-
 tests/Control/MouseToolbar.html                    |   59 -
 tests/Control/OverviewMap.html                     |  155 +-
 tests/Control/PanZoom.html                         |   28 +-
 tests/Control/PanZoomBar.html                      |   14 +-
 tests/Control/Panel.html                           |   92 +-
 tests/Control/Permalink.html                       |   91 +
 tests/Control/PinchZoom.html                       |    2 +-
 tests/Control/SelectFeature.html                   |   43 +-
 tests/Control/Snapping.html                        |   50 +
 tests/Control/Split.html                           |    5 +-
 tests/Control/TransformFeature.html                |   38 +
 tests/Control/UTFGrid.html                         |  119 +
 tests/Control/WMSGetFeatureInfo.html               |   56 +-
 tests/Control/Zoom.html                            |   81 +
 tests/Events.html                                  |  117 +-
 tests/Events/buttonclick.html                      |  180 +
 tests/Feature.html                                 |    2 +-
 tests/Filter.html                                  |   10 +
 tests/Format/CSWGetRecords/v2_0_2.html             |    5 +-
 tests/Format/CSWGetRecords/v2_0_2.js               |    4 +-
 tests/Format/GPX.html                              |  140 +-
 tests/Format/KML.html                              |  120 +-
 tests/Format/OWSCommon/v1_1_0.html                 |    4 +-
 tests/Format/SLD/v1_0_0.html                       |  126 +-
 tests/Format/SLD/v1_0_0_GeoServer.html             |  178 +
 tests/Format/SOSCapabilities/v1_0_0.html           |    2 +-
 tests/Format/WFSCapabilities/v1.html               |    4 +-
 tests/Format/WFST/v1.html                          |   22 +
 tests/Format/WKT.html                              |   49 +-
 tests/Format/WMSCapabilities/v1_1_1.html           |    3 +-
 tests/Format/WMSCapabilities/v1_3_0.html           |    4 +-
 tests/Format/WMTSCapabilities/v1_0_0.html          |   36 +-
 tests/Format/WPSExecute.html                       |   74 +
 tests/Format/XML.html                              |    2 +-
 tests/Geometry.html                                |   13 +
 tests/Geometry/LinearRing.html                     |  104 +
 tests/Geometry/Point.html                          |   30 +
 tests/Geometry/Polygon.html                        |   13 +
 tests/Geometry/Rectangle.html                      |   76 -
 tests/Geometry/Surface.html                        |   22 -
 tests/Handler/Drag.html                            |    2 +-
 tests/Handler/Keyboard.html                        |   90 +-
 tests/Handler/Path.html                            |  138 +
 tests/Handler/Polygon.html                         |   25 +
 tests/Handler/RegularPolygon.html                  |   23 +-
 tests/Kinetic.html                                 |    8 +-
 tests/Layer.html                                   |   49 +-
 tests/Layer/ArcGIS93Rest.html                      |   74 +-
 tests/Layer/ArcGISCache.html                       |    7 +-
 tests/Layer/Bing.html                              |   37 +-
 tests/Layer/EventPane.html                         |    4 +-
 tests/Layer/GML.html                               |   60 -
 tests/Layer/Google.html                            |    4 +-
 tests/Layer/Google/v3.html                         |   12 +-
 tests/Layer/Grid.html                              | 1049 +++-
 tests/Layer/HTTPRequest.html                       |    9 +-
 tests/Layer/Image.html                             |    8 +-
 tests/Layer/KaMap.html                             |    4 +-
 tests/Layer/MapServer.html                         |  254 +-
 tests/Layer/MultiMap.html                          |  121 -
 tests/Layer/OSM.html                               |   16 +
 tests/Layer/PointTrack.html                        |    2 +-
 tests/Layer/SphericalMercator.html                 |   23 +-
 tests/Layer/TMS.html                               |   16 +-
 tests/Layer/Text.html                              |    2 +-
 tests/Layer/TileCache.html                         |    6 +-
 tests/Layer/UTFGrid.html                           |  115 +
 tests/Layer/Vector.html                            |   60 +-
 tests/Layer/WFS.html                               |  177 -
 tests/Layer/WMS.html                               |  165 +-
 tests/Layer/WMS/Post.html                          |   87 -
 tests/Layer/WMTS.html                              |   74 +-
 tests/Layer/WrapDateLine.html                      |   36 +-
 tests/Layer/XYZ.html                               |   18 +-
 tests/Layer/Yahoo.html                             |  120 -
 tests/Map.html                                     |  317 +-
 tests/Marker.html                                  |    4 +-
 tests/OpenLayers1.html                             |    8 +-
 tests/Popup.html                                   |   13 +-
 tests/Projection.html                              |   19 +-
 tests/Protocol/CSW.html                            |   90 +
 tests/Protocol/SQL.html                            |   23 -
 tests/Protocol/SQL/Gears.html                      |  473 --
 tests/Protocol/Script.html                         |   17 +-
 tests/Protocol/WFS.html                            |    4 +-
 tests/Renderer.html                                |   16 +
 tests/Renderer/Canvas.html                         |   66 +-
 tests/Renderer/Elements.html                       |   51 +-
 tests/Renderer/SVG.html                            |   38 +-
 tests/Renderer/SVG2.html                           |  426 --
 tests/Renderer/VML.html                            |   34 +-
 tests/Request.html                                 |   53 +-
 tests/SingleFile1.html                             |   15 +
 tests/SingleFile2.html                             |   15 +
 tests/SingleFile3.html                             |   15 +
 tests/Strategy/BBOX.html                           |   42 +-
 tests/Style.html                                   |    4 +-
 tests/Test.AnotherWay.baseadditions.js             |  177 +
 tests/Test.AnotherWay.css                          |  243 +
 tests/Test.AnotherWay.geom_eq.js                   |  139 +
 tests/Test.AnotherWay.js                           | 2498 +++++++++
 tests/Test.AnotherWay.xml_eq.js                    |  311 ++
 tests/Tile.html                                    |  107 +-
 tests/Tile/Image.html                              |  328 +-
 tests/Tile/Image/IFrame.html                       |   95 +-
 tests/Tile/UTFGrid.html                            |  305 ++
 tests/Tile/WFS.html                                |  173 -
 tests/Tween.html                                   |   25 +-
 tests/Util.html                                    |   72 +-
 tests/data/utfgrid/bio_utfgrid/1/0/0.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/0/1.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/0/2.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/1/0.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/1/1.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/1/2.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/2/0.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/2/1.json          |    1 +
 tests/data/utfgrid/bio_utfgrid/1/2/2.json          |    1 +
 tests/data/utfgrid/demo-1.1.json                   |    1 +
 tests/data/utfgrid/world_utfgrid/1/0/0.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/0/1.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/0/2.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/1/0.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/1/1.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/1/2.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/2/0.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/2/1.json        |    1 +
 tests/data/utfgrid/world_utfgrid/1/2/2.json        |    1 +
 tests/deprecated/Ajax.html                         |   28 +
 tests/deprecated/BaseTypes/Class.html              |  142 +
 tests/deprecated/BaseTypes/Element.html            |   56 +
 tests/deprecated/Control/MouseToolbar.html         |   60 +
 tests/deprecated/Geometry/Rectangle.html           |   77 +
 tests/deprecated/Layer/GML.html                    |   61 +
 tests/deprecated/Layer/MapServer.html              |   60 +
 tests/deprecated/Layer/MapServer/Untiled.html      |  161 +
 tests/deprecated/Layer/WFS.html                    |  178 +
 tests/deprecated/Layer/WMS.html                    |   60 +
 tests/deprecated/Layer/WMS/Post.html               |   89 +
 tests/deprecated/Layer/Yahoo.html                  |  121 +
 tests/{ => deprecated}/Layer/mice.xml              |    0
 tests/{ => deprecated}/Layer/owls.xml              |    0
 tests/deprecated/Protocol/SQL.html                 |   24 +
 tests/deprecated/Protocol/SQL/Gears.html           |  474 ++
 tests/deprecated/Renderer/SVG2.html                |  399 ++
 tests/deprecated/Tile/WFS.html                     |  215 +
 tests/geom_eq.js                                   |  110 -
 tests/list-tests.html                              |   43 +-
 tests/manual/alloverlays-mixed.html                |    2 +-
 tests/manual/big-georss.html                       |    8 +-
 tests/manual/dateline-sketch.html                  |   66 +
 tests/manual/dateline-smallextent.html             |   61 +
 tests/manual/google-fullscreen-overlay.html        |   54 +
 tests/manual/google-tilt.html                      |   38 +
 tests/manual/google-v3-resize.html                 |    2 +-
 tests/manual/loadend.html                          |   73 +
 tests/manual/rendered-dimensions.html              |   54 +
 tests/manual/select-feature-right-click.html       |   86 +
 tests/manual/svg2-coordinaterange.html             |   50 -
 tests/manual/ve-opacity.html                       |   61 -
 tests/run-tests.html                               | 2570 +--------
 tests/xml_eq.js                                    |  311 --
 theme/default/framedCloud.css                      |    0
 theme/default/style.css                            |  107 +-
 theme/default/style.mobile.css                     |   63 +
 theme/default/style.mobile.tidy.css                |    1 +
 theme/default/style.tidy.css                       |    2 +-
 tools/branch.sh                                    |    5 -
 tools/closure.py                                   |   22 -
 tools/closure_library_jscompiler.py                |   71 +
 tools/mergejs.py                                   |   44 +-
 tools/mkrelease.sh                                 |   28 -
 tools/rc.sh                                        |   13 -
 tools/release.sh                                   |    6 +
 1705 files changed, 37670 insertions(+), 30905 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..42b6026
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+/build/OpenLayers.js
+/tools/closure-compiler.jar
+/tools/*.pyc
+/apidoc_config/Data/
+/doc/apidocs/
+/examples/example-list.js
+/examples/example-list.xml
diff --git a/apidoc_config/Data/ClassHierarchy.nd b/apidoc_config/Data/ClassHierarchy.nd
index 11ddf9f..0cb6547 100644
Binary files a/apidoc_config/Data/ClassHierarchy.nd and b/apidoc_config/Data/ClassHierarchy.nd differ
diff --git a/apidoc_config/Data/ConfigFileInfo.nd b/apidoc_config/Data/ConfigFileInfo.nd
index 31585e5..02812b3 100644
Binary files a/apidoc_config/Data/ConfigFileInfo.nd and b/apidoc_config/Data/ConfigFileInfo.nd differ
diff --git a/apidoc_config/Data/FileInfo.nd b/apidoc_config/Data/FileInfo.nd
index d3fe0b0..36b477d 100644
--- a/apidoc_config/Data/FileInfo.nd
+++ b/apidoc_config/Data/FileInfo.nd
@@ -1,317 +1,313 @@
 1.52
 JavaScript
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js	1308251785	1	OpenLayers.Format.CSWGetRecords.v2_0_2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Vector/RootContainer.js	1294069180	1	OpenLayers.Layer.Vector.RootContainer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Graticule.js	1308946332	1	OpenLayers.Control.Graticule
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/OverviewMap.js	1298622650	1	OpenLayers.Control.OverviewMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Style2.js	1294249365	1	OpenLayers.Style2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Pixel.js	1298640899	1	OpenLayers.Pixel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML/v2.js	1308251785	1	OpenLayers.Format.GML.v2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebug.js	1202500315	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebug.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMS.js	1309678404	1	OpenLayers.Layer.WMS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomBox.js	1294069180	1	OpenLayers.Control.ZoomBox
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Feature/Vector.js	1309774702	1	OpenLayers.Feature.Vector
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Icon.js	1294249365	1	OpenLayers.Icon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/it.js	1312531137	1	OpenLayers.Lang["it"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC/v1_0_0.js	1302127591	1	OpenLayers.Format.WMC.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/MousePosition.js	1299508428	1	OpenLayers.Control.MousePosition
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/ArcXML/Features.js	1294069180	1	OpenLayers.Format.ArcXML.Features
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/SVG.js	1307358131	1	OpenLayers.Renderer.SVG
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Logical.js	1294069180	1	OpenLayers.Filter.Logical
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Color.js	1299496812	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Color.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/FixedZoomLevels.js	1308424314	1	OpenLayers.Layer.FixedZoomLevels
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetRecords.js	1309411359	1	OpenLayers.Format.CSWGetRecords
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes.js	1312381930	1	OpenLayers Base Types
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google/v3.js	1315064268	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google/v3.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/br.js	1312531137	1	OpenLayers.Lang["br"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XML.js	1308425609	1	OpenLayers.Format.XML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Style.js	1302201931	1	OpenLayers.Style
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomPanel.js	1294069180	1	OpenLayers.Control.ZoomPanel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/GML.js	1294069180	1	OpenLayers.Layer.GML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SOS.js	1294069180	1	OpenLayers.Protocol.SOS.DEFAULTS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WKT.js	1310056862	1	OpenLayers.Format.WKT
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC/v1.js	1308251785	1	OpenLayers.Format.WMC.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/FeatureId.js	1301424567	1	OpenLayers.Filter.FeatureId
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SQL.js	1294069180	1	OpenLayers.Protocol.SQL
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Button.js	1294069180	1	OpenLayers.Control.Button
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/LonLat.js	1311932195	1	OpenLayers.LonLat
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PanZoomBar.js	1301400326	1	OpenLayers.Control.PanZoomBar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomIn.js	1294069180	1	OpenLayers.Control.ZoomIn
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/VirtualEarth.js	1298644074	1	OpenLayers.Layer.VirtualEarth
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy.js	1294249365	1	OpenLayers.Strategy
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ru.js	1312531137	1	OpenLayers.Lang["ru"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/en.js	1312531137	1	OpenLayers.Lang["en"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter.js	1309858954	1	OpenLayers.Format.Filter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tween.js	1294249365	1	OpenLayers.Tween
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Element.js	1298880356	1	OpenLayers.Element
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Cluster.js	1299509306	1	OpenLayers.Strategy.Cluster
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Polygon.js	1294069180	1	OpenLayers.Symbolizer.Polygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/MouseDefaults.js	1301834834	1	OpenLayers.Control.MouseDefaults
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/SelectFeature.js	1311932729	1	OpenLayers.Control.SelectFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML/v3.js	1310738859	1	OpenLayers.Format.GML.v3
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/AnchoredBubble.js	1294249365	1	OpenLayers.Popup.AnchoredBubble
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1.js	1294069180	1	OpenLayers.Format.WMSCapabilities.v1_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetDomain.js	1309411359	1	OpenLayers.Format.CSWGetDomain
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/TransformFeature.js	1304926617	1	OpenLayers.Control.TransformFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/KeyboardDefaults.js	1299601896	1	OpenLayers.Control.KeyboardDefaults
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CQL.js	1296256510	1	OpenLayers.Format.CQL
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Line.js	1294069180	1	OpenLayers.Symbolizer.Line
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Text.js	1294069180	1	OpenLayers.Symbolizer.Text
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/KML.js	1312811516	1	OpenLayers.Format.KML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/da-DK.js	1312531137	1	OpenLayers.Lang["da-DK"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Kinetic.js	1298463233	1	OpenLayers.Kinetic
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomOut.js	1294069180	1	OpenLayers.Control.ZoomOut
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSExecute.js	1308756001	1	OpenLayers.Format.WPSExecute version 1.0.0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Date.js	1312382120	1	OpenLayers.Date
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/te.js	1308946332	1	OpenLayers.Lang["te"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/vi.js	1312531137	1	OpenLayers.Lang["vi"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/lt.js	1312531137	1	OpenLayers.Lang["lt"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Save.js	1294069180	1	OpenLayers.Strategy.Save
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST.js	1294069180	1	OpenLayers.Format.WFST.DEFAULTS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSGetFeatureInfo.js	1301391847	1	OpenLayers.Format.WMSGetFeatureInfo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter/v1_0_0.js	1309341217	1	OpenLayers.Format.Filter.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/el.js	1308946332	1	OpenLayers.Lang["el"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/NG.js	1310404035	1	OpenLayers.Renderer.NG
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/HTTPRequest.js	1314228754	1	OpenLayers.Layer.HTTPRequest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/es.js	1312531137	1	OpenLayers.Lang["es"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WCSGetCoverage.js	1309883200	1	OpenLayers.Format.WCSGetCoverage version 1.1.0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol.js	1307725942	1	OpenLayers.Protocol
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Point.js	1294069180	1	OpenLayers.Symbolizer.Point
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/id.js	1312531137	1	OpenLayers.Lang["id"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_3.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_3
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSDescribeFeatureType.js	1299507212	1	OpenLayers.Format.WFSDescribeFeatureType
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMTS.js	1308251785	1	OpenLayers.Layer.WMTS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/Image.js	1308251785	1	OpenLayers.Tile.Image
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/fr.js	1312531137	1	OpenLayers.Lang["fr"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Spatial.js	1294069180	1	OpenLayers.Filter.Spatial
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/sk.js	1312531137	1	OpenLayers.Lang["sk"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Point.js	1309812492	1	OpenLayers.Handler.Point
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/EventPane.js	1307100529	1	OpenLayers.Layer.EventPane
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/gsw.js	1312531137	1	OpenLayers.Lang["gsw"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Projection.js	1298881158	1	OpenLayers.Projection
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Atom.js	1308251785	1	OpenLayers.Format.Atom
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML.js	1308251785	1	OpenLayers.Format.GML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang.js	1294249365	1	OpenLayers.Lang
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Curve.js	1294069180	1	OpenLayers.Geometry.Curve
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/TouchNavigation.js	1308724245	1	OpenLayers.Control.TouchNavigation
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js	1299507212	1	OpenLayers.Format.SOSGetFeatureOfInterest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Drag.js	1301834834	1	OpenLayers.Handler.Drag
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/JSON.js	1299507212	1	OpenLayers.Format.JSON
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Markers.js	1312965697	1	OpenLayers.Layer.Markers
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SQL/Gears.js	1308251785	1	OpenLayers.Protocol.SQL.Gears
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Navigation.js	1304929715	1	OpenLayers.Control.Navigation
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST/v1_0_0.js	1309341217	1	OpenLayers.Format.WFST.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Request.js	1300366897	1	OpenLayers.Request
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/fi.js	1312530680	1	OpenLayers.Lang["fi"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer.js	1312965697	1	OpenLayers.Layer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Grid.js	1309811687	1	OpenLayers.Layer.Grid
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/bg.js	1308946332	1	OpenLayers.Lang["bg"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Feature/WFS.js	1294069180	1	OpenLayers.Feature.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js	1298013267	1	OpenLayers.Format.WMTSCapabilities.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcIMS.js	1298880725	1	OpenLayers.Layer.ArcIMS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFS.js	1294069180	1	OpenLayers.Format.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/is.js	1312530680	1	OpenLayers.Lang["is"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers.js	1315754186	1	OpenLayers
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/QueryStringFilter.js	1301426533	1	OpenLayers.Format.QueryStringFilter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Comparison.js	1302031403	1	OpenLayers.Filter.Comparison
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SLD/v1.js	1308251785	1	OpenLayers.Format.SLD.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Rule.js	1294249365	1	OpenLayers.Rule
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/TMS.js	1309390224	1	OpenLayers.Layer.TMS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MapGuide.js	1309678404	1	OpenLayers.Layer.MapGuide
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Events.js	1305100940	1	OpenLayers.Event
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities.js	1309858954	1	OpenLayers.Format.WMSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMS/Post.js	1294069180	1	OpenLayers.Layer.WMS.Post
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS/v1_0_0.js	1294069180	1	OpenLayers.Protocol.WFS.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Polygon.js	1294069180	1	OpenLayers.Geometry.Polygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MultiMap.js	1297862474	1	OpenLayers.Layer.MultiMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/WMSGetFeatureInfo.js	1308251785	1	OpenLayers.Control.WMSGetFeatureInfo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Marker.js	1294249365	1	OpenLayers.Marker
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GeoRSS.js	1308251785	1	OpenLayers.Format.GeoRSS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/HTTP.js	1302158978	1	OpenLayers.Protocol.HTTP
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/gl.js	1312531137	1	OpenLayers.Lang["gl"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/fur.js	1308946332	1	OpenLayers.Lang["fur"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSCapabilities.js	1309858954	1	OpenLayers.Format.SOSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Surface.js	1294069180	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Surface.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/BBOX.js	1308939709	1	OpenLayers.Strategy.BBOX
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XML/VersionedOGC.js	1309858954	1	OpenLayers.Format.XML.VersionedOGC
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nds.js	1312531137	1	OpenLayers.Lang["nds"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSGetObservation.js	1299507212	1	OpenLayers.Format.SOSGetObservation
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nb.js	1312531137	1	OpenLayers.Lang["nb"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/Anchored.js	1294069180	1	OpenLayers.Popup.Anchored
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Image.js	1294069180	1	OpenLayers.Layer.Image
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/Script.js	1314228754	1	OpenLayers.Protocol.Script
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Polygon.js	1308337156	1	OpenLayers.Handler.Polygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/pt-BR.js	1312531137	1	OpenLayers.Lang["pt-br"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Paging.js	1299509306	1	OpenLayers.Strategy.Paging
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Feature.js	1301494633	1	OpenLayers.Feature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/WFS.js	1294069180	1	OpenLayers.Tile.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Bing.js	1308722650	1	OpenLayers.Layer.Bing
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XLS/v1_1_0.js	1301493331	1	OpenLayers.Format.XLS.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/MultiPoint.js	1294069180	1	OpenLayers.Geometry.MultiPoint
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ar.js	1308946332	1	OpenLayers.Lang["ar"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SOS/v1_0_0.js	1294069180	1	OpenLayers.Protocol.SOS.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/LineString.js	1308337156	1	OpenLayers.Geometry.LineString
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ja.js	1312531137	1	OpenLayers.Lang["ja"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/DrawFeature.js	1308337156	1	OpenLayers.Control.DrawFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/Image/IFrame.js	1308652107	1	OpenLayers.Tile.Image.IFrame
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSCapabilities.js	1309858954	1	OpenLayers.Format.WPSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/readme.txt	1181603869	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/readme.txt
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js	1299601176	1	OpenLayers.Format.WFSCapabilities/v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/Elements.js	1307086062	1	OpenLayers.ElementsIndexer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/hsb.js	1312531137	1	OpenLayers.Lang["hsb"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Refresh.js	1299509306	1	OpenLayers.Strategy.Refresh
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Util.js	1312810994	1	Util
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MapServer.js	1309678404	1	OpenLayers.Layer.MapServer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/VML.js	1307358131	1	OpenLayers.Renderer.VML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GPX.js	1298881158	1	OpenLayers.Format.GPX
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nl.js	1312531137	1	OpenLayers.Lang["nl"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/NavToolbar.js	1305011357	1	OpenLayers.Control.NavToolbar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/km.js	1308946332	1	OpenLayers.Lang["km"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/oc.js	1312531137	1	OpenLayers.Lang["oc"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/SingleFile.js	1315754186	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/SingleFile.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Yahoo.js	1294069180	1	OpenLayers.Layer.Yahoo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js	1294069180	1	OpenLayers.Format.WMSDescribeLayer.v1_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_1_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	1307725942	1	OpenLayers.Format.OWSCommon.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control.js	1310668608	1	OpenLayers.Control
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Class.js	1312807427	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Class.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon.js	1309858954	1	OpenLayers.Format.OWSCommon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Snapping.js	1298881158	1	OpenLayers.Control.Snapping
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomToMaxExtent.js	1294069180	1	OpenLayers.Control.ZoomToMaxExtent
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Geolocate.js	1298623948	1	OpenLayers.Control.Geolocate
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ModifyFeature.js	1314228754	1	OpenLayers.Control.ModifyFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Raster.js	1294069180	1	OpenLayers.Symbolizer.Raster
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Function.js	1300376848	1	OpenLayers.Filter.Function
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Pan.js	1296658857	1	OpenLayers.Control.Pan
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/Canvas.js	1312386426	1	OpenLayers.Renderer.Canvas
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ca.js	1312531137	1	OpenLayers.Lang["ca"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Marker/Box.js	1294069180	1	OpenLayers.Marker.Box
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WFS.js	1312965697	1	OpenLayers.Layer.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/MultiLineString.js	1294069180	1	OpenLayers.Geometry.MultiLineString
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup.js	1311666540	1	OpenLayers.Popup
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/MultiPolygon.js	1294069180	1	OpenLayers.Geometry.MultiPolygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Permalink.js	1308946332	1	OpenLayers.Control.Permalink
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SLD.js	1309858954	1	OpenLayers.Format.SLD
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/LinearRing.js	1308337156	1	OpenLayers.Geometry.LinearRing
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Boxes.js	1294069180	1	OpenLayers.Layer.Boxes
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/GeoRSS.js	1294069180	1	OpenLayers.Layer.GeoRSS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGIS93Rest.js	1298880725	1	OpenLayers.Layer.ArcGIS93Rest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Feature.js	1308722650	1	OpenLayers.Handler.Feature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GeoJSON.js	1308556072	1	OpenLayers.Format.GeoJSON
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry.js	1308251785	1	OpenLayers.Geometry
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Measure.js	1298538049	1	OpenLayers.Control.Measure
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Map.js	1314228754	1	OpenLayers.Map
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS/v1.js	1312809779	1	OpenLayers.Protocol.WFS.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/FramedCloud.js	1294249365	1	OpenLayers.Popup.FramedCloud
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/hu.js	1312531137	1	OpenLayers.Lang["hu"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PanZoom.js	1299474171	1	OpenLayers.Control.PanZoom
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Point.js	1294069180	1	OpenLayers.Geometry.Point
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/KaMap.js	1299623293	1	OpenLayers.Layer.KaMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/ArcXML.js	1308251785	1	OpenLayers.Format.ArcXML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ScaleLine.js	1299508428	1	OpenLayers.Control.ScaleLine
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	1308736475	1	OpenLayers.Format.OWSCommon.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/DragPan.js	1306760116	1	OpenLayers.Control.DragPan
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Collection.js	1308337156	1	OpenLayers.Geometry.Collection
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/SLDSelect.js	1300797041	1	OpenLayers.Control.SLDSelect
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Vector.js	1311599626	1	OpenLayers.Layer.Vector
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMTSCapabilities.js	1309858954	1	OpenLayers.Format.WMTSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nn.js	1308946332	1	OpenLayers.Lang["nn"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer.js	1308251785	1	OpenLayers.Renderer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSDescribeProcess.js	1314228754	1	OpenLayers.Format.WPSDescribeProcess
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js	1294069180	1	OpenLayers.Format.SOSCapabilities.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Corner.js	1294249365	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Corner.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/zh-CN.js	1312531137	1	OpenLayers.Lang["zh-CN"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Split.js	1298881158	1	OpenLayers.Control.Split
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter/v1_1_0.js	1309341217	1	OpenLayers.Format.Filter.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Path.js	1308337156	1	OpenLayers.Handler.Path
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC/v1_1_0.js	1301937314	1	OpenLayers.Format.WMC.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/TileCache.js	1308251785	1	OpenLayers.Layer.TileCache
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Box.js	1307360630	1	OpenLayers.Handler.Box
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js	1308251785	1	OpenLayers.Format.CSWGetDomain.v2_0_2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter/v1.js	1301649071	1	OpenLayers.Format.Filter.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Panel.js	1308251785	1	OpenLayers.Control.Panel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/MouseToolbar.js	1301834834	1	OpenLayers.Control.MouseToolbar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PanPanel.js	1296658857	1	OpenLayers.Control.PanPanel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Text.js	1294069180	1	OpenLayers.Format.Text
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Text.js	1294069180	1	OpenLayers.Layer.Text
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OGCExceptionReport.js	1309870390	1	OpenLayers.Format.OGCExceptionReport
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Click.js	1311766593	1	OpenLayers.Handler.Click
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/StyleMap.js	1294249365	1	OpenLayers.StyleMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SLD/v1_0_0.js	1294069180	1	OpenLayers.Format.SLD.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGISCache.js	1314228754	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGISCache.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler.js	1294249365	1	OpenLayers.Handler
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MapServer/Untiled.js	1294069180	1	OpenLayers.Layer.MapServer.Untiled
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/SphericalMercator.js	1297689039	1	OpenLayers.Layer.SphericalMercator
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/DragFeature.js	1311451922	1	OpenLayers.Control.DragFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ArgParser.js	1299508428	1	OpenLayers.Control.ArgParser
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/KaMapCache.js	1308251785	1	OpenLayers.Layer.KaMapCache
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XLS/v1.js	1308251785	1	OpenLayers.Format.XLS.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSDescribeLayer.js	1309858954	1	OpenLayers.Format.WMSDescribeLayer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WorldWind.js	1311948039	1	OpenLayers.Layer.WorldWind
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/GetFeature.js	1308251785	1	OpenLayers.Control.GetFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/EditingToolbar.js	1305011357	1	OpenLayers.Control.EditingToolbar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/cs-CZ.js	1312531137	1	OpenLayers.Lang["cs-CZ"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Bounds.js	1311932195	1	OpenLayers.Bounds
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSContext/v0_3_1.js	1308251785	1	OpenLayers.Format.OWSContext.v0_3_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_3_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Pinch.js	1311766593	1	OpenLayers.Handler.Pinch
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter.js	1294249365	1	OpenLayers.Filter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST/v1.js	1311602460	1	OpenLayers.Format.WFST.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Rectangle.js	1298881158	1	OpenLayers.Geometry.Rectangle
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities.js	1309858954	1	OpenLayers.Format.WFSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile.js	1312788666	1	OpenLayers.Tile
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Ajax.js	1312386914	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Ajax.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Fixed.js	1299509306	1	OpenLayers.Strategy.Fixed
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/pt.js	1312531137	1	OpenLayers.Lang["pt"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Scale.js	1308946332	1	OpenLayers.Control.Scale
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML/Base.js	1310738859	1	OpenLayers.Format.GML.Base
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OSM.js	1308251785	1	OpenLayers.Format.OSM
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js	1304495335	1	OpenLayers.Format.WFSCapabilities/v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/Framed.js	1294069180	1	OpenLayers.Popup.Framed
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/XYZ.js	1308251785	1	OpenLayers.Layer.XYZ
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Gears/gears_init.js	1221231425	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Gears/gears_init.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/en-CA.js	1283310391	1	OpenLayers.Lang["en-CA"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XLS.js	1309858954	1	OpenLayers.Format.XLS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Size.js	1311932282	1	OpenLayers.Size
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Hover.js	1301834834	1	OpenLayers.Handler.Hover
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSContext.js	1309858954	1	OpenLayers.Format.OWSContext
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Request/XMLHttpRequest.js	1292235246	1	OpenLayers.Request.XMLHttpRequest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/RegularPolygon.js	1308689633	1	OpenLayers.Handler.RegularPolygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/io.js	1308946332	1	OpenLayers.Lang["io"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/MouseWheel.js	1294069180	1	OpenLayers.Handler.MouseWheel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/LayerSwitcher.js	1308946332	1	OpenLayers.Control.LayerSwitcher
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/be-tarask.js	1312531137	1	OpenLayers.Lang["be-tarask"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/zh-TW.js	1312531137	1	OpenLayers.Lang["zh-TW"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS.js	1312809779	1	OpenLayers.Protocol.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer.js	1294249365	1	OpenLayers.Symbolizer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Filter.js	1301516364	1	OpenLayers.Strategy.Filter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PinchZoom.js	1299808406	1	OpenLayers.Control.PinchZoom
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST/v1_1_0.js	1309341217	1	OpenLayers.Format.WFST.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/PointTrack.js	1300801558	1	OpenLayers.Layer.PointTrack
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Context.js	1309858954	1	OpenLayers.Format.Context
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/de.js	1312531137	1	OpenLayers.Lang["de"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/PointGrid.js	1308334720	1	OpenLayers.Layer.PointGrid
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/hr.js	1312531137	1	OpenLayers.Lang["hr"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1.js	1312779036	1	OpenLayers.Format.WMSCapabilities.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ia.js	1312531137	1	OpenLayers.Lang["ia"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebugx.js	1298652019	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebugx.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/sv-SE.js	1312531137	1	OpenLayers.Lang["sv"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Zoomify.js	1308251785	1	OpenLayers.Layer.Zoomify
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon/v1.js	1308736475	1	OpenLayers.Format.OWSCommon.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Keyboard.js	1294069180	1	OpenLayers.handler.Keyboard
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/NavigationHistory.js	1294069180	1	OpenLayers.Control.NavigationHistory
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMS/Untiled.js	1294069180	1	OpenLayers.Layer.WMS.Untiled
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ksh.js	1312531137	1	OpenLayers.Lang["ksh"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/WMTSGetFeatureInfo.js	1308251785	1	OpenLayers.Control.WMTSGetFeatureInfo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js	1295873033	1	OpenLayers.Format.WMSCapabilities/v1_1_1_WMSC
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/SVG2.js	1310404035	1	OpenLayers.Renderer.SVG2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format.js	1294249365	1	OpenLayers.Format
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Console.js	1298881158	1	OpenLayers.Console
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/license.txt	1181603869	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/license.txt
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js	1308736475	1	OpenLayers.Format.WPSCapabilities.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google.js	1294069180	1	OpenLayers.Layer.Google
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities/v1.js	1294069180	1	OpenLayers.Format.WFSCapabilities.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC.js	1309858954	1	OpenLayers.Format.WMC
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Attribution.js	1299508428	1	OpenLayers.Control.Attribution
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS/v1_1_0.js	1294069180	1	OpenLayers.Protocol.WFS.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/MultiLineString.js	1340830591	1	OpenLayers.Geometry.MultiLineString
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/cs-CZ.js	1340830591	1	OpenLayers.Lang["cs-CZ"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Pan.js	1340830591	1	OpenLayers.Control.Pan
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/KaMap.js	1340830591	1	OpenLayers.Layer.KaMap
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Scale.js	1340830591	1	OpenLayers.Control.Scale
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/FixedZoomLevels.js	1340830591	1	OpenLayers.Layer.FixedZoomLevels
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/SelectFeature.js	1340830591	1	OpenLayers.Control.SelectFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.WPSCapabilities.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ModifyFeature.js	1340830591	1	OpenLayers.Control.ModifyFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tween.js	1340830591	1	OpenLayers.Tween
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Style.js	1340830591	1	OpenLayers.Style
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD.js	1340830591	1	OpenLayers.Format.SLD
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/Framed.js	1340830591	1	OpenLayers.Popup.Framed
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Marker/Box.js	1340830591	1	OpenLayers.Marker.Box
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1.js	1340830591	1	OpenLayers.Format.WMSCapabilities.v1_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetDomain.js	1340830591	1	OpenLayers.Format.CSWGetDomain
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy.js	1340830591	1	OpenLayers.Strategy
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS/v1.js	1340830591	1	OpenLayers.Protocol.WFS.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/HTTPRequest.js	1340830591	1	OpenLayers.Layer.HTTPRequest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Geolocate.js	1340830591	1	OpenLayers.Control.Geolocate
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup.js	1340830591	1	OpenLayers.Popup
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/HTTP.js	1340830591	1	OpenLayers.Protocol.HTTP
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/zh-CN.js	1340830591	1	OpenLayers.Lang["zh-CN"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/CSW.js	1340830591	1	OpenLayers.Protocol.CSW
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/DragPan.js	1340830591	1	OpenLayers.Control.DragPan
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Events/buttonclick.js	1340830591	1	OpenLayers.Events.buttonclick
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.WMTSCapabilities.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format.js	1340830591	1	OpenLayers.Format
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GeoJSON.js	1340830591	1	OpenLayers.Format.GeoJSON
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/gl.js	1340830591	1	OpenLayers.Lang["gl"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/QueryStringFilter.js	1340830591	1	OpenLayers.Format.QueryStringFilter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Keyboard.js	1340830591	1	OpenLayers.handler.Keyboard
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ca.js	1340830591	1	OpenLayers.Lang["ca"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/OverviewMap.js	1340830591	1	OpenLayers.Control.OverviewMap
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSCapabilities.js	1340830591	1	OpenLayers.Format.SOSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control.js	1340830591	1	OpenLayers.Control
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST/v1_1_0.js	1340830591	1	OpenLayers.Format.WFST.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/PointTrack.js	1340830591	1	OpenLayers.Layer.PointTrack
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/Elements.js	1340830591	1	OpenLayers.ElementsIndexer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Icon.js	1340830591	1	OpenLayers.Icon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/WMTS.js	1340830591	1	OpenLayers.Layer.WMTS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Path.js	1340830591	1	OpenLayers.Handler.Path
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/TMS.js	1340830591	1	OpenLayers.Layer.TMS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGISCache.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGISCache.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nl.js	1340830591	1	OpenLayers.Lang["nl"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OGCExceptionReport.js	1340830591	1	OpenLayers.Format.OGCExceptionReport
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Grid.js	1340830591	1	OpenLayers.Layer.Grid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/SOS.js	1340830591	1	OpenLayers.Protocol.SOS.DEFAULTS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ru.js	1340830591	1	OpenLayers.Lang["ru"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1.js	1340830591	1	OpenLayers.Format.WMSCapabilities.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon/v1.js	1340830591	1	OpenLayers.Format.OWSCommon.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/Image.js	1340830591	1	OpenLayers.Tile.Image
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomPanel.js	1340830591	1	OpenLayers.Control.ZoomPanel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/da-DK.js	1340830591	1	OpenLayers.Lang["da-DK"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS.js	1340830591	1	OpenLayers.Protocol.WFS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/NavigationHistory.js	1340830591	1	OpenLayers.Control.NavigationHistory
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Boxes.js	1340830591	1	OpenLayers.Layer.Boxes
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/MousePosition.js	1340830591	1	OpenLayers.Control.MousePosition
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC.js	1340830591	1	OpenLayers.Format.WMC
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	1340830591	1	OpenLayers.Format.OWSCommon.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/Image/IFrame.js	1340830591	1	OpenLayers.Tile.Image.IFrame
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/Anchored.js	1340830591	1	OpenLayers.Popup.Anchored
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS/v1_1_0.js	1340830591	1	OpenLayers.Protocol.WFS.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ScaleLine.js	1340830591	1	OpenLayers.Control.ScaleLine
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Bounds.js	1340830591	1	OpenLayers.Bounds
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Save.js	1340830591	1	OpenLayers.Strategy.Save
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/vi.js	1340830591	1	OpenLayers.Lang["vi"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Snapping.js	1340830591	1	OpenLayers.Control.Snapping
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang.js	1340830591	1	OpenLayers.Lang
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon.js	1340830591	1	OpenLayers.Format.OWSCommon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/es.js	1340830591	1	OpenLayers.Lang["es"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Events.js	1340830591	1	OpenLayers.Event
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers.js	1340830591	1	OpenLayers
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/PointGrid.js	1340830591	1	OpenLayers.Layer.PointGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/SphericalMercator.js	1340830591	1	OpenLayers.Layer.SphericalMercator
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/bg.js	1340830591	1	OpenLayers.Lang["bg"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSContext/v0_3_1.js	1340830591	1	OpenLayers.Format.OWSContext.v0_3_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Vector.js	1340830591	1	OpenLayers.Layer.Vector
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_3.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_3
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PanZoom.js	1340830591	1	OpenLayers.Control.PanZoom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD/v1.js	1340830591	1	OpenLayers.Format.SLD.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS/v1_0_0.js	1340830591	1	OpenLayers.Protocol.WFS.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/fur.js	1340830591	1	OpenLayers.Lang["fur"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/de.js	1340830591	1	OpenLayers.Lang["de"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/GetFeature.js	1340830591	1	OpenLayers.Control.GetFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFS.js	1340830591	1	OpenLayers.Format.WFS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Attribution.js	1340830591	1	OpenLayers.Control.Attribution
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities.js	1340830591	1	OpenLayers.Format.WFSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomOut.js	1340830591	1	OpenLayers.Control.ZoomOut
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes.js	1340830591	1	OpenLayers Base Types
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/TransformFeature.js	1340830591	1	OpenLayers.Control.TransformFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Atom.js	1340830591	1	OpenLayers.Format.Atom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/id.js	1340830591	1	OpenLayers.Lang["id"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry.js	1340830591	1	OpenLayers.Geometry
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/UTFGrid.js	1340830591	1	OpenLayers.Control.UTFGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Refresh.js	1340830591	1	OpenLayers.Strategy.Refresh
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Permalink.js	1340830591	1	OpenLayers.Control.Permalink
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/CSW/v2_0_2.js	1340830591	1	OpenLayers.Protocol.CSW.v2_0_2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/SOS/v1_0_0.js	1340830591	1	OpenLayers.Protocol.SOS.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/oc.js	1340830591	1	OpenLayers.Lang["oc"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_3_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/BBOX.js	1340830591	1	OpenLayers.Strategy.BBOX
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/pt.js	1340830591	1	OpenLayers.Lang["pt"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSCapabilities.js	1340830591	1	OpenLayers.Format.WPSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD/v1_0_0_GeoServer.js	1340830591	1	OpenLayers.Format.SLD/v1_0_0_GeoServer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/SLDSelect.js	1340830591	1	OpenLayers.Control.SLDSelect
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Map.js	1340830591	1	OpenLayers.Map
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer.js	1340830591	1	OpenLayers.Symbolizer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/MapServer.js	1340830591	1	OpenLayers.Layer.MapServer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Style2.js	1340830591	1	OpenLayers.Style2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGIS93Rest.js	1340830591	1	OpenLayers.Layer.ArcGIS93Rest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/UTFGrid.js	1340830591	1	OpenLayers.Layer.UTFGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSDescribeProcess.js	1340830591	1	OpenLayers.Format.WPSDescribeProcess
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/hr.js	1340830591	1	OpenLayers.Lang["hr"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomBox.js	1340830591	1	OpenLayers.Control.ZoomBox
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMTSCapabilities.js	1340830591	1	OpenLayers.Format.WMTSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter/v1_1_0.js	1340830591	1	OpenLayers.Format.Filter.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/en-CA.js	1340830591	1	OpenLayers.Lang["en-CA"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Marker.js	1340830591	1	OpenLayers.Marker
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSContext.js	1340830591	1	OpenLayers.Format.OWSContext
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities/v1.js	1340830591	1	OpenLayers.Format.WFSCapabilities.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/StyleMap.js	1340830591	1	OpenLayers.StyleMap
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XLS/v1_1_0.js	1340830591	1	OpenLayers.Format.XLS.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Console.js	1340830591	1	OpenLayers.Console
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Box.js	1340830591	1	OpenLayers.Handler.Box
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/OSM.js	1340830591	1	OpenLayers.Layer.OSM
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GeoRSS.js	1340830591	1	OpenLayers.Format.GeoRSS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/gsw.js	1340830591	1	OpenLayers.Lang["gsw"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/LinearRing.js	1340830591	1	OpenLayers.Geometry.LinearRing
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSGetObservation.js	1340830591	1	OpenLayers.Format.SOSGetObservation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Comparison.js	1340830591	1	OpenLayers.Filter.Comparison
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Spherical.js	1340830591	1	Spherical
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ar.js	1340830591	1	OpenLayers.Lang["ar"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Collection.js	1340830591	1	OpenLayers.Geometry.Collection
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WCSGetCoverage.js	1340830591	1	OpenLayers.Format.WCSGetCoverage version 1.1.0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter.js	1340830591	1	OpenLayers.Filter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PanPanel.js	1340830591	1	OpenLayers.Control.PanPanel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google.js	1340830591	1	OpenLayers.Layer.Google
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/KaMapCache.js	1340830591	1	OpenLayers.Layer.KaMapCache
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Polygon.js	1340830591	1	OpenLayers.Geometry.Polygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Split.js	1340830591	1	OpenLayers.Control.Split
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/JSON.js	1340830591	1	OpenLayers.Format.JSON
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Image.js	1340830591	1	OpenLayers.Layer.Image
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Click.js	1340830591	1	OpenLayers.Handler.Click
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Spatial.js	1340830591	1	OpenLayers.Filter.Spatial
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Pinch.js	1340830591	1	OpenLayers.Handler.Pinch
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Function.js	1340830591	1	OpenLayers.Filter.Function
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/FramedCloud.js	1340830591	1	OpenLayers.Popup.FramedCloud
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Kinetic.js	1340830591	1	OpenLayers.Kinetic
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter/v1_0_0.js	1340830591	1	OpenLayers.Format.Filter.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomToMaxExtent.js	1340830591	1	OpenLayers.Control.ZoomToMaxExtent
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OSM.js	1340830591	1	OpenLayers.Format.OSM
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetRecords.js	1340830591	1	OpenLayers.Format.CSWGetRecords
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/EventPane.js	1340830591	1	OpenLayers.Layer.EventPane
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js	1340830591	1	OpenLayers.Format.WMSDescribeLayer.v1_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/Script.js	1340830591	1	OpenLayers.Protocol.Script
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Zoom.js	1340830591	1	OpenLayers.Control.Zoom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Context.js	1340830591	1	OpenLayers.Format.Context
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Line.js	1340830591	1	OpenLayers.Symbolizer.Line
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/it.js	1340830591	1	OpenLayers.Lang["it"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/lt.js	1340830591	1	OpenLayers.Lang["lt"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/DragFeature.js	1340830591	1	OpenLayers.Control.DragFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML.js	1340830591	1	OpenLayers.Format.GML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSDescribeFeatureType.js	1340830591	1	OpenLayers.Format.WFSDescribeFeatureType
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google/v3.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google/v3.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/zh-TW.js	1340830591	1	OpenLayers.Lang["zh-TW"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	1340830591	1	OpenLayers.Format.OWSCommon.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/hsb.js	1340830591	1	OpenLayers.Lang["hsb"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js	1340830591	1	OpenLayers.Format.WFSCapabilities/v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/WMSGetFeatureInfo.js	1340830591	1	OpenLayers.Control.WMSGetFeatureInfo
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Measure.js	1340830591	1	OpenLayers.Control.Measure
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/pl.js	1340830591	1	OpenLayers.Lang["pl"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CQL.js	1340830591	1	OpenLayers.Format.CQL
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Size.js	1340830591	1	OpenLayers.Size
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Text.js	1340830591	1	OpenLayers.Symbolizer.Text
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_1_1_WMSC
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js	1340830591	1	OpenLayers.Format.CSWGetRecords.v2_0_2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/hu.js	1340830591	1	OpenLayers.Lang["hu"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST/v1_0_0.js	1340830591	1	OpenLayers.Format.WFST.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/EditingToolbar.js	1340830591	1	OpenLayers.Control.EditingToolbar
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Hover.js	1340830591	1	OpenLayers.Handler.Hover
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/MultiPolygon.js	1340830591	1	OpenLayers.Geometry.MultiPolygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Text.js	1340830591	1	OpenLayers.Layer.Text
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/GeoRSS.js	1340830591	1	OpenLayers.Layer.GeoRSS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Request.js	1340830591	1	OpenLayers.Request
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ArgParser.js	1340830591	1	OpenLayers.Control.ArgParser
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Cluster.js	1340830591	1	OpenLayers.Strategy.Cluster
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/LineString.js	1340830591	1	OpenLayers.Geometry.LineString
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/en.js	1340830591	1	OpenLayers.Lang["en"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/el.js	1340830591	1	OpenLayers.Lang["el"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSDescribeLayer.js	1340830591	1	OpenLayers.Format.WMSDescribeLayer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Projection.js	1340830591	1	OpenLayers.Projection
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js	1340830591	1	OpenLayers.Format.CSWGetDomain.v2_0_2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Curve.js	1340830591	1	OpenLayers.Geometry.Curve
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Date.js	1340830591	1	OpenLayers.Date
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/RegularPolygon.js	1340830591	1	OpenLayers.Handler.RegularPolygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcIMS.js	1340830591	1	OpenLayers.Layer.ArcIMS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/deprecated.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/deprecated.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/CacheRead.js	1340830591	1	OpenLayers.Control.CacheRead
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebugx.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebugx.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Markers.js	1340830591	1	OpenLayers.Layer.Markers
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WKT.js	1340830591	1	OpenLayers.Format.WKT
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/FeatureId.js	1340830591	1	OpenLayers.Filter.FeatureId
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/license.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/license.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/VML.js	1340830591	1	OpenLayers.Renderer.VML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Paging.js	1340830591	1	OpenLayers.Strategy.Paging
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomIn.js	1340830591	1	OpenLayers.Control.ZoomIn
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ksh.js	1340830591	1	OpenLayers.Lang["ksh"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GPX.js	1340830591	1	OpenLayers.Format.GPX
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Corner.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Corner.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler.js	1340830591	1	OpenLayers.Handler
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/pt-BR.js	1340830591	1	OpenLayers.Lang["pt-br"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/MapGuide.js	1340830591	1	OpenLayers.Layer.MapGuide
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Polygon.js	1340830591	1	OpenLayers.Symbolizer.Polygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XLS.js	1340830591	1	OpenLayers.Format.XLS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Feature.js	1340830591	1	OpenLayers.Handler.Feature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML/v3.js	1340830591	1	OpenLayers.Format.GML.v3
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/MouseWheel.js	1340830591	1	OpenLayers.Handler.MouseWheel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/te.js	1340830591	1	OpenLayers.Lang["te"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/br.js	1340830591	1	OpenLayers.Lang["br"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Filter.js	1340830591	1	OpenLayers.Strategy.Filter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Class.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Class.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_1_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/be-tarask.js	1340830591	1	OpenLayers.Lang["be-tarask"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Point.js	1340830591	1	OpenLayers.Geometry.Point
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Graticule.js	1340830591	1	OpenLayers.Control.Graticule
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/KeyboardDefaults.js	1340830591	1	OpenLayers.Control.KeyboardDefaults
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/ArcXML/Features.js	1340830591	1	OpenLayers.Format.ArcXML.Features
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer.js	1340830591	1	OpenLayers.Renderer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/fr.js	1340830591	1	OpenLayers.Lang["fr"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/ArcXML.js	1340830591	1	OpenLayers.Format.ArcXML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/is.js	1340830591	1	OpenLayers.Lang["is"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile.js	1340830591	1	OpenLayers.Tile
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/SingleFile.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/SingleFile.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XML/VersionedOGC.js	1340830591	1	OpenLayers.Format.XML.VersionedOGC
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/km.js	1340830591	1	OpenLayers.Lang["km"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/UTFGrid.js	1340830591	1	OpenLayers.Tile.UTFGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Point.js	1340830591	1	OpenLayers.Symbolizer.Point
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML/v2.js	1340830591	1	OpenLayers.Format.GML.v2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/LonLat.js	1340830591	1	OpenLayers.LonLat
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/TouchNavigation.js	1340830591	1	OpenLayers.Control.TouchNavigation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/DrawFeature.js	1340830591	1	OpenLayers.Control.DrawFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Feature/Vector.js	1340830591	1	OpenLayers.Feature.Vector
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ia.js	1340830591	1	OpenLayers.Lang["ia"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XLS/v1.js	1340830591	1	OpenLayers.Format.XLS.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter.js	1340830591	1	OpenLayers.Format.Filter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/CacheWrite.js	1340830591	1	OpenLayers.Control.CacheWrite
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC/v1.js	1340830591	1	OpenLayers.Format.WMC.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Polygon.js	1340830591	1	OpenLayers.Handler.Polygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Button.js	1340830591	1	OpenLayers.Control.Button
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js	1340830591	1	OpenLayers.Format.SOSGetFeatureOfInterest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Pixel.js	1340830591	1	OpenLayers.Pixel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/NavToolbar.js	1340830591	1	OpenLayers.Control.NavToolbar
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter/v1.js	1340830591	1	OpenLayers.Format.Filter.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/sv-SE.js	1340830591	1	OpenLayers.Lang["sv"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Drag.js	1340830591	1	OpenLayers.Handler.Drag
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Request/XMLHttpRequest.js	1340830591	1	OpenLayers.Request.XMLHttpRequest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Color.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Color.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Fixed.js	1340830591	1	OpenLayers.Strategy.Fixed
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/KML.js	1340830591	1	OpenLayers.Format.KML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Feature.js	1340830591	1	OpenLayers.Feature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Util.js	1340830591	1	Util
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/Canvas.js	1340830591	1	OpenLayers.Renderer.Canvas
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PanZoomBar.js	1340830591	1	OpenLayers.Control.PanZoomBar
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebug.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebug.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSGetFeatureInfo.js	1340830591	1	OpenLayers.Format.WMSGetFeatureInfo
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PinchZoom.js	1340830591	1	OpenLayers.Control.PinchZoom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST.js	1340830591	1	OpenLayers.Format.WFST.DEFAULTS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Rule.js	1340830591	1	OpenLayers.Rule
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC/v1_0_0.js	1340830591	1	OpenLayers.Format.WMC.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.WFSCapabilities/v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/AnchoredBubble.js	1340830591	1	OpenLayers.Popup.AnchoredBubble
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities.js	1340830591	1	OpenLayers.Format.WMSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Bing.js	1340830591	1	OpenLayers.Layer.Bing
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer.js	1340830591	1	OpenLayers.Layer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol.js	1340830591	1	OpenLayers.Protocol
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Logical.js	1340830591	1	OpenLayers.Filter.Logical
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Element.js	1340830591	1	OpenLayers.Element
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/WMS.js	1340830591	1	OpenLayers.Layer.WMS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/sk.js	1340830591	1	OpenLayers.Lang["sk"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nb.js	1340830591	1	OpenLayers.Lang["nb"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.SOSCapabilities.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/WorldWind.js	1340830591	1	OpenLayers.Layer.WorldWind
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC/v1_1_0.js	1340830591	1	OpenLayers.Format.WMC.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/MultiPoint.js	1340830591	1	OpenLayers.Geometry.MultiPoint
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Zoomify.js	1340830591	1	OpenLayers.Layer.Zoomify
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Vector/RootContainer.js	1340830591	1	OpenLayers.Layer.Vector.RootContainer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Point.js	1340830591	1	OpenLayers.Handler.Point
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/LayerSwitcher.js	1340830591	1	OpenLayers.Control.LayerSwitcher
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nds.js	1340830591	1	OpenLayers.Lang["nds"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/TileCache.js	1340830591	1	OpenLayers.Layer.TileCache
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/XYZ.js	1340830591	1	OpenLayers.Layer.XYZ
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Animation.js	1340830591	1	OpenLayers.Animation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML/Base.js	1340830591	1	OpenLayers.Format.GML.Base
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/io.js	1340830591	1	OpenLayers.Lang["io"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/readme.txt	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/readme.txt
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Navigation.js	1340830591	1	OpenLayers.Control.Navigation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ja.js	1340830591	1	OpenLayers.Lang["ja"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/WMTSGetFeatureInfo.js	1340830591	1	OpenLayers.Control.WMTSGetFeatureInfo
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Text.js	1340830591	1	OpenLayers.Format.Text
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nn.js	1340830591	1	OpenLayers.Lang["nn"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Panel.js	1340830591	1	OpenLayers.Control.Panel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/license.txt	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/license.txt
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSExecute.js	1340830591	1	OpenLayers.Format.WPSExecute version 1.0.0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD/v1_0_0.js	1340830591	1	OpenLayers.Format.SLD.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/SVG.js	1340830591	1	OpenLayers.Renderer.SVG
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST/v1.js	1340830591	1	OpenLayers.Format.WFST.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XML.js	1340830591	1	OpenLayers.Format.XML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/fi.js	1340830591	1	OpenLayers.Lang["fi"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Raster.js	1340830591	1	OpenLayers.Symbolizer.Raster
diff --git a/apidoc_config/Data/ImageFileInfo.nd b/apidoc_config/Data/ImageFileInfo.nd
index c9df45b..3db5561 100644
Binary files a/apidoc_config/Data/ImageFileInfo.nd and b/apidoc_config/Data/ImageFileInfo.nd differ
diff --git a/apidoc_config/Data/ImageReferenceTable.nd b/apidoc_config/Data/ImageReferenceTable.nd
index 49ffcc0..7fce56c 100644
Binary files a/apidoc_config/Data/ImageReferenceTable.nd and b/apidoc_config/Data/ImageReferenceTable.nd differ
diff --git a/apidoc_config/Data/IndexInfo.nd b/apidoc_config/Data/IndexInfo.nd
index eb67892..1501dd4 100644
Binary files a/apidoc_config/Data/IndexInfo.nd and b/apidoc_config/Data/IndexInfo.nd differ
diff --git a/apidoc_config/Data/PreviousMenuState.nd b/apidoc_config/Data/PreviousMenuState.nd
index 549adae..a07dfda 100644
Binary files a/apidoc_config/Data/PreviousMenuState.nd and b/apidoc_config/Data/PreviousMenuState.nd differ
diff --git a/apidoc_config/Data/PreviousSettings.nd b/apidoc_config/Data/PreviousSettings.nd
index 7ac0e60..d4dc298 100644
Binary files a/apidoc_config/Data/PreviousSettings.nd and b/apidoc_config/Data/PreviousSettings.nd differ
diff --git a/apidoc_config/Data/SymbolTable.nd b/apidoc_config/Data/SymbolTable.nd
index 01b6209..8a0028b 100644
Binary files a/apidoc_config/Data/SymbolTable.nd and b/apidoc_config/Data/SymbolTable.nd differ
diff --git a/apidoc_config/Menu.txt b/apidoc_config/Menu.txt
index 475cb6a..0b07276 100644
--- a/apidoc_config/Menu.txt
+++ b/apidoc_config/Menu.txt
@@ -48,7 +48,6 @@ SubTitle: JavaScript Mapping Library
 Group: OpenLayers  {
 
    File: OpenLayers  (no auto-title, OpenLayers.js)
-   File: Ajax  (no auto-title, OpenLayers/Ajax.js)
 
    Group: BaseTypes  {
 
@@ -62,63 +61,65 @@ Group: OpenLayers  {
       File: Size  (no auto-title, OpenLayers/BaseTypes/Size.js)
       }  # Group: BaseTypes
 
-   File: Console  (no auto-title, OpenLayers/Console.js)
-
    Group: Control  {
 
       File: Control  (no auto-title, OpenLayers/Control.js)
-      File: ArgParser  (no auto-title, OpenLayers/Control/ArgParser.js)
-      File: Attribution  (no auto-title, OpenLayers/Control/Attribution.js)
-      File: Button  (no auto-title, OpenLayers/Control/Button.js)
-      File: DragFeature  (no auto-title, OpenLayers/Control/DragFeature.js)
-      File: DragPan  (no auto-title, OpenLayers/Control/DragPan.js)
-      File: DrawFeature  (no auto-title, OpenLayers/Control/DrawFeature.js)
-      File: EditingToolbar  (no auto-title, OpenLayers/Control/EditingToolbar.js)
-      File: Geolocate  (no auto-title, OpenLayers/Control/Geolocate.js)
-      File: GetFeature  (no auto-title, OpenLayers/Control/GetFeature.js)
-      File: Graticule  (no auto-title, OpenLayers/Control/Graticule.js)
-      File: KeyboardDefaults  (no auto-title, OpenLayers/Control/KeyboardDefaults.js)
-      File: LayerSwitcher  (no auto-title, OpenLayers/Control/LayerSwitcher.js)
-      File: Measure  (no auto-title, OpenLayers/Control/Measure.js)
-      File: ModifyFeature  (no auto-title, OpenLayers/Control/ModifyFeature.js)
-      File: MouseDefaults  (no auto-title, OpenLayers/Control/MouseDefaults.js)
-      File: MousePosition  (no auto-title, OpenLayers/Control/MousePosition.js)
-      File: MouseToolbar  (no auto-title, OpenLayers/Control/MouseToolbar.js)
-      File: Navigation  (no auto-title, OpenLayers/Control/Navigation.js)
-      File: NavigationHistory  (no auto-title, OpenLayers/Control/NavigationHistory.js)
-      File: NavToolbar  (no auto-title, OpenLayers/Control/NavToolbar.js)
-      File: OverviewMap  (no auto-title, OpenLayers/Control/OverviewMap.js)
-      File: Pan  (no auto-title, OpenLayers/Control/Pan.js)
-      File: Panel  (no auto-title, OpenLayers/Control/Panel.js)
-      File: PanPanel  (no auto-title, OpenLayers/Control/PanPanel.js)
-      File: PanZoom  (no auto-title, OpenLayers/Control/PanZoom.js)
-      File: PanZoomBar  (no auto-title, OpenLayers/Control/PanZoomBar.js)
-      File: Permalink  (no auto-title, OpenLayers/Control/Permalink.js)
-      File: PinchZoom  (no auto-title, OpenLayers/Control/PinchZoom.js)
-      File: Scale  (no auto-title, OpenLayers/Control/Scale.js)
-      File: ScaleLine  (no auto-title, OpenLayers/Control/ScaleLine.js)
-      File: SelectFeature  (no auto-title, OpenLayers/Control/SelectFeature.js)
-      File: SLDSelect  (no auto-title, OpenLayers/Control/SLDSelect.js)
-      File: Snapping  (no auto-title, OpenLayers/Control/Snapping.js)
-      File: Split  (no auto-title, OpenLayers/Control/Split.js)
-      File: TouchNavigation  (no auto-title, OpenLayers/Control/TouchNavigation.js)
-      File: TransformFeature  (no auto-title, OpenLayers/Control/TransformFeature.js)
-      File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMSGetFeatureInfo.js)
-      File: WMTSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMTSGetFeatureInfo.js)
-      File: ZoomBox  (no auto-title, OpenLayers/Control/ZoomBox.js)
-      File: ZoomIn  (no auto-title, OpenLayers/Control/ZoomIn.js)
-      File: ZoomOut  (no auto-title, OpenLayers/Control/ZoomOut.js)
-      File: ZoomPanel  (no auto-title, OpenLayers/Control/ZoomPanel.js)
-      File: ZoomToMaxExtent  (no auto-title, OpenLayers/Control/ZoomToMaxExtent.js)
-      }  # Group: Control
 
-   File: Events  (no auto-title, OpenLayers/Events.js)
+      Group: Control  {
+
+         File: ArgParser  (no auto-title, OpenLayers/Control/ArgParser.js)
+         File: Attribution  (no auto-title, OpenLayers/Control/Attribution.js)
+         File: Button  (no auto-title, OpenLayers/Control/Button.js)
+         File: CacheRead  (OpenLayers/Control/CacheRead.js)
+         File: CacheWrite  (OpenLayers/Control/CacheWrite.js)
+         File: DragFeature  (no auto-title, OpenLayers/Control/DragFeature.js)
+         File: DragPan  (no auto-title, OpenLayers/Control/DragPan.js)
+         File: DrawFeature  (no auto-title, OpenLayers/Control/DrawFeature.js)
+         File: EditingToolbar  (no auto-title, OpenLayers/Control/EditingToolbar.js)
+         File: Geolocate  (no auto-title, OpenLayers/Control/Geolocate.js)
+         File: GetFeature  (no auto-title, OpenLayers/Control/GetFeature.js)
+         File: Graticule  (no auto-title, OpenLayers/Control/Graticule.js)
+         File: KeyboardDefaults  (no auto-title, OpenLayers/Control/KeyboardDefaults.js)
+         File: LayerSwitcher  (no auto-title, OpenLayers/Control/LayerSwitcher.js)
+         File: Measure  (no auto-title, OpenLayers/Control/Measure.js)
+         File: ModifyFeature  (no auto-title, OpenLayers/Control/ModifyFeature.js)
+         File: MousePosition  (no auto-title, OpenLayers/Control/MousePosition.js)
+         File: Navigation  (no auto-title, OpenLayers/Control/Navigation.js)
+         File: NavigationHistory  (no auto-title, OpenLayers/Control/NavigationHistory.js)
+         File: NavToolbar  (no auto-title, OpenLayers/Control/NavToolbar.js)
+         File: OverviewMap  (no auto-title, OpenLayers/Control/OverviewMap.js)
+         File: Pan  (no auto-title, OpenLayers/Control/Pan.js)
+         File: Panel  (no auto-title, OpenLayers/Control/Panel.js)
+         File: PanPanel  (no auto-title, OpenLayers/Control/PanPanel.js)
+         File: PanZoom  (no auto-title, OpenLayers/Control/PanZoom.js)
+         File: PanZoomBar  (no auto-title, OpenLayers/Control/PanZoomBar.js)
+         File: Permalink  (no auto-title, OpenLayers/Control/Permalink.js)
+         File: PinchZoom  (no auto-title, OpenLayers/Control/PinchZoom.js)
+         File: Scale  (no auto-title, OpenLayers/Control/Scale.js)
+         File: ScaleLine  (no auto-title, OpenLayers/Control/ScaleLine.js)
+         File: SelectFeature  (no auto-title, OpenLayers/Control/SelectFeature.js)
+         File: SLDSelect  (no auto-title, OpenLayers/Control/SLDSelect.js)
+         File: Snapping  (no auto-title, OpenLayers/Control/Snapping.js)
+         File: Split  (no auto-title, OpenLayers/Control/Split.js)
+         File: TouchNavigation  (no auto-title, OpenLayers/Control/TouchNavigation.js)
+         File: TransformFeature  (no auto-title, OpenLayers/Control/TransformFeature.js)
+         File: UTFGrid  (OpenLayers/Control/UTFGrid.js)
+         File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMSGetFeatureInfo.js)
+         File: WMTSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMTSGetFeatureInfo.js)
+         File: Zoom  (OpenLayers/Control/Zoom.js)
+         File: ZoomBox  (no auto-title, OpenLayers/Control/ZoomBox.js)
+         File: ZoomIn  (no auto-title, OpenLayers/Control/ZoomIn.js)
+         File: ZoomOut  (no auto-title, OpenLayers/Control/ZoomOut.js)
+         File: ZoomPanel  (no auto-title, OpenLayers/Control/ZoomPanel.js)
+         File: ZoomToMaxExtent  (no auto-title, OpenLayers/Control/ZoomToMaxExtent.js)
+         }  # Group: Control
+
+      }  # Group: Control
 
    Group: Feature  {
 
       File: Feature  (no auto-title, OpenLayers/Feature.js)
       File: Vector  (no auto-title, OpenLayers/Feature/Vector.js)
-      File: WFS  (no auto-title, OpenLayers/Feature/WFS.js)
       }  # Group: Feature
 
    Group: Filter  {
@@ -134,6 +135,15 @@ Group: OpenLayers  {
    Group: Format  {
 
       File: Format  (no auto-title, OpenLayers/Format.js)
+      File: ArcXML  (no auto-title, OpenLayers/Format/ArcXML.js)
+      File: ArcXML.Features  (no auto-title, OpenLayers/Format/ArcXML/Features.js)
+      File: Atom  (no auto-title, OpenLayers/Format/Atom.js)
+      File: Context  (no auto-title, OpenLayers/Format/Context.js)
+      File: CQL  (no auto-title, OpenLayers/Format/CQL.js)
+      File: CSWGetDomain  (no auto-title, OpenLayers/Format/CSWGetDomain.js)
+      File: CSWGetDomain.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetDomain/v2_0_2.js)
+      File: CSWGetRecords  (no auto-title, OpenLayers/Format/CSWGetRecords.js)
+      File: CSWGetRecords.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetRecords/v2_0_2.js)
 
       Group: Filter  {
 
@@ -154,10 +164,39 @@ Group: OpenLayers  {
       Group: SLD  {
 
          File: SLD  (no auto-title, OpenLayers/Format/SLD.js)
+         File: SLD/v1_0_0_GeoServer  (OpenLayers/Format/SLD/v1_0_0_GeoServer.js)
          File: v1  (no auto-title, OpenLayers/Format/SLD/v1.js)
          File: v1_0_0  (no auto-title, OpenLayers/Format/SLD/v1_0_0.js)
          }  # Group: SLD
 
+      File: GeoJSON  (no auto-title, OpenLayers/Format/GeoJSON.js)
+      File: GeoRSS  (no auto-title, OpenLayers/Format/GeoRSS.js)
+      File: GPX  (no auto-title, OpenLayers/Format/GPX.js)
+      File: JSON  (no auto-title, OpenLayers/Format/JSON.js)
+      File: KML  (no auto-title, OpenLayers/Format/KML.js)
+      File: OGCExceptionReport  (no auto-title, OpenLayers/Format/OGCExceptionReport.js)
+      File: OSM  (no auto-title, OpenLayers/Format/OSM.js)
+
+      Group: OWSCommon  {
+
+         File: OWSCommon  (no auto-title, OpenLayers/Format/OWSCommon.js)
+         File: v1  (no auto-title, OpenLayers/Format/OWSCommon/v1.js)
+         File: v1_0_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_0_0.js)
+         File: v1_1_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_1_0.js)
+         }  # Group: OWSCommon
+
+      File: OWSContext  (no auto-title, OpenLayers/Format/OWSContext.js)
+      File: OWSContext.v0_3_1  (no auto-title, OpenLayers/Format/OWSContext/v0_3_1.js)
+      File: QueryStringFilter  (no auto-title, OpenLayers/Format/QueryStringFilter.js)
+      File: SOSCapabilities  (no auto-title, OpenLayers/Format/SOSCapabilities.js)
+      File: SOSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/SOSCapabilities/v1_0_0.js)
+      File: SOSGetFeatureOfInterest  (no auto-title, OpenLayers/Format/SOSGetFeatureOfInterest.js)
+      File: SOSGetObservation  (no auto-title, OpenLayers/Format/SOSGetObservation.js)
+      File: Text  (no auto-title, OpenLayers/Format/Text.js)
+      File: VersionedOGC  (OpenLayers/Format/XML/VersionedOGC.js)
+      File: WCSGetCoverage version 1.1.0  (no auto-title, OpenLayers/Format/WCSGetCoverage.js)
+      File: WFS  (no auto-title, OpenLayers/Format/WFS.js)
+
       Group: WFSCapabilities  {
 
          File: WFSCapabilities  (no auto-title, OpenLayers/Format/WFSCapabilities.js)
@@ -200,59 +239,19 @@ Group: OpenLayers  {
          File: v1_1  (no auto-title, OpenLayers/Format/WMSDescribeLayer/v1_1.js)
          }  # Group: WMSDescribeLayer
 
-      Group: Format  {
-
-         File: ArcXML  (no auto-title, OpenLayers/Format/ArcXML.js)
-         File: ArcXML.Features  (no auto-title, OpenLayers/Format/ArcXML/Features.js)
-         File: Atom  (no auto-title, OpenLayers/Format/Atom.js)
-         File: Context  (no auto-title, OpenLayers/Format/Context.js)
-         File: CQL  (no auto-title, OpenLayers/Format/CQL.js)
-         File: CSWGetDomain  (no auto-title, OpenLayers/Format/CSWGetDomain.js)
-         File: CSWGetDomain.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetDomain/v2_0_2.js)
-         File: CSWGetRecords  (no auto-title, OpenLayers/Format/CSWGetRecords.js)
-         File: CSWGetRecords.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetRecords/v2_0_2.js)
-         File: GeoJSON  (no auto-title, OpenLayers/Format/GeoJSON.js)
-         File: GeoRSS  (no auto-title, OpenLayers/Format/GeoRSS.js)
-         File: GPX  (no auto-title, OpenLayers/Format/GPX.js)
-         File: JSON  (no auto-title, OpenLayers/Format/JSON.js)
-         File: KML  (no auto-title, OpenLayers/Format/KML.js)
-         File: OGCExceptionReport  (no auto-title, OpenLayers/Format/OGCExceptionReport.js)
-         File: OSM  (no auto-title, OpenLayers/Format/OSM.js)
-         File: OWSCommon  (no auto-title, OpenLayers/Format/OWSCommon.js)
-
-         Group: OWSCommon  {
-
-            File: v1  (no auto-title, OpenLayers/Format/OWSCommon/v1.js)
-            File: v1_0_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_0_0.js)
-            File: v1_1_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_1_0.js)
-            }  # Group: OWSCommon
-
-         File: OWSContext  (no auto-title, OpenLayers/Format/OWSContext.js)
-         File: OWSContext.v0_3_1  (no auto-title, OpenLayers/Format/OWSContext/v0_3_1.js)
-         File: QueryStringFilter  (no auto-title, OpenLayers/Format/QueryStringFilter.js)
-         File: SOSCapabilities  (no auto-title, OpenLayers/Format/SOSCapabilities.js)
-         File: SOSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/SOSCapabilities/v1_0_0.js)
-         File: SOSGetFeatureOfInterest  (no auto-title, OpenLayers/Format/SOSGetFeatureOfInterest.js)
-         File: SOSGetObservation  (no auto-title, OpenLayers/Format/SOSGetObservation.js)
-         File: Text  (no auto-title, OpenLayers/Format/Text.js)
-         File: VersionedOGC  (OpenLayers/Format/XML/VersionedOGC.js)
-         File: WCSGetCoverage version 1.1.0  (no auto-title, OpenLayers/Format/WCSGetCoverage.js)
-         File: WFS  (no auto-title, OpenLayers/Format/WFS.js)
-         File: WFSDescribeFeatureType  (no auto-title, OpenLayers/Format/WFSDescribeFeatureType.js)
-         File: WKT  (no auto-title, OpenLayers/Format/WKT.js)
-         File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Format/WMSGetFeatureInfo.js)
-         File: WMTSCapabilities  (no auto-title, OpenLayers/Format/WMTSCapabilities.js)
-         File: WMTSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WMTSCapabilities/v1_0_0.js)
-         File: WPSCapabilities  (no auto-title, OpenLayers/Format/WPSCapabilities.js)
-         File: WPSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WPSCapabilities/v1_0_0.js)
-         File: WPSDescribeProcess  (no auto-title, OpenLayers/Format/WPSDescribeProcess.js)
-         File: WPSExecute version 1.0.0  (no auto-title, OpenLayers/Format/WPSExecute.js)
-         File: XLS  (no auto-title, OpenLayers/Format/XLS.js)
-         File: XLS.v1  (no auto-title, OpenLayers/Format/XLS/v1.js)
-         File: XLS.v1_1_0  (no auto-title, OpenLayers/Format/XLS/v1_1_0.js)
-         File: XML  (no auto-title, OpenLayers/Format/XML.js)
-         }  # Group: Format
-
+      File: WFSDescribeFeatureType  (no auto-title, OpenLayers/Format/WFSDescribeFeatureType.js)
+      File: WKT  (no auto-title, OpenLayers/Format/WKT.js)
+      File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Format/WMSGetFeatureInfo.js)
+      File: WMTSCapabilities  (no auto-title, OpenLayers/Format/WMTSCapabilities.js)
+      File: WMTSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WMTSCapabilities/v1_0_0.js)
+      File: WPSCapabilities  (no auto-title, OpenLayers/Format/WPSCapabilities.js)
+      File: WPSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WPSCapabilities/v1_0_0.js)
+      File: WPSDescribeProcess  (no auto-title, OpenLayers/Format/WPSDescribeProcess.js)
+      File: WPSExecute version 1.0.0  (no auto-title, OpenLayers/Format/WPSExecute.js)
+      File: XLS  (no auto-title, OpenLayers/Format/XLS.js)
+      File: XLS.v1  (no auto-title, OpenLayers/Format/XLS/v1.js)
+      File: XLS.v1_1_0  (no auto-title, OpenLayers/Format/XLS/v1_1_0.js)
+      File: XML  (no auto-title, OpenLayers/Format/XML.js)
       }  # Group: Format
 
    Group: Geometry  {
@@ -267,7 +266,6 @@ Group: OpenLayers  {
       File: MultiPolygon  (no auto-title, OpenLayers/Geometry/MultiPolygon.js)
       File: Point  (no auto-title, OpenLayers/Geometry/Point.js)
       File: Polygon  (no auto-title, OpenLayers/Geometry/Polygon.js)
-      File: Rectangle  (no auto-title, OpenLayers/Geometry/Rectangle.js)
       }  # Group: Geometry
 
    Group: Handler  {
@@ -287,9 +285,6 @@ Group: OpenLayers  {
       File: RegularPolygon  (no auto-title, OpenLayers/Handler/RegularPolygon.js)
       }  # Group: Handler
 
-   File: Icon  (no auto-title, OpenLayers/Icon.js)
-   File: Kinetic  (no auto-title, OpenLayers/Kinetic.js)
-
    Group: Lang  {
 
       File: Lang  (no auto-title, OpenLayers/Lang.js)
@@ -328,6 +323,7 @@ Group: OpenLayers  {
       File: nn  (no auto-title, OpenLayers/Lang/nn.js)
       File: oc  (no auto-title, OpenLayers/Lang/oc.js)
       File: pt  (no auto-title, OpenLayers/Lang/pt.js)
+      File: pl  (no auto-title, OpenLayers/Lang/pl.js)
       File: pt-BR  (no auto-title, OpenLayers/Lang/pt-BR.js)
       File: ru  (no auto-title, OpenLayers/Lang/ru.js)
       File: sk  (no auto-title, OpenLayers/Lang/sk.js)
@@ -341,48 +337,45 @@ Group: OpenLayers  {
    Group: Layer  {
 
       File: Layer  (no auto-title, OpenLayers/Layer.js)
-      File: ArcGISCache.js  (no auto-title, OpenLayers/Layer/ArcGISCache.js)
-      File: ArcGIS93Rest  (no auto-title, OpenLayers/Layer/ArcGIS93Rest.js)
-      File: ArcIMS  (no auto-title, OpenLayers/Layer/ArcIMS.js)
-      File: Bing  (no auto-title, OpenLayers/Layer/Bing.js)
-      File: Boxes  (no auto-title, OpenLayers/Layer/Boxes.js)
-      File: EventPane  (no auto-title, OpenLayers/Layer/EventPane.js)
-      File: FixedZoomLevels  (no auto-title, OpenLayers/Layer/FixedZoomLevels.js)
-      File: GeoRSS  (no auto-title, OpenLayers/Layer/GeoRSS.js)
-      File: GML  (no auto-title, OpenLayers/Layer/GML.js)
-      File: Google  (no auto-title, OpenLayers/Layer/Google.js)
-      File: Google.v3  (no auto-title, OpenLayers/Layer/Google/v3.js)
-      File: Grid  (no auto-title, OpenLayers/Layer/Grid.js)
-      File: HTTPRequest  (no auto-title, OpenLayers/Layer/HTTPRequest.js)
-      File: Image  (no auto-title, OpenLayers/Layer/Image.js)
-      File: KaMap  (no auto-title, OpenLayers/Layer/KaMap.js)
-      File: KaMapCache  (no auto-title, OpenLayers/Layer/KaMapCache.js)
-      File: MapGuide  (no auto-title, OpenLayers/Layer/MapGuide.js)
-      File: MapServer  (no auto-title, OpenLayers/Layer/MapServer.js)
-      File: MapServer.Untiled  (no auto-title, OpenLayers/Layer/MapServer/Untiled.js)
-      File: Markers  (no auto-title, OpenLayers/Layer/Markers.js)
-      File: MultiMap  (no auto-title, OpenLayers/Layer/MultiMap.js)
-      File: PointGrid  (no auto-title, OpenLayers/Layer/PointGrid.js)
-      File: PointTrack  (no auto-title, OpenLayers/Layer/PointTrack.js)
-      File: SphericalMercator  (no auto-title, OpenLayers/Layer/SphericalMercator.js)
-      File: Text  (no auto-title, OpenLayers/Layer/Text.js)
-      File: TileCache  (no auto-title, OpenLayers/Layer/TileCache.js)
-      File: TMS  (no auto-title, OpenLayers/Layer/TMS.js)
-      File: Vector  (no auto-title, OpenLayers/Layer/Vector.js)
-      File: Vector.RootContainer  (no auto-title, OpenLayers/Layer/Vector/RootContainer.js)
-      File: VirtualEarth  (no auto-title, OpenLayers/Layer/VirtualEarth.js)
-      File: WFS  (no auto-title, OpenLayers/Layer/WFS.js)
-      File: WMS  (no auto-title, OpenLayers/Layer/WMS.js)
-      File: WMS.Untiled  (no auto-title, OpenLayers/Layer/WMS/Untiled.js)
-      File: WMS.Post  (no auto-title, OpenLayers/Layer/WMS/Post.js)
-      File: WMTS  (no auto-title, OpenLayers/Layer/WMTS.js)
-      File: WorldWind  (no auto-title, OpenLayers/Layer/WorldWind.js)
-      File: XYZ  (no auto-title, OpenLayers/Layer/XYZ.js)
-      File: Yahoo  (no auto-title, OpenLayers/Layer/Yahoo.js)
-      File: Zoomify  (no auto-title, OpenLayers/Layer/Zoomify.js)
-      }  # Group: Layer
 
-   File: Map  (no auto-title, OpenLayers/Map.js)
+      Group: Layer  {
+
+         File: ArcGISCache.js  (no auto-title, OpenLayers/Layer/ArcGISCache.js)
+         File: ArcGIS93Rest  (no auto-title, OpenLayers/Layer/ArcGIS93Rest.js)
+         File: ArcIMS  (no auto-title, OpenLayers/Layer/ArcIMS.js)
+         File: Bing  (no auto-title, OpenLayers/Layer/Bing.js)
+         File: Boxes  (no auto-title, OpenLayers/Layer/Boxes.js)
+         File: EventPane  (no auto-title, OpenLayers/Layer/EventPane.js)
+         File: FixedZoomLevels  (no auto-title, OpenLayers/Layer/FixedZoomLevels.js)
+         File: GeoRSS  (no auto-title, OpenLayers/Layer/GeoRSS.js)
+         File: Google  (no auto-title, OpenLayers/Layer/Google.js)
+         File: Google.v3  (no auto-title, OpenLayers/Layer/Google/v3.js)
+         File: Grid  (no auto-title, OpenLayers/Layer/Grid.js)
+         File: HTTPRequest  (no auto-title, OpenLayers/Layer/HTTPRequest.js)
+         File: Image  (no auto-title, OpenLayers/Layer/Image.js)
+         File: KaMap  (no auto-title, OpenLayers/Layer/KaMap.js)
+         File: KaMapCache  (no auto-title, OpenLayers/Layer/KaMapCache.js)
+         File: MapGuide  (no auto-title, OpenLayers/Layer/MapGuide.js)
+         File: MapServer  (no auto-title, OpenLayers/Layer/MapServer.js)
+         File: Markers  (no auto-title, OpenLayers/Layer/Markers.js)
+         File: OSM  (no auto-title, OpenLayers/Layer/OSM.js)
+         File: PointGrid  (no auto-title, OpenLayers/Layer/PointGrid.js)
+         File: PointTrack  (no auto-title, OpenLayers/Layer/PointTrack.js)
+         File: SphericalMercator  (no auto-title, OpenLayers/Layer/SphericalMercator.js)
+         File: Text  (no auto-title, OpenLayers/Layer/Text.js)
+         File: TileCache  (no auto-title, OpenLayers/Layer/TileCache.js)
+         File: TMS  (no auto-title, OpenLayers/Layer/TMS.js)
+         File: Vector  (no auto-title, OpenLayers/Layer/Vector.js)
+         File: Vector.RootContainer  (no auto-title, OpenLayers/Layer/Vector/RootContainer.js)
+         File: WMS  (no auto-title, OpenLayers/Layer/WMS.js)
+         File: WMTS  (no auto-title, OpenLayers/Layer/WMTS.js)
+         File: WorldWind  (no auto-title, OpenLayers/Layer/WorldWind.js)
+         File: XYZ  (no auto-title, OpenLayers/Layer/XYZ.js)
+         File: Zoomify  (no auto-title, OpenLayers/Layer/Zoomify.js)
+         File: UTFGrid  (OpenLayers/Layer/UTFGrid.js)
+         }  # Group: Layer
+
+      }  # Group: Layer
 
    Group: Marker  {
 
@@ -399,18 +392,19 @@ Group: OpenLayers  {
       File: FramedCloud  (no auto-title, OpenLayers/Popup/FramedCloud.js)
       }  # Group: Popup
 
-   File: Projection  (no auto-title, OpenLayers/Projection.js)
-
    Group: Protocol  {
 
       File: Protocol  (no auto-title, OpenLayers/Protocol.js)
-      File: HTTP  (no auto-title, OpenLayers/Protocol/HTTP.js)
 
-      Group: SQL  {
+      Group: Protocol  {
 
-         File: SQL  (no auto-title, OpenLayers/Protocol/SQL.js)
-         File: Gears  (no auto-title, OpenLayers/Protocol/SQL/Gears.js)
-         }  # Group: SQL
+         File: CSW  (OpenLayers/Protocol/CSW.js)
+         File: CSW.v2_0_2  (OpenLayers/Protocol/CSW/v2_0_2.js)
+         File: HTTP  (no auto-title, OpenLayers/Protocol/HTTP.js)
+         File: Script  (no auto-title, OpenLayers/Protocol/Script.js)
+         File: SOS.DEFAULTS  (no auto-title, OpenLayers/Protocol/SOS.js)
+         File: SOS.v1_0_0  (no auto-title, OpenLayers/Protocol/SOS/v1_0_0.js)
+         }  # Group: Protocol
 
       Group: WFS  {
 
@@ -420,9 +414,6 @@ Group: OpenLayers  {
          File: v1_1_0  (no auto-title, OpenLayers/Protocol/WFS/v1_1_0.js)
          }  # Group: WFS
 
-      File: Script  (no auto-title, OpenLayers/Protocol/Script.js)
-      File: SOS.DEFAULTS  (no auto-title, OpenLayers/Protocol/SOS.js)
-      File: SOS.v1_0_0  (no auto-title, OpenLayers/Protocol/SOS/v1_0_0.js)
       }  # Group: Protocol
 
    Group: Renderer  {
@@ -430,9 +421,7 @@ Group: OpenLayers  {
       File: Renderer  (no auto-title, OpenLayers/Renderer.js)
       File: Canvas  (no auto-title, OpenLayers/Renderer/Canvas.js)
       File: ElementsIndexer  (no auto-title, OpenLayers/Renderer/Elements.js)
-      File: NG  (no auto-title, OpenLayers/Renderer/NG.js)
       File: SVG  (no auto-title, OpenLayers/Renderer/SVG.js)
-      File: SVG2  (no auto-title, OpenLayers/Renderer/SVG2.js)
       File: VML  (no auto-title, OpenLayers/Renderer/VML.js)
       }  # Group: Renderer
 
@@ -442,9 +431,6 @@ Group: OpenLayers  {
       File: XMLHttpRequest  (no auto-title, OpenLayers/Request/XMLHttpRequest.js)
       }  # Group: Request
 
-   File: SingleFile.js  (no auto-title, OpenLayers/SingleFile.js)
-   File: Rule  (no auto-title, OpenLayers/Rule.js)
-
    Group: Strategy  {
 
       File: Strategy  (no auto-title, OpenLayers/Strategy.js)
@@ -457,10 +443,6 @@ Group: OpenLayers  {
       File: Save  (no auto-title, OpenLayers/Strategy/Save.js)
       }  # Group: Strategy
 
-   File: Style  (no auto-title, OpenLayers/Style.js)
-   File: Style2  (no auto-title, OpenLayers/Style2.js)
-   File: StyleMap  (no auto-title, OpenLayers/StyleMap.js)
-
    Group: Symbolizer  {
 
       File: Symbolizer  (no auto-title, OpenLayers/Symbolizer.js)
@@ -476,11 +458,31 @@ Group: OpenLayers  {
       File: Tile  (no auto-title, OpenLayers/Tile.js)
       File: Image  (no auto-title, OpenLayers/Tile/Image.js)
       File: Image.IFrame  (no auto-title, OpenLayers/Tile/Image/IFrame.js)
-      File: WFS  (no auto-title, OpenLayers/Tile/WFS.js)
+      File: UTFGrid  (OpenLayers/Tile/UTFGrid.js)
       }  # Group: Tile
 
-   File: Tween  (no auto-title, OpenLayers/Tween.js)
-   File: Util  (no auto-title, OpenLayers/Util.js)
+   File: Deprecated  (no auto-title, deprecated.js)
+
+   Group: OpenLayers  {
+
+      File: Console  (no auto-title, OpenLayers/Console.js)
+      File: Events  (no auto-title, OpenLayers/Events.js)
+      File: Icon  (no auto-title, OpenLayers/Icon.js)
+      File: Map  (no auto-title, OpenLayers/Map.js)
+      File: OpenLayers.Animation  (OpenLayers/Animation.js)
+      File: OpenLayers.Events.buttonclick  (OpenLayers/Events/buttonclick.js)
+      File: OpenLayers.Kinetic  (OpenLayers/Kinetic.js)
+      File: Projection  (no auto-title, OpenLayers/Projection.js)
+      File: Rule  (no auto-title, OpenLayers/Rule.js)
+      File: SingleFile.js  (no auto-title, OpenLayers/SingleFile.js)
+      File: Spherical  (OpenLayers/Spherical.js)
+      File: Style  (no auto-title, OpenLayers/Style.js)
+      File: Style2  (no auto-title, OpenLayers/Style2.js)
+      File: StyleMap  (no auto-title, OpenLayers/StyleMap.js)
+      File: Tween  (no auto-title, OpenLayers/Tween.js)
+      File: Util  (no auto-title, OpenLayers/Util.js)
+      }  # Group: OpenLayers
+
    }  # Group: OpenLayers
 
 Group: Index  {
diff --git a/doc/authors.txt b/authors.txt
similarity index 100%
rename from doc/authors.txt
rename to authors.txt
diff --git a/build/OpenLayers.js b/build/OpenLayers.js
deleted file mode 100644
index 9523007..0000000
--- a/build/OpenLayers.js
+++ /dev/null
@@ -1,2885 +0,0 @@
-/*
-
-  OpenLayers.js -- OpenLayers Map Viewer Library
-
-  Copyright 2005-2011 OpenLayers Contributors, released under the FreeBSD
-  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:
-
-  (For uncompressed versions of the code used please see the
-  OpenLayers SVN repository: <http://openlayers.org/>)
-
-*/
-
-/* Contains portions of Prototype.js:
- *
- * Prototype JavaScript framework, version 1.4.0
- *  (c) 2005 Sam Stephenson <sam at conio.net>
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
- *--------------------------------------------------------------------------*/
-
-/**  
-*  
-*  Contains portions of Rico <http://openrico.org/>
-* 
-*  Copyright 2005 Sabre Airline Solutions  
-*  
-*  Licensed under the Apache License, Version 2.0 (the "License"); you
-*  may not use this file except in compliance with the License. You
-*  may obtain a copy of the License at
-*  
-*         http://www.apache.org/licenses/LICENSE-2.0  
-*  
-*  Unless required by applicable law or agreed to in writing, software
-*  distributed under the License is distributed on an "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-*  implied. See the License for the specific language governing
-*  permissions and limitations under the License. 
-*
-**/
-
-/**
- * Contains XMLHttpRequest.js <http://code.google.com/p/xmlhttprequest/>
- * Copyright 2007 Sergey Ilinsky (http://www.ilinsky.com)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- */
-
-/**
- * Contains portions of Gears <http://code.google.com/apis/gears/>
- *
- * Copyright 2007, Google Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  1. Redistributions of source code must retain the above copyright notice,
- *     this list of conditions and the following disclaimer.
- *  2. 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.
- *  3. Neither the name of Google Inc. nor the names of its contributors may be
- *     used to endorse or promote products derived from this software without
- *     specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- *
- * Sets up google.gears.*, which is *the only* supported way to access Gears.
- *
- * Circumvent this file at your own risk!
- *
- * In the future, Gears may automatically define google.gears.* without this
- * file. Gears may use these objects to transparently fix bugs and compatibility
- * 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.
- */(function(){if(window.google&&google.gears){return;}
-var factory=null;if(typeof GearsFactory!='undefined'){factory=new GearsFactory();}else{try{factory=new ActiveXObject('Gears.Factory');if(factory.getBuildInfo().indexOf('ie_mobile')!=-1){factory.privateSetGlobalObject(this);}}catch(e){if((typeof navigator.mimeTypes!='undefined')&&navigator.mimeTypes["application/x-googlegears"]){factory=document.createElement("object");factory.style.display="none";factory.width=0;factory.height=0;factory.type="application/x-googlegears";document.documentE [...]
-if(!factory){return;}
-if(!window.google){google={};}
-if(!google.gears){google.gears={factory:factory};}})();var OpenLayers={VERSION_NUMBER:"Release 2.11",singleFile:true,_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;});})()};OpenLayers.Class=function(){var len=arguments.length;var P=arguments[0];var F=arguments[len-1];var C=typeof F.initialize=="function"?F.initialize:function(){P.prototype.initialize.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;}
-return C;};OpenLayers.Class.isPrototype=function(){};OpenLayers.Class.create=function(){return function(){if(arguments&&arguments[0]!=OpenLayers.Class.isPrototype){this.initialize.apply(this,arguments);}};};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;};OpenLayers.inherit=function(C,P){var F=function(){};F.prototype=P.prototype;C.prototype=new F; [...]
-OpenLayers.Util.extend(C.prototype,o);}};OpenLayers.Util=OpenLayers.Util||{};OpenLayers.Util.extend=function(destination,source){destination=destination||{};if(source){for(var property in source){var value=source[property];if(value!==undefined){destination[property]=value;}}
-var sourceIsEvt=typeof window.Event=="function"&&source instanceof window.Event;if(!sourceIsEvt&&source.hasOwnProperty&&source.hasOwnProperty("toString")){destination.toString=source.toString;}}
-return destination;};OpenLayers.Protocol=OpenLayers.Class({format:null,options:null,autoDestroy:true,defaultFilter:null,initialize:function(options){options=options||{};OpenLayers.Util.extend(this,options);this.options=options;},mergeWithDefaultFilter:function(filter){var merged;if(filter&&this.defaultFilter){merged=new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.AND,filters:[this.defaultFilter,filter]});}else{merged=filter||this.defaultFilter||undefined;}
-return merged;},destroy:function(){this.options=null;this.format=null;},read:function(options){options=options||{};options.filter=this.mergeWithDefaultFilter(options.filter);},create:function(){},update:function(){},"delete":function(){},commit:function(){},abort:function(response){},createCallback:function(method,response,options){return OpenLayers.Function.bind(function(){method.apply(this,[response,options]);},this);},CLASS_NAME:"OpenLayers.Protocol"});OpenLayers.Protocol.Response=Ope [...]
-return OpenLayers.Lang.code;},setCode:function(code){var lang;if(!code){code=(OpenLayers.BROWSER_NAME=="msie")?navigator.userLanguage:navigator.language;}
-var parts=code.split('-');parts[0]=parts[0].toLowerCase();if(typeof OpenLayers.Lang[parts[0]]=="object"){lang=parts[0];}
-if(parts[1]){var testLang=parts[0]+'-'+parts[1].toUpperCase();if(typeof OpenLayers.Lang[testLang]=="object"){lang=testLang;}}
-if(!lang){OpenLayers.Console.warn('Failed to find OpenLayers.Lang.'+parts.join("-")+' dictionary, falling back to default language');lang=OpenLayers.Lang.defaultCode;}
-OpenLayers.Lang.code=lang;},translate:function(key,context){var dictionary=OpenLayers.Lang[OpenLayers.Lang.getCode()];var message=dictionary&&dictionary[key];if(!message){message=key;}
-if(context){message=OpenLayers.String.format(message,context);}
-return message;}};OpenLayers.i18n=OpenLayers.Lang.translate;OpenLayers.String={startsWith:function(str,sub){return(str.indexOf(sub)==0);},contains:function(str,sub){return(str.indexOf(sub)!=-1);},trim:function(str){return str.replace(/^\s\s*/,'').replace(/\s\s*$/,'');},camelize:function(str){var oStringList=str.split('-');var camelizedString=oStringList[0];for(var i=1,len=oStringList.length;i<len;i++){var s=oStringList[i];camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);}
-return camelizedString;},format:function(template,context,args){if(!context){context=window;}
-var replacer=function(str,match){var replacement;var subs=match.split(/\.+/);for(var i=0;i<subs.length;i++){if(i==0){replacement=context;}
-replacement=replacement[subs[i]];}
-if(typeof replacement=="function"){replacement=args?replacement.apply(null,args):replacement();}
-if(typeof replacement=='undefined'){return'undefined';}else{return replacement;}};return template.replace(OpenLayers.String.tokenRegEx,replacer);},tokenRegEx:/\$\{([\w.]+?)\}/g,numberRegEx:/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/,isNumeric:function(value){return OpenLayers.String.numberRegEx.test(value);},numericIf:function(value){return OpenLayers.String.isNumeric(value)?parseFloat(value):value;}};if(!String.prototype.startsWith){String.prototype.startsWith=function(sStart){Op [...]
-if(!String.prototype.contains){String.prototype.contains=function(str){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'OpenLayers.String.contains'}));return OpenLayers.String.contains(this,str);};}
-if(!String.prototype.trim){String.prototype.trim=function(){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'OpenLayers.String.trim'}));return OpenLayers.String.trim(this);};}
-if(!String.prototype.camelize){String.prototype.camelize=function(){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'OpenLayers.String.camelize'}));return OpenLayers.String.camelize(this);};}
-OpenLayers.Number={decimalSeparator:".",thousandsSeparator:",",limitSigDigs:function(num,sig){var fig=0;if(sig>0){fig=parseFloat(num.toPrecision(sig));}
-return fig;},format:function(num,dec,tsep,dsep){dec=(typeof dec!="undefined")?dec:0;tsep=(typeof tsep!="undefined")?tsep:OpenLayers.Number.thousandsSeparator;dsep=(typeof dsep!="undefined")?dsep:OpenLayers.Number.decimalSeparator;if(dec!=null){num=parseFloat(num.toFixed(dec));}
-var parts=num.toString().split(".");if(parts.length==1&&dec==null){dec=0;}
-var integer=parts[0];if(tsep){var thousands=/(-?[0-9]+)([0-9]{3})/;while(thousands.test(integer)){integer=integer.replace(thousands,"$1"+tsep+"$2");}}
-var str;if(dec==0){str=integer;}else{var rem=parts.length>1?parts[1]:"0";if(dec!=null){rem=rem+new Array(dec-rem.length+1).join("0");}
-str=integer+dsep+rem;}
-return str;}};if(!Number.prototype.limitSigDigs){Number.prototype.limitSigDigs=function(sig){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'OpenLayers.Number.limitSigDigs'}));return OpenLayers.Number.limitSigDigs(this,sig);};}
-OpenLayers.Function={bind:function(func,object){var args=Array.prototype.slice.apply(arguments,[2]);return function(){var newArgs=args.concat(Array.prototype.slice.apply(arguments,[0]));return func.apply(object,newArgs);};},bindAsEventListener:function(func,object){return function(event){return func.call(object,event||window.event);};},False:function(){return false;},True:function(){return true;},Void:function(){}};if(!Function.prototype.bind){Function.prototype.bind=function(){OpenLayer [...]
-if(!Function.prototype.bindAsEventListener){Function.prototype.bindAsEventListener=function(object){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'OpenLayers.Function.bindAsEventListener'}));return OpenLayers.Function.bindAsEventListener(this,object);};}
-OpenLayers.Array={filter:function(array,callback,caller){var selected=[];if(Array.prototype.filter){selected=array.filter(callback,caller);}else{var len=array.length;if(typeof callback!="function"){throw new TypeError();}
-for(var i=0;i<len;i++){if(i in array){var val=array[i];if(callback.call(caller,val,i,array)){selected.push(val);}}}}
-return selected;}};OpenLayers.Bounds=OpenLayers.Class({left:null,bottom:null,right:null,top:null,centerLonLat:null,initialize:function(left,bottom,right,top){if(left!=null){this.left=OpenLayers.Util.toFloat(left);}
-if(bottom!=null){this.bottom=OpenLayers.Util.toFloat(bottom);}
-if(right!=null){this.right=OpenLayers.Util.toFloat(right);}
-if(top!=null){this.top=OpenLayers.Util.toFloat(top);}},clone:function(){return new OpenLayers.Bounds(this.left,this.bottom,this.right,this.top);},equals:function(bounds){var equals=false;if(bounds!=null){equals=((this.left==bounds.left)&&(this.right==bounds.right)&&(this.top==bounds.top)&&(this.bottom==bounds.bottom));}
-return equals;},toString:function(){return[this.left,this.bottom,this.right,this.top].join(",");},toArray:function(reverseAxisOrder){if(reverseAxisOrder===true){return[this.bottom,this.left,this.top,this.right];}else{return[this.left,this.bottom,this.right,this.top];}},toBBOX:function(decimal,reverseAxisOrder){if(decimal==null){decimal=6;}
-var mult=Math.pow(10,decimal);var xmin=Math.round(this.left*mult)/mult;var ymin=Math.round(this.bottom*mult)/mult;var xmax=Math.round(this.right*mult)/mult;var ymax=Math.round(this.top*mult)/mult;if(reverseAxisOrder===true){return ymin+","+xmin+","+ymax+","+xmax;}else{return xmin+","+ymin+","+xmax+","+ymax;}},toGeometry:function(){return new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing([new OpenLayers.Geometry.Point(this.left,this.bottom),new OpenLayers.Geometry.Point( [...]
-return this.centerLonLat;},scale:function(ratio,origin){if(origin==null){origin=this.getCenterLonLat();}
-var origx,origy;if(origin.CLASS_NAME=="OpenLayers.LonLat"){origx=origin.lon;origy=origin.lat;}else{origx=origin.x;origy=origin.y;}
-var left=(this.left-origx)*ratio+origx;var bottom=(this.bottom-origy)*ratio+origy;var right=(this.right-origx)*ratio+origx;var top=(this.top-origy)*ratio+origy;return new OpenLayers.Bounds(left,bottom,right,top);},add:function(x,y){if((x==null)||(y==null)){var msg=OpenLayers.i18n("boundsAddError");OpenLayers.Console.error(msg);return null;}
-return new OpenLayers.Bounds(this.left+x,this.bottom+y,this.right+x,this.top+y);},extend:function(object){var bounds=null;if(object){switch(object.CLASS_NAME){case"OpenLayers.LonLat":bounds=new OpenLayers.Bounds(object.lon,object.lat,object.lon,object.lat);break;case"OpenLayers.Geometry.Point":bounds=new OpenLayers.Bounds(object.x,object.y,object.x,object.y);break;case"OpenLayers.Bounds":bounds=object;break;}
-if(bounds){this.centerLonLat=null;if((this.left==null)||(bounds.left<this.left)){this.left=bounds.left;}
-if((this.bottom==null)||(bounds.bottom<this.bottom)){this.bottom=bounds.bottom;}
-if((this.right==null)||(bounds.right>this.right)){this.right=bounds.right;}
-if((this.top==null)||(bounds.top>this.top)){this.top=bounds.top;}}}},containsLonLat:function(ll,inclusive){return this.contains(ll.lon,ll.lat,inclusive);},containsPixel:function(px,inclusive){return this.contains(px.x,px.y,inclusive);},contains:function(x,y,inclusive){if(inclusive==null){inclusive=true;}
-if(x==null||y==null){return false;}
-x=OpenLayers.Util.toFloat(x);y=OpenLayers.Util.toFloat(y);var contains=false;if(inclusive){contains=((x>=this.left)&&(x<=this.right)&&(y>=this.bottom)&&(y<=this.top));}else{contains=((x>this.left)&&(x<this.right)&&(y>this.bottom)&&(y<this.top));}
-return contains;},intersectsBounds:function(bounds,inclusive){if(inclusive==null){inclusive=true;}
-var intersects=false;var mightTouch=(this.left==bounds.right||this.right==bounds.left||this.top==bounds.bottom||this.bottom==bounds.top);if(inclusive||!mightTouch){var inBottom=(((bounds.bottom>=this.bottom)&&(bounds.bottom<=this.top))||((this.bottom>=bounds.bottom)&&(this.bottom<=bounds.top)));var inTop=(((bounds.top>=this.bottom)&&(bounds.top<=this.top))||((this.top>bounds.bottom)&&(this.top<bounds.top)));var inLeft=(((bounds.left>=this.left)&&(bounds.left<=this.right))||((this.left>=b [...]
-return intersects;},containsBounds:function(bounds,partial,inclusive){if(partial==null){partial=false;}
-if(inclusive==null){inclusive=true;}
-var bottomLeft=this.contains(bounds.left,bounds.bottom,inclusive);var bottomRight=this.contains(bounds.right,bounds.bottom,inclusive);var topLeft=this.contains(bounds.left,bounds.top,inclusive);var topRight=this.contains(bounds.right,bounds.top,inclusive);return(partial)?(bottomLeft||bottomRight||topLeft||topRight):(bottomLeft&&bottomRight&&topLeft&&topRight);},determineQuadrant:function(lonlat){var quadrant="";var center=this.getCenterLonLat();quadrant+=(lonlat.lat<center.lat)?"b":"t";q [...]
-while((newBounds.left+leftTolerance)>=maxExtent.right&&newBounds.right>maxExtent.right){newBounds=newBounds.add(-maxExtent.getWidth(),0);}}
-return newBounds;},CLASS_NAME:"OpenLayers.Bounds"});OpenLayers.Bounds.fromString=function(str,reverseAxisOrder){var bounds=str.split(",");return OpenLayers.Bounds.fromArray(bounds,reverseAxisOrder);};OpenLayers.Bounds.fromArray=function(bbox,reverseAxisOrder){return reverseAxisOrder===true?new OpenLayers.Bounds(parseFloat(bbox[1]),parseFloat(bbox[0]),parseFloat(bbox[3]),parseFloat(bbox[2])):new OpenLayers.Bounds(parseFloat(bbox[0]),parseFloat(bbox[1]),parseFloat(bbox[2]),parseFloat(bbox[ [...]
-var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},hasClass:function(element,name){var names=element.className;return(!!names&&new R [...]
-return element;},removeClass:function(element,name){var names=element.className;if(names){element.className=OpenLayers.String.trim(names.replace(new RegExp("(^|\\s+)"+name+"(\\s+|$)")," "));}
-return element;},toggleClass:function(element,name){if(OpenLayers.Element.hasClass(element,name)){OpenLayers.Element.removeClass(element,name);}else{OpenLayers.Element.addClass(element,name);}
-return element;},getStyle:function(element,style){element=OpenLayers.Util.getElement(element);var value=null;if(element&&element.style){value=element.style[OpenLayers.String.camelize(style)];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css.getPropertyValue(style):null;}else if(element.currentStyle){value=element.currentStyle[OpenLayers.String.camelize(style)];}}
-var positions=['left','top','right','bottom'];if(window.opera&&(OpenLayers.Util.indexOf(positions,style)!=-1)&&(OpenLayers.Element.getStyle(element,'position')=='static')){value='auto';}}
-return value=='auto'?null:value;}};OpenLayers.LonLat=OpenLayers.Class({lon:0.0,lat:0.0,initialize:function(lon,lat){this.lon=OpenLayers.Util.toFloat(lon);this.lat=OpenLayers.Util.toFloat(lat);},toString:function(){return("lon="+this.lon+",lat="+this.lat);},toShortString:function(){return(this.lon+", "+this.lat);},clone:function(){return new OpenLayers.LonLat(this.lon,this.lat);},add:function(lon,lat){if((lon==null)||(lat==null)){var msg=OpenLayers.i18n("lonlatAddError");OpenLayers.Consol [...]
-return new OpenLayers.LonLat(this.lon+OpenLayers.Util.toFloat(lon),this.lat+OpenLayers.Util.toFloat(lat));},equals:function(ll){var equals=false;if(ll!=null){equals=((this.lon==ll.lon&&this.lat==ll.lat)||(isNaN(this.lon)&&isNaN(this.lat)&&isNaN(ll.lon)&&isNaN(ll.lat)));}
-return equals;},transform:function(source,dest){var point=OpenLayers.Projection.transform({'x':this.lon,'y':this.lat},source,dest);this.lon=point.x;this.lat=point.y;return this;},wrapDateLine:function(maxExtent){var newLonLat=this.clone();if(maxExtent){while(newLonLat.lon<maxExtent.left){newLonLat.lon+=maxExtent.getWidth();}
-while(newLonLat.lon>maxExtent.right){newLonLat.lon-=maxExtent.getWidth();}}
-return newLonLat;},CLASS_NAME:"OpenLayers.LonLat"});OpenLayers.LonLat.fromString=function(str){var pair=str.split(",");return new OpenLayers.LonLat(pair[0],pair[1]);};OpenLayers.LonLat.fromArray=function(arr){var gotArr=OpenLayers.Util.isArray(arr),lon=gotArr&&arr[0],lat=gotArr&&arr[1];return new OpenLayers.LonLat(lon,lat);};OpenLayers.Pixel=OpenLayers.Class({x:0.0,y:0.0,initialize:function(x,y){this.x=parseFloat(x);this.y=parseFloat(y);},toString:function(){return("x="+this.x+",y="+this [...]
-return equals;},distanceTo:function(px){return Math.sqrt(Math.pow(this.x-px.x,2)+
-Math.pow(this.y-px.y,2));},add:function(x,y){if((x==null)||(y==null)){var msg=OpenLayers.i18n("pixelAddError");OpenLayers.Console.error(msg);return null;}
-return new OpenLayers.Pixel(this.x+x,this.y+y);},offset:function(px){var newPx=this.clone();if(px){newPx=this.add(px.x,px.y);}
-return newPx;},CLASS_NAME:"OpenLayers.Pixel"});OpenLayers.Size=OpenLayers.Class({w:0.0,h:0.0,initialize:function(w,h){this.w=parseFloat(w);this.h=parseFloat(h);},toString:function(){return("w="+this.w+",h="+this.h);},clone:function(){return new OpenLayers.Size(this.w,this.h);},equals:function(sz){var equals=false;if(sz!=null){equals=((this.w==sz.w&&this.h==sz.h)||(isNaN(this.w)&&isNaN(this.h)&&isNaN(sz.w)&&isNaN(sz.h)));}
-return equals;},CLASS_NAME:"OpenLayers.Size"});OpenLayers.Util=OpenLayers.Util||{};OpenLayers.Util.getElement=function(){var elements=[];for(var i=0,len=arguments.length;i<len;i++){var element=arguments[i];if(typeof element=='string'){element=document.getElementById(element);}
-if(arguments.length==1){return element;}
-elements.push(element);}
-return elements;};OpenLayers.Util.isElement=function(o){return!!(o&&o.nodeType===1);};OpenLayers.Util.isArray=function(a){return(Object.prototype.toString.call(a)==='[object Array]');};if(typeof window.$==="undefined"){window.$=OpenLayers.Util.getElement;}
-OpenLayers.Util.removeItem=function(array,item){for(var i=array.length-1;i>=0;i--){if(array[i]==item){array.splice(i,1);}}
-return array;};OpenLayers.Util.clearArray=function(array){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'array = []'}));array.length=0;};OpenLayers.Util.indexOf=function(array,obj){if(typeof array.indexOf=="function"){return array.indexOf(obj);}else{for(var i=0,len=array.length;i<len;i++){if(array[i]==obj){return i;}}
-return-1;}};OpenLayers.Util.modifyDOMElement=function(element,id,px,sz,position,border,overflow,opacity){if(id){element.id=id;}
-if(px){element.style.left=px.x+"px";element.style.top=px.y+"px";}
-if(sz){element.style.width=sz.w+"px";element.style.height=sz.h+"px";}
-if(position){element.style.position=position;}
-if(border){element.style.border=border;}
-if(overflow){element.style.overflow=overflow;}
-if(parseFloat(opacity)>=0.0&&parseFloat(opacity)<1.0){element.style.filter='alpha(opacity='+(opacity*100)+')';element.style.opacity=opacity;}else if(parseFloat(opacity)==1.0){element.style.filter='';element.style.opacity='';}};OpenLayers.Util.createDiv=function(id,px,sz,imgURL,position,border,overflow,opacity){var dom=document.createElement('div');if(imgURL){dom.style.backgroundImage='url('+imgURL+')';}
-if(!id){id=OpenLayers.Util.createUniqueID("OpenLayersDiv");}
-if(!position){position="absolute";}
-OpenLayers.Util.modifyDOMElement(dom,id,px,sz,position,border,overflow,opacity);return dom;};OpenLayers.Util.createImage=function(id,px,sz,imgURL,position,border,opacity,delayDisplay){var image=document.createElement("img");if(!id){id=OpenLayers.Util.createUniqueID("OpenLayersDiv");}
-if(!position){position="relative";}
-OpenLayers.Util.modifyDOMElement(image,id,px,sz,position,border,null,opacity);if(delayDisplay){image.style.display="none";OpenLayers.Event.observe(image,"load",OpenLayers.Function.bind(OpenLayers.Util.onImageLoad,image));OpenLayers.Event.observe(image,"error",OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError,image));}
-image.style.alt=id;image.galleryImg="no";if(imgURL){image.src=imgURL;}
-return image;};OpenLayers.Util.setOpacity=function(element,opacity){OpenLayers.Util.modifyDOMElement(element,null,null,null,null,null,null,opacity);};OpenLayers.Util.onImageLoad=function(){if(!this.viewRequestID||(this.map&&this.viewRequestID==this.map.viewRequestID)){this.style.display="";}
-OpenLayers.Element.removeClass(this,"olImageLoadError");};OpenLayers.IMAGE_RELOAD_ATTEMPTS=0;OpenLayers.Util.onImageLoadError=function(){this._attempts=(this._attempts)?(this._attempts+1):1;if(this._attempts<=OpenLayers.IMAGE_RELOAD_ATTEMPTS){var urls=this.urls;if(urls&&OpenLayers.Util.isArray(urls)&&urls.length>1){var src=this.src.toString();var current_url,k;for(k=0;current_url=urls[k];k++){if(src.indexOf(current_url)!=-1){break;}}
-var guess=Math.floor(urls.length*Math.random());var new_url=urls[guess];k=0;while(new_url==current_url&&k++<4){guess=Math.floor(urls.length*Math.random());new_url=urls[guess];}
-this.src=src.replace(current_url,new_url);}else{this.src=this.src;}}else{OpenLayers.Element.addClass(this,"olImageLoadError");}
-this.style.display="";};OpenLayers.Util.alphaHackNeeded=null;OpenLayers.Util.alphaHack=function(){if(OpenLayers.Util.alphaHackNeeded==null){var arVersion=navigator.appVersion.split("MSIE");var version=parseFloat(arVersion[1]);var filter=false;try{filter=!!(document.body.filters);}catch(e){}
-OpenLayers.Util.alphaHackNeeded=(filter&&(version>=5.5)&&(version<7));}
-return OpenLayers.Util.alphaHackNeeded;};OpenLayers.Util.modifyAlphaImageDiv=function(div,id,px,sz,imgURL,position,border,sizing,opacity){OpenLayers.Util.modifyDOMElement(div,id,px,sz,position,null,null,opacity);var img=div.childNodes[0];if(imgURL){img.src=imgURL;}
-OpenLayers.Util.modifyDOMElement(img,div.id+"_innerImage",null,sz,"relative",border);if(OpenLayers.Util.alphaHack()){if(div.style.display!="none"){div.style.display="inline-block";}
-if(sizing==null){sizing="scale";}
-div.style.filter="progid:DXImageTransform.Microsoft"+".AlphaImageLoader(src='"+img.src+"', "+"sizingMethod='"+sizing+"')";if(parseFloat(div.style.opacity)>=0.0&&parseFloat(div.style.opacity)<1.0){div.style.filter+=" alpha(opacity="+div.style.opacity*100+")";}
-img.style.filter="alpha(opacity=0)";}};OpenLayers.Util.createAlphaImageDiv=function(id,px,sz,imgURL,position,border,sizing,opacity,delayDisplay){var div=OpenLayers.Util.createDiv();var img=OpenLayers.Util.createImage(null,null,null,null,null,null,null,false);div.appendChild(img);if(delayDisplay){img.style.display="none";OpenLayers.Event.observe(img,"load",OpenLayers.Function.bind(OpenLayers.Util.onImageLoad,div));OpenLayers.Event.observe(img,"error",OpenLayers.Function.bind(OpenLayers.Ut [...]
-OpenLayers.Util.modifyAlphaImageDiv(div,id,px,sz,imgURL,position,border,sizing,opacity);return div;};OpenLayers.Util.upperCaseObject=function(object){var uObject={};for(var key in object){uObject[key.toUpperCase()]=object[key];}
-return uObject;};OpenLayers.Util.applyDefaults=function(to,from){to=to||{};var fromIsEvt=typeof window.Event=="function"&&from instanceof window.Event;for(var key in from){if(to[key]===undefined||(!fromIsEvt&&from.hasOwnProperty&&from.hasOwnProperty(key)&&!to.hasOwnProperty(key))){to[key]=from[key];}}
-if(!fromIsEvt&&from&&from.hasOwnProperty&&from.hasOwnProperty('toString')&&!to.hasOwnProperty('toString')){to.toString=from.toString;}
-return to;};OpenLayers.Util.getParameterString=function(params){var paramsArray=[];for(var key in params){var value=params[key];if((value!=null)&&(typeof value!='function')){var encodedValue;if(typeof value=='object'&&value.constructor==Array){var encodedItemArray=[];var item;for(var itemIndex=0,len=value.length;itemIndex<len;itemIndex++){item=value[itemIndex];encodedItemArray.push(encodeURIComponent((item===null||item===undefined)?"":item));}
-encodedValue=encodedItemArray.join(",");}
-else{encodedValue=encodeURIComponent(value);}
-paramsArray.push(encodeURIComponent(key)+"="+encodedValue);}}
-return paramsArray.join("&");};OpenLayers.Util.urlAppend=function(url,paramStr){var newUrl=url;if(paramStr){var parts=(url+" ").split(/[?&]/);newUrl+=(parts.pop()===" "?paramStr:parts.length?"&"+paramStr:"?"+paramStr);}
-return newUrl;};OpenLayers.ImgPath='';OpenLayers.Util.getImagesLocation=function(){return OpenLayers.ImgPath||(OpenLayers._getScriptLocation()+"img/");};OpenLayers.Util.Try=function(){var returnValue=null;for(var i=0,len=arguments.length;i<len;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
-return returnValue;};OpenLayers.Util.getXmlNodeValue=function(node){var val=null;OpenLayers.Util.Try(function(){val=node.text;if(!val){val=node.textContent;}
-if(!val){val=node.firstChild.nodeValue;}},function(){val=node.textContent;});return val;};OpenLayers.Util.mouseLeft=function(evt,div){var target=(evt.relatedTarget)?evt.relatedTarget:evt.toElement;while(target!=div&&target!=null){target=target.parentNode;}
-return(target!=div);};OpenLayers.Util.DEFAULT_PRECISION=14;OpenLayers.Util.toFloat=function(number,precision){if(precision==null){precision=OpenLayers.Util.DEFAULT_PRECISION;}
-if(typeof number!=="number"){number=parseFloat(number);}
-return precision===0?number:parseFloat(number.toPrecision(precision));};OpenLayers.Util.rad=function(x){return x*Math.PI/180;};OpenLayers.Util.deg=function(x){return x*180/Math.PI;};OpenLayers.Util.VincentyConstants={a:6378137,b:6356752.3142,f:1/298.257223563};OpenLayers.Util.distVincenty=function(p1,p2){var ct=OpenLayers.Util.VincentyConstants;var a=ct.a,b=ct.b,f=ct.f;var L=OpenLayers.Util.rad(p2.lon-p1.lon);var U1=Math.atan((1-f)*Math.tan(OpenLayers.Util.rad(p1.lat)));var U2=Math.atan( [...]
-(cosU1*sinU2-sinU1*cosU2*cosLambda)*(cosU1*sinU2-sinU1*cosU2*cosLambda));if(sinSigma==0){return 0;}
-var cosSigma=sinU1*sinU2+cosU1*cosU2*cosLambda;var sigma=Math.atan2(sinSigma,cosSigma);var alpha=Math.asin(cosU1*cosU2*sinLambda/sinSigma);var cosSqAlpha=Math.cos(alpha)*Math.cos(alpha);var cos2SigmaM=cosSigma-2*sinU1*sinU2/cosSqAlpha;var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));lambdaP=lambda;lambda=L+(1-C)*f*Math.sin(alpha)*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));}
-if(iterLimit==0){return NaN;}
-var uSq=cosSqAlpha*(a*a-b*b)/(b*b);var A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq)));var deltaSigma=B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-
-B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));var s=b*A*(sigma-deltaSigma);var d=s.toFixed(3)/1000;return d;};OpenLayers.Util.destinationVincenty=function(lonlat,brng,dist){var u=OpenLayers.Util;var ct=u.VincentyConstants;var a=ct.a,b=ct.b,f=ct.f;var lon1=lonlat.lon;var lat1=lonlat.lat;var s=dist;var alpha1=u.rad(brng);var sinAlpha1=Math.sin(alpha1);var cosAlpha1=Math.cos(alpha1);var tanU1=(1-f)*Math.tan(u.rad(lat1));var cosU1=1/Math.sqrt((1+tanU1*tanU1)),sinU1=t [...]
-B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));sigmaP=sigma;sigma=s/(b*A)+deltaSigma;}
-var tmp=sinU1*sinSigma-cosU1*cosSigma*cosAlpha1;var lat2=Math.atan2(sinU1*cosSigma+cosU1*sinSigma*cosAlpha1,(1-f)*Math.sqrt(sinAlpha*sinAlpha+tmp*tmp));var lambda=Math.atan2(sinSigma*sinAlpha1,cosU1*cosSigma-sinU1*sinSigma*cosAlpha1);var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));var L=lambda-(1-C)*f*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));var revAz=Math.atan2(sinAlpha,-tmp);return new OpenLayers.LonLat(lon1+u.deg(L),u.deg(lat2));};OpenLayers.Util.g [...]
-var parameters={};var pairs=paramsString.split(/[&;]/);for(var i=0,len=pairs.length;i<len;++i){var keyValue=pairs[i].split('=');if(keyValue[0]){var key=keyValue[0];try{key=decodeURIComponent(key);}catch(err){key=unescape(key);}
-var value=(keyValue[1]||'').replace(/\+/g," ");try{value=decodeURIComponent(value);}catch(err){value=unescape(value);}
-value=value.split(",");if(value.length==1){value=value[0];}
-parameters[key]=value;}}
-return parameters;};OpenLayers.Util.getArgs=function(url){OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",{'newMethod':'OpenLayers.Util.getParameters'}));return OpenLayers.Util.getParameters(url);};OpenLayers.Util.lastSeqID=0;OpenLayers.Util.createUniqueID=function(prefix){if(prefix==null){prefix="id_";}
-OpenLayers.Util.lastSeqID+=1;return prefix+OpenLayers.Util.lastSeqID;};OpenLayers.INCHES_PER_UNIT={'inches':1.0,'ft':12.0,'mi':63360.0,'m':39.3701,'km':39370.1,'dd':4374754,'yd':36};OpenLayers.INCHES_PER_UNIT["in"]=OpenLayers.INCHES_PER_UNIT.inches;OpenLayers.INCHES_PER_UNIT["degrees"]=OpenLayers.INCHES_PER_UNIT.dd;OpenLayers.INCHES_PER_UNIT["nmi"]=1852*OpenLayers.INCHES_PER_UNIT.m;OpenLayers.METERS_PER_INCH=0.02540005080010160020;OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT,{"Inch" [...]
-var normScale=OpenLayers.Util.normalizeScale(scale);resolution=1/(normScale*OpenLayers.INCHES_PER_UNIT[units]*OpenLayers.DOTS_PER_INCH);}
-return resolution;};OpenLayers.Util.getScaleFromResolution=function(resolution,units){if(units==null){units="degrees";}
-var scale=resolution*OpenLayers.INCHES_PER_UNIT[units]*OpenLayers.DOTS_PER_INCH;return scale;};OpenLayers.Util.safeStopPropagation=function(evt){OpenLayers.Event.stop(evt,true);};OpenLayers.Util.pagePosition=function(forElement){var pos=[0,0];var viewportElement=OpenLayers.Util.getViewportElement();if(!forElement||forElement==window||forElement==viewportElement){return pos;}
-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){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){box=do [...]
-var browser=OpenLayers.BROWSER_NAME;if(browser=="opera"||(browser=="safari"&&OpenLayers.Element.getStyle(forElement,'position')=='absolute')){pos[1]-=document.body.offsetTop;}
-parent=forElement.offsetParent;while(parent&&parent!=document.body){pos[0]-=parent.scrollLeft;if(browser!="opera"||parent.tagName!='TR'){pos[1]-=parent.scrollTop;}
-parent=parent.offsetParent;}}
-return pos;};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;};OpenLayers.Util.isEquivalentUrl=function(url1,url2,options){options=options||{};OpenLayers.Util.applyDefaults(options,{ignoreCase:true,ignorePort80:true,ignoreHash:true});var urlObj1=OpenLayers.Util.createUrlObject(url1,options);var urlObj2=OpenLayers.Util.createUrlObject(url2,options);for(var key in urlObj1){if(key!=="args"){if(urlObj1[key]!=urlObj2[key]){return false;}}}
-for(var key in urlObj1.args){if(urlObj1.args[key]!=urlObj2.args[key]){return false;}
-delete urlObj2.args[key];}
-for(var key in urlObj2.args){return false;}
-return true;};OpenLayers.Util.createUrlObject=function(url,options){options=options||{};if(!(/^\w+:\/\//).test(url)){var loc=window.location;var port=loc.port?":"+loc.port:"";var fullUrl=loc.protocol+"//"+loc.host.split(":").shift()+port;if(url.indexOf("/")===0){url=fullUrl+url;}else{var parts=loc.pathname.split("/");parts.pop();url=fullUrl+parts.join("/")+"/"+url;}}
-if(options.ignoreCase){url=url.toLowerCase();}
-var a=document.createElement('a');a.href=url;var urlObject={};urlObject.host=a.host.split(":").shift();urlObject.protocol=a.protocol;if(options.ignorePort80){urlObject.port=(a.port=="80"||a.port=="0")?"":a.port;}else{urlObject.port=(a.port==""||a.port=="0")?"80":a.port;}
-urlObject.hash=(options.ignoreHash||a.hash==="#")?"":a.hash;var queryString=a.search;if(!queryString){var qMark=url.indexOf("?");queryString=(qMark!=-1)?url.substr(qMark):"";}
-urlObject.args=OpenLayers.Util.getParameters(queryString);urlObject.pathname=(a.pathname.charAt(0)=="/")?a.pathname:"/"+a.pathname;return urlObject;};OpenLayers.Util.removeTail=function(url){var head=null;var qMark=url.indexOf("?");var hashMark=url.indexOf("#");if(qMark==-1){head=(hashMark!=-1)?url.substr(0,hashMark):url;}else{head=(hashMark!=-1)?url.substr(0,Math.min(qMark,hashMark)):url.substr(0,qMark);}
-return head;};OpenLayers.IS_GECKO=(function(){var ua=navigator.userAgent.toLowerCase();return ua.indexOf("webkit")==-1&&ua.indexOf("gecko")!=-1;})();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;})();OpenLayers.Util.getBrowserName=function(){return OpenLayers.BROWSER_NAME;};OpenLayers.Util.getRenderedDimensions=function(contentHTML,size,options){var w,h;var container=document.createElement("div");container.style.visibility="hidden";var containerElement=(options&&options.containerElement)?options.containerElement:document.body;if(size){if(size.w){w=size.w;container.style.width=w+"px";}else if(size.h){h=size.h;container.style.height=h+"px";}}
-if(options&&options.displayClass){container.className=options.displayClass;}
-var content=document.createElement("div");content.innerHTML=contentHTML;content.style.overflow="visible";if(content.childNodes){for(var i=0,l=content.childNodes.length;i<l;i++){if(!content.childNodes[i].style)continue;content.childNodes[i].style.overflow="visible";}}
-container.appendChild(content);containerElement.appendChild(container);var parentHasPositionAbsolute=false;var parent=container.parentNode;while(parent&&parent.tagName.toLowerCase()!="body"){var parentPosition=OpenLayers.Element.getStyle(parent,"position");if(parentPosition=="absolute"){parentHasPositionAbsolute=true;break;}else if(parentPosition&&parentPosition!="static"){break;}
-parent=parent.parentNode;}
-if(!parentHasPositionAbsolute){container.style.position="absolute";}
-if(!w){w=parseInt(content.scrollWidth);container.style.width=w+"px";}
-if(!h){h=parseInt(content.scrollHeight);}
-container.removeChild(content);containerElement.removeChild(container);return new OpenLayers.Size(w,h);};OpenLayers.Util.getScrollbarWidth=function(){var scrollbarWidth=OpenLayers.Util._scrollbarWidth;if(scrollbarWidth==null){var scr=null;var inn=null;var wNoScroll=0;var wScroll=0;scr=document.createElement('div');scr.style.position='absolute';scr.style.top='-1000px';scr.style.left='-1000px';scr.style.width='100px';scr.style.height='50px';scr.style.overflow='hidden';inn=document.createEl [...]
-return scrollbarWidth;};OpenLayers.Util.getFormattedLonLat=function(coordinate,axis,dmsOption){if(!dmsOption){dmsOption='dms';}
-coordinate=(coordinate+540)%360-180;var abscoordinate=Math.abs(coordinate);var coordinatedegrees=Math.floor(abscoordinate);var coordinateminutes=(abscoordinate-coordinatedegrees)/(1/60);var tempcoordinateminutes=coordinateminutes;coordinateminutes=Math.floor(coordinateminutes);var coordinateseconds=(tempcoordinateminutes-coordinateminutes)/(1/60);coordinateseconds=Math.round(coordinateseconds*10);coordinateseconds/=10;if(coordinateseconds>=60){coordinateseconds-=60;coordinateminutes+=1;i [...]
-if(coordinatedegrees<10){coordinatedegrees="0"+coordinatedegrees;}
-var str=coordinatedegrees+"\u00B0";if(dmsOption.indexOf('dm')>=0){if(coordinateminutes<10){coordinateminutes="0"+coordinateminutes;}
-str+=coordinateminutes+"'";if(dmsOption.indexOf('dms')>=0){if(coordinateseconds<10){coordinateseconds="0"+coordinateseconds;}
-str+=coordinateseconds+'"';}}
-if(axis=="lon"){str+=coordinate<0?OpenLayers.i18n("W"):OpenLayers.i18n("E");}else{str+=coordinate<0?OpenLayers.i18n("S"):OpenLayers.i18n("N");}
-return str;};OpenLayers.Format=OpenLayers.Class({options:null,externalProjection:null,internalProjection:null,data:null,keepData:false,initialize:function(options){OpenLayers.Util.extend(this,options);this.options=options;},destroy:function(){},read:function(data){OpenLayers.Console.userError(OpenLayers.i18n("readNotImplemented"));},write:function(object){OpenLayers.Console.userError(OpenLayers.i18n("writeNotImplemented"));},CLASS_NAME:"OpenLayers.Format"});OpenLayers.Format.JSON=OpenLay [...]
-return filter(k,v);}
-object=walk('',object);}}}catch(e){}
-if(this.keepData){this.data=object;}
-return object;},write:function(value,pretty){this.pretty=!!pretty;var json=null;var type=typeof value;if(this.serialize[type]){try{json=(!this.pretty&&this.nativeJSON)?JSON.stringify(value):this.serialize[type].apply(this,[value]);}catch(err){OpenLayers.Console.error("Trouble serializing: "+err);}}
-return json;},writeIndent:function(){var pieces=[];if(this.pretty){for(var i=0;i<this.level;++i){pieces.push(this.indent);}}
-return pieces.join('');},writeNewline:function(){return(this.pretty)?this.newline:'';},writeSpace:function(){return(this.pretty)?this.space:'';},serialize:{'object':function(object){if(object==null){return"null";}
-if(object.constructor==Date){return this.serialize.date.apply(this,[object]);}
-if(object.constructor==Array){return this.serialize.array.apply(this,[object]);}
-var pieces=['{'];this.level+=1;var key,keyJSON,valueJSON;var addComma=false;for(key in object){if(object.hasOwnProperty(key)){keyJSON=OpenLayers.Format.JSON.prototype.write.apply(this,[key,this.pretty]);valueJSON=OpenLayers.Format.JSON.prototype.write.apply(this,[object[key],this.pretty]);if(keyJSON!=null&&valueJSON!=null){if(addComma){pieces.push(',');}
-pieces.push(this.writeNewline(),this.writeIndent(),keyJSON,':',this.writeSpace(),valueJSON);addComma=true;}}}
-this.level-=1;pieces.push(this.writeNewline(),this.writeIndent(),'}');return pieces.join('');},'array':function(array){var json;var pieces=['['];this.level+=1;for(var i=0,len=array.length;i<len;++i){json=OpenLayers.Format.JSON.prototype.write.apply(this,[array[i],this.pretty]);if(json!=null){if(i>0){pieces.push(',');}
-pieces.push(this.writeNewline(),this.writeIndent(),json);}}
-this.level-=1;pieces.push(this.writeNewline(),this.writeIndent(),']');return pieces.join('');},'string':function(string){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};if(/["\\\x00-\x1f]/.test(string)){return'"'+string.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
-c=b.charCodeAt();return'\\u00'+
-Math.floor(c/16).toString(16)+
-(c%16).toString(16);})+'"';}
-return'"'+string+'"';},'number':function(number){return isFinite(number)?String(number):"null";},'boolean':function(bool){return String(bool);},'date':function(date){function format(number){return(number<10)?'0'+number:number;}
-return'"'+date.getFullYear()+'-'+
-format(date.getMonth()+1)+'-'+
-format(date.getDate())+'T'+
-format(date.getHours())+':'+
-format(date.getMinutes())+':'+
-format(date.getSeconds())+'"';}},CLASS_NAME:"OpenLayers.Format.JSON"});OpenLayers.Feature=OpenLayers.Class({layer:null,id:null,lonlat:null,data:null,marker:null,popupClass:null,popup:null,initialize:function(layer,lonlat,data){this.layer=layer;this.lonlat=lonlat;this.data=(data!=null)?data:{};this.id=OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");},destroy:function(){if((this.layer!=null)&&(this.layer.map!=null)){if(this.popup!=null){this.layer.map.removePopup(this.popup);}}
-if(this.layer!=null&&this.marker!=null){this.layer.removeMarker(this.marker);}
-this.layer=null;this.id=null;this.lonlat=null;this.data=null;if(this.marker!=null){this.destroyMarker(this.marker);this.marker=null;}
-if(this.popup!=null){this.destroyPopup(this.popup);this.popup=null;}},onScreen:function(){var onScreen=false;if((this.layer!=null)&&(this.layer.map!=null)){var screenBounds=this.layer.map.getExtent();onScreen=screenBounds.containsLonLat(this.lonlat);}
-return onScreen;},createMarker:function(){if(this.lonlat!=null){this.marker=new OpenLayers.Marker(this.lonlat,this.data.icon);}
-return this.marker;},destroyMarker:function(){this.marker.destroy();},createPopup:function(closeBox){if(this.lonlat!=null){if(!this.popup){var anchor=(this.marker)?this.marker.icon:null;var popupClass=this.popupClass?this.popupClass:OpenLayers.Popup.AnchoredBubble;this.popup=new popupClass(this.id+"_popup",this.lonlat,this.data.popupSize,this.data.popupContentHTML,anchor,closeBox);}
-if(this.data.overflow!=null){this.popup.contentDiv.style.overflow=this.data.overflow;}
-this.popup.feature=this;}
-return this.popup;},destroyPopup:function(){if(this.popup){this.popup.feature=null;this.popup.destroy();this.popup=null;}},CLASS_NAME:"OpenLayers.Feature"});OpenLayers.State={UNKNOWN:'Unknown',INSERT:'Insert',UPDATE:'Update',DELETE:'Delete'};OpenLayers.Feature.Vector=OpenLayers.Class(OpenLayers.Feature,{fid:null,geometry:null,attributes:null,bounds:null,state:null,style:null,url:null,renderIntent:"default",modified:null,initialize:function(geometry,attributes,style){OpenLayers.Feature.pr [...]
-this.style=style?style:null;},destroy:function(){if(this.layer){this.layer.removeFeatures(this);this.layer=null;}
-this.geometry=null;this.modified=null;OpenLayers.Feature.prototype.destroy.apply(this,arguments);},clone:function(){return new OpenLayers.Feature.Vector(this.geometry?this.geometry.clone():null,this.attributes,this.style);},onScreen:function(boundsOnly){var onScreen=false;if(this.layer&&this.layer.map){var screenBounds=this.layer.map.getExtent();if(boundsOnly){var featureBounds=this.geometry.getBounds();onScreen=screenBounds.intersectsBounds(featureBounds);}else{var screenPoly=screenBoun [...]
-return onScreen;},getVisibility:function(){return!(this.style&&this.style.display=='none'||!this.layer||this.layer&&this.layer.styleMap&&this.layer.styleMap.createSymbolizer(this,this.renderIntent).display=='none'||this.layer&&!this.layer.getVisibility());},createMarker:function(){return null;},destroyMarker:function(){},createPopup:function(){return null;},atPoint:function(lonlat,toleranceLon,toleranceLat){var atPoint=false;if(this.geometry){atPoint=this.geometry.atPoint(lonlat,toleranc [...]
-return atPoint;},destroyPopup:function(){},move:function(location){if(!this.layer||!this.geometry.move){return undefined;}
-var pixel;if(location.CLASS_NAME=="OpenLayers.LonLat"){pixel=this.layer.getViewPortPxFromLonLat(location);}else{pixel=location;}
-var lastPixel=this.layer.getViewPortPxFromLonLat(this.geometry.getBounds().getCenterLonLat());var res=this.layer.map.getResolution();this.geometry.move(res*(pixel.x-lastPixel.x),res*(lastPixel.y-pixel.y));this.layer.drawFeature(this);return lastPixel;},toState:function(state){if(state==OpenLayers.State.UPDATE){switch(this.state){case OpenLayers.State.UNKNOWN:case OpenLayers.State.DELETE:this.state=state;break;case OpenLayers.State.UPDATE:case OpenLayers.State.INSERT:break;}}else if(state [...]
-if(this.internalProjection&&this.externalProjection){if(features&&features.CLASS_NAME=="OpenLayers.Feature.Vector"){features.geometry.transform(this.externalProjection,this.internalProjection);}else if(features&&type!="geometrycollection"&&typeof features=="object"){for(var i=0,len=features.length;i<len;i++){var component=features[i];component.geometry.transform(this.externalProjection,this.internalProjection);}}}}
-return features;},write:function(features){var collection,geometry,type,data,isCollection;if(features.constructor==Array){collection=features;isCollection=true;}else{collection=[features];isCollection=false;}
-var pieces=[];if(isCollection){pieces.push('GEOMETRYCOLLECTION(');}
-for(var i=0,len=collection.length;i<len;++i){if(isCollection&&i>0){pieces.push(',');}
-geometry=collection[i].geometry;pieces.push(this.extractGeometry(geometry));}
-if(isCollection){pieces.push(')');}
-return pieces.join('');},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;},extract:{'point':function(point){return point.x+' '+point.y;},'multipoint':function(multipoint){var array=[];for(var i=0,len=multipoint.components.length;i<len;++i){array.push('('+
-this.extract.point.apply(this,[multipoint.components[i]])+')');}
-return array.join(',');},'linestring':function(linestring){var array=[];for(var i=0,len=linestring.components.length;i<len;++i){array.push(this.extract.point.apply(this,[linestring.components[i]]));}
-return array.join(',');},'multilinestring':function(multilinestring){var array=[];for(var i=0,len=multilinestring.components.length;i<len;++i){array.push('('+
-this.extract.linestring.apply(this,[multilinestring.components[i]])+')');}
-return array.join(',');},'polygon':function(polygon){var array=[];for(var i=0,len=polygon.components.length;i<len;++i){array.push('('+
-this.extract.linestring.apply(this,[polygon.components[i]])+')');}
-return array.join(',');},'multipolygon':function(multipolygon){var array=[];for(var i=0,len=multipolygon.components.length;i<len;++i){array.push('('+
-this.extract.polygon.apply(this,[multipolygon.components[i]])+')');}
-return array.join(',');},'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(',');}},parse:{'point':function(str){var coords=OpenLayers.String.trim(str).split(this.regExes.spaces);return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(coords[0],coords[1]));},'multipoint':function(str){var point;var points=OpenLayers.String.trim(str).split(',');var components=[];for(var i=0,len=points.length;i<len;++i){point=points[i].replace(this.regExes.trimParens,'$1');components.push(this.parse.point.apply(this,[point]).geometry);}
-return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPoint(components));},'linestring':function(str){var points=OpenLayers.String.trim(str).split(',');var components=[];for(var i=0,len=points.length;i<len;++i){components.push(this.parse.point.apply(this,[points[i]]).geometry);}
-return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(components));},'multilinestring':function(str){var line;var lines=OpenLayers.String.trim(str).split(this.regExes.parenComma);var components=[];for(var i=0,len=lines.length;i<len;++i){line=lines[i].replace(this.regExes.trimParens,'$1');components.push(this.parse.linestring.apply(this,[line]).geometry);}
-return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiLineString(components));},'polygon':function(str){var ring,linestring,linearring;var rings=OpenLayers.String.trim(str).split(this.regExes.parenComma);var components=[];for(var i=0,len=rings.length;i<len;++i){ring=rings[i].replace(this.regExes.trimParens,'$1');linestring=this.parse.linestring.apply(this,[ring]).geometry;linearring=new OpenLayers.Geometry.LinearRing(linestring.components);components.push(linearring);}
-return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon(components));},'multipolygon':function(str){var polygon;var polygons=OpenLayers.String.trim(str).split(this.regExes.doubleParenComma);var components=[];for(var i=0,len=polygons.length;i<len;++i){polygon=polygons[i].replace(this.regExes.trimParens,'$1');components.push(this.parse.polygon.apply(this,[polygon]).geometry);}
-return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPolygon(components));},'geometrycollection':function(str){str=str.replace(/,\s*([A-Za-z])/g,'|$1');var wktArray=OpenLayers.String.trim(str).split('|');var components=[];for(var i=0,len=wktArray.length;i<len;++i){components.push(OpenLayers.Format.WKT.prototype.read.apply(this,[wktArray[i]]));}
-return components;}},CLASS_NAME:"OpenLayers.Format.WKT"});OpenLayers.Protocol.SQL.Gears=OpenLayers.Class(OpenLayers.Protocol.SQL,{FID_PREFIX:'__gears_fid__',NULL_GEOMETRY:'__gears_null_geometry__',NULL_FEATURE_STATE:'__gears_null_feature_state__',jsonParser:null,wktParser:null,fidRegExp:null,saveFeatureState:true,typeOfFid:"string",db:null,initialize:function(options){if(!this.supported()){return;}
-OpenLayers.Protocol.SQL.prototype.initialize.apply(this,[options]);this.jsonParser=new OpenLayers.Format.JSON();this.wktParser=new OpenLayers.Format.WKT();this.fidRegExp=new RegExp('^'+this.FID_PREFIX);this.initializeDatabase();},initializeDatabase:function(){this.db=google.gears.factory.create('beta.database');this.db.open(this.databaseName);this.db.execute("CREATE TABLE IF NOT EXISTS "+this.tableName+" (fid TEXT UNIQUE, geometry TEXT, properties TEXT,"+"  state TEXT)");},destroy:functi [...]
-features.push(feature);}
-rs.next();}
-rs.close();var resp=new OpenLayers.Protocol.Response({code:OpenLayers.Protocol.Response.SUCCESS,requestType:"read",features:features});if(options&&options.callback){options.callback.call(options.scope,resp);}
-return resp;},unfreezeFeature:function(row){var feature;var wkt=row.fieldByName('geometry');if(wkt==this.NULL_GEOMETRY){feature=new OpenLayers.Feature.Vector();}else{feature=this.wktParser.read(wkt);}
-feature.attributes=this.jsonParser.read(row.fieldByName('properties'));feature.fid=this.extractFidFromField(row.fieldByName('fid'));var state=row.fieldByName('state');if(state==this.NULL_FEATURE_STATE){state=null;}
-feature.state=state;return feature;},extractFidFromField:function(field){if(!field.match(this.fidRegExp)&&this.typeOfFid=="number"){field=parseFloat(field);}
-return field;},create:function(features,options){options=OpenLayers.Util.applyDefaults(options,this.options);var resp=this.createOrUpdate(features);resp.requestType="create";if(options&&options.callback){options.callback.call(options.scope,resp);}
-return resp;},update:function(features,options){options=OpenLayers.Util.applyDefaults(options,this.options);var resp=this.createOrUpdate(features);resp.requestType="update";if(options&&options.callback){options.callback.call(options.scope,resp);}
-return resp;},createOrUpdate:function(features){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-var i,len=features.length,feature;var insertedFeatures=new Array(len);for(i=0;i<len;i++){feature=features[i];var params=this.freezeFeature(feature);this.db.execute("REPLACE INTO "+this.tableName+" (fid, geometry, properties, state)"+" VALUES (?, ?, ?, ?)",params);var clone=feature.clone();clone.fid=this.extractFidFromField(params[0]);insertedFeatures[i]=clone;}
-return new OpenLayers.Protocol.Response({code:OpenLayers.Protocol.Response.SUCCESS,features:insertedFeatures,reqFeatures:features});},freezeFeature:function(feature){feature.fid=feature.fid!=null?""+feature.fid:OpenLayers.Util.createUniqueID(this.FID_PREFIX);var geometry=feature.geometry!=null?feature.geometry.toString():this.NULL_GEOMETRY;var properties=this.jsonParser.write(feature.attributes);var state=this.getFeatureStateForFreeze(feature);return[feature.fid,geometry,properties,state [...]
-return state;},"delete":function(features,options){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-options=OpenLayers.Util.applyDefaults(options,this.options);var i,len,feature;for(i=0,len=features.length;i<len;i++){feature=features[i];if(this.saveFeatureState&&!this.createdOffline(feature)){var toDelete=feature.clone();toDelete.fid=feature.fid;if(toDelete.geometry){toDelete.geometry.destroy();toDelete.geometry=null;}
-toDelete.state=feature.state;this.createOrUpdate(toDelete);}else{this.db.execute("DELETE FROM "+this.tableName+" WHERE fid = ?",[feature.fid]);}}
-var resp=new OpenLayers.Protocol.Response({code:OpenLayers.Protocol.Response.SUCCESS,requestType:"delete",reqFeatures:features});if(options&&options.callback){options.callback.call(options.scope,resp);}
-return resp;},createdOffline:function(feature){return(typeof feature.fid=="string"&&!!(feature.fid.match(this.fidRegExp)));},commit:function(features,options){var opt,resp=[],nRequests=0,nResponses=0;function callback(resp){if(++nResponses<nRequests){resp.last=false;}
-this.callUserCallback(options,resp);}
-var feature,toCreate=[],toUpdate=[],toDelete=[];for(var i=features.length-1;i>=0;i--){feature=features[i];switch(feature.state){case OpenLayers.State.INSERT:toCreate.push(feature);break;case OpenLayers.State.UPDATE:toUpdate.push(feature);break;case OpenLayers.State.DELETE:toDelete.push(feature);break;}}
-if(toCreate.length>0){nRequests++;opt=OpenLayers.Util.applyDefaults({"callback":callback,"scope":this},options.create);resp.push(this.create(toCreate,opt));}
-if(toUpdate.length>0){nRequests++;opt=OpenLayers.Util.applyDefaults({"callback":callback,"scope":this},options.update);resp.push(this.update(toUpdate,opt));}
-if(toDelete.length>0){nRequests++;opt=OpenLayers.Util.applyDefaults({"callback":callback,"scope":this},options["delete"]);resp.push(this["delete"](toDelete,opt));}
-return resp;},clear:function(){this.db.execute("DELETE FROM "+this.tableName);},callUserCallback:function(options,resp){var opt=options[resp.requestType];if(opt&&opt.callback){opt.callback.call(opt.scope,resp);}
-if(resp.last&&options.callback){options.callback.call(options.scope);}},CLASS_NAME:"OpenLayers.Protocol.SQL.Gears"});OpenLayers.Event={observers:false,KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(event){return event.target||event.srcElement;},isSingleTouch:function(event){return event.touches&&event.touches.length==1;},isMultiTouch:function(event){return event.touches&&event.touches.length>1;},isLeftClick [...]
-if(event.stopPropagation){event.stopPropagation();}else{event.cancelBubble=true;}},findElement:function(event,tagName){var element=OpenLayers.Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase()))){element=element.parentNode;}
-return element;},observe:function(elementParam,name,observer,useCapture){var element=OpenLayers.Util.getElement(elementParam);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent)){name='keydown';}
-if(!this.observers){this.observers={};}
-if(!element._eventCacheID){var idPrefix="eventCacheID_";if(element.id){idPrefix=element.id+"_"+idPrefix;}
-element._eventCacheID=OpenLayers.Util.createUniqueID(idPrefix);}
-var cacheID=element._eventCacheID;if(!this.observers[cacheID]){this.observers[cacheID]=[];}
-this.observers[cacheID].push({'element':element,'name':name,'observer':observer,'useCapture':useCapture});if(element.addEventListener){element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){element.attachEvent('on'+name,observer);}},stopObservingElement:function(elementParam){var element=OpenLayers.Util.getElement(elementParam);var cacheID=element._eventCacheID;this._removeElementObservers(OpenLayers.Event.observers[cacheID]);},_removeElementObservers:function(e [...]
-var foundEntry=false;var elementObservers=OpenLayers.Event.observers[cacheID];if(elementObservers){var i=0;while(!foundEntry&&i<elementObservers.length){var cacheEntry=elementObservers[i];if((cacheEntry.name==name)&&(cacheEntry.observer==observer)&&(cacheEntry.useCapture==useCapture)){elementObservers.splice(i,1);if(elementObservers.length==0){delete OpenLayers.Event.observers[cacheID];}
-foundEntry=true;break;}
-i++;}}
-if(foundEntry){if(element.removeEventListener){element.removeEventListener(name,observer,useCapture);}else if(element&&element.detachEvent){element.detachEvent('on'+name,observer);}}
-return foundEntry;},unloadCache:function(){if(OpenLayers.Event&&OpenLayers.Event.observers){for(var cacheID in OpenLayers.Event.observers){var elementObservers=OpenLayers.Event.observers[cacheID];OpenLayers.Event._removeElementObservers.apply(this,[elementObservers]);}
-OpenLayers.Event.observers=false;}},CLASS_NAME:"OpenLayers.Event"};OpenLayers.Event.observe(window,'unload',OpenLayers.Event.unloadCache,false);if(window.Event){OpenLayers.Util.applyDefaults(window.Event,OpenLayers.Event);}else{var Event=OpenLayers.Event;}
-OpenLayers.Events=OpenLayers.Class({BROWSER_EVENTS:["mouseover","mouseout","mousedown","mouseup","mousemove","click","dblclick","rightclick","dblrightclick","resize","focus","blur","touchstart","touchmove","touchend"],listeners:null,object:null,element:null,eventTypes:null,eventHandler:null,fallThrough:null,includeXY:false,clearMouseListener:null,initialize:function(object,element,eventTypes,fallThrough,options){OpenLayers.Util.extend(this,options);this.object=object;this.fallThrough=fal [...]
-if(element!=null){this.attachToElement(element);}},destroy:function(){if(this.element){OpenLayers.Event.stopObservingElement(this.element);if(this.element.hasScrollEvent){OpenLayers.Event.stopObserving(window,"scroll",this.clearMouseListener);}}
-this.element=null;this.listeners=null;this.object=null;this.eventTypes=null;this.fallThrough=null;this.eventHandler=null;},addEventType:function(eventName){if(!this.listeners[eventName]){this.eventTypes.push(eventName);this.listeners[eventName]=[];}},attachToElement:function(element){if(this.element){OpenLayers.Event.stopObservingElement(this.element);}
-this.element=element;for(var i=0,len=this.BROWSER_EVENTS.length;i<len;i++){var eventType=this.BROWSER_EVENTS[i];this.addEventType(eventType);OpenLayers.Event.observe(element,eventType,this.eventHandler);}
-OpenLayers.Event.observe(element,"dragstart",OpenLayers.Event.stop);},on:function(object){for(var type in object){if(type!="scope"){this.register(type,object.scope,object[type]);}}},register:function(type,obj,func){if((func!=null)&&(OpenLayers.Util.indexOf(this.eventTypes,type)!=-1)){if(obj==null){obj=this.object;}
-var listeners=this.listeners[type];listeners.push({obj:obj,func:func});}},registerPriority:function(type,obj,func){if(func!=null){if(obj==null){obj=this.object;}
-var listeners=this.listeners[type];if(listeners!=null){listeners.unshift({obj:obj,func:func});}}},un:function(object){for(var type in object){if(type!="scope"){this.unregister(type,object.scope,object[type]);}}},unregister:function(type,obj,func){if(obj==null){obj=this.object;}
-var listeners=this.listeners[type];if(listeners!=null){for(var i=0,len=listeners.length;i<len;i++){if(listeners[i].obj==obj&&listeners[i].func==func){listeners.splice(i,1);break;}}}},remove:function(type){if(this.listeners[type]!=null){this.listeners[type]=[];}},triggerEvent:function(type,evt){var listeners=this.listeners[type];if(!listeners||listeners.length==0){return undefined;}
-if(evt==null){evt={};}
-evt.object=this.object;evt.element=this.element;if(!evt.type){evt.type=type;}
-listeners=listeners.slice();var continueChain;for(var i=0,len=listeners.length;i<len;i++){var callback=listeners[i];continueChain=callback.func.apply(callback.obj,[evt]);if((continueChain!=undefined)&&(continueChain==false)){break;}}
-if(!this.fallThrough){OpenLayers.Event.stop(evt,true);}
-return continueChain;},handleBrowserEvent:function(evt){var type=evt.type,listeners=this.listeners[type];if(!listeners||listeners.length==0){return;}
-var touches=evt.touches;if(touches&&touches[0]){var x=0;var y=0;var num=touches.length;var touch;for(var i=0;i<num;++i){touch=touches[i];x+=touch.clientX;y+=touch.clientY;}
-evt.clientX=x/num;evt.clientY=y/num;}
-if(this.includeXY){evt.xy=this.getMousePosition(evt);}
-this.triggerEvent(type,evt);},clearMouseCache:function(){this.element.scrolls=null;this.element.lefttop=null;var body=document.body;if(body&&!((body.scrollTop!=0||body.scrollLeft!=0)&&navigator.userAgent.match(/iPhone/i))){this.element.offsets=null;}},getMousePosition:function(evt){if(!this.includeXY){this.clearMouseCache();}else if(!this.element.hasScrollEvent){OpenLayers.Event.observe(window,"scroll",this.clearMouseListener);this.element.hasScrollEvent=true;}
-if(!this.element.scrolls){var viewportElement=OpenLayers.Util.getViewportElement();this.element.scrolls=[viewportElement.scrollLeft,viewportElement.scrollTop];}
-if(!this.element.lefttop){this.element.lefttop=[(document.documentElement.clientLeft||0),(document.documentElement.clientTop||0)];}
-if(!this.element.offsets){this.element.offsets=OpenLayers.Util.pagePosition(this.element);}
-return new OpenLayers.Pixel((evt.clientX+this.element.scrolls[0])-this.element.offsets[0]
--this.element.lefttop[0],(evt.clientY+this.element.scrolls[1])-this.element.offsets[1]
--this.element.lefttop[1]);},CLASS_NAME:"OpenLayers.Events"});OpenLayers.Tween=OpenLayers.Class({INTERVAL:10,easing:null,begin:null,finish:null,duration:null,callbacks:null,time:null,interval:null,playing:false,initialize:function(easing){this.easing=(easing)?easing:OpenLayers.Easing.Expo.easeOut;},start:function(begin,finish,duration,options){this.playing=true;this.begin=begin;this.finish=finish;this.duration=duration;this.callbacks=options.callbacks;this.time=0;if(this.interval){window. [...]
-if(this.callbacks&&this.callbacks.start){this.callbacks.start.call(this,this.begin);}
-this.interval=window.setInterval(OpenLayers.Function.bind(this.play,this),this.INTERVAL);},stop:function(){if(!this.playing){return;}
-if(this.callbacks&&this.callbacks.done){this.callbacks.done.call(this,this.finish);}
-window.clearInterval(this.interval);this.interval=null;this.playing=false;},play:function(){var value={};for(var i in this.begin){var b=this.begin[i];var f=this.finish[i];if(b==null||f==null||isNaN(b)||isNaN(f)){OpenLayers.Console.error('invalid value for Tween');}
-var c=f-b;value[i]=this.easing.apply(this,[this.time,b,c,this.duration]);}
-this.time++;if(this.callbacks&&this.callbacks.eachStep){this.callbacks.eachStep.call(this,value);}
-if(this.time>this.duration){this.stop();}},CLASS_NAME:"OpenLayers.Tween"});OpenLayers.Easing={CLASS_NAME:"OpenLayers.Easing"};OpenLayers.Easing.Linear={easeIn:function(t,b,c,d){return c*t/d+b;},easeOut:function(t,b,c,d){return c*t/d+b;},easeInOut:function(t,b,c,d){return c*t/d+b;},CLASS_NAME:"OpenLayers.Easing.Linear"};OpenLayers.Easing.Expo={easeIn:function(t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b;},easeOut:function(t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},ease [...]
-this.tileSize=new OpenLayers.Size(OpenLayers.Map.TILE_WIDTH,OpenLayers.Map.TILE_HEIGHT);this.maxExtent=new OpenLayers.Bounds(-180,-90,180,90);this.paddingForPopups=new OpenLayers.Bounds(15,15,15,15);this.theme=OpenLayers._getScriptLocation()+'theme/default/style.css';OpenLayers.Util.extend(this,options);this.layers=[];this.id=OpenLayers.Util.createUniqueID("OpenLayers.Map_");this.div=OpenLayers.Util.getElement(div);if(!this.div){this.div=document.createElement("div");this.div.style.heigh [...]
-OpenLayers.Element.addClass(this.div,'olMap');var id=this.id+"_OpenLayers_ViewPort";this.viewPortDiv=OpenLayers.Util.createDiv(id,null,null,null,"relative",null,"hidden");this.viewPortDiv.style.width="100%";this.viewPortDiv.style.height="100%";this.viewPortDiv.className="olMapViewport";this.div.appendChild(this.viewPortDiv);var eventsDiv=document.createElement("div");eventsDiv.id=this.id+"_events";eventsDiv.style.position="absolute";eventsDiv.style.width="100%";eventsDiv.style.height="10 [...]
-this.events.register("movestart",this,this.updateSize);if(OpenLayers.String.contains(navigator.appName,"Microsoft")){this.events.register("resize",this,this.updateSize);}else{this.updateSizeDestroy=OpenLayers.Function.bind(this.updateSize,this);OpenLayers.Event.observe(window,'resize',this.updateSizeDestroy);}
-if(this.theme){var addNode=true;var nodes=document.getElementsByTagName('link');for(var i=0,len=nodes.length;i<len;++i){if(OpenLayers.Util.isEquivalentUrl(nodes.item(i).href,this.theme)){addNode=false;break;}}
-if(addNode){var cssNode=document.createElement('link');cssNode.setAttribute('rel','stylesheet');cssNode.setAttribute('type','text/css');cssNode.setAttribute('href',this.theme);document.getElementsByTagName('head')[0].appendChild(cssNode);}}
-if(this.controls==null){if(OpenLayers.Control!=null){this.controls=[new OpenLayers.Control.Navigation(),new OpenLayers.Control.PanZoom(),new OpenLayers.Control.ArgParser(),new OpenLayers.Control.Attribution()];}else{this.controls=[];}}
-for(var i=0,len=this.controls.length;i<len;i++){this.addControlToMap(this.controls[i]);}
-this.popups=[];this.unloadDestroy=OpenLayers.Function.bind(this.destroy,this);OpenLayers.Event.observe(window,'unload',this.unloadDestroy);if(options&&options.layers){delete this.center;this.addLayers(options.layers);if(options.center){this.setCenter(options.center,options.zoom);}}},render:function(div){this.div=OpenLayers.Util.getElement(div);OpenLayers.Element.addClass(this.div,'olMap');this.viewPortDiv.parentNode.removeChild(this.viewPortDiv);this.div.appendChild(this.viewPortDiv);thi [...]
-if(this.panTween){this.panTween.stop();this.panTween=null;}
-OpenLayers.Event.stopObserving(window,'unload',this.unloadDestroy);this.unloadDestroy=null;if(this.updateSizeDestroy){OpenLayers.Event.stopObserving(window,'resize',this.updateSizeDestroy);}else{this.events.unregister("resize",this,this.updateSize);}
-this.paddingForPopups=null;if(this.controls!=null){for(var i=this.controls.length-1;i>=0;--i){this.controls[i].destroy();}
-this.controls=null;}
-if(this.layers!=null){for(var i=this.layers.length-1;i>=0;--i){this.layers[i].destroy(false);}
-this.layers=null;}
-if(this.viewPortDiv){this.div.removeChild(this.viewPortDiv);}
-this.viewPortDiv=null;if(this.eventListeners){this.events.un(this.eventListeners);this.eventListeners=null;}
-this.events.destroy();this.events=null;},setOptions:function(options){var updatePxExtent=this.minPx&&options.restrictedExtent!=this.restrictedExtent;OpenLayers.Util.extend(this,options);updatePxExtent&&this.moveTo(this.getCachedCenter(),this.zoom,{forceZoomChange:true});},getTileSize:function(){return this.tileSize;},getBy:function(array,property,match){var test=(typeof match.test=="function");var found=OpenLayers.Array.filter(this[array],function(item){return item[property]==match||(tes [...]
-return foundLayer;},setLayerZIndex:function(layer,zIdx){layer.setZIndex(this.Z_INDEX_BASE[layer.isBaseLayer?'BaseLayer':'Overlay']
-+zIdx*5);},resetLayersZIndex:function(){for(var i=0,len=this.layers.length;i<len;i++){var layer=this.layers[i];this.setLayerZIndex(layer,i);}},addLayer:function(layer){for(var i=0,len=this.layers.length;i<len;i++){if(this.layers[i]==layer){var msg=OpenLayers.i18n('layerAlreadyAdded',{'layerName':layer.name});OpenLayers.Console.warn(msg);return false;}}
-if(this.events.triggerEvent("preaddlayer",{layer:layer})===false){return;}
-if(this.allOverlays){layer.isBaseLayer=false;}
-layer.div.className="olLayerDiv";layer.div.style.overflow="";this.setLayerZIndex(layer,this.layers.length);if(layer.isFixed){this.viewPortDiv.appendChild(layer.div);}else{this.layerContainerDiv.appendChild(layer.div);}
-this.layers.push(layer);layer.setMap(this);if(layer.isBaseLayer||(this.allOverlays&&!this.baseLayer)){if(this.baseLayer==null){this.setBaseLayer(layer);}else{layer.setVisibility(false);}}else{layer.redraw();}
-this.events.triggerEvent("addlayer",{layer:layer});layer.events.triggerEvent("added",{map:this,layer:layer});layer.afterAdd();},addLayers:function(layers){for(var i=0,len=layers.length;i<len;i++){this.addLayer(layers[i]);}},removeLayer:function(layer,setNewBaseLayer){if(this.events.triggerEvent("preremovelayer",{layer:layer})===false){return;}
-if(setNewBaseLayer==null){setNewBaseLayer=true;}
-if(layer.isFixed){this.viewPortDiv.removeChild(layer.div);}else{this.layerContainerDiv.removeChild(layer.div);}
-OpenLayers.Util.removeItem(this.layers,layer);layer.removeMap(this);layer.map=null;if(this.baseLayer==layer){this.baseLayer=null;if(setNewBaseLayer){for(var i=0,len=this.layers.length;i<len;i++){var iLayer=this.layers[i];if(iLayer.isBaseLayer||this.allOverlays){this.setBaseLayer(iLayer);break;}}}}
-this.resetLayersZIndex();this.events.triggerEvent("removelayer",{layer:layer});layer.events.triggerEvent("removed",{map:this,layer:layer});},getNumLayers:function(){return this.layers.length;},getLayerIndex:function(layer){return OpenLayers.Util.indexOf(this.layers,layer);},setLayerIndex:function(layer,idx){var base=this.getLayerIndex(layer);if(idx<0){idx=0;}else if(idx>this.layers.length){idx=this.layers.length;}
-if(base!=idx){this.layers.splice(base,1);this.layers.splice(idx,0,layer);for(var i=0,len=this.layers.length;i<len;i++){this.setLayerZIndex(this.layers[i],i);}
-this.events.triggerEvent("changelayer",{layer:layer,property:"order"});if(this.allOverlays){if(idx===0){this.setBaseLayer(layer);}else if(this.baseLayer!==this.layers[0]){this.setBaseLayer(this.layers[0]);}}}},raiseLayer:function(layer,delta){var idx=this.getLayerIndex(layer)+delta;this.setLayerIndex(layer,idx);},setBaseLayer:function(newBaseLayer){if(newBaseLayer!=this.baseLayer){if(OpenLayers.Util.indexOf(this.layers,newBaseLayer)!=-1){var center=this.getCachedCenter();var newResolutio [...]
-this.baseLayer=newBaseLayer;this.viewRequestID++;if(!this.allOverlays||this.baseLayer.visibility){this.baseLayer.setVisibility(true);}
-if(center!=null){var newZoom=this.getZoomForResolution(newResolution||this.resolution,true);this.setCenter(center,newZoom,false,true);}
-this.events.triggerEvent("changebaselayer",{layer:this.baseLayer});}}},addControl:function(control,px){this.controls.push(control);this.addControlToMap(control,px);},addControls:function(controls,pixels){var pxs=(arguments.length===1)?[]:pixels;for(var i=0,len=controls.length;i<len;i++){var ctrl=controls[i];var px=(pxs[i])?pxs[i]:null;this.addControl(ctrl,px);}},addControlToMap:function(control,px){control.outsideViewport=(control.div!=null);if(this.displayProjection&&!control.displayPro [...]
-control.setMap(this);var div=control.draw(px);if(div){if(!control.outsideViewport){div.style.zIndex=this.Z_INDEX_BASE['Control']+
-this.controls.length;this.viewPortDiv.appendChild(div);}}
-if(control.autoActivate){control.activate();}},getControl:function(id){var returnControl=null;for(var i=0,len=this.controls.length;i<len;i++){var control=this.controls[i];if(control.id==id){returnControl=control;break;}}
-return returnControl;},removeControl:function(control){if((control)&&(control==this.getControl(control.id))){if(control.div&&(control.div.parentNode==this.viewPortDiv)){this.viewPortDiv.removeChild(control.div);}
-OpenLayers.Util.removeItem(this.controls,control);}},addPopup:function(popup,exclusive){if(exclusive){for(var i=this.popups.length-1;i>=0;--i){this.removePopup(this.popups[i]);}}
-popup.map=this;this.popups.push(popup);var popupDiv=popup.draw();if(popupDiv){popupDiv.style.zIndex=this.Z_INDEX_BASE['Popup']+
-this.popups.length;this.layerContainerDiv.appendChild(popupDiv);}},removePopup:function(popup){OpenLayers.Util.removeItem(this.popups,popup);if(popup.div){try{this.layerContainerDiv.removeChild(popup.div);}
-catch(e){}}
-popup.map=null;},getSize:function(){var size=null;if(this.size!=null){size=this.size.clone();}
-return size;},updateSize:function(){var newSize=this.getCurrentSize();if(newSize&&!isNaN(newSize.h)&&!isNaN(newSize.w)){this.events.clearMouseCache();var oldSize=this.getSize();if(oldSize==null){this.size=oldSize=newSize;}
-if(!newSize.equals(oldSize)){this.size=newSize;for(var i=0,len=this.layers.length;i<len;i++){this.layers[i].onMapResize();}
-var center=this.getCachedCenter();if(this.baseLayer!=null&&center!=null){var zoom=this.getZoom();this.zoom=null;this.setCenter(center,zoom);}}}},getCurrentSize:function(){var size=new OpenLayers.Size(this.div.clientWidth,this.div.clientHeight);if(size.w==0&&size.h==0||isNaN(size.w)&&isNaN(size.h)){size.w=this.div.offsetWidth;size.h=this.div.offsetHeight;}
-if(size.w==0&&size.h==0||isNaN(size.w)&&isNaN(size.h)){size.w=parseInt(this.div.style.width);size.h=parseInt(this.div.style.height);}
-return size;},calculateBounds:function(center,resolution){var extent=null;if(center==null){center=this.getCachedCenter();}
-if(resolution==null){resolution=this.getResolution();}
-if((center!=null)&&(resolution!=null)){var size=this.getSize();var w_deg=size.w*resolution;var h_deg=size.h*resolution;extent=new OpenLayers.Bounds(center.lon-w_deg/2,center.lat-h_deg/2,center.lon+w_deg/2,center.lat+h_deg/2);}
-return extent;},getCenter:function(){var center=null;var cachedCenter=this.getCachedCenter();if(cachedCenter){center=cachedCenter.clone();}
-return center;},getCachedCenter:function(){if(!this.center&&this.size){this.center=this.getLonLatFromViewPortPx(new OpenLayers.Pixel(this.size.w/2,this.size.h/2));}
-return this.center;},getZoom:function(){return this.zoom;},pan:function(dx,dy,options){options=OpenLayers.Util.applyDefaults(options,{animate:true,dragging:false});if(options.dragging){if(dx!=0||dy!=0){this.moveByPx(dx,dy);}}else{var centerPx=this.getViewPortPxFromLonLat(this.getCachedCenter());var newCenterPx=centerPx.add(dx,dy);if(this.dragging||!newCenterPx.equals(centerPx)){var newCenterLonLat=this.getLonLatFromViewPortPx(newCenterPx);if(options.animate){this.panTo(newCenterLonLat);} [...]
-var center=this.getCachedCenter();if(lonlat.equals(center)){return;}
-var from=this.getPixelFromLonLat(center);var to=this.getPixelFromLonLat(lonlat);var vector={x:to.x-from.x,y:to.y-from.y};var last={x:0,y:0};this.panTween.start({x:0,y:0},vector,this.panDuration,{callbacks:{eachStep:OpenLayers.Function.bind(function(px){var x=px.x-last.x,y=px.y-last.y;this.moveByPx(x,y);last.x=Math.round(px.x);last.y=Math.round(px.y);},this),done:OpenLayers.Function.bind(function(px){this.moveTo(lonlat);this.dragging=false;this.events.triggerEvent("moveend");},this)}});}e [...]
-dx=wrapDateLine||x<=this.maxPx.x-xRestriction&&x>=this.minPx.x+xRestriction?Math.round(dx):0;dy=y<=this.maxPx.y-yRestriction&&y>=this.minPx.y+yRestriction?Math.round(dy):0;var minX=this.minPx.x,maxX=this.maxPx.x;if(dx||dy){if(!this.dragging){this.dragging=true;this.events.triggerEvent("movestart");}
-this.center=null;if(dx){this.layerContainerDiv.style.left=parseInt(this.layerContainerDiv.style.left)-dx+"px";this.minPx.x-=dx;this.maxPx.x-=dx;if(wrapDateLine){if(this.maxPx.x>maxX){this.maxPx.x-=(maxX-minX);}
-if(this.minPx.x<minX){this.minPx.x+=(maxX-minX);}}}
-if(dy){this.layerContainerDiv.style.top=parseInt(this.layerContainerDiv.style.top)-dy+"px";this.minPx.y-=dy;this.maxPx.y-=dy;}
-var layer,i,len;for(i=0,len=this.layers.length;i<len;++i){layer=this.layers[i];if(layer.visibility&&(layer===this.baseLayer||layer.inRange)){layer.moveByPx(dx,dy);layer.events.triggerEvent("move");}}
-this.events.triggerEvent("move");}},moveTo:function(lonlat,zoom,options){if(!options){options={};}
-if(zoom!=null){zoom=parseFloat(zoom);if(!this.fractionalZoom){zoom=Math.round(zoom);}}
-var dragging=options.dragging||this.dragging;var forceZoomChange=options.forceZoomChange;if(!this.getCachedCenter()&&!this.isValidLonLat(lonlat)){lonlat=this.maxExtent.getCenterLonLat();this.center=lonlat.clone();}
-if(this.restrictedExtent!=null){if(lonlat==null){lonlat=this.center;}
-if(zoom==null){zoom=this.getZoom();}
-var resolution=this.getResolutionForZoom(zoom);var extent=this.calculateBounds(lonlat,resolution);if(!this.restrictedExtent.containsBounds(extent)){var maxCenter=this.restrictedExtent.getCenterLonLat();if(extent.getWidth()>this.restrictedExtent.getWidth()){lonlat=new OpenLayers.LonLat(maxCenter.lon,lonlat.lat);}else if(extent.left<this.restrictedExtent.left){lonlat=lonlat.add(this.restrictedExtent.left-
-extent.left,0);}else if(extent.right>this.restrictedExtent.right){lonlat=lonlat.add(this.restrictedExtent.right-
-extent.right,0);}
-if(extent.getHeight()>this.restrictedExtent.getHeight()){lonlat=new OpenLayers.LonLat(lonlat.lon,maxCenter.lat);}else if(extent.bottom<this.restrictedExtent.bottom){lonlat=lonlat.add(0,this.restrictedExtent.bottom-
-extent.bottom);}
-else if(extent.top>this.restrictedExtent.top){lonlat=lonlat.add(0,this.restrictedExtent.top-
-extent.top);}}}
-var zoomChanged=forceZoomChange||((this.isValidZoomLevel(zoom))&&(zoom!=this.getZoom()));var centerChanged=(this.isValidLonLat(lonlat))&&(!lonlat.equals(this.center));if(zoomChanged||centerChanged||dragging){dragging||this.events.triggerEvent("movestart");if(centerChanged){if(!zoomChanged&&this.center){this.centerLayerContainer(lonlat);}
-this.center=lonlat.clone();}
-var res=zoomChanged?this.getResolutionForZoom(zoom):this.getResolution();if(zoomChanged||this.layerContainerOrigin==null){this.layerContainerOrigin=this.getCachedCenter();this.layerContainerDiv.style.left="0px";this.layerContainerDiv.style.top="0px";var maxExtent=this.getMaxExtent({restricted:true});var maxExtentCenter=maxExtent.getCenterLonLat();var lonDelta=this.center.lon-maxExtentCenter.lon;var latDelta=maxExtentCenter.lat-this.center.lat;var extentWidth=Math.round(maxExtent.getWidth [...]
-if(zoomChanged){this.zoom=zoom;this.resolution=res;this.viewRequestID++;}
-var bounds=this.getExtent();if(this.baseLayer.visibility){this.baseLayer.moveTo(bounds,zoomChanged,options.dragging);options.dragging||this.baseLayer.events.triggerEvent("moveend",{zoomChanged:zoomChanged});}
-bounds=this.baseLayer.getExtent();for(var i=this.layers.length-1;i>=0;--i){var layer=this.layers[i];if(layer!==this.baseLayer&&!layer.isBaseLayer){var inRange=layer.calculateInRange();if(layer.inRange!=inRange){layer.inRange=inRange;if(!inRange){layer.display(false);}
-this.events.triggerEvent("changelayer",{layer:layer,property:"visibility"});}
-if(inRange&&layer.visibility){layer.moveTo(bounds,zoomChanged,options.dragging);options.dragging||layer.events.triggerEvent("moveend",{zoomChanged:zoomChanged});}}}
-this.events.triggerEvent("move");dragging||this.events.triggerEvent("moveend");if(zoomChanged){for(var i=0,len=this.popups.length;i<len;i++){this.popups[i].updatePosition();}
-this.events.triggerEvent("zoomend");}}},centerLayerContainer:function(lonlat){var originPx=this.getViewPortPxFromLonLat(this.layerContainerOrigin);var newPx=this.getViewPortPxFromLonLat(lonlat);if((originPx!=null)&&(newPx!=null)){var oldLeft=parseInt(this.layerContainerDiv.style.left);var oldTop=parseInt(this.layerContainerDiv.style.top);var newLeft=Math.round(originPx.x-newPx.x);var newTop=Math.round(originPx.y-newPx.y);this.layerContainerDiv.style.left=newLeft+"px";this.layerContainerD [...]
-return valid;},getProjection:function(){var projection=this.getProjectionObject();return projection?projection.getCode():null;},getProjectionObject:function(){var projection=null;if(this.baseLayer!=null){projection=this.baseLayer.projection;}
-return projection;},getMaxResolution:function(){var maxResolution=null;if(this.baseLayer!=null){maxResolution=this.baseLayer.maxResolution;}
-return maxResolution;},getMaxExtent:function(options){var maxExtent=null;if(options&&options.restricted&&this.restrictedExtent){maxExtent=this.restrictedExtent;}else if(this.baseLayer!=null){maxExtent=this.baseLayer.maxExtent;}
-return maxExtent;},getNumZoomLevels:function(){var numZoomLevels=null;if(this.baseLayer!=null){numZoomLevels=this.baseLayer.numZoomLevels;}
-return numZoomLevels;},getExtent:function(){var extent=null;if(this.baseLayer!=null){extent=this.baseLayer.getExtent();}
-return extent;},getResolution:function(){var resolution=null;if(this.baseLayer!=null){resolution=this.baseLayer.getResolution();}else if(this.allOverlays===true&&this.layers.length>0){resolution=this.layers[0].getResolution();}
-return resolution;},getUnits:function(){var units=null;if(this.baseLayer!=null){units=this.baseLayer.units;}
-return units;},getScale:function(){var scale=null;if(this.baseLayer!=null){var res=this.getResolution();var units=this.baseLayer.units;scale=OpenLayers.Util.getScaleFromResolution(res,units);}
-return scale;},getZoomForExtent:function(bounds,closest){var zoom=null;if(this.baseLayer!=null){zoom=this.baseLayer.getZoomForExtent(bounds,closest);}
-return zoom;},getResolutionForZoom:function(zoom){var resolution=null;if(this.baseLayer){resolution=this.baseLayer.getResolutionForZoom(zoom);}
-return resolution;},getZoomForResolution:function(resolution,closest){var zoom=null;if(this.baseLayer!=null){zoom=this.baseLayer.getZoomForResolution(resolution,closest);}
-return zoom;},zoomTo:function(zoom){if(this.isValidZoomLevel(zoom)){this.setCenter(null,zoom);}},zoomIn:function(){this.zoomTo(this.getZoom()+1);},zoomOut:function(){this.zoomTo(this.getZoom()-1);},zoomToExtent:function(bounds,closest){var center=bounds.getCenterLonLat();if(this.baseLayer.wrapDateLine){var maxExtent=this.getMaxExtent();bounds=bounds.clone();while(bounds.right<bounds.left){bounds.right+=maxExtent.getWidth();}
-center=bounds.getCenterLonLat().wrapDateLine(maxExtent);}
-this.setCenter(center,this.getZoomForExtent(bounds,closest));},zoomToMaxExtent:function(options){var restricted=(options)?options.restricted:true;var maxExtent=this.getMaxExtent({'restricted':restricted});this.zoomToExtent(maxExtent);},zoomToScale:function(scale,closest){var res=OpenLayers.Util.getResolutionFromScale(scale,this.baseLayer.units);var size=this.getSize();var w_deg=size.w*res;var h_deg=size.h*res;var center=this.getCachedCenter();var extent=new OpenLayers.Bounds(center.lon-w [...]
-return lonlat;},getViewPortPxFromLonLat:function(lonlat){var px=null;if(this.baseLayer!=null){px=this.baseLayer.getViewPortPxFromLonLat(lonlat);}
-return px;},getLonLatFromPixel:function(px){return this.getLonLatFromViewPortPx(px);},getPixelFromLonLat:function(lonlat){var px=this.getViewPortPxFromLonLat(lonlat);px.x=Math.round(px.x);px.y=Math.round(px.y);return px;},getGeodesicPixelSize:function(px){var lonlat=px?this.getLonLatFromPixel(px):(this.getCachedCenter()||new OpenLayers.LonLat(0,0));var res=this.getResolution();var left=lonlat.add(-res/2,0);var right=lonlat.add(res/2,0);var bottom=lonlat.add(0,-res/2);var top=lonlat.add(0 [...]
-return new OpenLayers.Size(OpenLayers.Util.distVincenty(left,right),OpenLayers.Util.distVincenty(bottom,top));},getViewPortPxFromLayerPx:function(layerPx){var viewPortPx=null;if(layerPx!=null){var dX=parseInt(this.layerContainerDiv.style.left);var dY=parseInt(this.layerContainerDiv.style.top);viewPortPx=layerPx.add(dX,dY);}
-return viewPortPx;},getLayerPxFromViewPortPx:function(viewPortPx){var layerPx=null;if(viewPortPx!=null){var dX=-parseInt(this.layerContainerDiv.style.left);var dY=-parseInt(this.layerContainerDiv.style.top);layerPx=viewPortPx.add(dX,dY);if(isNaN(layerPx.x)||isNaN(layerPx.y)){layerPx=null;}}
-return layerPx;},getLonLatFromLayerPx:function(px){px=this.getViewPortPxFromLayerPx(px);return this.getLonLatFromViewPortPx(px);},getLayerPxFromLonLat:function(lonlat){var px=this.getPixelFromLonLat(lonlat);return this.getLayerPxFromViewPortPx(px);},CLASS_NAME:"OpenLayers.Map"});OpenLayers.Map.TILE_WIDTH=256;OpenLayers.Map.TILE_HEIGHT=256;OpenLayers.Projection=OpenLayers.Class({proj:null,projCode:null,titleRegEx:/\+title=[^\+]*/,initialize:function(projCode,options){OpenLayers.Util.exten [...]
-return equals;},destroy:function(){delete this.proj;delete this.projCode;},CLASS_NAME:"OpenLayers.Projection"});OpenLayers.Projection.transforms={};OpenLayers.Projection.addTransform=function(from,to,method){if(!OpenLayers.Projection.transforms[from]){OpenLayers.Projection.transforms[from]={};}
-OpenLayers.Projection.transforms[from][to]=method;};OpenLayers.Projection.transform=function(point,source,dest){if(source.proj&&dest.proj){point=Proj4js.transform(source.proj,dest.proj,point);}else if(source&&dest&&OpenLayers.Projection.transforms[source.getCode()]&&OpenLayers.Projection.transforms[source.getCode()][dest.getCode()]){OpenLayers.Projection.transforms[source.getCode()][dest.getCode()](point);}
-return point;};OpenLayers.Projection.nullTransform=function(point){return point;};OpenLayers.Layer=OpenLayers.Class({id:null,name:null,div:null,opacity:null,alwaysInRange:null,EVENT_TYPES:["loadstart","loadend","loadcancel","visibilitychanged","move","moveend","added","removed"],RESOLUTION_PROPERTIES:['scales','resolutions','maxScale','minScale','maxResolution','minResolution','numZoomLevels','maxZoomLevel'],events:null,map:null,isBaseLayer:false,alpha:false,displayInLayerSwitcher:true,v [...]
-if(this.wrapDateLine){this.displayOutsideMaxExtent=true;}},destroy:function(setNewBaseLayer){if(setNewBaseLayer==null){setNewBaseLayer=true;}
-if(this.map!=null){this.map.removeLayer(this,setNewBaseLayer);}
-this.projection=null;this.map=null;this.name=null;this.div=null;this.options=null;if(this.events){if(this.eventListeners){this.events.un(this.eventListeners);}
-this.events.destroy();}
-this.eventListeners=null;this.events=null;},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer(this.name,this.getOptions());}
-OpenLayers.Util.applyDefaults(obj,this);obj.map=null;return obj;},getOptions:function(){var options={};for(var o in this.options){options[o]=this[o];}
-return options;},setName:function(newName){if(newName!=this.name){this.name=newName;if(this.map!=null){this.map.events.triggerEvent("changelayer",{layer:this,property:"name"});}}},addOptions:function(newOptions,reinitialize){if(this.options==null){this.options={};}
-OpenLayers.Util.extend(this.options,newOptions);OpenLayers.Util.extend(this,newOptions);if(typeof this.projection=="string"){this.projection=new OpenLayers.Projection(this.projection);}
-if(this.projection&&this.projection.getUnits()){this.units=this.projection.getUnits();}
-if(this.map){var resolution=this.map.getResolution();var properties=this.RESOLUTION_PROPERTIES.concat(["projection","units","minExtent","maxExtent"]);for(var o in newOptions){if(newOptions.hasOwnProperty(o)&&OpenLayers.Util.indexOf(properties,o)>=0){this.initResolutions();if(reinitialize&&this.map.baseLayer===this){this.map.setCenter(this.map.getCenter(),this.map.getZoomForResolution(resolution),false,true);this.map.events.triggerEvent("changebaselayer",{layer:this});}
-break;}}}},onMapResize:function(){},redraw:function(){var redrawn=false;if(this.map){this.inRange=this.calculateInRange();var extent=this.getExtent();if(extent&&this.inRange&&this.visibility){var zoomChanged=true;this.moveTo(extent,zoomChanged,false);this.events.triggerEvent("moveend",{"zoomChanged":zoomChanged});redrawn=true;}}
-return redrawn;},moveTo:function(bounds,zoomChanged,dragging){var display=this.visibility;if(!this.isBaseLayer){display=display&&this.inRange;}
-this.display(display);},moveByPx:function(dx,dy){},setMap:function(map){if(this.map==null){this.map=map;this.maxExtent=this.maxExtent||this.map.maxExtent;this.minExtent=this.minExtent||this.map.minExtent;this.projection=this.projection||this.map.projection;if(typeof this.projection=="string"){this.projection=new OpenLayers.Projection(this.projection);}
-this.units=this.projection.getUnits()||this.units||this.map.units;this.initResolutions();if(!this.isBaseLayer){this.inRange=this.calculateInRange();var show=((this.visibility)&&(this.inRange));this.div.style.display=show?"":"none";}
-this.setTileSize();}},afterAdd:function(){},removeMap:function(map){},getImageSize:function(bounds){return(this.imageSize||this.tileSize);},setTileSize:function(size){var tileSize=(size)?size:((this.tileSize)?this.tileSize:this.map.getTileSize());this.tileSize=tileSize;if(this.gutter){this.imageOffset=new OpenLayers.Pixel(-this.gutter,-this.gutter);this.imageSize=new OpenLayers.Size(tileSize.w+(2*this.gutter),tileSize.h+(2*this.gutter));}},getVisibility:function(){return this.visibility; [...]
-this.events.triggerEvent("visibilitychanged");}},display:function(display){if(display!=(this.div.style.display!="none")){this.div.style.display=(display&&this.calculateInRange())?"block":"none";}},calculateInRange:function(){var inRange=false;if(this.alwaysInRange){inRange=true;}else{if(this.map){var resolution=this.map.getResolution();inRange=((resolution>=this.minResolution)&&(resolution<=this.maxResolution));}}
-return inRange;},setIsBaseLayer:function(isBaseLayer){if(isBaseLayer!=this.isBaseLayer){this.isBaseLayer=isBaseLayer;if(this.map!=null){this.map.events.triggerEvent("changebaselayer",{layer:this});}}},initResolutions:function(){var i,len,p;var props={},alwaysInRange=true;for(i=0,len=this.RESOLUTION_PROPERTIES.length;i<len;i++){p=this.RESOLUTION_PROPERTIES[i];props[p]=this.options[p];if(alwaysInRange&&this.options[p]){alwaysInRange=false;}}
-if(this.alwaysInRange==null){this.alwaysInRange=alwaysInRange;}
-if(props.resolutions==null){props.resolutions=this.resolutionsFromScales(props.scales);}
-if(props.resolutions==null){props.resolutions=this.calculateResolutions(props);}
-if(props.resolutions==null){for(i=0,len=this.RESOLUTION_PROPERTIES.length;i<len;i++){p=this.RESOLUTION_PROPERTIES[i];props[p]=this.options[p]!=null?this.options[p]:this.map[p];}
-if(props.resolutions==null){props.resolutions=this.resolutionsFromScales(props.scales);}
-if(props.resolutions==null){props.resolutions=this.calculateResolutions(props);}}
-var maxResolution;if(this.options.maxResolution&&this.options.maxResolution!=="auto"){maxResolution=this.options.maxResolution;}
-if(this.options.minScale){maxResolution=OpenLayers.Util.getResolutionFromScale(this.options.minScale,this.units);}
-var minResolution;if(this.options.minResolution&&this.options.minResolution!=="auto"){minResolution=this.options.minResolution;}
-if(this.options.maxScale){minResolution=OpenLayers.Util.getResolutionFromScale(this.options.maxScale,this.units);}
-if(props.resolutions){props.resolutions.sort(function(a,b){return(b-a);});if(!maxResolution){maxResolution=props.resolutions[0];}
-if(!minResolution){var lastIdx=props.resolutions.length-1;minResolution=props.resolutions[lastIdx];}}
-this.resolutions=props.resolutions;if(this.resolutions){len=this.resolutions.length;this.scales=new Array(len);for(i=0;i<len;i++){this.scales[i]=OpenLayers.Util.getScaleFromResolution(this.resolutions[i],this.units);}
-this.numZoomLevels=len;}
-this.minResolution=minResolution;if(minResolution){this.maxScale=OpenLayers.Util.getScaleFromResolution(minResolution,this.units);}
-this.maxResolution=maxResolution;if(maxResolution){this.minScale=OpenLayers.Util.getScaleFromResolution(maxResolution,this.units);}},resolutionsFromScales:function(scales){if(scales==null){return;}
-var resolutions,i,len;len=scales.length;resolutions=new Array(len);for(i=0;i<len;i++){resolutions[i]=OpenLayers.Util.getResolutionFromScale(scales[i],this.units);}
-return resolutions;},calculateResolutions:function(props){var viewSize,wRes,hRes;var maxResolution=props.maxResolution;if(props.minScale!=null){maxResolution=OpenLayers.Util.getResolutionFromScale(props.minScale,this.units);}else if(maxResolution=="auto"&&this.maxExtent!=null){viewSize=this.map.getSize();wRes=this.maxExtent.getWidth()/viewSize.w;hRes=this.maxExtent.getHeight()/viewSize.h;maxResolution=Math.max(wRes,hRes);}
-var minResolution=props.minResolution;if(props.maxScale!=null){minResolution=OpenLayers.Util.getResolutionFromScale(props.maxScale,this.units);}else if(props.minResolution=="auto"&&this.minExtent!=null){viewSize=this.map.getSize();wRes=this.minExtent.getWidth()/viewSize.w;hRes=this.minExtent.getHeight()/viewSize.h;minResolution=Math.max(wRes,hRes);}
-var maxZoomLevel=props.maxZoomLevel;var numZoomLevels=props.numZoomLevels;if(typeof minResolution==="number"&&typeof maxResolution==="number"&&numZoomLevels===undefined){var ratio=maxResolution/minResolution;numZoomLevels=Math.floor(Math.log(ratio)/Math.log(2))+1;}else if(numZoomLevels===undefined&&maxZoomLevel!=null){numZoomLevels=maxZoomLevel+1;}
-if(typeof numZoomLevels!=="number"||numZoomLevels<=0||(typeof maxResolution!=="number"&&typeof minResolution!=="number")){return;}
-var resolutions=new Array(numZoomLevels);var base=2;if(typeof minResolution=="number"&&typeof maxResolution=="number"){base=Math.pow((maxResolution/minResolution),(1/(numZoomLevels-1)));}
-var i;if(typeof maxResolution==="number"){for(i=0;i<numZoomLevels;i++){resolutions[i]=maxResolution/Math.pow(base,i);}}else{for(i=0;i<numZoomLevels;i++){resolutions[numZoomLevels-1-i]=minResolution*Math.pow(base,i);}}
-return resolutions;},getResolution:function(){var zoom=this.map.getZoom();return this.getResolutionForZoom(zoom);},getExtent:function(){return this.map.calculateBounds();},getZoomForExtent:function(extent,closest){var viewSize=this.map.getSize();var idealResolution=Math.max(extent.getWidth()/viewSize.w,extent.getHeight()/viewSize.h);return this.getZoomForResolution(idealResolution,closest);},getDataExtent:function(){},getResolutionForZoom:function(zoom){zoom=Math.max(0,Math.min(zoom,this [...]
-((zoom-low)*(this.resolutions[low]-this.resolutions[high]));}else{resolution=this.resolutions[Math.round(zoom)];}
-return resolution;},getZoomForResolution:function(resolution,closest){var zoom,i,len;if(this.map.fractionalZoom){var lowZoom=0;var highZoom=this.resolutions.length-1;var highRes=this.resolutions[lowZoom];var lowRes=this.resolutions[highZoom];var res;for(i=0,len=this.resolutions.length;i<len;++i){res=this.resolutions[i];if(res>=resolution){highRes=res;lowZoom=i;}
-if(res<=resolution){lowRes=res;highZoom=i;break;}}
-var dRes=highRes-lowRes;if(dRes>0){zoom=lowZoom+((highRes-resolution)/dRes);}else{zoom=lowZoom;}}else{var diff;var minDiff=Number.POSITIVE_INFINITY;for(i=0,len=this.resolutions.length;i<len;i++){if(closest){diff=Math.abs(this.resolutions[i]-resolution);if(diff>minDiff){break;}
-minDiff=diff;}else{if(this.resolutions[i]<resolution){break;}}}
-zoom=Math.max(0,i-1);}
-return zoom;},getLonLatFromViewPortPx:function(viewPortPx){var lonlat=null;var map=this.map;if(viewPortPx!=null&&map.minPx){var res=map.getResolution();var maxExtent=map.getMaxExtent({restricted:true});var lon=(viewPortPx.x-map.minPx.x)*res+maxExtent.left;var lat=(map.minPx.y-viewPortPx.y)*res+maxExtent.top;lonlat=new OpenLayers.LonLat(lon,lat);if(this.wrapDateLine){lonlat=lonlat.wrapDateLine(this.maxExtent);}}
-return lonlat;},getViewPortPxFromLonLat:function(lonlat){var px=null;if(lonlat!=null){var resolution=this.map.getResolution();var extent=this.map.getExtent();px=new OpenLayers.Pixel((1/resolution*(lonlat.lon-extent.left)),(1/resolution*(extent.top-lonlat.lat)));}
-return px;},setOpacity:function(opacity){if(opacity!=this.opacity){this.opacity=opacity;for(var i=0,len=this.div.childNodes.length;i<len;++i){var element=this.div.childNodes[i].firstChild;OpenLayers.Util.modifyDOMElement(element,null,null,null,null,null,null,opacity);}
-if(this.map!=null){this.map.events.triggerEvent("changelayer",{layer:this,property:"opacity"});}}},getZIndex:function(){return this.div.style.zIndex;},setZIndex:function(zIndex){this.div.style.zIndex=zIndex;},adjustBounds:function(bounds){if(this.gutter){var mapGutter=this.gutter*this.map.getResolution();bounds=new OpenLayers.Bounds(bounds.left-mapGutter,bounds.bottom-mapGutter,bounds.right+mapGutter,bounds.top+mapGutter);}
-if(this.wrapDateLine){var wrappingOptions={'rightTolerance':this.getResolution(),'leftTolerance':this.getResolution()};bounds=bounds.wrapDateLine(this.maxExtent,wrappingOptions);}
-return bounds;},CLASS_NAME:"OpenLayers.Layer"});OpenLayers.Layer.SphericalMercator={getExtent:function(){var extent=null;if(this.sphericalMercator){extent=this.map.calculateBounds();}else{extent=OpenLayers.Layer.FixedZoomLevels.prototype.getExtent.apply(this);}
-return extent;},getLonLatFromViewPortPx:function(viewPortPx){return OpenLayers.Layer.prototype.getLonLatFromViewPortPx.apply(this,arguments);},getViewPortPxFromLonLat:function(lonlat){return OpenLayers.Layer.prototype.getViewPortPxFromLonLat.apply(this,arguments);},initMercatorParameters:function(){this.RESOLUTIONS=[];var maxResolution=156543.03390625;for(var zoom=0;zoom<=this.MAX_ZOOM_LEVEL;++zoom){this.RESOLUTIONS[zoom]=maxResolution/Math.pow(2,zoom);}
-this.units="m";this.projection=this.projection||"EPSG:900913";},forwardMercator:function(lon,lat){var x=lon*20037508.34/180;var y=Math.log(Math.tan((90+lat)*Math.PI/360))/(Math.PI/180);y=y*20037508.34/180;return new OpenLayers.LonLat(x,y);},inverseMercator:function(x,y){var lon=(x/20037508.34)*180;var lat=(y/20037508.34)*180;lat=180/Math.PI*(2*Math.atan(Math.exp(lat*Math.PI/180))-Math.PI/2);return new OpenLayers.LonLat(lon,lat);},projectForward:function(point){var lonlat=OpenLayers.Layer [...]
-if(this.isFixed){this.map.eventsDiv.appendChild(this.pane);}else{this.map.layerContainerDiv.appendChild(this.pane);}
-this.loadMapObject();if(this.mapObject==null){this.loadWarningMessage();}},removeMap:function(map){if(this.pane&&this.pane.parentNode){this.pane.parentNode.removeChild(this.pane);}
-OpenLayers.Layer.prototype.removeMap.apply(this,arguments);},loadWarningMessage:function(){this.div.style.backgroundColor="darkblue";var viewSize=this.map.getSize();var msgW=Math.min(viewSize.w,300);var msgH=Math.min(viewSize.h,200);var size=new OpenLayers.Size(msgW,msgH);var centerPx=new OpenLayers.Pixel(viewSize.w/2,viewSize.h/2);var topLeft=centerPx.add(-size.w/2,-size.h/2);var div=OpenLayers.Util.createDiv(this.name+"_warning",topLeft,size,null,null,null,"auto");div.style.padding="7p [...]
-return lonlat;},getViewPortPxFromLonLat:function(lonlat){var viewPortPx=null;if((this.mapObject!=null)&&(this.getMapObjectCenter()!=null)){var moLonLat=this.getMapObjectLonLatFromOLLonLat(lonlat);var moPixel=this.getMapObjectPixelFromMapObjectLonLat(moLonLat);viewPortPx=this.getOLPixelFromMapObjectPixel(moPixel);}
-return viewPortPx;},getOLLonLatFromMapObjectLonLat:function(moLonLat){var olLonLat=null;if(moLonLat!=null){var lon=this.getLongitudeFromMapObjectLonLat(moLonLat);var lat=this.getLatitudeFromMapObjectLonLat(moLonLat);olLonLat=new OpenLayers.LonLat(lon,lat);}
-return olLonLat;},getMapObjectLonLatFromOLLonLat:function(olLonLat){var moLatLng=null;if(olLonLat!=null){moLatLng=this.getMapObjectLonLatFromLonLat(olLonLat.lon,olLonLat.lat);}
-return moLatLng;},getOLPixelFromMapObjectPixel:function(moPixel){var olPixel=null;if(moPixel!=null){var x=this.getXFromMapObjectPixel(moPixel);var y=this.getYFromMapObjectPixel(moPixel);olPixel=new OpenLayers.Pixel(x,y);}
-return olPixel;},getMapObjectPixelFromOLPixel:function(olPixel){var moPixel=null;if(olPixel!=null){moPixel=this.getMapObjectPixelFromXY(olPixel.x,olPixel.y);}
-return moPixel;},CLASS_NAME:"OpenLayers.Layer.EventPane"});OpenLayers.Layer.FixedZoomLevels=OpenLayers.Class({initialize:function(){},initResolutions:function(){var props=new Array('minZoomLevel','maxZoomLevel','numZoomLevels');for(var i=0,len=props.length;i<len;i++){var property=props[i];this[property]=(this.options[property]!=null)?this.options[property]:this.map[property];}
-if((this.minZoomLevel==null)||(this.minZoomLevel<this.MIN_ZOOM_LEVEL)){this.minZoomLevel=this.MIN_ZOOM_LEVEL;}
-var desiredZoomLevels;var limitZoomLevels=this.MAX_ZOOM_LEVEL-this.minZoomLevel+1;if(((this.options.numZoomLevels==null)&&(this.options.maxZoomLevel!=null))||((this.numZoomLevels==null)&&(this.maxZoomLevel!=null))){desiredZoomLevels=this.maxZoomLevel-this.minZoomLevel+1;}else{desiredZoomLevels=this.numZoomLevels;}
-if(desiredZoomLevels!=null){this.numZoomLevels=Math.min(desiredZoomLevels,limitZoomLevels);}else{this.numZoomLevels=limitZoomLevels;}
-this.maxZoomLevel=this.minZoomLevel+this.numZoomLevels-1;if(this.RESOLUTIONS!=null){var resolutionsIndex=0;this.resolutions=[];for(var i=this.minZoomLevel;i<=this.maxZoomLevel;i++){this.resolutions[resolutionsIndex++]=this.RESOLUTIONS[i];}
-this.maxResolution=this.resolutions[0];this.minResolution=this.resolutions[this.resolutions.length-1];}},getResolution:function(){if(this.resolutions!=null){return OpenLayers.Layer.prototype.getResolution.apply(this,arguments);}else{var resolution=null;var viewSize=this.map.getSize();var extent=this.getExtent();if((viewSize!=null)&&(extent!=null)){resolution=Math.max(extent.getWidth()/viewSize.w,extent.getHeight()/viewSize.h);}
-return resolution;}},getExtent:function(){var extent=null;var size=this.map.getSize();var tlPx=new OpenLayers.Pixel(0,0);var tlLL=this.getLonLatFromViewPortPx(tlPx);var brPx=new OpenLayers.Pixel(size.w,size.h);var brLL=this.getLonLatFromViewPortPx(brPx);if((tlLL!=null)&&(brLL!=null)){extent=new OpenLayers.Bounds(tlLL.lon,brLL.lat,brLL.lon,tlLL.lat);}
-return extent;},getZoomForResolution:function(resolution){if(this.resolutions!=null){return OpenLayers.Layer.prototype.getZoomForResolution.apply(this,arguments);}else{var extent=OpenLayers.Layer.prototype.getExtent.apply(this,[]);return this.getZoomForExtent(extent);}},getOLZoomFromMapObjectZoom:function(moZoom){var zoom=null;if(moZoom!=null){zoom=moZoom-this.minZoomLevel;if(this.map.baseLayer!==this){zoom=this.map.baseLayer.getZoomForResolution(this.getResolutionForZoom(zoom))}}
-return zoom;},getMapObjectZoomFromOLZoom:function(olZoom){var zoom=null;if(olZoom!=null){zoom=olZoom+this.minZoomLevel;if(this.map.baseLayer!==this){zoom=this.getZoomForResolution(this.map.baseLayer.getResolutionForZoom(zoom));}}
-return zoom;},CLASS_NAME:"OpenLayers.Layer.FixedZoomLevels"});OpenLayers.Layer.VirtualEarth=OpenLayers.Class(OpenLayers.Layer.EventPane,OpenLayers.Layer.FixedZoomLevels,{MIN_ZOOM_LEVEL:1,MAX_ZOOM_LEVEL:19,RESOLUTIONS:[1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.00034332275390625,0.000171661376953125,0.0000858306884765625,0.00004291534423828125,0.00002145767211914062,0.0 [...]
-if(this.mapObject!=null){try{this.mapObject.LoadMap(null,null,this.type,true);this.mapObject.AttachEvent("onmousedown",OpenLayers.Function.True);}catch(e){}
-this.mapObject.HideDashboard();if(typeof this.mapObject.SetAnimationEnabled=="function"){this.mapObject.SetAnimationEnabled(this.animationEnabled);}}
-if(!this.mapObject||!this.mapObject.vemapcontrol||!this.mapObject.vemapcontrol.PanMap||(typeof this.mapObject.vemapcontrol.PanMap!="function")){this.dragPanMapObject=null;}},onMapResize:function(){this.mapObject.Resize(this.map.size.w,this.map.size.h);},getWarningHTML:function(){return OpenLayers.i18n("getLayerWarning",{'layerType':'VE','layerLib':'VirtualEarth'});},setMapObjectCenter:function(center,zoom){this.mapObject.SetCenterAndZoom(center,zoom);},getMapObjectCenter:function(){retur [...]
-return veLatLong;},getXFromMapObjectPixel:function(moPixel){return moPixel.x;},getYFromMapObjectPixel:function(moPixel){return moPixel.y;},getMapObjectPixelFromXY:function(x,y){return(typeof VEPixel!='undefined')?new VEPixel(x,y):new Msn.VE.Pixel(x,y);},CLASS_NAME:"OpenLayers.Layer.VirtualEarth"});OpenLayers.Control=OpenLayers.Class({id:null,map:null,div:null,type:null,allowSelection:false,displayClass:"",title:"",autoActivate:false,active:null,handler:null,eventListeners:null,events:nul [...]
-if(this.id==null){this.id=OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");}},destroy:function(){if(this.events){if(this.eventListeners){this.events.un(this.eventListeners);}
-this.events.destroy();this.events=null;}
-this.eventListeners=null;if(this.handler){this.handler.destroy();this.handler=null;}
-if(this.handlers){for(var key in this.handlers){if(this.handlers.hasOwnProperty(key)&&typeof this.handlers[key].destroy=="function"){this.handlers[key].destroy();}}
-this.handlers=null;}
-if(this.map){this.map.removeControl(this);this.map=null;}
-this.div=null;},setMap:function(map){this.map=map;if(this.handler){this.handler.setMap(map);}},draw:function(px){if(this.div==null){this.div=OpenLayers.Util.createDiv(this.id);this.div.className=this.displayClass;if(!this.allowSelection){this.div.className+=" olControlNoSelect";this.div.setAttribute("unselectable","on",0);this.div.onselectstart=OpenLayers.Function.False;}
-if(this.title!=""){this.div.title=this.title;}}
-if(px!=null){this.position=px.clone();}
-this.moveTo(this.position);return this.div;},moveTo:function(px){if((px!=null)&&(this.div!=null)){this.div.style.left=px.x+"px";this.div.style.top=px.y+"px";}},activate:function(){if(this.active){return false;}
-if(this.handler){this.handler.activate();}
-this.active=true;if(this.map){OpenLayers.Element.addClass(this.map.viewPortDiv,this.displayClass.replace(/ /g,"")+"Active");}
-this.events.triggerEvent("activate");return true;},deactivate:function(){if(this.active){if(this.handler){this.handler.deactivate();}
-this.active=false;if(this.map){OpenLayers.Element.removeClass(this.map.viewPortDiv,this.displayClass.replace(/ /g,"")+"Active");}
-this.events.triggerEvent("deactivate");return true;}
-return false;},CLASS_NAME:"OpenLayers.Control"});OpenLayers.Control.TYPE_BUTTON=1;OpenLayers.Control.TYPE_TOGGLE=2;OpenLayers.Control.TYPE_TOOL=3;OpenLayers.Control.OverviewMap=OpenLayers.Class(OpenLayers.Control,{element:null,ovmap:null,size:new OpenLayers.Size(180,90),layers:null,minRectSize:15,minRectDisplayClass:"RectReplacement",minRatio:8,maxRatio:32,mapOptions:null,autoPan:false,handlers:null,resolutionFactor:1,maximized:false,initialize:function(options){this.layers=[];this.handl [...]
-if(this.handlers.click){this.handlers.click.destroy();}
-if(this.handlers.drag){this.handlers.drag.destroy();}
-this.ovmap&&this.ovmap.eventsDiv.removeChild(this.extentRectangle);this.extentRectangle=null;if(this.rectEvents){this.rectEvents.destroy();this.rectEvents=null;}
-if(this.ovmap){this.ovmap.destroy();this.ovmap=null;}
-this.element.removeChild(this.mapDiv);this.mapDiv=null;this.div.removeChild(this.element);this.element=null;if(this.maximizeDiv){OpenLayers.Event.stopObservingElement(this.maximizeDiv);this.div.removeChild(this.maximizeDiv);this.maximizeDiv=null;}
-if(this.minimizeDiv){OpenLayers.Event.stopObservingElement(this.minimizeDiv);this.div.removeChild(this.minimizeDiv);this.minimizeDiv=null;}
-this.map.events.un({"moveend":this.update,"changebaselayer":this.baseLayerDraw,scope:this});OpenLayers.Control.prototype.destroy.apply(this,arguments);},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);if(!(this.layers.length>0)){if(this.map.baseLayer){var layer=this.map.baseLayer.clone();this.layers=[layer];}else{this.map.events.register("changebaselayer",this,this.baseLayerDraw);return this.div;}}
-this.element=document.createElement('div');this.element.className=this.displayClass+'Element';this.element.style.display='none';this.mapDiv=document.createElement('div');this.mapDiv.style.width=this.size.w+'px';this.mapDiv.style.height=this.size.h+'px';this.mapDiv.style.position='relative';this.mapDiv.style.overflow='hidden';this.mapDiv.id=OpenLayers.Util.createUniqueID('overviewMap');this.extentRectangle=document.createElement('div');this.extentRectangle.style.position='absolute';this.e [...]
-this.minimizeControl();}else{this.element.style.display='';}
-if(this.map.getExtent()){this.update();}
-this.map.events.register('moveend',this,this.update);if(this.maximized){this.maximizeControl();}
-return this.div;},baseLayerDraw:function(){this.draw();this.map.events.unregister("changebaselayer",this,this.baseLayerDraw);},rectDrag:function(px){var deltaX=this.handlers.drag.last.x-px.x;var deltaY=this.handlers.drag.last.y-px.y;if(deltaX!=0||deltaY!=0){var rectTop=this.rectPxBounds.top;var rectLeft=this.rectPxBounds.left;var rectHeight=Math.abs(this.rectPxBounds.getHeight());var rectWidth=this.rectPxBounds.getWidth();var newTop=Math.max(0,(rectTop-deltaY));newTop=Math.min(newTop,thi [...]
-if(this.autoPan||!this.isSuitableOverview()){this.updateOverview();}
-this.updateRectToMap();},isSuitableOverview:function(){var mapExtent=this.map.getExtent();var maxExtent=this.map.maxExtent;var testExtent=new OpenLayers.Bounds(Math.max(mapExtent.left,maxExtent.left),Math.max(mapExtent.bottom,maxExtent.bottom),Math.min(mapExtent.right,maxExtent.right),Math.min(mapExtent.top,maxExtent.top));if(this.ovmap.getProjection()!=this.map.getProjection()){testExtent=testExtent.transform(this.map.getProjectionObject(),this.ovmap.getProjectionObject());}
-var resRatio=this.ovmap.getResolution()/this.map.getResolution();return((resRatio>this.minRatio)&&(resRatio<=this.maxRatio)&&(this.ovmap.getExtent().containsBounds(testExtent)));},updateOverview:function(){var mapRes=this.map.getResolution();var targetRes=this.ovmap.getResolution();var resRatio=targetRes/mapRes;if(resRatio>this.maxRatio){targetRes=this.minRatio*mapRes;}else if(resRatio<=this.minRatio){targetRes=this.maxRatio*mapRes;}
-var center;if(this.ovmap.getProjection()!=this.map.getProjection()){center=this.map.center.clone();center.transform(this.map.getProjectionObject(),this.ovmap.getProjectionObject());}else{center=this.map.center;}
-this.ovmap.setCenter(center,this.ovmap.getZoomForResolution(targetRes*this.resolutionFactor));this.updateRectToMap();},createMap:function(){var options=OpenLayers.Util.extend({controls:[],maxResolution:'auto',fallThrough:false},this.mapOptions);this.ovmap=new OpenLayers.Map(this.mapDiv,options);this.ovmap.eventsDiv.appendChild(this.extentRectangle);OpenLayers.Event.stopObserving(window,'unload',this.ovmap.unloadDestroy);this.ovmap.addLayers(this.layers);this.ovmap.zoomToMaxExtent();this. [...]
-parseInt(OpenLayers.Element.getStyle(this.extentRectangle,'border-right-width'));this.wComp=(this.wComp)?this.wComp:2;this.hComp=parseInt(OpenLayers.Element.getStyle(this.extentRectangle,'border-top-width'))+
-parseInt(OpenLayers.Element.getStyle(this.extentRectangle,'border-bottom-width'));this.hComp=(this.hComp)?this.hComp:2;this.handlers.drag=new OpenLayers.Handler.Drag(this,{move:this.rectDrag,done:this.updateMapToRect},{map:this.ovmap});this.handlers.click=new OpenLayers.Handler.Click(this,{"click":this.mapDivClick},{"single":true,"double":false,"stopSingle":true,"stopDouble":true,"pixelTolerance":1,map:this.ovmap});this.handlers.click.activate();this.rectEvents=new OpenLayers.Events(this [...]
-var pxBounds=this.getRectBoundsFromMapBounds(bounds);if(pxBounds){this.setRectPxBounds(pxBounds);}},updateMapToRect:function(){var lonLatBounds=this.getMapBoundsFromRectBounds(this.rectPxBounds);if(this.ovmap.getProjection()!=this.map.getProjection()){lonLatBounds=lonLatBounds.transform(this.ovmap.getProjectionObject(),this.map.getProjectionObject());}
-this.map.panTo(lonLatBounds.getCenterLonLat());},setRectPxBounds:function(pxBounds){var top=Math.max(pxBounds.top,0);var left=Math.max(pxBounds.left,0);var bottom=Math.min(pxBounds.top+Math.abs(pxBounds.getHeight()),this.ovmap.size.h-this.hComp);var right=Math.min(pxBounds.left+pxBounds.getWidth(),this.ovmap.size.w-this.wComp);var width=Math.max(right-left,0);var height=Math.max(bottom-top,0);if(width<this.minRectSize||height<this.minRectSize){this.extentRectangle.className=this.displayClass+
-this.minRectDisplayClass;var rLeft=left+(width/2)-(this.minRectSize/2);var rTop=top+(height/2)-(this.minRectSize/2);this.extentRectangle.style.top=Math.round(rTop)+'px';this.extentRectangle.style.left=Math.round(rLeft)+'px';this.extentRectangle.style.height=this.minRectSize+'px';this.extentRectangle.style.width=this.minRectSize+'px';}else{this.extentRectangle.className=this.displayClass+'ExtentRectangle';this.extentRectangle.style.top=Math.round(top)+'px';this.extentRectangle.style.left= [...]
-this.rectPxBounds=new OpenLayers.Bounds(Math.round(left),Math.round(bottom),Math.round(right),Math.round(top));},getRectBoundsFromMapBounds:function(lonLatBounds){var leftBottomLonLat=new OpenLayers.LonLat(lonLatBounds.left,lonLatBounds.bottom);var rightTopLonLat=new OpenLayers.LonLat(lonLatBounds.right,lonLatBounds.top);var leftBottomPx=this.getOverviewPxFromLonLat(leftBottomLonLat);var rightTopPx=this.getOverviewPxFromLonLat(rightTopLonLat);var bounds=null;if(leftBottomPx&&rightTopPx){ [...]
-return bounds;},getMapBoundsFromRectBounds:function(pxBounds){var leftBottomPx=new OpenLayers.Pixel(pxBounds.left,pxBounds.bottom);var rightTopPx=new OpenLayers.Pixel(pxBounds.right,pxBounds.top);var leftBottomLonLat=this.getLonLatFromOverviewPx(leftBottomPx);var rightTopLonLat=this.getLonLatFromOverviewPx(rightTopPx);return new OpenLayers.Bounds(leftBottomLonLat.lon,leftBottomLonLat.lat,rightTopLonLat.lon,rightTopLonLat.lat);},getLonLatFromOverviewPx:function(overviewMapPx){var size=thi [...]
-return px;},CLASS_NAME:'OpenLayers.Control.OverviewMap'});OpenLayers.Layer.Google=OpenLayers.Class(OpenLayers.Layer.EventPane,OpenLayers.Layer.FixedZoomLevels,{MIN_ZOOM_LEVEL:0,MAX_ZOOM_LEVEL:21,RESOLUTIONS:[1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.00034332275390625,0.000171661376953125,0.0000858306884765625,0.00004291534423828125,0.00002145767211914062,0.00001072883 [...]
-var mixin=OpenLayers.Layer.Google["v"+
-options.version.replace(/\./g,"_")];if(mixin){OpenLayers.Util.applyDefaults(options,mixin);}else{throw"Unsupported Google Maps API version: "+options.version;}
-OpenLayers.Util.applyDefaults(options,mixin.DEFAULTS);if(options.maxExtent){options.maxExtent=options.maxExtent.clone();}
-OpenLayers.Layer.EventPane.prototype.initialize.apply(this,[name,options]);OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this,[name,options]);if(this.sphericalMercator){OpenLayers.Util.extend(this,OpenLayers.Layer.SphericalMercator);this.initMercatorParameters();}},clone:function(){return new OpenLayers.Layer.Google(this.name,this.getOptions());},setVisibility:function(visible){var opacity=this.opacity==null?1:this.opacity;OpenLayers.Layer.EventPane.prototype.setVisibility. [...]
-OpenLayers.Layer.EventPane.prototype.display.apply(this,arguments);},moveTo:function(bounds,zoomChanged,dragging){this._dragging=dragging;OpenLayers.Layer.EventPane.prototype.moveTo.apply(this,arguments);delete this._dragging;},setOpacity:function(opacity){if(opacity!==this.opacity){if(this.map!=null){this.map.events.triggerEvent("changelayer",{layer:this,property:"opacity"});}
-this.opacity=opacity;}
-if(this.getVisibility()){var container=this.getMapContainer();OpenLayers.Util.modifyDOMElement(container,null,null,null,null,null,null,opacity);}},destroy:function(){if(this.map){this.setGMapVisibility(false);var cache=OpenLayers.Layer.Google.cache[this.map.id];if(cache&&cache.count<=1){this.removeGMapElements();}}
-OpenLayers.Layer.EventPane.prototype.destroy.apply(this,arguments);},removeGMapElements:function(){var cache=OpenLayers.Layer.Google.cache[this.map.id];if(cache){var container=this.mapObject&&this.getMapContainer();if(container&&container.parentNode){container.parentNode.removeChild(container);}
-var termsOfUse=cache.termsOfUse;if(termsOfUse&&termsOfUse.parentNode){termsOfUse.parentNode.removeChild(termsOfUse);}
-var poweredBy=cache.poweredBy;if(poweredBy&&poweredBy.parentNode){poweredBy.parentNode.removeChild(poweredBy);}}},removeMap:function(map){if(this.visibility&&this.mapObject){this.setGMapVisibility(false);}
-var cache=OpenLayers.Layer.Google.cache[map.id];if(cache){if(cache.count<=1){this.removeGMapElements();delete OpenLayers.Layer.Google.cache[map.id];}else{--cache.count;}}
-delete this.termsOfUse;delete this.poweredBy;delete this.mapObject;delete this.dragObject;OpenLayers.Layer.EventPane.prototype.removeMap.apply(this,arguments);},getOLBoundsFromMapObjectBounds:function(moBounds){var olBounds=null;if(moBounds!=null){var sw=moBounds.getSouthWest();var ne=moBounds.getNorthEast();if(this.sphericalMercator){sw=this.forwardMercator(sw.lng(),sw.lat());ne=this.forwardMercator(ne.lng(),ne.lat());}else{sw=new OpenLayers.LonLat(sw.lng(),sw.lat());ne=new OpenLayers.L [...]
-olBounds=new OpenLayers.Bounds(sw.lon,sw.lat,ne.lon,ne.lat);}
-return olBounds;},getWarningHTML:function(){return OpenLayers.i18n("googleWarning");},getMapObjectCenter:function(){return this.mapObject.getCenter();},getMapObjectZoom:function(){return this.mapObject.getZoom();},getLongitudeFromMapObjectLonLat:function(moLonLat){return this.sphericalMercator?this.forwardMercator(moLonLat.lng(),moLonLat.lat()).lon:moLonLat.lng();},getLatitudeFromMapObjectLonLat:function(moLonLat){var lat=this.sphericalMercator?this.forwardMercator(moLonLat.lng(),moLonLa [...]
-var mapObject,termsOfUse,poweredBy;var cache=OpenLayers.Layer.Google.cache[this.map.id];if(cache){mapObject=cache.mapObject;termsOfUse=cache.termsOfUse;poweredBy=cache.poweredBy;++cache.count;}else{var container=this.map.viewPortDiv;var div=document.createElement("div");div.id=this.map.id+"_GMap2Container";div.style.position="absolute";div.style.width="100%";div.style.height="100%";container.appendChild(div);try{mapObject=new GMap2(div);termsOfUse=div.lastChild;container.appendChild(term [...]
-OpenLayers.Layer.Google.cache[this.map.id]={mapObject:mapObject,termsOfUse:termsOfUse,poweredBy:poweredBy,count:1};}
-this.mapObject=mapObject;this.termsOfUse=termsOfUse;this.poweredBy=poweredBy;if(OpenLayers.Util.indexOf(this.mapObject.getMapTypes(),this.type)===-1){this.mapObject.addMapType(this.type);}
-if(typeof mapObject.getDragObject=="function"){this.dragObject=mapObject.getDragObject();}else{this.dragPanMapObject=null;}
-if(this.isBaseLayer===false){this.setGMapVisibility(this.div.style.display!=="none");}},onMapResize:function(){if(this.visibility&&this.mapObject.isLoaded()){this.mapObject.checkResize();}else{if(!this._resized){var layer=this;var handle=GEvent.addListener(this.mapObject,"load",function(){GEvent.removeListener(handle);delete layer._resized;layer.mapObject.checkResize();layer.moveTo(layer.map.getCenter(),layer.map.getZoom());});}
-this._resized=true;}},setGMapVisibility:function(visible){var cache=OpenLayers.Layer.Google.cache[this.map.id];if(cache){var container=this.mapObject.getContainer();if(visible===true){this.mapObject.setMapType(this.type);container.style.display="";this.termsOfUse.style.left="";this.termsOfUse.style.display="";this.poweredBy.style.display="";cache.displayed=this.id;}else{if(cache.displayed===this.id){delete cache.displayed;}
-if(!cache.displayed){container.style.display="none";this.termsOfUse.style.display="none";this.termsOfUse.style.left="-9999px";this.poweredBy.style.display="none";}}}},getMapContainer:function(){return this.mapObject.getContainer();},getMapObjectBoundsFromOLBounds:function(olBounds){var moBounds=null;if(olBounds!=null){var sw=this.sphericalMercator?this.inverseMercator(olBounds.bottom,olBounds.left):new OpenLayers.LonLat(olBounds.bottom,olBounds.left);var ne=this.sphericalMercator?this.in [...]
-return moBounds;},setMapObjectCenter:function(center,zoom){this.mapObject.setCenter(center,zoom);},dragPanMapObject:function(dX,dY){this.dragObject.moveBy(new GSize(-dX,dY));},getMapObjectLonLatFromMapObjectPixel:function(moPixel){return this.mapObject.fromContainerPixelToLatLng(moPixel);},getMapObjectPixelFromMapObjectLonLat:function(moLonLat){return this.mapObject.fromLatLngToContainerPixel(moLonLat);},getMapObjectZoomFromMapObjectBounds:function(moBounds){return this.mapObject.getBoun [...]
-return gLatLng;},getMapObjectPixelFromXY:function(x,y){return new GPoint(x,y);}};OpenLayers.Format.XML=OpenLayers.Class(OpenLayers.Format,{namespaces:null,namespaceAlias:null,defaultPrefix:null,readers:{},writers:{},xmldom:null,initialize:function(options){if(window.ActiveXObject){this.xmldom=new ActiveXObject("Microsoft.XMLDOM");}
-OpenLayers.Format.prototype.initialize.apply(this,[options]);this.namespaces=OpenLayers.Util.extend({},this.namespaces);this.namespaceAlias={};for(var alias in this.namespaces){this.namespaceAlias[this.namespaces[alias]]=alias;}},destroy:function(){this.xmldom=null;OpenLayers.Format.prototype.destroy.apply(this,arguments);},setNamespace:function(alias,uri){this.namespaces[alias]=uri;this.namespaceAlias[uri]=alias;},read:function(text){var index=text.indexOf('<');if(index>0){text=text.sub [...]
-var node=OpenLayers.Util.Try(OpenLayers.Function.bind((function(){var xmldom;if(window.ActiveXObject&&!this.xmldom){xmldom=new ActiveXObject("Microsoft.XMLDOM");}else{xmldom=this.xmldom;}
-xmldom.loadXML(text);return xmldom;}),this),function(){return new DOMParser().parseFromString(text,'text/xml');},function(){var req=new XMLHttpRequest();req.open("GET","data:"+"text/xml"+";charset=utf-8,"+encodeURIComponent(text),false);if(req.overrideMimeType){req.overrideMimeType("text/xml");}
-req.send(null);return req.responseXML;});if(this.keepData){this.data=node;}
-return node;},write:function(node){var data;if(this.xmldom){data=node.xml;}else{var serializer=new XMLSerializer();if(node.nodeType==1){var doc=document.implementation.createDocument("","",null);if(doc.importNode){node=doc.importNode(node,true);}
-doc.appendChild(node);data=serializer.serializeToString(doc);}else{data=serializer.serializeToString(node);}}
-return data;},createElementNS:function(uri,name){var element;if(this.xmldom){if(typeof uri=="string"){element=this.xmldom.createNode(1,name,uri);}else{element=this.xmldom.createNode(1,name,"");}}else{element=document.createElementNS(uri,name);}
-return element;},createTextNode:function(text){var node;if(typeof text!=="string"){text=String(text);}
-if(this.xmldom){node=this.xmldom.createTextNode(text);}else{node=document.createTextNode(text);}
-return node;},getElementsByTagNameNS:function(node,uri,name){var elements=[];if(node.getElementsByTagNameNS){elements=node.getElementsByTagNameNS(uri,name);}else{var allNodes=node.getElementsByTagName("*");var potentialNode,fullName;for(var i=0,len=allNodes.length;i<len;++i){potentialNode=allNodes[i];fullName=(potentialNode.prefix)?(potentialNode.prefix+":"+name):name;if((name=="*")||(fullName==potentialNode.nodeName)){if((uri=="*")||(uri==potentialNode.namespaceURI)){elements.push(poten [...]
-return elements;},getAttributeNodeNS:function(node,uri,name){var attributeNode=null;if(node.getAttributeNodeNS){attributeNode=node.getAttributeNodeNS(uri,name);}else{var attributes=node.attributes;var potentialNode,fullName;for(var i=0,len=attributes.length;i<len;++i){potentialNode=attributes[i];if(potentialNode.namespaceURI==uri){fullName=(potentialNode.prefix)?(potentialNode.prefix+":"+name):name;if(fullName==potentialNode.nodeName){attributeNode=potentialNode;break;}}}}
-return attributeNode;},getAttributeNS:function(node,uri,name){var attributeValue="";if(node.getAttributeNS){attributeValue=node.getAttributeNS(uri,name)||"";}else{var attributeNode=this.getAttributeNodeNS(node,uri,name);if(attributeNode){attributeValue=attributeNode.nodeValue;}}
-return attributeValue;},getChildValue:function(node,def){var value=def||"";if(node){for(var child=node.firstChild;child;child=child.nextSibling){switch(child.nodeType){case 3:case 4:value+=child.nodeValue;}}}
-return value;},concatChildValues:function(node,def){var value="";var child=node.firstChild;var childValue;while(child){childValue=child.nodeValue;if(childValue){value+=childValue;}
-child=child.nextSibling;}
-if(value==""&&def!=undefined){value=def;}
-return value;},isSimpleContent:function(node){var simple=true;for(var child=node.firstChild;child;child=child.nextSibling){if(child.nodeType===1){simple=false;break;}}
-return simple;},contentType:function(node){var simple=false,complex=false;var type=OpenLayers.Format.XML.CONTENT_TYPE.EMPTY;for(var child=node.firstChild;child;child=child.nextSibling){switch(child.nodeType){case 1:complex=true;break;case 8:break;default:simple=true;}
-if(complex&&simple){break;}}
-if(complex&&simple){type=OpenLayers.Format.XML.CONTENT_TYPE.MIXED;}else if(complex){return OpenLayers.Format.XML.CONTENT_TYPE.COMPLEX;}else if(simple){return OpenLayers.Format.XML.CONTENT_TYPE.SIMPLE;}
-return type;},hasAttributeNS:function(node,uri,name){var found=false;if(node.hasAttributeNS){found=node.hasAttributeNS(uri,name);}else{found=!!this.getAttributeNodeNS(node,uri,name);}
-return found;},setAttributeNS:function(node,uri,name,value){if(node.setAttributeNS){node.setAttributeNS(uri,name,value);}else{if(this.xmldom){if(uri){var attribute=node.ownerDocument.createNode(2,name,uri);attribute.nodeValue=value;node.setAttributeNode(attribute);}else{node.setAttribute(name,value);}}else{throw"setAttributeNS not implemented";}}},createElementNSPlus:function(name,options){options=options||{};var uri=options.uri||this.namespaces[options.prefix];if(!uri){var loc=name.inde [...]
-if(!uri){uri=this.namespaces[this.defaultPrefix];}
-var node=this.createElementNS(uri,name);if(options.attributes){this.setAttributes(node,options.attributes);}
-var value=options.value;if(value!=null){node.appendChild(this.createTextNode(value));}
-return node;},setAttributes:function(node,obj){var value,uri;for(var name in obj){if(obj[name]!=null&&obj[name].toString){value=obj[name].toString();uri=this.namespaces[name.substring(0,name.indexOf(":"))]||null;this.setAttributeNS(node,uri,name,value);}}},readNode:function(node,obj){if(!obj){obj={};}
-var group=this.readers[node.namespaceURI?this.namespaceAlias[node.namespaceURI]:this.defaultPrefix];if(group){var local=node.localName||node.nodeName.split(":").pop();var reader=group[local]||group["*"];if(reader){reader.apply(this,[node,obj]);}}
-return obj;},readChildNodes:function(node,obj){if(!obj){obj={};}
-var children=node.childNodes;var child;for(var i=0,len=children.length;i<len;++i){child=children[i];if(child.nodeType==1){this.readNode(child,obj);}}
-return obj;},writeNode:function(name,obj,parent){var prefix,local;var split=name.indexOf(":");if(split>0){prefix=name.substring(0,split);local=name.substring(split+1);}else{if(parent){prefix=this.namespaceAlias[parent.namespaceURI];}else{prefix=this.defaultPrefix;}
-local=name;}
-var child=this.writers[prefix][local].apply(this,[obj]);if(parent){parent.appendChild(child);}
-return child;},getChildEl:function(node,name,uri){return node&&this.getThisOrNextEl(node.firstChild,name,uri);},getNextEl:function(node,name,uri){return node&&this.getThisOrNextEl(node.nextSibling,name,uri);},getThisOrNextEl:function(node,name,uri){outer:for(var sibling=node;sibling;sibling=sibling.nextSibling){switch(sibling.nodeType){case 1:if((!name||name===(sibling.localName||sibling.nodeName.split(":").pop()))&&(!uri||uri===sibling.namespaceURI)){break outer;}
-sibling=null;break outer;case 3:if(/^\s*$/.test(sibling.nodeValue)){break;}
-case 4:case 6:case 12:case 10:case 11:sibling=null;break outer;}}
-return sibling||null;},lookupNamespaceURI:function(node,prefix){var uri=null;if(node){if(node.lookupNamespaceURI){uri=node.lookupNamespaceURI(prefix);}else{outer:switch(node.nodeType){case 1:if(node.namespaceURI!==null&&node.prefix===prefix){uri=node.namespaceURI;break outer;}
-var len=node.attributes.length;if(len){var attr;for(var i=0;i<len;++i){attr=node.attributes[i];if(attr.prefix==="xmlns"&&attr.name==="xmlns:"+prefix){uri=attr.value||null;break outer;}else if(attr.name==="xmlns"&&prefix===null){uri=attr.value||null;break outer;}}}
-uri=this.lookupNamespaceURI(node.parentNode,prefix);break outer;case 2:uri=this.lookupNamespaceURI(node.ownerElement,prefix);break outer;case 9:uri=this.lookupNamespaceURI(node.documentElement,prefix);break outer;case 6:case 12:case 10:case 11:break outer;default:uri=this.lookupNamespaceURI(node.parentNode,prefix);break outer;}}}
-return uri;},getXMLDoc:function(){if(!OpenLayers.Format.XML.document&&!this.xmldom){if(document.implementation&&document.implementation.createDocument){OpenLayers.Format.XML.document=document.implementation.createDocument("","",null);}else if(!this.xmldom&&window.ActiveXObject){this.xmldom=new ActiveXObject("Microsoft.XMLDOM");}}
-return OpenLayers.Format.XML.document||this.xmldom;},CLASS_NAME:"OpenLayers.Format.XML"});OpenLayers.Format.XML.CONTENT_TYPE={EMPTY:0,SIMPLE:1,COMPLEX:2,MIXED:3};OpenLayers.Format.XML.lookupNamespaceURI=OpenLayers.Function.bind(OpenLayers.Format.XML.prototype.lookupNamespaceURI,OpenLayers.Format.XML.prototype);OpenLayers.Format.XML.document=null;OpenLayers.Format.WFST=function(options){options=OpenLayers.Util.applyDefaults(options,OpenLayers.Format.WFST.DEFAULTS);var cls=OpenLayers.Forma [...]
-return new cls(options);};OpenLayers.Format.WFST.DEFAULTS={"version":"1.0.0"};OpenLayers.Format.WFST.v1=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.org/2001/XMLSchema-instance",wfs:"http://www.opengis.net/wfs",gml:"http://www.opengis.net/gml",ogc:"http://www.opengis.net/ogc",ows:"http://www.opengis.net/ows"},defaultPrefix:"wfs",version:null,schemaLocations:null,srsName:null,extractAttributes:true,xy:true,stateName:null,initi [...]
-return srsName;},read:function(data,options){options=options||{};OpenLayers.Util.applyDefaults(options,{output:"features"});if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);}
-if(data&&data.nodeType==9){data=data.documentElement;}
-var obj={};if(data){this.readNode(data,obj,true);}
-if(obj.features&&options.output==="features"){obj=obj.features;}
-return obj;},readers:{"wfs":{"FeatureCollection":function(node,obj){obj.features=[];this.readChildNodes(node,obj);}}},write:function(features,options){var node=this.writeNode("wfs:Transaction",{features:features,options:options});var value=this.schemaLocationAttr();if(value){this.setAttributeNS(node,this.namespaces["xsi"],"xsi:schemaLocation",value);}
-return OpenLayers.Format.XML.prototype.write.apply(this,[node]);},writers:{"wfs":{"GetFeature":function(options){var node=this.createElementNSPlus("wfs:GetFeature",{attributes:{service:"WFS",version:this.version,handle:options&&options.handle,outputFormat:options&&options.outputFormat,maxFeatures:options&&options.maxFeatures,"xsi:schemaLocation":this.schemaLocationAttr(options)}});if(typeof this.featureType=="string"){this.writeNode("Query",options,node);}else{for(var i=0,len=this.featur [...]
-return node;},"Transaction":function(obj){obj=obj||{};var options=obj.options||{};var node=this.createElementNSPlus("wfs:Transaction",{attributes:{service:"WFS",version:this.version,handle:options.handle}});var i,len;var features=obj.features;if(features){if(options.multi===true){OpenLayers.Util.extend(this.geometryTypes,{"OpenLayers.Geometry.Point":"MultiPoint","OpenLayers.Geometry.LineString":(this.multiCurve===true)?"MultiCurve":"MultiLineString","OpenLayers.Geometry.Polygon":(this.mu [...]
-var name,feature;for(i=0,len=features.length;i<len;++i){feature=features[i];name=this.stateName[feature.state];if(name){this.writeNode(name,{feature:feature,options:options},node);}}
-if(options.multi===true){this.setGeometryTypes();}}
-if(options.nativeElements){for(i=0,len=options.nativeElements.length;i<len;++i){this.writeNode("wfs:Native",options.nativeElements[i],node);}}
-return node;},"Native":function(nativeElement){var node=this.createElementNSPlus("wfs:Native",{attributes:{vendorId:nativeElement.vendorId,safeToIgnore:nativeElement.safeToIgnore},value:nativeElement.value});return node;},"Insert":function(obj){var feature=obj.feature;var options=obj.options;var node=this.createElementNSPlus("wfs:Insert",{attributes:{handle:options&&options.handle}});this.srsName=this.getSrsName(feature);this.writeNode("feature:_typeName",feature,node);return node;},"Upd [...]
-this.featureType}});if(this.featureNS){node.setAttribute("xmlns:"+this.featurePrefix,this.featureNS);}
-var modified=feature.modified;if(this.geometryName!==null&&(!modified||modified.geometry!==undefined)){this.srsName=this.getSrsName(feature);this.writeNode("Property",{name:this.geometryName,value:feature.geometry},node);}
-for(var key in feature.attributes){if(feature.attributes[key]!==undefined&&(!modified||!modified.attributes||(modified.attributes&&modified.attributes[key]!==undefined))){this.writeNode("Property",{name:key,value:feature.attributes[key]},node);}}
-this.writeNode("ogc:Filter",new OpenLayers.Filter.FeatureId({fids:[feature.fid]}),node);return node;},"Property":function(obj){var node=this.createElementNSPlus("wfs:Property");this.writeNode("Name",obj.name,node);if(obj.value!==null){this.writeNode("Value",obj.value,node);}
-return node;},"Name":function(name){return this.createElementNSPlus("wfs:Name",{value:name});},"Value":function(obj){var node;if(obj instanceof OpenLayers.Geometry){node=this.createElementNSPlus("wfs:Value");var geom=this.writeNode("feature:_geometry",obj).firstChild;node.appendChild(geom);}else{node=this.createElementNSPlus("wfs:Value",{value:obj});}
-return node;},"Delete":function(obj){var feature=obj.feature;var options=obj.options;var node=this.createElementNSPlus("wfs:Delete",{attributes:{handle:options&&options.handle,typeName:(this.featureNS?this.featurePrefix+":":"")+
-this.featureType}});if(this.featureNS){node.setAttribute("xmlns:"+this.featurePrefix,this.featureNS);}
-this.writeNode("ogc:Filter",new OpenLayers.Filter.FeatureId({fids:[feature.fid]}),node);return node;}}},schemaLocationAttr:function(options){options=OpenLayers.Util.extend({featurePrefix:this.featurePrefix,schema:this.schema},options);var schemaLocations=OpenLayers.Util.extend({},this.schemaLocations);if(options.schema){schemaLocations[options.featurePrefix]=options.schema;}
-var parts=[];var uri;for(var key in schemaLocations){uri=this.namespaces[key];if(uri){parts.push(uri+" "+schemaLocations[key]);}}
-var value=parts.join(" ")||undefined;return value;},setFilterProperty:function(filter){if(filter.filters){for(var i=0,len=filter.filters.length;i<len;++i){this.setFilterProperty(filter.filters[i]);}}else{if(filter instanceof OpenLayers.Filter.Spatial){filter.property=this.geometryName;}}},CLASS_NAME:"OpenLayers.Format.WFST.v1"});OpenLayers.Format.OGCExceptionReport=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{ogc:"http://www.opengis.net/ogc"},regExes:{trimSpace:(/^\s*|\s*$/g),remo [...]
-var root=data.documentElement;var exceptionInfo={exceptionReport:null};if(root){this.readChildNodes(data,exceptionInfo);if(exceptionInfo.exceptionReport===null){exceptionInfo=new OpenLayers.Format.OWSCommon().read(data);}}
-return exceptionInfo;},readers:{"ogc":{"ServiceExceptionReport":function(node,obj){obj.exceptionReport={exceptions:[]};this.readChildNodes(node,obj.exceptionReport);},"ServiceException":function(node,exceptionReport){var exception={code:node.getAttribute("code"),locator:node.getAttribute("locator"),text:this.getChildValue(node)};exceptionReport.exceptions.push(exception);}}},CLASS_NAME:"OpenLayers.Format.OGCExceptionReport"});OpenLayers.Format.XML.VersionedOGC=OpenLayers.Class(OpenLayers [...]
-return version;},getParser:function(version){version=version||this.defaultVersion;var profile=this.profile?"_"+this.profile:"";if(!this.parser||this.parser.VERSION!=version){var format=OpenLayers.Format[this.name]["v"+version.replace(/\./g,"_")+profile];if(!format){throw"Can't find a "+this.name+" parser for version "+
-version+profile;}
-this.parser=new format(this.options);}
-return this.parser;},write:function(obj,options){var version=this.getVersion(null,options);this.parser=this.getParser(version);var root=this.parser.write(obj,options);if(this.stringifyOutput===false){return root;}else{return OpenLayers.Format.XML.prototype.write.apply(this,[root]);}},read:function(data,options){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);}
-var root=data.documentElement;var version=this.getVersion(root);this.parser=this.getParser(version);var obj=this.parser.read(data,options);if(this.errorProperty!==null&&obj[this.errorProperty]===undefined){var format=new OpenLayers.Format.OGCExceptionReport();obj.error=format.read(data);}
-obj.version=version;return obj;},CLASS_NAME:"OpenLayers.Format.XML.VersionedOGC"});OpenLayers.Style=OpenLayers.Class({id:null,name:null,title:null,description:null,layerName:null,isDefault:false,rules:null,context:null,defaultStyle:null,defaultsPerSymbolizer:false,propertyStyles:null,initialize:function(style,options){OpenLayers.Util.extend(this,options);this.rules=[];if(options&&options.rules){this.addRules(options.rules);}
-this.setDefaultStyle(style||OpenLayers.Feature.Vector.style["default"]);this.id=OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");},destroy:function(){for(var i=0,len=this.rules.length;i<len;i++){this.rules[i].destroy();this.rules[i]=null;}
-this.rules=null;this.defaultStyle=null;},createSymbolizer:function(feature){var style=this.defaultsPerSymbolizer?{}:this.createLiterals(OpenLayers.Util.extend({},this.defaultStyle),feature);var rules=this.rules;var rule,context;var elseRules=[];var appliedRules=false;for(var i=0,len=rules.length;i<len;i++){rule=rules[i];var applies=rule.evaluate(feature);if(applies){if(rule instanceof OpenLayers.Rule&&rule.elseFilter){elseRules.push(rule);}else{appliedRules=true;this.applySymbolizer(rule [...]
-if(appliedRules==false&&elseRules.length>0){appliedRules=true;for(var i=0,len=elseRules.length;i<len;i++){this.applySymbolizer(elseRules[i],style,feature);}}
-if(rules.length>0&&appliedRules==false){style.display="none";}
-if(style.label&&typeof style.label!=="string"){style.label=String(style.label);}
-return style;},applySymbolizer:function(rule,style,feature){var symbolizerPrefix=feature.geometry?this.getSymbolizerPrefix(feature.geometry):OpenLayers.Style.SYMBOLIZER_PREFIXES[0];var symbolizer=rule.symbolizer[symbolizerPrefix]||rule.symbolizer;if(this.defaultsPerSymbolizer===true){var defaults=this.defaultStyle;OpenLayers.Util.applyDefaults(symbolizer,{pointRadius:defaults.pointRadius});if(symbolizer.stroke===true||symbolizer.graphic===true){OpenLayers.Util.applyDefaults(symbolizer,{s [...]
-if(symbolizer.fill===true||symbolizer.graphic===true){OpenLayers.Util.applyDefaults(symbolizer,{fillColor:defaults.fillColor,fillOpacity:defaults.fillOpacity});}
-if(symbolizer.graphic===true){OpenLayers.Util.applyDefaults(symbolizer,{pointRadius:this.defaultStyle.pointRadius,externalGraphic:this.defaultStyle.externalGraphic,graphicName:this.defaultStyle.graphicName,graphicOpacity:this.defaultStyle.graphicOpacity,graphicWidth:this.defaultStyle.graphicWidth,graphicHeight:this.defaultStyle.graphicHeight,graphicXOffset:this.defaultStyle.graphicXOffset,graphicYOffset:this.defaultStyle.graphicYOffset});}}
-return this.createLiterals(OpenLayers.Util.extend(style,symbolizer),feature);},createLiterals:function(style,feature){var context=OpenLayers.Util.extend({},feature.attributes||feature.data);OpenLayers.Util.extend(context,this.context);for(var i in this.propertyStyles){style[i]=OpenLayers.Style.createLiteral(style[i],context,feature,i);}
-return style;},findPropertyStyles:function(){var propertyStyles={};var style=this.defaultStyle;this.addPropertyStyles(propertyStyles,style);var rules=this.rules;var symbolizer,value;for(var i=0,len=rules.length;i<len;i++){symbolizer=rules[i].symbolizer;for(var key in symbolizer){value=symbolizer[key];if(typeof value=="object"){this.addPropertyStyles(propertyStyles,value);}else{this.addPropertyStyles(propertyStyles,symbolizer);break;}}}
-return propertyStyles;},addPropertyStyles:function(propertyStyles,symbolizer){var property;for(var key in symbolizer){property=symbolizer[key];if(typeof property=="string"&&property.match(/\$\{\w+\}/)){propertyStyles[key]=true;}}
-return propertyStyles;},addRules:function(rules){Array.prototype.push.apply(this.rules,rules);this.propertyStyles=this.findPropertyStyles();},setDefaultStyle:function(style){this.defaultStyle=style;this.propertyStyles=this.findPropertyStyles();},getSymbolizerPrefix:function(geometry){var prefixes=OpenLayers.Style.SYMBOLIZER_PREFIXES;for(var i=0,len=prefixes.length;i<len;i++){if(geometry.CLASS_NAME.indexOf(prefixes[i])!=-1){return prefixes[i];}}},clone:function(){var options=OpenLayers.Ut [...]
-options.context=this.context&&OpenLayers.Util.extend({},this.context);var defaultStyle=OpenLayers.Util.extend({},this.defaultStyle);return new OpenLayers.Style(defaultStyle,options);},CLASS_NAME:"OpenLayers.Style"});OpenLayers.Style.createLiteral=function(value,context,feature,property){if(typeof value=="string"&&value.indexOf("${")!=-1){value=OpenLayers.String.format(value,context,[feature,property]);value=(isNaN(value)||!value)?value:parseFloat(value);}
-return value;};OpenLayers.Style.SYMBOLIZER_PREFIXES=['Point','Line','Polygon','Text','Raster'];OpenLayers.Filter=OpenLayers.Class({initialize:function(options){OpenLayers.Util.extend(this,options);},destroy:function(){},evaluate:function(context){return true;},clone:function(){return null;},CLASS_NAME:"OpenLayers.Filter"});OpenLayers.Filter.FeatureId=OpenLayers.Class(OpenLayers.Filter,{fids:null,type:"FID",initialize:function(options){this.fids=[];OpenLayers.Filter.prototype.initialize.a [...]
-return false;},clone:function(){var filter=new OpenLayers.Filter.FeatureId();OpenLayers.Util.extend(filter,this);filter.fids=this.fids.slice();return filter;},CLASS_NAME:"OpenLayers.Filter.FeatureId"});OpenLayers.Filter.Logical=OpenLayers.Class(OpenLayers.Filter,{filters:null,type:null,initialize:function(options){this.filters=[];OpenLayers.Filter.prototype.initialize.apply(this,[options]);},destroy:function(){this.filters=null;OpenLayers.Filter.prototype.destroy.apply(this);},evaluate:f [...]
-return true;case OpenLayers.Filter.Logical.OR:for(i=0,len=this.filters.length;i<len;i++){if(this.filters[i].evaluate(context)==true){return true;}}
-return false;case OpenLayers.Filter.Logical.NOT:return(!this.filters[0].evaluate(context));}
-return undefined;},clone:function(){var filters=[];for(var i=0,len=this.filters.length;i<len;++i){filters.push(this.filters[i].clone());}
-return new OpenLayers.Filter.Logical({type:this.type,filters:filters});},CLASS_NAME:"OpenLayers.Filter.Logical"});OpenLayers.Filter.Logical.AND="&&";OpenLayers.Filter.Logical.OR="||";OpenLayers.Filter.Logical.NOT="!";OpenLayers.Filter.Comparison=OpenLayers.Class(OpenLayers.Filter,{type:null,property:null,value:null,matchCase:true,lowerBoundary:null,upperBoundary:null,initialize:function(options){OpenLayers.Filter.prototype.initialize.apply(this,[options]);if(this.type===OpenLayers.Filter [...]
-var result=false;var got=context[this.property];var exp;switch(this.type){case OpenLayers.Filter.Comparison.EQUAL_TO:exp=this.value;if(!this.matchCase&&typeof got=="string"&&typeof exp=="string"){result=(got.toUpperCase()==exp.toUpperCase());}else{result=(got==exp);}
-break;case OpenLayers.Filter.Comparison.NOT_EQUAL_TO:exp=this.value;if(!this.matchCase&&typeof got=="string"&&typeof exp=="string"){result=(got.toUpperCase()!=exp.toUpperCase());}else{result=(got!=exp);}
-break;case OpenLayers.Filter.Comparison.LESS_THAN:result=got<this.value;break;case OpenLayers.Filter.Comparison.GREATER_THAN:result=got>this.value;break;case OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO:result=got<=this.value;break;case OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO:result=got>=this.value;break;case OpenLayers.Filter.Comparison.BETWEEN:result=(got>=this.lowerBoundary)&&(got<=this.upperBoundary);break;case OpenLayers.Filter.Comparison.LIKE:var regexp=new RegE [...]
-return result;},value2regex:function(wildCard,singleChar,escapeChar){if(wildCard=="."){var msg="'.' is an unsupported wildCard character for "+"OpenLayers.Filter.Comparison";OpenLayers.Console.error(msg);return null;}
-wildCard=wildCard?wildCard:"*";singleChar=singleChar?singleChar:".";escapeChar=escapeChar?escapeChar:"!";this.value=this.value.replace(new RegExp("\\"+escapeChar+"(.|$)","g"),"\\$1");this.value=this.value.replace(new RegExp("\\"+singleChar,"g"),".");this.value=this.value.replace(new RegExp("\\"+wildCard,"g"),".*");this.value=this.value.replace(new RegExp("\\\\.\\*","g"),"\\"+wildCard);this.value=this.value.replace(new RegExp("\\\\\\.","g"),"\\"+singleChar);return this.value;},regex2value [...]
-return value;},writeOgcExpression:function(value,node){if(value instanceof OpenLayers.Filter.Function){var child=this.writeNode("Function",value,node);node.appendChild(child);}else{this.writeNode("Literal",value,node);}
-return node;},write:function(filter){return this.writers.ogc["Filter"].apply(this,[filter]);},writeFeatureIdNodes:function(filter,node){for(var i=0,ii=filter.fids.length;i<ii;++i){this.writeNode("FeatureId",filter.fids[i],node);}},writers:{"ogc":{"Filter":function(filter){var node=this.createElementNSPlus("ogc:Filter");if(filter.type==="FID"){this.writeFeatureIdNodes(filter,node);}else{this.writeNode(this.getFilterType(filter),filter,node);}
-return node;},"FeatureId":function(fid){return this.createElementNSPlus("ogc:FeatureId",{attributes:{fid:fid}});},"And":function(filter){var node=this.createElementNSPlus("ogc:And");var childFilter;for(var i=0,ii=filter.filters.length;i<ii;++i){childFilter=filter.filters[i];if(childFilter.type==="FID"){this.writeFeatureIdNodes(childFilter,node);}else{this.writeNode(this.getFilterType(childFilter),childFilter,node);}}
-return node;},"Or":function(filter){var node=this.createElementNSPlus("ogc:Or");var childFilter;for(var i=0,ii=filter.filters.length;i<ii;++i){childFilter=filter.filters[i];if(childFilter.type==="FID"){this.writeFeatureIdNodes(childFilter,node);}else{this.writeNode(this.getFilterType(childFilter),childFilter,node);}}
-return node;},"Not":function(filter){var node=this.createElementNSPlus("ogc:Not");var childFilter=filter.filters[0];if(childFilter.type==="FID"){this.writeFeatureIdNodes(childFilter,node);}else{this.writeNode(this.getFilterType(childFilter),childFilter,node);}
-return node;},"PropertyIsLessThan":function(filter){var node=this.createElementNSPlus("ogc:PropertyIsLessThan");this.writeNode("PropertyName",filter,node);this.writeOgcExpression(filter.value,node);return node;},"PropertyIsGreaterThan":function(filter){var node=this.createElementNSPlus("ogc:PropertyIsGreaterThan");this.writeNode("PropertyName",filter,node);this.writeOgcExpression(filter.value,node);return node;},"PropertyIsLessThanOrEqualTo":function(filter){var node=this.createElementNS [...]
-return node;}}},getFilterType:function(filter){var filterType=this.filterMap[filter.type];if(!filterType){throw"Filter writing not supported for rule type: "+filter.type;}
-return filterType;},filterMap:{"&&":"And","||":"Or","!":"Not","==":"PropertyIsEqualTo","!=":"PropertyIsNotEqualTo","<":"PropertyIsLessThan",">":"PropertyIsGreaterThan","<=":"PropertyIsLessThanOrEqualTo",">=":"PropertyIsGreaterThanOrEqualTo","..":"PropertyIsBetween","~":"PropertyIsLike","BBOX":"BBOX","DWITHIN":"DWITHIN","WITHIN":"WITHIN","CONTAINS":"CONTAINS","INTERSECTS":"INTERSECTS","FID":"FeatureId"},CLASS_NAME:"OpenLayers.Format.Filter.v1"});OpenLayers.Geometry=OpenLayers.Class({id:nu [...]
-return this.bounds;},calculateBounds:function(){},distanceTo:function(geometry,options){},getVertices:function(nodes){},atPoint:function(lonlat,toleranceLon,toleranceLat){var atPoint=false;var bounds=this.getBounds();if((bounds!=null)&&(lonlat!=null)){var dX=(toleranceLon!=null)?toleranceLon:0;var dY=(toleranceLat!=null)?toleranceLat:0;var toleranceBounds=new OpenLayers.Bounds(this.bounds.left-dX,this.bounds.bottom-dY,this.bounds.right+dX,this.bounds.top+dY);atPoint=toleranceBounds.conta [...]
-return atPoint;},getLength:function(){return 0.0;},getArea:function(){return 0.0;},getCentroid:function(){return null;},toString:function(){return OpenLayers.Format.WKT.prototype.write(new OpenLayers.Feature.Vector(this));},CLASS_NAME:"OpenLayers.Geometry"});OpenLayers.Geometry.fromWKT=function(wkt){var format=arguments.callee.format;if(!format){format=new OpenLayers.Format.WKT();arguments.callee.format=format;}
-var geom;var result=format.read(wkt);if(result instanceof OpenLayers.Feature.Vector){geom=result.geometry;}else if(OpenLayers.Util.isArray(result)){var len=result.length;var components=new Array(len);for(var i=0;i<len;++i){components[i]=result[i].geometry;}
-geom=new OpenLayers.Geometry.Collection(components);}
-return geom;};OpenLayers.Geometry.segmentsIntersect=function(seg1,seg2,options){var point=options&&options.point;var tolerance=options&&options.tolerance;var intersection=false;var x11_21=seg1.x1-seg2.x1;var y11_21=seg1.y1-seg2.y1;var x12_11=seg1.x2-seg1.x1;var y12_11=seg1.y2-seg1.y1;var y22_21=seg2.y2-seg2.y1;var x22_21=seg2.x2-seg2.x1;var d=(y22_21*x12_11)-(x22_21*y12_11);var n1=(x22_21*y11_21)-(y22_21*x11_21);var n2=(x12_11*y11_21)-(y12_11*x11_21);if(d==0){if(n1==0&&n2==0){intersectio [...]
-if(tolerance){var dist;if(intersection){if(point){var segs=[seg1,seg2];var seg,x,y;outer:for(var i=0;i<2;++i){seg=segs[i];for(var j=1;j<3;++j){x=seg["x"+j];y=seg["y"+j];dist=Math.sqrt(Math.pow(x-intersection.x,2)+
-Math.pow(y-intersection.y,2));if(dist<tolerance){intersection.x=x;intersection.y=y;break outer;}}}}}else{var segs=[seg1,seg2];var source,target,x,y,p,result;outer:for(var i=0;i<2;++i){source=segs[i];target=segs[(i+1)%2];for(var j=1;j<3;++j){p={x:source["x"+j],y:source["y"+j]};result=OpenLayers.Geometry.distanceToSegment(p,target);if(result.distance<tolerance){if(point){intersection=new OpenLayers.Geometry.Point(p.x,p.y);}else{intersection=true;}
-break outer;}}}}}
-return intersection;};OpenLayers.Geometry.distanceToSegment=function(point,segment){var x0=point.x;var y0=point.y;var x1=segment.x1;var y1=segment.y1;var x2=segment.x2;var y2=segment.y2;var dx=x2-x1;var dy=y2-y1;var along=((dx*(x0-x1))+(dy*(y0-y1)))/(Math.pow(dx,2)+Math.pow(dy,2));var x,y;if(along<=0.0){x=x1;y=y1;}else if(along>=1.0){x=x2;y=y2;}else{x=x1+along*dx;y=y1+along*dy;}
-return{distance:Math.sqrt(Math.pow(x-x0,2)+Math.pow(y-y0,2)),x:x,y:y};};OpenLayers.Geometry.Point=OpenLayers.Class(OpenLayers.Geometry,{x:null,y:null,initialize:function(x,y){OpenLayers.Geometry.prototype.initialize.apply(this,arguments);this.x=parseFloat(x);this.y=parseFloat(y);},clone:function(obj){if(obj==null){obj=new OpenLayers.Geometry.Point(this.x,this.y);}
-OpenLayers.Util.applyDefaults(obj,this);return obj;},calculateBounds:function(){this.bounds=new OpenLayers.Bounds(this.x,this.y,this.x,this.y);},distanceTo:function(geometry,options){var edge=!(options&&options.edge===false);var details=edge&&options&&options.details;var distance,x0,y0,x1,y1,result;if(geometry instanceof OpenLayers.Geometry.Point){x0=this.x;y0=this.y;x1=geometry.x;y1=geometry.y;distance=Math.sqrt(Math.pow(x0-x1,2)+Math.pow(y0-y1,2));result=!details?distance:{x0:x0,y0:y0, [...]
-return result;},equals:function(geom){var equals=false;if(geom!=null){equals=((this.x==geom.x&&this.y==geom.y)||(isNaN(this.x)&&isNaN(this.y)&&isNaN(geom.x)&&isNaN(geom.y)));}
-return equals;},toShortString:function(){return(this.x+", "+this.y);},move:function(x,y){this.x=this.x+x;this.y=this.y+y;this.clearBounds();},rotate:function(angle,origin){angle*=Math.PI/180;var radius=this.distanceTo(origin);var theta=angle+Math.atan2(this.y-origin.y,this.x-origin.x);this.x=origin.x+(radius*Math.cos(theta));this.y=origin.y+(radius*Math.sin(theta));this.clearBounds();},getCentroid:function(){return new OpenLayers.Geometry.Point(this.x,this.y);},resize:function(scale,orig [...]
-return intersect;},transform:function(source,dest){if((source&&dest)){OpenLayers.Projection.transform(this,source,dest);this.bounds=null;}
-return this;},getVertices:function(nodes){return[this];},CLASS_NAME:"OpenLayers.Geometry.Point"});OpenLayers.Geometry.Collection=OpenLayers.Class(OpenLayers.Geometry,{components:null,componentTypes:null,initialize:function(components){OpenLayers.Geometry.prototype.initialize.apply(this,arguments);this.components=[];if(components!=null){this.addComponents(components);}},destroy:function(){this.components.length=0;this.components=null;OpenLayers.Geometry.prototype.destroy.apply(this,argume [...]
-OpenLayers.Util.applyDefaults(geometry,this);return geometry;},getComponentsString:function(){var strings=[];for(var i=0,len=this.components.length;i<len;i++){strings.push(this.components[i].toShortString());}
-return strings.join(",");},calculateBounds:function(){this.bounds=null;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());}}
-if(bounds.left!=null&&bounds.bottom!=null&&bounds.right!=null&&bounds.top!=null){this.setBounds(bounds);}},addComponents:function(components){if(!(OpenLayers.Util.isArray(components))){components=[components];}
-for(var i=0,len=components.length;i<len;i++){this.addComponent(components[i]);}},addComponent:function(component,index){var added=false;if(component){if(this.componentTypes==null||(OpenLayers.Util.indexOf(this.componentTypes,component.CLASS_NAME)>-1)){if(index!=null&&(index<this.components.length)){var components1=this.components.slice(0,index);var components2=this.components.slice(index,this.components.length);components1.push(component);this.components=components1.concat(components2);} [...]
-component.parent=this;this.clearBounds();added=true;}}
-return added;},removeComponents:function(components){var removed=false;if(!(OpenLayers.Util.isArray(components))){components=[components];}
-for(var i=components.length-1;i>=0;--i){removed=this.removeComponent(components[i])||removed;}
-return removed;},removeComponent:function(component){OpenLayers.Util.removeItem(this.components,component);this.clearBounds();return true;},getLength:function(){var length=0.0;for(var i=0,len=this.components.length;i<len;i++){length+=this.components[i].getLength();}
-return length;},getArea:function(){var area=0.0;for(var i=0,len=this.components.length;i<len;i++){area+=this.components[i].getArea();}
-return area;},getGeodesicArea:function(projection){var area=0.0;for(var i=0,len=this.components.length;i<len;i++){area+=this.components[i].getGeodesicArea(projection);}
-return area;},getCentroid:function(weighted){if(!weighted){return this.components.length&&this.components[0].getCentroid();}
-var len=this.components.length;if(!len){return false;}
-var areas=[];var centroids=[];var areaSum=0;var minArea=Number.MAX_VALUE;var component;for(var i=0;i<len;++i){component=this.components[i];var area=component.getArea();var centroid=component.getCentroid(true);if(isNaN(area)||isNaN(centroid.x)||isNaN(centroid.y)){continue;}
-areas.push(area);areaSum+=area;minArea=(area<minArea&&area>0)?area:minArea;centroids.push(centroid);}
-len=areas.length;if(areaSum===0){for(var i=0;i<len;++i){areas[i]=1;}
-areaSum=areas.length;}else{for(var i=0;i<len;++i){areas[i]/=minArea;}
-areaSum/=minArea;}
-var xSum=0,ySum=0,centroid,area;for(var i=0;i<len;++i){centroid=centroids[i];area=areas[i];xSum+=centroid.x*area;ySum+=centroid.y*area;}
-return new OpenLayers.Geometry.Point(xSum/areaSum,ySum/areaSum);},getGeodesicLength:function(projection){var length=0.0;for(var i=0,len=this.components.length;i<len;i++){length+=this.components[i].getGeodesicLength(projection);}
-return length;},move:function(x,y){for(var i=0,len=this.components.length;i<len;i++){this.components[i].move(x,y);}},rotate:function(angle,origin){for(var i=0,len=this.components.length;i<len;++i){this.components[i].rotate(angle,origin);}},resize:function(scale,origin,ratio){for(var i=0;i<this.components.length;++i){this.components[i].resize(scale,origin,ratio);}
-return this;},distanceTo:function(geometry,options){var edge=!(options&&options.edge===false);var details=edge&&options&&options.details;var result,best,distance;var min=Number.POSITIVE_INFINITY;for(var i=0,len=this.components.length;i<len;++i){result=this.components[i].distanceTo(geometry,options);distance=details?result.distance:result;if(distance<min){min=distance;best=result;if(min==0){break;}}}
-return best;},equals:function(geometry){var equivalent=true;if(!geometry||!geometry.CLASS_NAME||(this.CLASS_NAME!=geometry.CLASS_NAME)){equivalent=false;}else if(!(OpenLayers.Util.isArray(geometry.components))||(geometry.components.length!=this.components.length)){equivalent=false;}else{for(var i=0,len=this.components.length;i<len;++i){if(!this.components[i].equals(geometry.components[i])){equivalent=false;break;}}}
-return equivalent;},transform:function(source,dest){if(source&&dest){for(var i=0,len=this.components.length;i<len;i++){var component=this.components[i];component.transform(source,dest);}
-this.bounds=null;}
-return this;},intersects:function(geometry){var intersect=false;for(var i=0,len=this.components.length;i<len;++i){intersect=geometry.intersects(this.components[i]);if(intersect){break;}}
-return intersect;},getVertices:function(nodes){var vertices=[];for(var i=0,len=this.components.length;i<len;++i){Array.prototype.push.apply(vertices,this.components[i].getVertices(nodes));}
-return vertices;},CLASS_NAME:"OpenLayers.Geometry.Collection"});OpenLayers.Geometry.MultiPoint=OpenLayers.Class(OpenLayers.Geometry.Collection,{componentTypes:["OpenLayers.Geometry.Point"],initialize:function(components){OpenLayers.Geometry.Collection.prototype.initialize.apply(this,arguments);},addPoint:function(point,index){this.addComponent(point,index);},removePoint:function(point){this.removeComponent(point);},CLASS_NAME:"OpenLayers.Geometry.MultiPoint"});OpenLayers.Geometry.Curve=O [...]
-return length;},getGeodesicLength:function(projection){var geom=this;if(projection){var gg=new OpenLayers.Projection("EPSG:4326");if(!gg.equals(projection)){geom=this.clone().transform(projection,gg);}}
-var length=0.0;if(geom.components&&(geom.components.length>1)){var p1,p2;for(var i=1,len=geom.components.length;i<len;i++){p1=geom.components[i-1];p2=geom.components[i];length+=OpenLayers.Util.distVincenty({lon:p1.x,lat:p1.y},{lon:p2.x,lat:p2.y});}}
-return length*1000;},CLASS_NAME:"OpenLayers.Geometry.Curve"});OpenLayers.Geometry.LineString=OpenLayers.Class(OpenLayers.Geometry.Curve,{initialize:function(points){OpenLayers.Geometry.Curve.prototype.initialize.apply(this,arguments);},removeComponent:function(point){var removed=this.components&&(this.components.length>2);if(removed){OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this,arguments);}
-return removed;},intersects:function(geometry){var intersect=false;var type=geometry.CLASS_NAME;if(type=="OpenLayers.Geometry.LineString"||type=="OpenLayers.Geometry.LinearRing"||type=="OpenLayers.Geometry.Point"){var segs1=this.getSortedSegments();var segs2;if(type=="OpenLayers.Geometry.Point"){segs2=[{x1:geometry.x,y1:geometry.y,x2:geometry.x,y2:geometry.y}];}else{segs2=geometry.getSortedSegments();}
-var seg1,seg1x1,seg1x2,seg1y1,seg1y2,seg2,seg2y1,seg2y2;outer:for(var i=0,len=segs1.length;i<len;++i){seg1=segs1[i];seg1x1=seg1.x1;seg1x2=seg1.x2;seg1y1=seg1.y1;seg1y2=seg1.y2;inner:for(var j=0,jlen=segs2.length;j<jlen;++j){seg2=segs2[j];if(seg2.x1>seg1x2){break;}
-if(seg2.x2<seg1x1){continue;}
-seg2y1=seg2.y1;seg2y2=seg2.y2;if(Math.min(seg2y1,seg2y2)>Math.max(seg1y1,seg1y2)){continue;}
-if(Math.max(seg2y1,seg2y2)<Math.min(seg1y1,seg1y2)){continue;}
-if(OpenLayers.Geometry.segmentsIntersect(seg1,seg2)){intersect=true;break outer;}}}}else{intersect=geometry.intersects(this);}
-return intersect;},getSortedSegments:function(){var numSeg=this.components.length-1;var segments=new Array(numSeg),point1,point2;for(var i=0;i<numSeg;++i){point1=this.components[i];point2=this.components[i+1];if(point1.x<point2.x){segments[i]={x1:point1.x,y1:point1.y,x2:point2.x,y2:point2.y};}else{segments[i]={x1:point2.x,y1:point2.y,x2:point1.x,y2:point1.y};}}
-function byX1(seg1,seg2){return seg1.x1-seg2.x1;}
-return segments.sort(byX1);},splitWithSegment:function(seg,options){var edge=!(options&&options.edge===false);var tolerance=options&&options.tolerance;var lines=[];var verts=this.getVertices();var points=[];var intersections=[];var split=false;var vert1,vert2,point;var node,vertex,target;var interOptions={point:true,tolerance:tolerance};var result=null;for(var i=0,stop=verts.length-2;i<=stop;++i){vert1=verts[i];points.push(vert1.clone());vert2=verts[i+1];target={x1:vert1.x,y1:vert1.y,x2: [...]
-if(vertex||edge){if(!point.equals(intersections[intersections.length-1])){intersections.push(point.clone());}
-if(i===0){if(point.equals(vert1)){continue;}}
-if(point.equals(vert2)){continue;}
-split=true;if(!point.equals(vert1)){points.push(point);}
-lines.push(new OpenLayers.Geometry.LineString(points));points=[point.clone()];}}}
-if(split){points.push(vert2.clone());lines.push(new OpenLayers.Geometry.LineString(points));}
-if(intersections.length>0){var xDir=seg.x1<seg.x2?1:-1;var yDir=seg.y1<seg.y2?1:-1;result={lines:lines,points:intersections.sort(function(p1,p2){return(xDir*p1.x-xDir*p2.x)||(yDir*p1.y-yDir*p2.y);})};}
-return result;},split:function(target,options){var results=null;var mutual=options&&options.mutual;var sourceSplit,targetSplit,sourceParts,targetParts;if(target instanceof OpenLayers.Geometry.LineString){var verts=this.getVertices();var vert1,vert2,seg,splits,lines,point;var points=[];sourceParts=[];for(var i=0,stop=verts.length-2;i<=stop;++i){vert1=verts[i];vert2=verts[i+1];seg={x1:vert1.x,y1:vert1.y,x2:vert2.x,y2:vert2.y};targetParts=targetParts||[target];if(mutual){points.push(vert1.c [...]
-for(var j=0;j<targetParts.length;++j){splits=targetParts[j].splitWithSegment(seg,options);if(splits){lines=splits.lines;if(lines.length>0){lines.unshift(j,1);Array.prototype.splice.apply(targetParts,lines);j+=lines.length-2;}
-if(mutual){for(var k=0,len=splits.points.length;k<len;++k){point=splits.points[k];if(!point.equals(vert1)){points.push(point);sourceParts.push(new OpenLayers.Geometry.LineString(points));if(point.equals(vert2)){points=[];}else{points=[point.clone()];}}}}}}}
-if(mutual&&sourceParts.length>0&&points.length>0){points.push(vert2.clone());sourceParts.push(new OpenLayers.Geometry.LineString(points));}}else{results=target.splitWith(this,options);}
-if(targetParts&&targetParts.length>1){targetSplit=true;}else{targetParts=[];}
-if(sourceParts&&sourceParts.length>1){sourceSplit=true;}else{sourceParts=[];}
-if(targetSplit||sourceSplit){if(mutual){results=[sourceParts,targetParts];}else{results=targetParts;}}
-return results;},splitWith:function(geometry,options){return geometry.split(this,options);},getVertices:function(nodes){var vertices;if(nodes===true){vertices=[this.components[0],this.components[this.components.length-1]];}else if(nodes===false){vertices=this.components.slice(1,this.components.length-1);}else{vertices=this.components.slice();}
-return vertices;},distanceTo:function(geometry,options){var edge=!(options&&options.edge===false);var details=edge&&options&&options.details;var result,best={};var min=Number.POSITIVE_INFINITY;if(geometry instanceof OpenLayers.Geometry.Point){var segs=this.getSortedSegments();var x=geometry.x;var y=geometry.y;var seg;for(var i=0,len=segs.length;i<len;++i){seg=segs[i];result=OpenLayers.Geometry.distanceToSegment(geometry,seg);if(result.distance<min){min=result.distance;best=result;if(min= [...]
-if(details){best={distance:best.distance,x0:best.x,y0:best.y,x1:x,y1:y};}else{best=best.distance;}}else if(geometry instanceof OpenLayers.Geometry.LineString){var segs0=this.getSortedSegments();var segs1=geometry.getSortedSegments();var seg0,seg1,intersection,x0,y0;var len1=segs1.length;var interOptions={point:true};outer:for(var i=0,len=segs0.length;i<len;++i){seg0=segs0[i];x0=seg0.x1;y0=seg0.y1;for(var j=0;j<len1;++j){seg1=segs1[j];intersection=OpenLayers.Geometry.segmentsIntersect(seg [...]
-if(!details){best=best.distance;}
-if(min!==0){if(seg0){result=geometry.distanceTo(new OpenLayers.Geometry.Point(seg0.x2,seg0.y2),options);var dist=details?result.distance:result;if(dist<min){if(details){best={distance:min,x0:result.x1,y0:result.y1,x1:result.x0,y1:result.y0};}else{best=dist;}}}}}else{best=geometry.distanceTo(this,options);if(details){best={distance:best.distance,x0:best.x1,y0:best.y1,x1:best.x0,y1:best.y0};}}
-return best;},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);};var douglasPeuckerReduction=function(points,firstPoint,lastPoint,tolerance){var maxDistance=0;var indexFarthest=0;for(var index=firstPoint,distance;index<lastPoint;index++){distance=perpendicularDistance(points[firstPoint],points[lastPoint],points[index]);if(distance>maxDistance){maxDistance=distance;indexFarthest=index;}}
-if(maxDistance>tolerance&&indexFarthest!=firstPoint){pointIndexsToKeep.push(indexFarthest);douglasPeuckerReduction(points,firstPoint,indexFarthest,tolerance);douglasPeuckerReduction(points,indexFarthest,lastPoint,tolerance);}};var perpendicularDistance=function(point1,point2,point){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) [...]
-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"});OpenLayers.Geometry.MultiLineString=OpenLayers.Class(OpenLayers.Geometry.Collection,{componentTypes:["OpenLayers.Geometry.LineString"],initialize:function(components){OpenLayers.Geometry.Collection.prototype.initialize.apply(this,arguments);},split:function(geometry,options){var results=null;var mutual=options&&options.mutual;var splits,sourceLine,sourceLines,sourceSplit,targetSplit;var sourceParts=[];var targetParts=[geom [...]
-sourceSplit=true;splits=splits[1];}
-if(splits.length){splits.unshift(j,1);Array.prototype.splice.apply(targetParts,splits);break;}}}
-if(!sourceSplit){if(sourceParts.length){sourceParts[sourceParts.length-1].addComponent(sourceLine.clone());}else{sourceParts=[new OpenLayers.Geometry.MultiLineString(sourceLine.clone())];}}}
-if(sourceParts&&sourceParts.length>1){sourceSplit=true;}else{sourceParts=[];}
-if(targetParts&&targetParts.length>1){targetSplit=true;}else{targetParts=[];}
-if(sourceSplit||targetSplit){if(mutual){results=[sourceParts,targetParts];}else{results=targetParts;}}
-return results;},splitWith:function(geometry,options){var results=null;var mutual=options&&options.mutual;var splits,targetLine,sourceLines,sourceSplit,targetSplit,sourceParts,targetParts;if(geometry instanceof OpenLayers.Geometry.LineString){targetParts=[];sourceParts=[geometry];for(var i=0,len=this.components.length;i<len;++i){targetSplit=false;targetLine=this.components[i];for(var j=0;j<sourceParts.length;++j){splits=sourceParts[j].split(targetLine,options);if(splits){if(mutual){sourc [...]
-splits=splits[1];if(splits.length===0){splits=[targetLine.clone()];}}
-for(var k=0,klen=splits.length;k<klen;++k){if(k===0&&targetParts.length){targetParts[targetParts.length-1].addComponent(splits[k]);}else{targetParts.push(new OpenLayers.Geometry.MultiLineString([splits[k]]));}}
-targetSplit=true;}}
-if(!targetSplit){if(targetParts.length){targetParts[targetParts.length-1].addComponent(targetLine.clone());}else{targetParts=[new OpenLayers.Geometry.MultiLineString([targetLine.clone()])];}}}}else{results=geometry.split(this);}
-if(sourceParts&&sourceParts.length>1){sourceSplit=true;}else{sourceParts=[];}
-if(targetParts&&targetParts.length>1){targetSplit=true;}else{targetParts=[];}
-if(sourceSplit||targetSplit){if(mutual){results=[sourceParts,targetParts];}else{results=targetParts;}}
-return results;},CLASS_NAME:"OpenLayers.Geometry.MultiLineString"});OpenLayers.Geometry.LinearRing=OpenLayers.Class(OpenLayers.Geometry.LineString,{componentTypes:["OpenLayers.Geometry.Point"],initialize:function(points){OpenLayers.Geometry.LineString.prototype.initialize.apply(this,arguments);},addComponent:function(point,index){var added=false;var lastPoint=this.components.pop();if(index!=null||!point.equals(lastPoint)){added=OpenLayers.Geometry.Collection.prototype.addComponent.apply( [...]
-var firstPoint=this.components[0];OpenLayers.Geometry.Collection.prototype.addComponent.apply(this,[firstPoint]);return added;},removeComponent:function(point){var removed=this.components&&(this.components.length>3);if(removed){this.components.pop();OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this,arguments);var firstPoint=this.components[0];OpenLayers.Geometry.Collection.prototype.addComponent.apply(this,[firstPoint]);}
-return removed;},move:function(x,y){for(var i=0,len=this.components.length;i<len-1;i++){this.components[i].move(x,y);}},rotate:function(angle,origin){for(var i=0,len=this.components.length;i<len-1;++i){this.components[i].rotate(angle,origin);}},resize:function(scale,origin,ratio){for(var i=0,len=this.components.length;i<len-1;++i){this.components[i].resize(scale,origin,ratio);}
-return this;},transform:function(source,dest){if(source&&dest){for(var i=0,len=this.components.length;i<len-1;i++){var component=this.components[i];component.transform(source,dest);}
-this.bounds=null;}
-return this;},getCentroid:function(){if(this.components&&(this.components.length>2)){var sumX=0.0;var sumY=0.0;for(var i=0;i<this.components.length-1;i++){var b=this.components[i];var c=this.components[i+1];sumX+=(b.x+c.x)*(b.x*c.y-c.x*b.y);sumY+=(b.y+c.y)*(b.x*c.y-c.x*b.y);}
-var area=-1*this.getArea();var x=sumX/(6*area);var y=sumY/(6*area);return new OpenLayers.Geometry.Point(x,y);}else{return null;}},getArea:function(){var area=0.0;if(this.components&&(this.components.length>2)){var sum=0.0;for(var i=0,len=this.components.length;i<len-1;i++){var b=this.components[i];var c=this.components[i+1];sum+=(b.x+c.x)*(c.y-b.y);}
-area=-sum/2.0;}
-return area;},getGeodesicArea:function(projection){var ring=this;if(projection){var gg=new OpenLayers.Projection("EPSG:4326");if(!gg.equals(projection)){ring=this.clone().transform(projection,gg);}}
-var area=0.0;var len=ring.components&&ring.components.length;if(len>2){var p1,p2;for(var i=0;i<len-1;i++){p1=ring.components[i];p2=ring.components[i+1];area+=OpenLayers.Util.rad(p2.x-p1.x)*(2+Math.sin(OpenLayers.Util.rad(p1.y))+
-Math.sin(OpenLayers.Util.rad(p2.y)));}
-area=area*6378137.0*6378137.0/2.0;}
-return area;},containsPoint:function(point){var approx=OpenLayers.Number.limitSigDigs;var digs=14;var px=approx(point.x,digs);var py=approx(point.y,digs);function getX(y,x1,y1,x2,y2){return(((x1-x2)*y)+((x2*y1)-(x1*y2)))/(y1-y2);}
-var numSeg=this.components.length-1;var start,end,x1,y1,x2,y2,cx,cy;var crosses=0;for(var i=0;i<numSeg;++i){start=this.components[i];x1=approx(start.x,digs);y1=approx(start.y,digs);end=this.components[i+1];x2=approx(end.x,digs);y2=approx(end.y,digs);if(y1==y2){if(py==y1){if(x1<=x2&&(px>=x1&&px<=x2)||x1>=x2&&(px<=x1&&px>=x2)){crosses=-1;break;}}
-continue;}
-cx=approx(getX(py,x1,y1,x2,y2),digs);if(cx==px){if(y1<y2&&(py>=y1&&py<=y2)||y1>y2&&(py<=y1&&py>=y2)){crosses=-1;break;}}
-if(cx<=px){continue;}
-if(x1!=x2&&(cx<Math.min(x1,x2)||cx>Math.max(x1,x2))){continue;}
-if(y1<y2&&(py>=y1&&py<y2)||y1>y2&&(py<y1&&py>=y2)){++crosses;}}
-var contained=(crosses==-1)?1:!!(crosses&1);return contained;},intersects:function(geometry){var intersect=false;if(geometry.CLASS_NAME=="OpenLayers.Geometry.Point"){intersect=this.containsPoint(geometry);}else if(geometry.CLASS_NAME=="OpenLayers.Geometry.LineString"){intersect=geometry.intersects(this);}else if(geometry.CLASS_NAME=="OpenLayers.Geometry.LinearRing"){intersect=OpenLayers.Geometry.LineString.prototype.intersects.apply(this,[geometry]);}else{for(var i=0,len=geometry.compone [...]
-return intersect;},getVertices:function(nodes){return(nodes===true)?[]:this.components.slice(0,this.components.length-1);},CLASS_NAME:"OpenLayers.Geometry.LinearRing"});OpenLayers.Geometry.Polygon=OpenLayers.Class(OpenLayers.Geometry.Collection,{componentTypes:["OpenLayers.Geometry.LinearRing"],initialize:function(components){OpenLayers.Geometry.Collection.prototype.initialize.apply(this,arguments);},getArea:function(){var area=0.0;if(this.components&&(this.components.length>0)){area+=Ma [...]
-return area;},getGeodesicArea:function(projection){var area=0.0;if(this.components&&(this.components.length>0)){area+=Math.abs(this.components[0].getGeodesicArea(projection));for(var i=1,len=this.components.length;i<len;i++){area-=Math.abs(this.components[i].getGeodesicArea(projection));}}
-return area;},containsPoint:function(point){var numRings=this.components.length;var contained=false;if(numRings>0){contained=this.components[0].containsPoint(point);if(contained!==1){if(contained&&numRings>1){var hole;for(var i=1;i<numRings;++i){hole=this.components[i].containsPoint(point);if(hole){if(hole===1){contained=1;}else{contained=false;}
-break;}}}}}
-return contained;},intersects:function(geometry){var intersect=false;var i,len;if(geometry.CLASS_NAME=="OpenLayers.Geometry.Point"){intersect=this.containsPoint(geometry);}else if(geometry.CLASS_NAME=="OpenLayers.Geometry.LineString"||geometry.CLASS_NAME=="OpenLayers.Geometry.LinearRing"){for(i=0,len=this.components.length;i<len;++i){intersect=geometry.intersects(this.components[i]);if(intersect){break;}}
-if(!intersect){for(i=0,len=geometry.components.length;i<len;++i){intersect=this.containsPoint(geometry.components[i]);if(intersect){break;}}}}else{for(i=0,len=geometry.components.length;i<len;++i){intersect=this.intersects(geometry.components[i]);if(intersect){break;}}}
-if(!intersect&&geometry.CLASS_NAME=="OpenLayers.Geometry.Polygon"){var ring=this.components[0];for(i=0,len=ring.components.length;i<len;++i){intersect=geometry.containsPoint(ring.components[i]);if(intersect){break;}}}
-return intersect;},distanceTo:function(geometry,options){var edge=!(options&&options.edge===false);var result;if(!edge&&this.intersects(geometry)){result=0;}else{result=OpenLayers.Geometry.Collection.prototype.distanceTo.apply(this,[geometry,options]);}
-return result;},CLASS_NAME:"OpenLayers.Geometry.Polygon"});OpenLayers.Geometry.Polygon.createRegularPolygon=function(origin,radius,sides,rotation){var angle=Math.PI*((1/sides)-(1/2));if(rotation){angle+=(rotation/180)*Math.PI;}
-var rotatedAngle,x,y;var points=[];for(var i=0;i<sides;++i){rotatedAngle=angle+(i*2*Math.PI/sides);x=origin.x+(radius*Math.cos(rotatedAngle));y=origin.y+(radius*Math.sin(rotatedAngle));points.push(new OpenLayers.Geometry.Point(x,y));}
-var ring=new OpenLayers.Geometry.LinearRing(points);return new OpenLayers.Geometry.Polygon([ring]);};OpenLayers.Geometry.MultiPolygon=OpenLayers.Class(OpenLayers.Geometry.Collection,{componentTypes:["OpenLayers.Geometry.Polygon"],initialize:function(components){OpenLayers.Geometry.Collection.prototype.initialize.apply(this,arguments);},CLASS_NAME:"OpenLayers.Geometry.MultiPolygon"});OpenLayers.Format.GML=OpenLayers.Class(OpenLayers.Format.XML,{featureNS:"http://mapserver.gis.umn.edu/maps [...]
-var featureNodes=this.getElementsByTagNameNS(data.documentElement,this.gmlns,this.featureName);var features=[];for(var i=0;i<featureNodes.length;i++){var feature=this.parseFeature(featureNodes[i]);if(feature){features.push(feature);}}
-return features;},parseFeature:function(node){var order=["MultiPolygon","Polygon","MultiLineString","LineString","MultiPoint","Point","Envelope"];var type,nodeList,geometry,parser;for(var i=0;i<order.length;++i){type=order[i];nodeList=this.getElementsByTagNameNS(node,this.gmlns,type);if(nodeList.length>0){parser=this.parseGeometry[type.toLowerCase()];if(parser){geometry=parser.apply(this,[nodeList[0]]);if(this.internalProjection&&this.externalProjection){geometry.transform(this.externalP [...]
-break;}}
-var bounds;var boxNodes=this.getElementsByTagNameNS(node,this.gmlns,"Box");for(i=0;i<boxNodes.length;++i){var boxNode=boxNodes[i];var box=this.parseGeometry["box"].apply(this,[boxNode]);var parentNode=boxNode.parentNode;var parentName=parentNode.localName||parentNode.nodeName.split(":").pop();if(parentName==="boundedBy"){bounds=box;}else{geometry=box.toGeometry();}}
-var attributes;if(this.extractAttributes){attributes=this.parseAttributes(node);}
-var feature=new OpenLayers.Feature.Vector(geometry,attributes);feature.bounds=bounds;feature.gml={featureType:node.firstChild.nodeName.split(":")[1],featureNS:node.firstChild.namespaceURI,featureNSPrefix:node.firstChild.prefix};var childNode=node.firstChild;var fid;while(childNode){if(childNode.nodeType==1){fid=childNode.getAttribute("fid")||childNode.getAttribute("id");if(fid){break;}}
-childNode=childNode.nextSibling;}
-feature.fid=fid;return feature;},parseGeometry:{point:function(node){var nodeList,coordString;var coords=[];var nodeList=this.getElementsByTagNameNS(node,this.gmlns,"pos");if(nodeList.length>0){coordString=nodeList[0].firstChild.nodeValue;coordString=coordString.replace(this.regExes.trimSpace,"");coords=coordString.split(this.regExes.splitSpace);}
-if(coords.length==0){nodeList=this.getElementsByTagNameNS(node,this.gmlns,"coordinates");if(nodeList.length>0){coordString=nodeList[0].firstChild.nodeValue;coordString=coordString.replace(this.regExes.removeSpace,"");coords=coordString.split(",");}}
-if(coords.length==0){nodeList=this.getElementsByTagNameNS(node,this.gmlns,"coord");if(nodeList.length>0){var xList=this.getElementsByTagNameNS(nodeList[0],this.gmlns,"X");var yList=this.getElementsByTagNameNS(nodeList[0],this.gmlns,"Y");if(xList.length>0&&yList.length>0){coords=[xList[0].firstChild.nodeValue,yList[0].firstChild.nodeValue];}}}
-if(coords.length==2){coords[2]=null;}
-if(this.xy){return new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]);}
-else{return new OpenLayers.Geometry.Point(coords[1],coords[0],coords[2]);}},multipoint:function(node){var nodeList=this.getElementsByTagNameNS(node,this.gmlns,"Point");var components=[];if(nodeList.length>0){var point;for(var i=0;i<nodeList.length;++i){point=this.parseGeometry.point.apply(this,[nodeList[i]]);if(point){components.push(point);}}}
-return new OpenLayers.Geometry.MultiPoint(components);},linestring:function(node,ring){var nodeList,coordString;var coords=[];var points=[];nodeList=this.getElementsByTagNameNS(node,this.gmlns,"posList");if(nodeList.length>0){coordString=this.getChildValue(nodeList[0]);coordString=coordString.replace(this.regExes.trimSpace,"");coords=coordString.split(this.regExes.splitSpace);var dim=parseInt(nodeList[0].getAttribute("dimension"));var j,x,y,z;for(var i=0;i<coords.length/dim;++i){j=i*dim; [...]
-if(coords.length==0){nodeList=this.getElementsByTagNameNS(node,this.gmlns,"coordinates");if(nodeList.length>0){coordString=this.getChildValue(nodeList[0]);coordString=coordString.replace(this.regExes.trimSpace,"");coordString=coordString.replace(this.regExes.trimComma,",");var pointList=coordString.split(this.regExes.splitSpace);for(var i=0;i<pointList.length;++i){coords=pointList[i].split(",");if(coords.length==2){coords[2]=null;}
-if(this.xy){points.push(new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]));}else{points.push(new OpenLayers.Geometry.Point(coords[1],coords[0],coords[2]));}}}}
-var line=null;if(points.length!=0){if(ring){line=new OpenLayers.Geometry.LinearRing(points);}else{line=new OpenLayers.Geometry.LineString(points);}}
-return line;},multilinestring:function(node){var nodeList=this.getElementsByTagNameNS(node,this.gmlns,"LineString");var components=[];if(nodeList.length>0){var line;for(var i=0;i<nodeList.length;++i){line=this.parseGeometry.linestring.apply(this,[nodeList[i]]);if(line){components.push(line);}}}
-return new OpenLayers.Geometry.MultiLineString(components);},polygon:function(node){var nodeList=this.getElementsByTagNameNS(node,this.gmlns,"LinearRing");var components=[];if(nodeList.length>0){var ring;for(var i=0;i<nodeList.length;++i){ring=this.parseGeometry.linestring.apply(this,[nodeList[i],true]);if(ring){components.push(ring);}}}
-return new OpenLayers.Geometry.Polygon(components);},multipolygon:function(node){var nodeList=this.getElementsByTagNameNS(node,this.gmlns,"Polygon");var components=[];if(nodeList.length>0){var polygon;for(var i=0;i<nodeList.length;++i){polygon=this.parseGeometry.polygon.apply(this,[nodeList[i]]);if(polygon){components.push(polygon);}}}
-return new OpenLayers.Geometry.MultiPolygon(components);},envelope:function(node){var components=[];var coordString;var envelope;var lpoint=this.getElementsByTagNameNS(node,this.gmlns,"lowerCorner");if(lpoint.length>0){var coords=[];if(lpoint.length>0){coordString=lpoint[0].firstChild.nodeValue;coordString=coordString.replace(this.regExes.trimSpace,"");coords=coordString.split(this.regExes.splitSpace);}
-if(coords.length==2){coords[2]=null;}
-if(this.xy){var lowerPoint=new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]);}else{var lowerPoint=new OpenLayers.Geometry.Point(coords[1],coords[0],coords[2]);}}
-var upoint=this.getElementsByTagNameNS(node,this.gmlns,"upperCorner");if(upoint.length>0){var coords=[];if(upoint.length>0){coordString=upoint[0].firstChild.nodeValue;coordString=coordString.replace(this.regExes.trimSpace,"");coords=coordString.split(this.regExes.splitSpace);}
-if(coords.length==2){coords[2]=null;}
-if(this.xy){var upperPoint=new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]);}else{var upperPoint=new OpenLayers.Geometry.Point(coords[1],coords[0],coords[2]);}}
-if(lowerPoint&&upperPoint){components.push(new OpenLayers.Geometry.Point(lowerPoint.x,lowerPoint.y));components.push(new OpenLayers.Geometry.Point(upperPoint.x,lowerPoint.y));components.push(new OpenLayers.Geometry.Point(upperPoint.x,upperPoint.y));components.push(new OpenLayers.Geometry.Point(lowerPoint.x,upperPoint.y));components.push(new OpenLayers.Geometry.Point(lowerPoint.x,lowerPoint.y));var ring=new OpenLayers.Geometry.LinearRing(components);envelope=new OpenLayers.Geometry.Polygo [...]
-return envelope;},box:function(node){var nodeList=this.getElementsByTagNameNS(node,this.gmlns,"coordinates");var coordString;var coords,beginPoint=null,endPoint=null;if(nodeList.length>0){coordString=nodeList[0].firstChild.nodeValue;coords=coordString.split(" ");if(coords.length==2){beginPoint=coords[0].split(",");endPoint=coords[1].split(",");}}
-if(beginPoint!==null&&endPoint!==null){return new OpenLayers.Bounds(parseFloat(beginPoint[0]),parseFloat(beginPoint[1]),parseFloat(endPoint[0]),parseFloat(endPoint[1]));}}},parseAttributes:function(node){var attributes={};var childNode=node.firstChild;var children,i,child,grandchildren,grandchild,name,value;while(childNode){if(childNode.nodeType==1){children=childNode.childNodes;for(i=0;i<children.length;++i){child=children[i];if(child.nodeType==1){grandchildren=child.childNodes;if(grand [...]
-break;}
-childNode=childNode.nextSibling;}
-return attributes;},write:function(features){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-var gml=this.createElementNS("http://www.opengis.net/wfs","wfs:"+this.collectionName);for(var i=0;i<features.length;i++){gml.appendChild(this.createFeatureXML(features[i]));}
-return OpenLayers.Format.XML.prototype.write.apply(this,[gml]);},createFeatureXML:function(feature){var geometry=feature.geometry;var geometryNode=this.buildGeometryNode(geometry);var geomContainer=this.createElementNS(this.featureNS,this.featurePrefix+":"+
-this.geometryName);geomContainer.appendChild(geometryNode);var featureNode=this.createElementNS(this.gmlns,"gml:"+this.featureName);var featureContainer=this.createElementNS(this.featureNS,this.featurePrefix+":"+
-this.layerName);var fid=feature.fid||feature.id;featureContainer.setAttribute("fid",fid);featureContainer.appendChild(geomContainer);for(var attr in feature.attributes){var attrText=this.createTextNode(feature.attributes[attr]);var nodename=attr.substring(attr.lastIndexOf(":")+1);var attrContainer=this.createElementNS(this.featureNS,this.featurePrefix+":"+
-nodename);attrContainer.appendChild(attrText);featureContainer.appendChild(attrContainer);}
-featureNode.appendChild(featureContainer);return featureNode;},buildGeometryNode:function(geometry){if(this.externalProjection&&this.internalProjection){geometry=geometry.clone();geometry.transform(this.internalProjection,this.externalProjection);}
-var className=geometry.CLASS_NAME;var type=className.substring(className.lastIndexOf(".")+1);var builder=this.buildGeometry[type.toLowerCase()];return builder.apply(this,[geometry]);},buildGeometry:{point:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:Point");gml.appendChild(this.buildCoordinatesNode(geometry));return gml;},multipoint:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:MultiPoint");var points=geometry.components;var pointMember,pointGeom;for( [...]
-return gml;},linestring:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:LineString");gml.appendChild(this.buildCoordinatesNode(geometry));return gml;},multilinestring:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:MultiLineString");var lines=geometry.components;var lineMember,lineGeom;for(var i=0;i<lines.length;++i){lineMember=this.createElementNS(this.gmlns,"gml:lineStringMember");lineGeom=this.buildGeometry.linestring.apply(this,[lines[i]]);lineMember.a [...]
-return gml;},linearring:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:LinearRing");gml.appendChild(this.buildCoordinatesNode(geometry));return gml;},polygon:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:Polygon");var rings=geometry.components;var ringMember,ringGeom,type;for(var i=0;i<rings.length;++i){type=(i==0)?"outerBoundaryIs":"innerBoundaryIs";ringMember=this.createElementNS(this.gmlns,"gml:"+type);ringGeom=this.buildGeometry.linearring.apply(thi [...]
-return gml;},multipolygon:function(geometry){var gml=this.createElementNS(this.gmlns,"gml:MultiPolygon");var polys=geometry.components;var polyMember,polyGeom;for(var i=0;i<polys.length;++i){polyMember=this.createElementNS(this.gmlns,"gml:polygonMember");polyGeom=this.buildGeometry.polygon.apply(this,[polys[i]]);polyMember.appendChild(polyGeom);gml.appendChild(polyMember);}
-return gml;},bounds:function(bounds){var gml=this.createElementNS(this.gmlns,"gml:Box");gml.appendChild(this.buildCoordinatesNode(bounds));return gml;}},buildCoordinatesNode:function(geometry){var coordinatesNode=this.createElementNS(this.gmlns,"gml:coordinates");coordinatesNode.setAttribute("decimal",".");coordinatesNode.setAttribute("cs",",");coordinatesNode.setAttribute("ts"," ");var parts=[];if(geometry instanceof OpenLayers.Bounds){parts.push(geometry.left+","+geometry.bottom);parts [...]
-var txtNode=this.createTextNode(parts.join(" "));coordinatesNode.appendChild(txtNode);return coordinatesNode;},CLASS_NAME:"OpenLayers.Format.GML"});if(!OpenLayers.Format.GML){OpenLayers.Format.GML={};}
-OpenLayers.Format.GML.Base=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{gml:"http://www.opengis.net/gml",xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.org/2001/XMLSchema-instance",wfs:"http://www.opengis.net/wfs"},defaultPrefix:"gml",schemaLocation:null,featureType:null,featureNS:null,geometryName:"geometry",extractAttributes:true,srsName:null,xy:true,geometryTypes:null,singleFeatureType:null,regExes:{trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s*/g),splitSpace:(/\s+/),trimC [...]
-this.singleFeatureType=!options||(typeof options.featureType==="string");},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 features=[];this.readNode(data,{features:features},true);if(features.length==0){var elements=this.getElementsByTagNameNS(data,this.namespaces.gml,"featureMember");if(elements.length){for(var i=0,len=elements.length;i<len;++i){this.readNode(elements[i],{features:features},true);}}else{var elements=this.getElementsByTagNameNS(data,this.namespaces.gml,"featureMembers");if(elements.length){this.readNode(elements[0],{features:features},true);}}}
-return features;},readNode:function(node,obj,first){if(first===true&&this.autoConfig===true){this.featureType=null;delete this.namespaceAlias[this.featureNS];delete this.namespaces["feature"];this.featureNS=null;}
-if(!this.featureNS&&(!(node.prefix in this.namespaces)&&node.parentNode.namespaceURI==this.namespaces["gml"]&&this.regExes.featureMember.test(node.parentNode.nodeName))){this.featureType=node.nodeName.split(":").pop();this.setNamespace("feature",node.namespaceURI);this.featureNS=node.namespaceURI;this.autoConfig=true;}
-return OpenLayers.Format.XML.prototype.readNode.apply(this,[node,obj]);},readers:{"gml":{"featureMember":function(node,obj){this.readChildNodes(node,obj);},"featureMembers":function(node,obj){this.readChildNodes(node,obj);},"name":function(node,obj){obj.name=this.getChildValue(node);},"boundedBy":function(node,obj){var container={};this.readChildNodes(node,container);if(container.components&&container.components.length>0){obj.bounds=container.components[0];}},"Point":function(node,contai [...]
-container.components.push(obj.points[0]);},"coordinates":function(node,obj){var str=this.getChildValue(node).replace(this.regExes.trimSpace,"");str=str.replace(this.regExes.trimComma,",");var pointList=str.split(this.regExes.splitSpace);var coords;var numPoints=pointList.length;var points=new Array(numPoints);for(var i=0;i<numPoints;++i){coords=pointList[i].split(",");if(this.xy){points[i]=new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]);}else{points[i]=new OpenLayers.Geometr [...]
-obj.points=points;},"coord":function(node,obj){var coord={};this.readChildNodes(node,coord);if(!obj.points){obj.points=[];}
-obj.points.push(new OpenLayers.Geometry.Point(coord.x,coord.y,coord.z));},"X":function(node,coord){coord.x=this.getChildValue(node);},"Y":function(node,coord){coord.y=this.getChildValue(node);},"Z":function(node,coord){coord.z=this.getChildValue(node);},"MultiPoint":function(node,container){var obj={components:[]};this.readChildNodes(node,obj);container.components=[new OpenLayers.Geometry.MultiPoint(obj.components)];},"pointMember":function(node,obj){this.readChildNodes(node,obj);},"Line [...]
-container.components.push(new OpenLayers.Geometry.LineString(obj.points));},"MultiLineString":function(node,container){var obj={components:[]};this.readChildNodes(node,obj);container.components=[new OpenLayers.Geometry.MultiLineString(obj.components)];},"lineStringMember":function(node,obj){this.readChildNodes(node,obj);},"Polygon":function(node,container){var obj={outer:null,inner:[]};this.readChildNodes(node,obj);obj.inner.unshift(obj.outer);if(!container.components){container.components=[];}
-container.components.push(new OpenLayers.Geometry.Polygon(obj.inner));},"LinearRing":function(node,obj){var container={};this.readChildNodes(node,container);obj.components=[new OpenLayers.Geometry.LinearRing(container.points)];},"MultiPolygon":function(node,container){var obj={components:[]};this.readChildNodes(node,obj);container.components=[new OpenLayers.Geometry.MultiPolygon(obj.components)];},"polygonMember":function(node,obj){this.readChildNodes(node,obj);},"GeometryCollection":fun [...]
-if(name){this.readers.feature[name].apply(this,[node,obj]);}},"_typeName":function(node,obj){var container={components:[],attributes:{}};this.readChildNodes(node,container);if(container.name){container.attributes.name=container.name;}
-var feature=new OpenLayers.Feature.Vector(container.components[0],container.attributes);if(!this.singleFeatureType){feature.type=node.nodeName.split(":").pop();feature.namespace=node.namespaceURI;}
-var fid=node.getAttribute("fid")||this.getAttributeNS(node,this.namespaces["gml"],"id");if(fid){feature.fid=fid;}
-if(this.internalProjection&&this.externalProjection&&feature.geometry){feature.geometry.transform(this.externalProjection,this.internalProjection);}
-if(container.bounds){feature.bounds=container.bounds;}
-obj.features.push(feature);},"_geometry":function(node,obj){if(!this.geometryName){this.geometryName=node.nodeName.split(":").pop();}
-this.readChildNodes(node,obj);},"_attribute":function(node,obj){var local=node.localName||node.nodeName.split(":").pop();var value=this.getChildValue(node);obj.attributes[local]=value;}},"wfs":{"FeatureCollection":function(node,obj){this.readChildNodes(node,obj);}}},write:function(features){var name;if(OpenLayers.Util.isArray(features)){name="featureMembers";}else{name="featureMember";}
-var root=this.writeNode("gml:"+name,features);this.setAttributeNS(root,this.namespaces["xsi"],"xsi:schemaLocation",this.schemaLocation);return OpenLayers.Format.XML.prototype.write.apply(this,[root]);},writers:{"gml":{"featureMember":function(feature){var node=this.createElementNSPlus("gml:featureMember");this.writeNode("feature:_typeName",feature,node);return node;},"MultiPoint":function(geometry){var node=this.createElementNSPlus("gml:MultiPoint");var components=geometry.components||[g [...]
-return node;},"pointMember":function(geometry){var node=this.createElementNSPlus("gml:pointMember");this.writeNode("Point",geometry,node);return node;},"MultiLineString":function(geometry){var node=this.createElementNSPlus("gml:MultiLineString");var components=geometry.components||[geometry];for(var i=0,ii=components.length;i<ii;++i){this.writeNode("lineStringMember",components[i],node);}
-return node;},"lineStringMember":function(geometry){var node=this.createElementNSPlus("gml:lineStringMember");this.writeNode("LineString",geometry,node);return node;},"MultiPolygon":function(geometry){var node=this.createElementNSPlus("gml:MultiPolygon");var components=geometry.components||[geometry];for(var i=0,ii=components.length;i<ii;++i){this.writeNode("polygonMember",components[i],node);}
-return node;},"polygonMember":function(geometry){var node=this.createElementNSPlus("gml:polygonMember");this.writeNode("Polygon",geometry,node);return node;},"GeometryCollection":function(geometry){var node=this.createElementNSPlus("gml:GeometryCollection");for(var i=0,len=geometry.components.length;i<len;++i){this.writeNode("geometryMember",geometry.components[i],node);}
-return node;},"geometryMember":function(geometry){var node=this.createElementNSPlus("gml:geometryMember");var child=this.writeNode("feature:_geometry",geometry);node.appendChild(child.firstChild);return node;}},"feature":{"_typeName":function(feature){var node=this.createElementNSPlus("feature:"+this.featureType,{attributes:{fid:feature.fid}});if(feature.geometry){this.writeNode("feature:_geometry",feature.geometry,node);}
-for(var name in feature.attributes){var value=feature.attributes[name];if(value!=null){this.writeNode("feature:_attribute",{name:name,value:value},node);}}
-return node;},"_geometry":function(geometry){if(this.externalProjection&&this.internalProjection){geometry=geometry.clone().transform(this.internalProjection,this.externalProjection);}
-var node=this.createElementNSPlus("feature:"+this.geometryName);var type=this.geometryTypes[geometry.CLASS_NAME];var child=this.writeNode("gml:"+type,geometry,node);if(this.srsName){child.setAttribute("srsName",this.srsName);}
-return node;},"_attribute":function(obj){return this.createElementNSPlus("feature:"+obj.name,{value:obj.value});}},"wfs":{"FeatureCollection":function(features){var node=this.createElementNSPlus("wfs:FeatureCollection");for(var i=0,len=features.length;i<len;++i){this.writeNode("gml:featureMember",features[i],node);}
-return node;}}},setGeometryTypes:function(){this.geometryTypes={"OpenLayers.Geometry.Point":"Point","OpenLayers.Geometry.MultiPoint":"MultiPoint","OpenLayers.Geometry.LineString":"LineString","OpenLayers.Geometry.MultiLineString":"MultiLineString","OpenLayers.Geometry.Polygon":"Polygon","OpenLayers.Geometry.MultiPolygon":"MultiPolygon","OpenLayers.Geometry.Collection":"GeometryCollection"};},CLASS_NAME:"OpenLayers.Format.GML.Base"});OpenLayers.Format.GML.v3=OpenLayers.Class(OpenLayers.Fo [...]
-container.components.push(new OpenLayers.Geometry.LineString(obj.points));},"segments":function(node,obj){this.readChildNodes(node,obj);},"LineStringSegment":function(node,container){var obj={};this.readChildNodes(node,obj);if(obj.points){Array.prototype.push.apply(container.points,obj.points);}},"pos":function(node,obj){var str=this.getChildValue(node).replace(this.regExes.trimSpace,"");var coords=str.split(this.regExes.splitSpace);var point;if(this.xy){point=new OpenLayers.Geometry.Poi [...]
-obj.points=[point];},"posList":function(node,obj){var str=this.getChildValue(node).replace(this.regExes.trimSpace,"");var coords=str.split(this.regExes.splitSpace);var dim=parseInt(node.getAttribute("dimension"))||2;var j,x,y,z;var numPoints=coords.length/dim;var points=new Array(numPoints);for(var i=0,len=coords.length;i<len;i+=dim){x=coords[i];y=coords[i+1];z=(dim==2)?undefined:coords[i+2];if(this.xy){points[i/dim]=new OpenLayers.Geometry.Point(x,y,z);}else{points[i/dim]=new OpenLayers [...]
-obj.points=points;},"Surface":function(node,obj){this.readChildNodes(node,obj);},"patches":function(node,obj){this.readChildNodes(node,obj);},"PolygonPatch":function(node,obj){this.readers.gml.Polygon.apply(this,[node,obj]);},"exterior":function(node,container){var obj={};this.readChildNodes(node,obj);container.outer=obj.components[0];},"interior":function(node,container){var obj={};this.readChildNodes(node,obj);container.inner.push(obj.components[0]);},"MultiCurve":function(node,contain [...]
-var min=obj.points[0];var max=obj.points[1];container.components.push(new OpenLayers.Bounds(min.x,min.y,max.x,max.y));},"lowerCorner":function(node,container){var obj={};this.readers.gml.pos.apply(this,[node,obj]);container.points[0]=obj.points[0];},"upperCorner":function(node,container){var obj={};this.readers.gml.pos.apply(this,[node,obj]);container.points[1]=obj.points[0];}},OpenLayers.Format.GML.Base.prototype.readers["gml"]),"feature":OpenLayers.Format.GML.Base.prototype.readers["fe [...]
-var root=this.writeNode("gml:"+name,features);this.setAttributeNS(root,this.namespaces["xsi"],"xsi:schemaLocation",this.schemaLocation);return OpenLayers.Format.XML.prototype.write.apply(this,[root]);},writers:{"gml":OpenLayers.Util.applyDefaults({"featureMembers":function(features){var node=this.createElementNSPlus("gml:featureMembers");for(var i=0,len=features.length;i<len;++i){this.writeNode("feature:_typeName",features[i],node);}
-return node;},"Point":function(geometry){var node=this.createElementNSPlus("gml:Point");this.writeNode("pos",geometry,node);return node;},"pos":function(point){var pos=(this.xy)?(point.x+" "+point.y):(point.y+" "+point.x);return this.createElementNSPlus("gml:pos",{value:pos});},"LineString":function(geometry){var node=this.createElementNSPlus("gml:LineString");this.writeNode("posList",geometry.components,node);return node;},"Curve":function(geometry){var node=this.createElementNSPlus("gm [...]
-return this.createElementNSPlus("gml:posList",{value:parts.join(" ")});},"Surface":function(geometry){var node=this.createElementNSPlus("gml:Surface");this.writeNode("patches",geometry,node);return node;},"patches":function(geometry){var node=this.createElementNSPlus("gml:patches");this.writeNode("PolygonPatch",geometry,node);return node;},"PolygonPatch":function(geometry){var node=this.createElementNSPlus("gml:PolygonPatch",{attributes:{interpolation:"planar"}});this.writeNode("exterior [...]
-return node;},"Polygon":function(geometry){var node=this.createElementNSPlus("gml:Polygon");this.writeNode("exterior",geometry.components[0],node);for(var i=1,len=geometry.components.length;i<len;++i){this.writeNode("interior",geometry.components[i],node);}
-return node;},"exterior":function(ring){var node=this.createElementNSPlus("gml:exterior");this.writeNode("LinearRing",ring,node);return node;},"interior":function(ring){var node=this.createElementNSPlus("gml:interior");this.writeNode("LinearRing",ring,node);return node;},"LinearRing":function(ring){var node=this.createElementNSPlus("gml:LinearRing");this.writeNode("posList",ring.components,node);return node;},"MultiCurve":function(geometry){var node=this.createElementNSPlus("gml:MultiCur [...]
-return node;},"curveMember":function(geometry){var node=this.createElementNSPlus("gml:curveMember");if(this.curve){this.writeNode("Curve",geometry,node);}else{this.writeNode("LineString",geometry,node);}
-return node;},"MultiSurface":function(geometry){var node=this.createElementNSPlus("gml:MultiSurface");var components=geometry.components||[geometry];for(var i=0,len=components.length;i<len;++i){this.writeNode("surfaceMember",components[i],node);}
-return node;},"surfaceMember":function(polygon){var node=this.createElementNSPlus("gml:surfaceMember");if(this.surface){this.writeNode("Surface",polygon,node);}else{this.writeNode("Polygon",polygon,node);}
-return node;},"Envelope":function(bounds){var node=this.createElementNSPlus("gml:Envelope");this.writeNode("lowerCorner",bounds,node);this.writeNode("upperCorner",bounds,node);if(this.srsName){node.setAttribute("srsName",this.srsName);}
-return node;},"lowerCorner":function(bounds){var pos=(this.xy)?(bounds.left+" "+bounds.bottom):(bounds.bottom+" "+bounds.left);return this.createElementNSPlus("gml:lowerCorner",{value:pos});},"upperCorner":function(bounds){var pos=(this.xy)?(bounds.right+" "+bounds.top):(bounds.top+" "+bounds.right);return this.createElementNSPlus("gml:upperCorner",{value:pos});}},OpenLayers.Format.GML.Base.prototype.writers["gml"]),"feature":OpenLayers.Format.GML.Base.prototype.writers["feature"],"wfs": [...]
-node.appendChild(box);return node;},"SortBy":function(sortProperties){var node=this.createElementNSPlus("ogc:SortBy");for(var i=0,l=sortProperties.length;i<l;i++){this.writeNode("ogc:SortProperty",sortProperties[i],node);}
-return node;},"SortProperty":function(sortProperty){var node=this.createElementNSPlus("ogc:SortProperty");this.writeNode("ogc:PropertyName",sortProperty,node);this.writeNode("ogc:SortOrder",(sortProperty.order=='DESC')?'DESC':'ASC',node);return node;},"SortOrder":function(value){var node=this.createElementNSPlus("ogc:SortOrder",{value:value});return node;}},OpenLayers.Format.Filter.v1.prototype.writers["ogc"]),"gml":OpenLayers.Format.GML.v3.prototype.writers["gml"],"feature":OpenLayers.F [...]
-if(filter.projection){child.setAttribute("srsName",filter.projection);}
-node.appendChild(child);}
-return node;},CLASS_NAME:"OpenLayers.Format.Filter.v1_1_0"});OpenLayers.Format.OWSCommon=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{defaultVersion:"1.0.0",getVersion:function(root,options){var version=this.version;if(!version){var uri=root.getAttribute("xmlns:ows");if(uri&&uri.substring(uri.lastIndexOf("/")+1)==="1.1"){version="1.1.0";}
-if(!version){version=this.defaultVersion;}}
-return version;},CLASS_NAME:"OpenLayers.Format.OWSCommon"});OpenLayers.Format.OWSCommon.v1=OpenLayers.Class(OpenLayers.Format.XML,{regExes:{trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s*/g),splitSpace:(/\s+/),trimComma:(/\s*,\s*/g)},read:function(data,options){options=OpenLayers.Util.applyDefaults(options,this.options);var ows={};this.readChildNodes(data,ows);return ows;},readers:{"ows":{"Exception":function(node,exceptionReport){var exception={code:node.getAttribute('exceptionCode'),locator [...]
-var name=node.getAttribute("name");operation.parameters[name]={};this.readChildNodes(node,operation.parameters[name]);},"Value":function(node,allowedValues){allowedValues[this.getChildValue(node)]=true;},"OutputFormat":function(node,obj){obj.formats.push({value:this.getChildValue(node)});this.readChildNodes(node,obj);},"WGS84BoundingBox":function(node,obj){var boundingBox={};boundingBox.crs=node.getAttribute("crs");if(obj.BoundingBox){obj.BoundingBox.push(boundingBox);}else{obj.projectio [...]
-this.readChildNodes(node,boundingBox);},"BoundingBox":function(node,obj){this.readers['ows']['WGS84BoundingBox'].apply(this,[node,obj]);},"LowerCorner":function(node,obj){var str=this.getChildValue(node).replace(this.regExes.trimSpace,"");str=str.replace(this.regExes.trimComma,",");var pointList=str.split(this.regExes.splitSpace);obj.left=pointList[0];obj.bottom=pointList[1];},"UpperCorner":function(node,obj){var str=this.getChildValue(node).replace(this.regExes.trimSpace,"");str=str.rep [...]
-options.featureType,srsName:options.srsName}});if(options.featureNS){node.setAttribute("xmlns:"+prefix,options.featureNS);}
-if(options.propertyNames){for(var i=0,len=options.propertyNames.length;i<len;i++){this.writeNode("wfs:PropertyName",{property:options.propertyNames[i]},node);}}
-if(options.filter){this.setFilterProperty(options.filter);this.writeNode("ogc:Filter",options.filter,node);}
-return node;},"PropertyName":function(obj){return this.createElementNSPlus("wfs:PropertyName",{value:obj.property});}},OpenLayers.Format.WFST.v1.prototype.writers["wfs"]),"gml":OpenLayers.Format.GML.v3.prototype.writers["gml"],"feature":OpenLayers.Format.GML.v3.prototype.writers["feature"],"ogc":OpenLayers.Format.Filter.v1_1_0.prototype.writers["ogc"]},CLASS_NAME:"OpenLayers.Format.WFST.v1_1_0"});OpenLayers.Format.GeoJSON=OpenLayers.Class(OpenLayers.Format.JSON,{ignoreExtraDims:false,rea [...]
-if(!obj){OpenLayers.Console.error("Bad JSON: "+json);}else if(typeof(obj.type)!="string"){OpenLayers.Console.error("Bad GeoJSON - no type: "+json);}else if(this.isValidType(obj,type)){switch(type){case"Geometry":try{results=this.parseGeometry(obj);}catch(err){OpenLayers.Console.error(err);}
-break;case"Feature":try{results=this.parseFeature(obj);results.type="Feature";}catch(err){OpenLayers.Console.error(err);}
-break;case"FeatureCollection":results=[];switch(obj.type){case"Feature":try{results.push(this.parseFeature(obj));}catch(err){results=null;OpenLayers.Console.error(err);}
-break;case"FeatureCollection":for(var i=0,len=obj.features.length;i<len;++i){try{results.push(this.parseFeature(obj.features[i]));}catch(err){results=null;OpenLayers.Console.error(err);}}
-break;default:try{var geom=this.parseGeometry(obj);results.push(new OpenLayers.Feature.Vector(geom));}catch(err){results=null;OpenLayers.Console.error(err);}}
-break;}}
-return results;},isValidType:function(obj,type){var valid=false;switch(type){case"Geometry":if(OpenLayers.Util.indexOf(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","Box","GeometryCollection"],obj.type)==-1){OpenLayers.Console.error("Unsupported geometry type: "+
-obj.type);}else{valid=true;}
-break;case"FeatureCollection":valid=true;break;default:if(obj.type==type){valid=true;}else{OpenLayers.Console.error("Cannot convert types from "+
-obj.type+" to "+type);}}
-return valid;},parseFeature:function(obj){var feature,geometry,attributes,bbox;attributes=(obj.properties)?obj.properties:{};bbox=(obj.geometry&&obj.geometry.bbox)||obj.bbox;try{geometry=this.parseGeometry(obj.geometry);}catch(err){throw err;}
-feature=new OpenLayers.Feature.Vector(geometry,attributes);if(bbox){feature.bounds=OpenLayers.Bounds.fromArray(bbox);}
-if(obj.id){feature.fid=obj.id;}
-return feature;},parseGeometry:function(obj){if(obj==null){return null;}
-var geometry,collection=false;if(obj.type=="GeometryCollection"){if(!(OpenLayers.Util.isArray(obj.geometries))){throw"GeometryCollection must have geometries array: "+obj;}
-var numGeom=obj.geometries.length;var components=new Array(numGeom);for(var i=0;i<numGeom;++i){components[i]=this.parseGeometry.apply(this,[obj.geometries[i]]);}
-geometry=new OpenLayers.Geometry.Collection(components);collection=true;}else{if(!(OpenLayers.Util.isArray(obj.coordinates))){throw"Geometry must have coordinates array: "+obj;}
-if(!this.parseCoords[obj.type.toLowerCase()]){throw"Unsupported geometry type: "+obj.type;}
-try{geometry=this.parseCoords[obj.type.toLowerCase()].apply(this,[obj.coordinates]);}catch(err){throw err;}}
-if(this.internalProjection&&this.externalProjection&&!collection){geometry.transform(this.externalProjection,this.internalProjection);}
-return geometry;},parseCoords:{"point":function(array){if(this.ignoreExtraDims==false&&array.length!=2){throw"Only 2D points are supported: "+array;}
-return new OpenLayers.Geometry.Point(array[0],array[1]);},"multipoint":function(array){var points=[];var p=null;for(var i=0,len=array.length;i<len;++i){try{p=this.parseCoords["point"].apply(this,[array[i]]);}catch(err){throw err;}
-points.push(p);}
-return new OpenLayers.Geometry.MultiPoint(points);},"linestring":function(array){var points=[];var p=null;for(var i=0,len=array.length;i<len;++i){try{p=this.parseCoords["point"].apply(this,[array[i]]);}catch(err){throw err;}
-points.push(p);}
-return new OpenLayers.Geometry.LineString(points);},"multilinestring":function(array){var lines=[];var l=null;for(var i=0,len=array.length;i<len;++i){try{l=this.parseCoords["linestring"].apply(this,[array[i]]);}catch(err){throw err;}
-lines.push(l);}
-return new OpenLayers.Geometry.MultiLineString(lines);},"polygon":function(array){var rings=[];var r,l;for(var i=0,len=array.length;i<len;++i){try{l=this.parseCoords["linestring"].apply(this,[array[i]]);}catch(err){throw err;}
-r=new OpenLayers.Geometry.LinearRing(l.components);rings.push(r);}
-return new OpenLayers.Geometry.Polygon(rings);},"multipolygon":function(array){var polys=[];var p=null;for(var i=0,len=array.length;i<len;++i){try{p=this.parseCoords["polygon"].apply(this,[array[i]]);}catch(err){throw err;}
-polys.push(p);}
-return new OpenLayers.Geometry.MultiPolygon(polys);},"box":function(array){if(array.length!=2){throw"GeoJSON box coordinates must have 2 elements";}
-return new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing([new OpenLayers.Geometry.Point(array[0][0],array[0][1]),new OpenLayers.Geometry.Point(array[1][0],array[0][1]),new OpenLayers.Geometry.Point(array[1][0],array[1][1]),new OpenLayers.Geometry.Point(array[0][0],array[1][1]),new OpenLayers.Geometry.Point(array[0][0],array[0][1])])]);}},write:function(obj,pretty){var geojson={"type":null};if(OpenLayers.Util.isArray(obj)){geojson.type="FeatureCollection";var numFeatures [...]
-geojson.features[i]=this.extract.feature.apply(this,[element]);}}else if(obj.CLASS_NAME.indexOf("OpenLayers.Geometry")==0){geojson=this.extract.geometry.apply(this,[obj]);}else if(obj instanceof OpenLayers.Feature.Vector){geojson=this.extract.feature.apply(this,[obj]);if(obj.layer&&obj.layer.projection){geojson.crs=this.createCRSObject(obj);}}
-return OpenLayers.Format.JSON.prototype.write.apply(this,[geojson,pretty]);},createCRSObject:function(object){var proj=object.layer.projection.toString();var crs={};if(proj.match(/epsg:/i)){var code=parseInt(proj.substring(proj.indexOf(":")+1));if(code==4326){crs={"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}};}else{crs={"type":"name","properties":{"name":"EPSG:"+code}};}}
-return crs;},extract:{'feature':function(feature){var geom=this.extract.geometry.apply(this,[feature.geometry]);var json={"type":"Feature","properties":feature.attributes,"geometry":geom};if(feature.fid!=null){json.id=feature.fid;}
-return json;},'geometry':function(geometry){if(geometry==null){return null;}
-if(this.internalProjection&&this.externalProjection){geometry=geometry.clone();geometry.transform(this.internalProjection,this.externalProjection);}
-var geometryType=geometry.CLASS_NAME.split('.')[2];var data=this.extract[geometryType.toLowerCase()].apply(this,[geometry]);var json;if(geometryType=="Collection"){json={"type":"GeometryCollection","geometries":data};}else{json={"type":geometryType,"coordinates":data};}
-return json;},'point':function(point){return[point.x,point.y];},'multipoint':function(multipoint){var array=[];for(var i=0,len=multipoint.components.length;i<len;++i){array.push(this.extract.point.apply(this,[multipoint.components[i]]));}
-return array;},'linestring':function(linestring){var array=[];for(var i=0,len=linestring.components.length;i<len;++i){array.push(this.extract.point.apply(this,[linestring.components[i]]));}
-return array;},'multilinestring':function(multilinestring){var array=[];for(var i=0,len=multilinestring.components.length;i<len;++i){array.push(this.extract.linestring.apply(this,[multilinestring.components[i]]));}
-return array;},'polygon':function(polygon){var array=[];for(var i=0,len=polygon.components.length;i<len;++i){array.push(this.extract.linestring.apply(this,[polygon.components[i]]));}
-return array;},'multipolygon':function(multipolygon){var array=[];for(var i=0,len=multipolygon.components.length;i<len;++i){array.push(this.extract.polygon.apply(this,[multipolygon.components[i]]));}
-return array;},'collection':function(collection){var len=collection.components.length;var array=new Array(len);for(var i=0;i<len;++i){array[i]=this.extract.geometry.apply(this,[collection.components[i]]);}
-return array;}},CLASS_NAME:"OpenLayers.Format.GeoJSON"});OpenLayers.Protocol.Script=OpenLayers.Class(OpenLayers.Protocol,{url:null,params:null,callback:null,scope:null,format:null,callbackKey:"callback",callbackPrefix:"",pendingRequests:null,srsInBBOX:false,initialize:function(options){options=options||{};this.params={};this.pendingRequests={};OpenLayers.Protocol.prototype.initialize.apply(this,arguments);if(!this.format){this.format=new OpenLayers.Format.GeoJSON();}
-if(!this.filterToParams&&OpenLayers.Format.QueryStringFilter){var format=new OpenLayers.Format.QueryStringFilter({srsInBBOX:this.srsInBBOX});this.filterToParams=function(filter,params){return format.write(filter,params);}}},read:function(options){OpenLayers.Protocol.prototype.read.apply(this,arguments);options=OpenLayers.Util.applyDefaults(options,this.options);options.params=OpenLayers.Util.applyDefaults(options.params,this.options.params);if(options.filter&&this.filterToParams){options [...]
-var response=new OpenLayers.Protocol.Response({requestType:"read"});var request=this.createRequest(options.url,options.params,OpenLayers.Function.bind(function(data){response.data=data;this.handleRead(response,options);},this));response.priv=request;return response;},createRequest:function(url,params,callback){var id=OpenLayers.Protocol.Script.register(callback);var name="OpenLayers.Protocol.Script.registry["+id+"]";params=OpenLayers.Util.extend({},params);params[this.callbackKey]=this.c [...]
-this.destroyRequest(response.priv);options.callback.call(options.scope,response);}},parseFeatures:function(data){return this.format.read(data);},abort:function(response){if(response){this.destroyRequest(response.priv);}else{for(var key in this.pendingRequests){this.destroyRequest(this.pendingRequests[key]);}}},destroy:function(){this.abort();delete this.params;delete this.format;OpenLayers.Protocol.prototype.destroy.apply(this);},CLASS_NAME:"OpenLayers.Protocol.Script"});(function(){var  [...]
-return new cls(options);};OpenLayers.Format.CSWGetRecords.DEFAULTS={"version":"2.0.2"};OpenLayers.Control.Panel=OpenLayers.Class(OpenLayers.Control,{controls:null,autoActivate:true,defaultControl:null,saveState:false,allowDepress:false,activeState:null,initialize:function(options){OpenLayers.Control.prototype.initialize.apply(this,[options]);this.controls=[];this.activeState={};},destroy:function(){OpenLayers.Control.prototype.destroy.apply(this,arguments);for(var ctl,i=this.controls.len [...]
-OpenLayers.Event.stopObservingElement(ctl.panel_div);ctl.panel_div=null;}
-this.activeState=null;},activate:function(){if(OpenLayers.Control.prototype.activate.apply(this,arguments)){var control;for(var i=0,len=this.controls.length;i<len;i++){control=this.controls[i];if(control===this.defaultControl||(this.saveState&&this.activeState[control.id])){control.activate();}}
-if(this.saveState===true){this.defaultControl=null;}
-this.redraw();return true;}else{return false;}},deactivate:function(){if(OpenLayers.Control.prototype.deactivate.apply(this,arguments)){var control;for(var i=0,len=this.controls.length;i<len;i++){control=this.controls[i];this.activeState[control.id]=control.deactivate();}
-this.redraw();return true;}else{return false;}},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);this.addControlsToMap(this.controls);return this.div;},redraw:function(){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){for(var i=0,len=this.controls.length;i<len;i++){this.div.appendChild(this.controls[i].panel_div);}}},activateControl:function(control){if(!this.active){return false;}
-if(control.type==OpenLayers.Control.TYPE_BUTTON){control.trigger();return;}
-if(control.type==OpenLayers.Control.TYPE_TOGGLE){if(control.active){control.deactivate();}else{control.activate();}
-return;}
-if(this.allowDepress&&control.active){control.deactivate();}else{var c;for(var i=0,len=this.controls.length;i<len;i++){c=this.controls[i];if(c!=control&&(c.type===OpenLayers.Control.TYPE_TOOL||c.type==null)){c.deactivate();}}
-control.activate();}},addControls:function(controls){if(!(OpenLayers.Util.isArray(controls))){controls=[controls];}
-this.controls=this.controls.concat(controls);for(var i=0,len=controls.length;i<len;i++){var element=document.createElement("div");element.className=controls[i].displayClass+"ItemInactive";controls[i].panel_div=element;if(controls[i].title!=""){controls[i].panel_div.title=controls[i].title;}
-OpenLayers.Event.observe(controls[i].panel_div,"click",OpenLayers.Function.bind(this.onClick,this,controls[i]));OpenLayers.Event.observe(controls[i].panel_div,"dblclick",OpenLayers.Function.bind(this.onDoubleClick,this,controls[i]));OpenLayers.Event.observe(controls[i].panel_div,"mousedown",OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop));}
-if(this.map){this.addControlsToMap(controls);this.redraw();}},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.iconOn,deactivate:this.iconOff});}},iconOn:function(){var d=this.panel_div;d.className=d.className.replace(/ItemInactive$/,"ItemActive");},iconOff:function(){var d=this.panel_div;d.className=d.className.replace(/ItemActive$/,"ItemInactive");},onClick:function(ctrl,evt){OpenLayers.Event.stop(evt?evt:window.event);this.activateControl(ctrl);},onDoubleClick:function(ctrl,evt){OpenLayers.Event.stop(evt?evt:window.event);},getControlsBy:function(property,match [...]
-obj=OpenLayers.Layer.prototype.clone.apply(this,[obj]);return obj;},setUrl:function(newUrl){this.url=newUrl;},mergeNewParams:function(newParams){this.params=OpenLayers.Util.extend(this.params,newParams);var ret=this.redraw();if(this.map!=null){this.map.events.triggerEvent("changelayer",{layer:this,property:"params"});}
-return ret;},redraw:function(force){if(force){return this.mergeNewParams({"_olSalt":Math.random()});}else{return OpenLayers.Layer.prototype.redraw.apply(this,[]);}},selectUrl:function(paramString,urls){var product=1;for(var i=0,len=paramString.length;i<len;i++){product*=paramString.charCodeAt(i)*this.URL_HASH_FACTOR;product-=Math.floor(product);}
-return urls[Math.floor(product*urls.length)];},getFullRequestString:function(newParams,altUrl){var url=altUrl||this.url;var allParams=OpenLayers.Util.extend({},this.params);allParams=OpenLayers.Util.extend(allParams,newParams);var paramsString=OpenLayers.Util.getParameterString(allParams);if(OpenLayers.Util.isArray(url)){url=this.selectUrl(paramsString,url);}
-var urlParams=OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(url));for(var key in allParams){if(key.toUpperCase()in urlParams){delete allParams[key];}}
-paramsString=OpenLayers.Util.getParameterString(allParams);return OpenLayers.Util.urlAppend(url,paramsString);},CLASS_NAME:"OpenLayers.Layer.HTTPRequest"});OpenLayers.Layer.Grid=OpenLayers.Class(OpenLayers.Layer.HTTPRequest,{tileSize:null,tileOriginCorner:"bl",tileOrigin:null,tileOptions:null,grid:null,singleTile:false,ratio:1.5,buffer:0,numLoadingTiles:0,tileLoadingDelay:100,timerId:null,initialize:function(name,url,params,options){OpenLayers.Layer.HTTPRequest.prototype.initialize.apply [...]
-this.grid=[];}},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.Grid(this.name,this.url,this.params,this.getOptions());}
-obj=OpenLayers.Layer.HTTPRequest.prototype.clone.apply(this,[obj]);if(this.tileSize!=null){obj.tileSize=this.tileSize.clone();}
-obj.grid=[];return obj;},moveTo:function(bounds,zoomChanged,dragging){OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply(this,arguments);bounds=bounds||this.map.getExtent();if(bounds!=null){var forceReTile=!this.grid.length||zoomChanged;var tilesBounds=this.getTilesBounds();if(this.singleTile){if(forceReTile||(!dragging&&!tilesBounds.containsBounds(bounds))){this.initSingleTile(bounds);}}else{if(forceReTile||!tilesBounds.containsBounds(bounds,true)){this.initGriddedTiles(bounds);}else{t [...]
-this.timerId=window.setTimeout(this._moveGriddedTiles,this.tileLoadingDelay);},setTileSize:function(size){if(this.singleTile){size=this.map.getSize();size.h=parseInt(size.h*this.ratio);size.w=parseInt(size.w*this.ratio);}
-OpenLayers.Layer.HTTPRequest.prototype.setTileSize.apply(this,[size]);},getGridBounds:function(){var msg="The getGridBounds() function is deprecated. It will be "+"removed in 3.0. Please use getTilesBounds() instead.";OpenLayers.Console.warn(msg);return this.getTilesBounds();},getTilesBounds:function(){var bounds=null;if(this.grid.length){var bottom=this.grid.length-1;var bottomLeftTile=this.grid[bottom][0];var right=this.grid[0].length-1;var topRightTile=this.grid[0][right];bounds=new O [...]
-return bounds;},initSingleTile:function(bounds){var center=bounds.getCenterLonLat();var tileWidth=bounds.getWidth()*this.ratio;var tileHeight=bounds.getHeight()*this.ratio;var tileBounds=new OpenLayers.Bounds(center.lon-(tileWidth/2),center.lat-(tileHeight/2),center.lon+(tileWidth/2),center.lat+(tileHeight/2));var ul=new OpenLayers.LonLat(tileBounds.left,tileBounds.top);var px=this.map.getLayerPxFromLonLat(ul);if(!this.grid.length){this.grid[0]=[];}
-var tile=this.grid[0][0];if(!tile){tile=this.addTile(tileBounds,px);this.addTileMonitoringHooks(tile);tile.draw();this.grid[0][0]=tile;}else{tile.moveTo(tileBounds,px);}
-this.removeExcessTiles(1,1);},calculateGridLayout:function(bounds,origin,resolution){var tilelon=resolution*this.tileSize.w;var tilelat=resolution*this.tileSize.h;var offsetlon=bounds.left-origin.lon;var tilecol=Math.floor(offsetlon/tilelon)-this.buffer;var tilecolremain=offsetlon/tilelon-tilecol;var tileoffsetx=-tilecolremain*this.tileSize.w;var tileoffsetlon=origin.lon+tilecol*tilelon;var offsetlat=bounds.top-(origin.lat+tilelat);var tilerow=Math.ceil(offsetlat/tilelat)+this.buffer;var [...]
-return origin;},initGriddedTiles:function(bounds){var viewSize=this.map.getSize();var minRows=Math.ceil(viewSize.h/this.tileSize.h)+
-Math.max(1,2*this.buffer);var minCols=Math.ceil(viewSize.w/this.tileSize.w)+
-Math.max(1,2*this.buffer);var origin=this.getTileOrigin();var resolution=this.map.getResolution();var tileLayout=this.calculateGridLayout(bounds,origin,resolution);var tileoffsetx=Math.round(tileLayout.tileoffsetx);var tileoffsety=Math.round(tileLayout.tileoffsety);var tileoffsetlon=tileLayout.tileoffsetlon;var tileoffsetlat=tileLayout.tileoffsetlat;var tilelon=tileLayout.tilelon;var tilelat=tileLayout.tilelat;this.origin=new OpenLayers.Pixel(tileoffsetx,tileoffsety);var startX=tileoffse [...]
-tileoffsetlon=startLon;tileoffsetx=startX;var colidx=0;do{var tileBounds=new OpenLayers.Bounds(tileoffsetlon,tileoffsetlat,tileoffsetlon+tilelon,tileoffsetlat+tilelat);var x=tileoffsetx;x-=layerContainerDivLeft;var y=tileoffsety;y-=layerContainerDivTop;var px=new OpenLayers.Pixel(x,y);var tile=row[colidx++];if(!tile){tile=this.addTile(tileBounds,px);this.addTileMonitoringHooks(tile);row.push(tile);}else{tile.moveTo(tileBounds,px,false);}
-tileoffsetlon+=tilelon;tileoffsetx+=this.tileSize.w;}while((tileoffsetlon<=bounds.right+tilelon*this.buffer)||colidx<minCols);tileoffsetlat-=tilelat;tileoffsety+=this.tileSize.h;}while((tileoffsetlat>=bounds.bottom-tilelat*this.buffer)||rowidx<minRows);this.removeExcessTiles(rowidx,colidx);this.spiralTileLoad();},getMaxExtent:function(){return this.maxExtent;},spiralTileLoad:function(){var tileQueue=[];var directions=["right","down","left","up"];var iRow=0;var iCell=-1;var direction=Open [...]
-var tile=null;if((testRow<this.grid.length)&&(testRow>=0)&&(testCell<this.grid[0].length)&&(testCell>=0)){tile=this.grid[testRow][testCell];}
-if((tile!=null)&&(!tile.queued)){tileQueue.unshift(tile);tile.queued=true;directionsTried=0;iRow=testRow;iCell=testCell;}else{direction=(direction+1)%4;directionsTried++;}}
-for(var i=0,len=tileQueue.length;i<len;i++){var tile=tileQueue[i];tile.draw();tile.queued=false;}},addTile:function(bounds,position){return new OpenLayers.Tile.Image(this,position,bounds,null,this.tileSize,this.tileOptions);},addTileMonitoringHooks:function(tile){tile.onLoadStart=function(){if(this.numLoadingTiles==0){this.events.triggerEvent("loadstart");}
-this.numLoadingTiles++;};tile.events.register("loadstart",this,tile.onLoadStart);tile.onLoadEnd=function(){this.numLoadingTiles--;this.events.triggerEvent("tileloaded");if(this.numLoadingTiles==0){this.events.triggerEvent("loadend");}};tile.events.register("loadend",this,tile.onLoadEnd);tile.events.register("unload",this,tile.onLoadEnd);},removeTileMonitoringHooks:function(tile){tile.unload();tile.events.un({"loadstart":tile.onLoadStart,"loadend":tile.onLoadEnd,"unload":tile.onLoadEnd,sc [...]
-if(shifted){this.timerId=window.setTimeout(this._moveGriddedTiles,0);}},shiftRow:function(prepend){var modelRowIndex=(prepend)?0:(this.grid.length-1);var grid=this.grid;var modelRow=grid[modelRowIndex];var resolution=this.map.getResolution();var deltaY=(prepend)?-this.tileSize.h:this.tileSize.h;var deltaLat=resolution*-deltaY;var row=(prepend)?grid.pop():grid.shift();for(var i=0,len=modelRow.length;i<len;i++){var modelTile=modelRow[i];var bounds=modelTile.bounds.clone();var position=mode [...]
-if(prepend){grid.unshift(row);}else{grid.push(row);}},shiftColumn:function(prepend){var deltaX=(prepend)?-this.tileSize.w:this.tileSize.w;var resolution=this.map.getResolution();var deltaLon=resolution*deltaX;for(var i=0,len=this.grid.length;i<len;i++){var row=this.grid[i];var modelTileIndex=(prepend)?0:(row.length-1);var modelTile=row[modelTileIndex];var bounds=modelTile.bounds.clone();var position=modelTile.position.clone();bounds.left=bounds.left+deltaLon;bounds.right=bounds.right+del [...]
-while(this.grid[0].length>columns){for(var i=0,l=this.grid.length;i<l;i++){var row=this.grid[i];var tile=row.pop();this.removeTileMonitoringHooks(tile);tile.destroy();}}},onMapResize:function(){if(this.singleTile){this.clearGrid();this.setTileSize();}},getTileBounds:function(viewPortPx){var maxExtent=this.maxExtent;var resolution=this.getResolution();var tileMapWidth=resolution*this.tileSize.w;var tileMapHeight=resolution*this.tileSize.h;var mapPoint=this.getLonLatFromViewPortPx(viewPort [...]
-maxExtent.left)/tileMapWidth));var tileBottom=maxExtent.bottom+(tileMapHeight*Math.floor((mapPoint.lat-
-maxExtent.bottom)/tileMapHeight));return new OpenLayers.Bounds(tileLeft,tileBottom,tileLeft+tileMapWidth,tileBottom+tileMapHeight);},CLASS_NAME:"OpenLayers.Layer.Grid"});OpenLayers.Tile=OpenLayers.Class({EVENT_TYPES:["loadstart","loadend","reload","unload"],events:null,id:null,layer:null,url:null,bounds:null,size:null,position:null,isLoading:false,initialize:function(layer,position,bounds,url,size,options){this.layer=layer;this.position=position.clone();this.bounds=bounds.clone();this.ur [...]
-this.id=OpenLayers.Util.createUniqueID("Tile_");this.events=new OpenLayers.Events(this,null,this.EVENT_TYPES);OpenLayers.Util.extend(this,options);},unload:function(){if(this.isLoading){this.isLoading=false;this.events.triggerEvent("unload");}},destroy:function(){this.layer=null;this.bounds=null;this.size=null;this.position=null;this.events.destroy();this.events=null;},clone:function(obj){if(obj==null){obj=new OpenLayers.Tile(this.layer,this.position,this.bounds,this.url,this.size);}
-OpenLayers.Util.applyDefaults(obj,this);return obj;},draw:function(){var maxExtent=this.layer.maxExtent;var withinMaxExtent=(maxExtent&&this.bounds.intersectsBounds(maxExtent,false));this.shouldDraw=(withinMaxExtent||this.layer.displayOutsideMaxExtent);this.clear();return this.shouldDraw;},moveTo:function(bounds,position,redraw){if(redraw==null){redraw=true;}
-this.bounds=bounds.clone();this.position=position.clone();if(redraw){this.draw();}},clear:function(){},getBoundsFromBaseLayer:function(position){var msg=OpenLayers.i18n('reprojectDeprecated',{'layerName':this.layer.name});OpenLayers.Console.warn(msg);var topLeft=this.layer.map.getLonLatFromLayerPx(position);var bottomRightPx=position.clone();bottomRightPx.x+=this.size.w;bottomRightPx.y+=this.size.h;var bottomRight=this.layer.map.getLonLatFromLayerPx(bottomRightPx);if(topLeft.lon>bottomRi [...]
-var bounds=new OpenLayers.Bounds(topLeft.lon,bottomRight.lat,bottomRight.lon,topLeft.lat);return bounds;},showTile:function(){if(this.shouldDraw){this.show();}},show:function(){},hide:function(){},CLASS_NAME:"OpenLayers.Tile"});OpenLayers.Tile.Image=OpenLayers.Class(OpenLayers.Tile,{url:null,imgDiv:null,frame:null,layerAlphaHack:null,isBackBuffer:false,isFirstDraw:true,backBufferTile:null,maxGetUrlLength:null,initialize:function(layer,position,bounds,url,size,options){OpenLayers.Tile.pro [...]
-this.url=url;this.frame=document.createElement('div');this.frame.style.overflow='hidden';this.frame.style.position='absolute';this.layerAlphaHack=this.layer.alpha&&OpenLayers.Util.alphaHack();},destroy:function(){if(this.imgDiv!=null){this.removeImgDiv();}
-this.imgDiv=null;if((this.frame!=null)&&(this.frame.parentNode==this.layer.div)){this.layer.div.removeChild(this.frame);}
-this.frame=null;if(this.backBufferTile){this.backBufferTile.destroy();this.backBufferTile=null;}
-this.layer.events.unregister("loadend",this,this.resetBackBuffer);OpenLayers.Tile.prototype.destroy.apply(this,arguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Tile.Image(this.layer,this.position,this.bounds,this.url,this.size);}
-obj=OpenLayers.Tile.prototype.clone.apply(this,[obj]);obj.imgDiv=null;return obj;},draw:function(){if(this.layer!=this.layer.map.baseLayer&&this.layer.reproject){this.bounds=this.getBoundsFromBaseLayer(this.position);}
-var drawTile=OpenLayers.Tile.prototype.draw.apply(this,arguments);if((OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS,this.layer.transitionEffect)!=-1)||this.layer.singleTile){if(drawTile){if(!this.backBufferTile){this.backBufferTile=this.clone();this.backBufferTile.hide();this.backBufferTile.isBackBuffer=true;this.events.register('loadend',this,this.resetBackBuffer);this.layer.events.register("loadend",this,this.resetBackBuffer);}
-this.startTransition();}else{if(this.backBufferTile){this.backBufferTile.clear();}}}else{if(drawTile&&this.isFirstDraw){this.events.register('loadend',this,this.showTile);this.isFirstDraw=false;}}
-if(!drawTile){return false;}
-if(this.isLoading){this.events.triggerEvent("reload");}else{this.isLoading=true;this.events.triggerEvent("loadstart");}
-return this.renderTile();},resetBackBuffer:function(){this.showTile();if(this.backBufferTile&&(this.isFirstDraw||!this.layer.numLoadingTiles)){this.isFirstDraw=false;var maxExtent=this.layer.maxExtent;var withinMaxExtent=(maxExtent&&this.bounds.intersectsBounds(maxExtent,false));if(withinMaxExtent){this.backBufferTile.position=this.position;this.backBufferTile.bounds=this.bounds;this.backBufferTile.size=this.size;this.backBufferTile.imageSize=this.layer.getImageSize(this.bounds)||this.si [...]
-this.backBufferTile.hide();}},renderTile:function(){if(this.layer.async){this.initImgDiv();this.layer.getURLasync(this.bounds,this,"url",this.positionImage);}else{this.url=this.layer.getURL(this.bounds);this.initImgDiv();this.positionImage();}
-return true;},positionImage:function(){if(this.layer===null){return;}
-OpenLayers.Util.modifyDOMElement(this.frame,null,this.position,this.size);var imageSize=this.layer.getImageSize(this.bounds);if(this.layerAlphaHack){OpenLayers.Util.modifyAlphaImageDiv(this.imgDiv,null,null,imageSize,this.url);}else{OpenLayers.Util.modifyDOMElement(this.imgDiv,null,null,imageSize);this.imgDiv.src=this.url;}},clear:function(){if(this.imgDiv){this.hide();if(OpenLayers.Tile.Image.useBlankTile){this.imgDiv.src=OpenLayers.Util.getImagesLocation()+"blank.gif";}}},initImgDiv:fu [...]
-if(OpenLayers.Util.isArray(this.layer.url)){this.imgDiv.urls=this.layer.url.slice();}
-this.imgDiv.className='olTileImage';this.frame.style.zIndex=this.isBackBuffer?0:1;this.frame.appendChild(this.imgDiv);this.layer.div.appendChild(this.frame);if(this.layer.opacity!=null){OpenLayers.Util.modifyDOMElement(this.imgDiv,null,null,null,null,null,null,this.layer.opacity);}
-this.imgDiv.map=this.layer.map;var onload=function(){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));}
-var onerror=function(){if(this.imgDiv._attempts>OpenLayers.IMAGE_RELOAD_ATTEMPTS){onload.call(this);}};OpenLayers.Event.observe(this.imgDiv,"error",OpenLayers.Function.bind(onerror,this));}
-this.imgDiv.viewRequestID=this.layer.map.viewRequestID;},removeImgDiv:function(){OpenLayers.Event.stopObservingElement(this.imgDiv);if(this.imgDiv.parentNode==this.frame){this.frame.removeChild(this.imgDiv);this.imgDiv.map=null;}
-this.imgDiv.urls=null;var child=this.imgDiv.firstChild;if(child){OpenLayers.Event.stopObservingElement(child);this.imgDiv.removeChild(child);delete child;}else{this.imgDiv.src=OpenLayers.Util.getImagesLocation()+"blank.gif";}},checkImgURL:function(){if(this.layer){var loaded=this.layerAlphaHack?this.imgDiv.firstChild.src:this.imgDiv.src;if(!OpenLayers.Util.isEquivalentUrl(loaded,this.url)){this.hide();}}},startTransition:function(){if(!this.backBufferTile||!this.backBufferTile.imgDiv){return;}
-var ratio=1;if(this.backBufferTile.resolution){ratio=this.backBufferTile.resolution/this.layer.getResolution();}
-if(ratio!=1){if(this.layer.transitionEffect=='resize'){var upperLeft=new OpenLayers.LonLat(this.backBufferTile.bounds.left,this.backBufferTile.bounds.top);var size=new OpenLayers.Size(this.backBufferTile.size.w*ratio,this.backBufferTile.size.h*ratio);var px=this.layer.map.getLayerPxFromLonLat(upperLeft);OpenLayers.Util.modifyDOMElement(this.backBufferTile.frame,null,px,size);var imageSize=this.backBufferTile.imageSize;imageSize=new OpenLayers.Size(imageSize.w*ratio,imageSize.h*ratio);var [...]
-OpenLayers.Util.modifyDOMElement(this.backBufferTile.imgDiv,null,imageOffset,imageSize);this.backBufferTile.show();}}else{if(this.layer.singleTile){this.backBufferTile.show();}else{this.backBufferTile.hide();}}},show:function(){this.frame.style.display='';if(OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS,this.layer.transitionEffect)!=-1){if(OpenLayers.IS_GECKO===true){this.frame.scrollLeft=this.frame.scrollLeft;}}},hide:function(){this.frame.style.display='none';},CLASS_NAME:"O [...]
-OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);},parseEnvelope:function(env,arr){if(arr&&arr.length==4){env.minx=arr[0];env.miny=arr[1];env.maxx=arr[2];env.maxy=arr[3];}},addLayers:function(ll,lyrs){for(var lind=0,len=lyrs.length;lind<len;lind++){ll.push(lyrs[lind]);}},addImageSize:function(imsize,olsize){if(olsize!==null){imsize.width=olsize.w;imsize.height=olsize.h;imsize.printwidth=olsize.w;imsize.printheight=olsize.h;}},addCoordSys:function(featOrFilt,fsys){if(typeo [...]
-else if(typeof fsys=="object"&&fsys.proj!==null){featOrFilt.id=fsys.proj.srsProjNumber;featOrFilt.string=fsys.proj.srsCode;}else{featOrFilt=fsys;}},iserror:function(data){var ret=null;if(!data){ret=(this.response.error!=='');}else{data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);var errorNodes=data.documentElement.getElementsByTagName("ERROR");ret=(errorNodes!==null&&errorNodes.length>0);}
-return ret;},read:function(data){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);}
-var arcNode=null;if(data&&data.documentElement){if(data.documentElement.nodeName=="ARCXML"){arcNode=data.documentElement;}else{arcNode=data.documentElement.getElementsByTagName("ARCXML")[0];}}
-if(!arcNode||arcNode.firstChild.nodeName==='parsererror'){var error,source;try{error=data.firstChild.nodeValue;source=data.firstChild.childNodes[1].firstChild.nodeValue;}catch(err){}
-throw{message:"Error parsing the ArcXML request",error:error,source:source};}
-var response=this.parseResponse(arcNode);return response;},write:function(request){if(!request){request=this.request;}
-var root=this.createElementNS("","ARCXML");root.setAttribute("version","1.1");var reqElem=this.createElementNS("","REQUEST");if(request.get_image!=null){var getElem=this.createElementNS("","GET_IMAGE");reqElem.appendChild(getElem);var propElem=this.createElementNS("","PROPERTIES");getElem.appendChild(propElem);var props=request.get_image.properties;if(props.featurecoordsys!=null){var feat=this.createElementNS("","FEATURECOORDSYS");propElem.appendChild(feat);if(props.featurecoordsys.id=== [...]
-else{feat.setAttribute("id",props.featurecoordsys.id);}}
-if(props.filtercoordsys!=null){var filt=this.createElementNS("","FILTERCOORDSYS");propElem.appendChild(filt);if(props.filtercoordsys.id===0){filt.setAttribute("string",props.filtercoordsys.string);}
-else{filt.setAttribute("id",props.filtercoordsys.id);}}
-if(props.envelope!=null){var env=this.createElementNS("","ENVELOPE");propElem.appendChild(env);env.setAttribute("minx",props.envelope.minx);env.setAttribute("miny",props.envelope.miny);env.setAttribute("maxx",props.envelope.maxx);env.setAttribute("maxy",props.envelope.maxy);}
-var imagesz=this.createElementNS("","IMAGESIZE");propElem.appendChild(imagesz);imagesz.setAttribute("height",props.imagesize.height);imagesz.setAttribute("width",props.imagesize.width);if(props.imagesize.height!=props.imagesize.printheight||props.imagesize.width!=props.imagesize.printwidth){imagesz.setAttribute("printheight",props.imagesize.printheight);imagesz.setArrtibute("printwidth",props.imagesize.printwidth);}
-if(props.background!=null){var backgrnd=this.createElementNS("","BACKGROUND");propElem.appendChild(backgrnd);backgrnd.setAttribute("color",props.background.color.r+","+
-props.background.color.g+","+
-props.background.color.b);if(props.background.transcolor!==null){backgrnd.setAttribute("transcolor",props.background.transcolor.r+","+
-props.background.transcolor.g+","+
-props.background.transcolor.b);}}
-if(props.layerlist!=null&&props.layerlist.length>0){var layerlst=this.createElementNS("","LAYERLIST");propElem.appendChild(layerlst);for(var ld=0;ld<props.layerlist.length;ld++){var ldef=this.createElementNS("","LAYERDEF");layerlst.appendChild(ldef);ldef.setAttribute("id",props.layerlist[ld].id);ldef.setAttribute("visible",props.layerlist[ld].visible);if(typeof props.layerlist[ld].query=="object"){var query=props.layerlist[ld].query;if(query.where.length<0){continue;}
-var queryElem=null;if(typeof query.spatialfilter=="boolean"&&query.spatialfilter){queryElem=this.createElementNS("","SPATIALQUERY");}
-else{queryElem=this.createElementNS("","QUERY");}
-queryElem.setAttribute("where",query.where);if(typeof query.accuracy=="number"&&query.accuracy>0){queryElem.setAttribute("accuracy",query.accuracy);}
-if(typeof query.featurelimit=="number"&&query.featurelimit<2000){queryElem.setAttribute("featurelimit",query.featurelimit);}
-if(typeof query.subfields=="string"&&query.subfields!="#ALL#"){queryElem.setAttribute("subfields",query.subfields);}
-if(typeof query.joinexpression=="string"&&query.joinexpression.length>0){queryElem.setAttribute("joinexpression",query.joinexpression);}
-if(typeof query.jointables=="string"&&query.jointables.length>0){queryElem.setAttribute("jointables",query.jointables);}
-ldef.appendChild(queryElem);}
-if(typeof props.layerlist[ld].renderer=="object"){this.addRenderer(ldef,props.layerlist[ld].renderer);}}}}else if(request.get_feature!=null){var getElem=this.createElementNS("","GET_FEATURES");getElem.setAttribute("outputmode","newxml");getElem.setAttribute("checkesc","true");if(request.get_feature.geometry){getElem.setAttribute("geometry",request.get_feature.geometry);}
-else{getElem.setAttribute("geometry","false");}
-if(request.get_feature.compact){getElem.setAttribute("compact",request.get_feature.compact);}
-if(request.get_feature.featurelimit=="number"){getElem.setAttribute("featurelimit",request.get_feature.featurelimit);}
-getElem.setAttribute("globalenvelope","true");reqElem.appendChild(getElem);if(request.get_feature.layer!=null&&request.get_feature.layer.length>0){var lyrElem=this.createElementNS("","LAYER");lyrElem.setAttribute("id",request.get_feature.layer);getElem.appendChild(lyrElem);}
-var fquery=request.get_feature.query;if(fquery!=null){var qElem=null;if(fquery.isspatial){qElem=this.createElementNS("","SPATIALQUERY");}else{qElem=this.createElementNS("","QUERY");}
-getElem.appendChild(qElem);if(typeof fquery.accuracy=="number"){qElem.setAttribute("accuracy",fquery.accuracy);}
-if(fquery.featurecoordsys!=null){var fcsElem1=this.createElementNS("","FEATURECOORDSYS");if(fquery.featurecoordsys.id==0){fcsElem1.setAttribute("string",fquery.featurecoordsys.string);}else{fcsElem1.setAttribute("id",fquery.featurecoordsys.id);}
-qElem.appendChild(fcsElem1);}
-if(fquery.filtercoordsys!=null){var fcsElem2=this.createElementNS("","FILTERCOORDSYS");if(fquery.filtercoordsys.id===0){fcsElem2.setAttribute("string",fquery.filtercoordsys.string);}else{fcsElem2.setAttribute("id",fquery.filtercoordsys.id);}
-qElem.appendChild(fcsElem2);}
-if(fquery.buffer>0){var bufElem=this.createElementNS("","BUFFER");bufElem.setAttribute("distance",fquery.buffer);qElem.appendChild(bufElem);}
-if(fquery.isspatial){var spfElem=this.createElementNS("","SPATIALFILTER");spfElem.setAttribute("relation",fquery.spatialfilter.relation);qElem.appendChild(spfElem);if(fquery.spatialfilter.envelope){var envElem=this.createElementNS("","ENVELOPE");envElem.setAttribute("minx",fquery.spatialfilter.envelope.minx);envElem.setAttribute("miny",fquery.spatialfilter.envelope.miny);envElem.setAttribute("maxx",fquery.spatialfilter.envelope.maxx);envElem.setAttribute("maxy",fquery.spatialfilter.envel [...]
-if(fquery.where!=null&&fquery.where.length>0){qElem.setAttribute("where",fquery.where);}}}
-root.appendChild(reqElem);return OpenLayers.Format.XML.prototype.write.apply(this,[root]);},addGroupRenderer:function(ldef,toprenderer){var topRelem=this.createElementNS("","GROUPRENDERER");ldef.appendChild(topRelem);for(var rind=0;rind<toprenderer.length;rind++){var renderer=toprenderer[rind];this.addRenderer(topRelem,renderer);}},addRenderer:function(topRelem,renderer){if(OpenLayers.Util.isArray(renderer)){this.addGroupRenderer(topRelem,renderer);}else{var renderElem=this.createElement [...]
-if(typeof renderer.upper=="string"||typeof renderer.upper=="number"){renderElem.setAttribute("upper",renderer.upper);}
-this.addRenderer(renderElem,renderer.renderer);},addValueMapLabelRenderer:function(renderElem,renderer){renderElem.setAttribute("lookupfield",renderer.lookupfield);renderElem.setAttribute("labelfield",renderer.labelfield);if(typeof renderer.exacts=="object"){for(var ext=0,extlen=renderer.exacts.length;ext<extlen;ext++){var exact=renderer.exacts[ext];var eelem=this.createElementNS("","EXACT");if(typeof exact.value=="string"){eelem.setAttribute("value",exact.value);}
-if(typeof exact.label=="string"){eelem.setAttribute("label",exact.label);}
-if(typeof exact.method=="string"){eelem.setAttribute("method",exact.method);}
-renderElem.appendChild(eelem);if(typeof exact.symbol=="object"){var selem=null;if(exact.symbol.type=="text"){selem=this.createElementNS("","TEXTSYMBOL");}
-if(selem!=null){var keys=this.fontStyleKeys;for(var i=0,len=keys.length;i<len;i++){var key=keys[i];if(exact.symbol[key]){selem.setAttribute(key,exact.symbol[key]);}}
-eelem.appendChild(selem);}}}}},addValueMapRenderer:function(renderElem,renderer){renderElem.setAttribute("lookupfield",renderer.lookupfield);if(typeof renderer.ranges=="object"){for(var rng=0,rnglen=renderer.ranges.length;rng<rnglen;rng++){var range=renderer.ranges[rng];var relem=this.createElementNS("","RANGE");relem.setAttribute("lower",range.lower);relem.setAttribute("upper",range.upper);renderElem.appendChild(relem);if(typeof range.symbol=="object"){var selem=null;if(range.symbol.typ [...]
-if(selem!=null){if(typeof range.symbol.boundarycolor=="string"){selem.setAttribute("boundarycolor",range.symbol.boundarycolor);}
-if(typeof range.symbol.fillcolor=="string"){selem.setAttribute("fillcolor",range.symbol.fillcolor);}
-if(typeof range.symbol.filltransparency=="number"){selem.setAttribute("filltransparency",range.symbol.filltransparency);}
-relem.appendChild(selem);}}}}else if(typeof renderer.exacts=="object"){for(var ext=0,extlen=renderer.exacts.length;ext<extlen;ext++){var exact=renderer.exacts[ext];var eelem=this.createElementNS("","EXACT");if(typeof exact.value=="string"){eelem.setAttribute("value",exact.value);}
-if(typeof exact.label=="string"){eelem.setAttribute("label",exact.label);}
-if(typeof exact.method=="string"){eelem.setAttribute("method",exact.method);}
-renderElem.appendChild(eelem);if(typeof exact.symbol=="object"){var selem=null;if(exact.symbol.type=="simplemarker"){selem=this.createElementNS("","SIMPLEMARKERSYMBOL");}
-if(selem!=null){if(typeof exact.symbol.antialiasing=="string"){selem.setAttribute("antialiasing",exact.symbol.antialiasing);}
-if(typeof exact.symbol.color=="string"){selem.setAttribute("color",exact.symbol.color);}
-if(typeof exact.symbol.outline=="string"){selem.setAttribute("outline",exact.symbol.outline);}
-if(typeof exact.symbol.overlap=="string"){selem.setAttribute("overlap",exact.symbol.overlap);}
-if(typeof exact.symbol.shadow=="string"){selem.setAttribute("shadow",exact.symbol.shadow);}
-if(typeof exact.symbol.transparency=="number"){selem.setAttribute("transparency",exact.symbol.transparency);}
-if(typeof exact.symbol.usecentroid=="string"){selem.setAttribute("usecentroid",exact.symbol.usecentroid);}
-if(typeof exact.symbol.width=="number"){selem.setAttribute("width",exact.symbol.width);}
-eelem.appendChild(selem);}}}}},addSimpleLabelRenderer:function(renderElem,renderer){renderElem.setAttribute("field",renderer.field);var keys=['featureweight','howmanylabels','labelbufferratio','labelpriorities','labelweight','linelabelposition','rotationalangles'];for(var i=0,len=keys.length;i<len;i++){var key=keys[i];if(renderer[key]){renderElem.setAttribute(key,renderer[key]);}}
-if(renderer.symbol.type=="text"){var symbol=renderer.symbol;var selem=this.createElementNS("","TEXTSYMBOL");renderElem.appendChild(selem);var keys=this.fontStyleKeys;for(var i=0,len=keys.length;i<len;i++){var key=keys[i];if(symbol[key]){selem.setAttribute(key,renderer[key]);}}}},writePolygonGeometry:function(polygon){if(!(polygon instanceof OpenLayers.Geometry.Polygon)){throw{message:'Cannot write polygon geometry to ArcXML with an '+
-polygon.CLASS_NAME+' object.',geometry:polygon};}
-var polyElem=this.createElementNS("","POLYGON");for(var ln=0,lnlen=polygon.components.length;ln<lnlen;ln++){var ring=polygon.components[ln];var ringElem=this.createElementNS("","RING");for(var rn=0,rnlen=ring.components.length;rn<rnlen;rn++){var point=ring.components[rn];var pointElem=this.createElementNS("","POINT");pointElem.setAttribute("x",point.x);pointElem.setAttribute("y",point.y);ringElem.appendChild(pointElem);}
-polyElem.appendChild(ringElem);}
-return polyElem;},parseResponse:function(data){if(typeof data=="string"){var newData=new OpenLayers.Format.XML();data=newData.read(data);}
-var response=new OpenLayers.Format.ArcXML.Response();var errorNode=data.getElementsByTagName("ERROR");if(errorNode!=null&&errorNode.length>0){response.error=this.getChildValue(errorNode,"Unknown error.");}else{var responseNode=data.getElementsByTagName("RESPONSE");if(responseNode==null||responseNode.length==0){response.error="No RESPONSE tag found in ArcXML response.";return response;}
-var rtype=responseNode[0].firstChild.nodeName;if(rtype=="#text"){rtype=responseNode[0].firstChild.nextSibling.nodeName;}
-if(rtype=="IMAGE"){var envelopeNode=data.getElementsByTagName("ENVELOPE");var outputNode=data.getElementsByTagName("OUTPUT");if(envelopeNode==null||envelopeNode.length==0){response.error="No ENVELOPE tag found in ArcXML response.";}else if(outputNode==null||outputNode.length==0){response.error="No OUTPUT tag found in ArcXML response.";}else{var envAttr=this.parseAttributes(envelopeNode[0]);var outputAttr=this.parseAttributes(outputNode[0]);if(typeof outputAttr.type=="string"){response.im [...]
-var geom=featureList[fn].getElementsByTagName("POLYGON");if(geom.length>0){var ring=geom[0].getElementsByTagName("RING");var polys=[];for(var rn=0;rn<ring.length;rn++){var linearRings=[];linearRings.push(this.parsePointGeometry(ring[rn]));var holes=ring[rn].getElementsByTagName("HOLE");for(var hn=0;hn<holes.length;hn++){linearRings.push(this.parsePointGeometry(holes[hn]));}
-holes=null;polys.push(new OpenLayers.Geometry.Polygon(linearRings));linearRings=null;}
-ring=null;if(polys.length==1){feature.geometry=polys[0];}else
-{feature.geometry=new OpenLayers.Geometry.MultiPolygon(polys);}}
-response.features.feature.push(feature);}}}else{response.error="Unidentified response type.";}}
-return response;},parseAttributes:function(node,type){var attributes={};for(var attr=0;attr<node.attributes.length;attr++){if(type=="number"){attributes[node.attributes[attr].nodeName]=parseFloat(node.attributes[attr].nodeValue);}else{attributes[node.attributes[attr].nodeName]=node.attributes[attr].nodeValue;}}
-return attributes;},parsePointGeometry:function(node){var ringPoints=[];var coords=node.getElementsByTagName("COORDS");if(coords.length>0){var coordArr=this.getChildValue(coords[0]);coordArr=coordArr.split(/;/);for(var cn=0;cn<coordArr.length;cn++){var coordItems=coordArr[cn].split(/ /);ringPoints.push(new OpenLayers.Geometry.Point(parseFloat(coordItems[0]),parseFloat(coordItems[1])));}
-coords=null;}else{var point=node.getElementsByTagName("POINT");if(point.length>0){for(var pn=0;pn<point.length;pn++){ringPoints.push(new OpenLayers.Geometry.Point(parseFloat(point[pn].getAttribute("x")),parseFloat(point[pn].getAttribute("y"))));}}
-point=null;}
-return new OpenLayers.Geometry.LinearRing(ringPoints);},CLASS_NAME:"OpenLayers.Format.ArcXML"});OpenLayers.Format.ArcXML.Request=OpenLayers.Class({initialize:function(params){var defaults={get_image:{properties:{background:null,draw:true,envelope:{minx:0,miny:0,maxx:0,maxy:0},featurecoordsys:{id:0,string:"",datumtransformid:0,datumtransformstring:""},filtercoordsys:{id:0,string:"",datumtransformid:0,datumtransformstring:""},imagesize:{height:0,width:0,dpi:96,printheight:0,printwidth:0,sc [...]
-if(!sameOrigin){if(config.proxy){if(typeof config.proxy=="function"){url=config.proxy(url);}else{url=config.proxy+encodeURIComponent(url);}}else{OpenLayers.Console.warn(OpenLayers.i18n("proxyNeeded"),{url:url});}}
-request.open(config.method,url,config.async,config.user,config.password);for(var header in config.headers){request.setRequestHeader(header,config.headers[header]);}
-var events=this.events;var self=this;request.onreadystatechange=function(){if(request.readyState==OpenLayers.Request.XMLHttpRequest.DONE){var proceed=events.triggerEvent("complete",{request:request,config:config,requestUrl:url});if(proceed!==false){self.runCallbacks({request:request,config:config,requestUrl:url});}}};if(config.async===false){request.send(config.data);}else{window.setTimeout(function(){if(request.readyState!==0){request.send(config.data);}},0);}
-return request;},runCallbacks:function(options){var request=options.request;var config=options.config;var complete=(config.scope)?OpenLayers.Function.bind(config.callback,config.scope):config.callback;var success;if(config.success){success=(config.scope)?OpenLayers.Function.bind(config.success,config.scope):config.success;}
-var failure;if(config.failure){failure=(config.scope)?OpenLayers.Function.bind(config.failure,config.scope):config.failure;}
-if(OpenLayers.Util.createUrlObject(config.url).protocol=="file:"&&request.responseText){request.status=200;}
-complete(request);if(!request.status||(request.status>=200&&request.status<300)){this.events.triggerEvent("success",options);if(success){success(request);}}
-if(request.status&&(request.status<200||request.status>=300)){this.events.triggerEvent("failure",options);if(failure){failure(request);}}},GET:function(config){config=OpenLayers.Util.extend(config,{method:"GET"});return OpenLayers.Request.issue(config);},POST:function(config){config=OpenLayers.Util.extend(config,{method:"POST"});config.headers=config.headers?config.headers:{};if(!("CONTENT-TYPE"in OpenLayers.Util.upperCaseObject(config.headers))){config.headers["Content-Type"]="applicati [...]
-return OpenLayers.Request.issue(config);},PUT:function(config){config=OpenLayers.Util.extend(config,{method:"PUT"});config.headers=config.headers?config.headers:{};if(!("CONTENT-TYPE"in OpenLayers.Util.upperCaseObject(config.headers))){config.headers["Content-Type"]="application/xml";}
-return OpenLayers.Request.issue(config);},DELETE:function(config){config=OpenLayers.Util.extend(config,{method:"DELETE"});return OpenLayers.Request.issue(config);},HEAD:function(config){config=OpenLayers.Util.extend(config,{method:"HEAD"});return OpenLayers.Request.issue(config);},OPTIONS:function(config){config=OpenLayers.Util.extend(config,{method:"OPTIONS"});return OpenLayers.Request.issue(config);}};OpenLayers.Layer.ArcIMS=OpenLayers.Class(OpenLayers.Layer.Grid,{DEFAULT_PARAMS:{Clien [...]
-if(this.format=="image/jpeg"){this.format=OpenLayers.Util.alphaHack()?"image/gif":"image/png";}}
-if(this.options.layers===null){this.options.layers=[];}},destroy:function(){OpenLayers.Layer.Grid.prototype.destroy.apply(this,arguments);},getURL:function(bounds){var url="";bounds=this.adjustBounds(bounds);var axlReq=new OpenLayers.Format.ArcXML(OpenLayers.Util.extend(this.options,{requesttype:"image",envelope:bounds.toArray(),tileSize:this.tileSize}));var req=new OpenLayers.Request.POST({url:this.getFullRequestString(),data:axlReq.write(),async:false});if(req!=null){var doc=req.respon [...]
-var axlResp=new OpenLayers.Format.ArcXML();var arcxml=axlResp.read(doc);url=this.getUrlOrImage(arcxml.image.output);}
-return url;},getURLasync:function(bounds,scope,prop,callback){bounds=this.adjustBounds(bounds);var axlReq=new OpenLayers.Format.ArcXML(OpenLayers.Util.extend(this.options,{requesttype:"image",envelope:bounds.toArray(),tileSize:this.tileSize}));OpenLayers.Request.POST({url:this.getFullRequestString(),async:true,data:axlReq.write(),callback:function(req){var doc=req.responseXML;if(!doc||!doc.documentElement){doc=req.responseText;}
-var axlResp=new OpenLayers.Format.ArcXML();var arcxml=axlResp.read(doc);scope[prop]=this.getUrlOrImage(arcxml.image.output);callback.apply(scope);},scope:this});},getUrlOrImage:function(output){var ret="";if(output.url){ret=output.url;}else if(output.data){ret="data:image/"+output.type+";base64,"+output.data;}
-return ret;},setLayerQuery:function(id,querydef){for(var lyr=0;lyr<this.options.layers.length;lyr++){if(id==this.options.layers[lyr].id){this.options.layers[lyr].query=querydef;return;}}
-this.options.layers.push({id:id,visible:true,query:querydef});},getFeatureInfo:function(geometry,layer,options){var buffer=options.buffer||1;var callback=options.callback||function(){};var scope=options.scope||window;var requestOptions={};OpenLayers.Util.extend(requestOptions,this.options);requestOptions.requesttype="feature";if(geometry instanceof OpenLayers.LonLat){requestOptions.polygon=null;requestOptions.envelope=[geometry.lon-buffer,geometry.lat-buffer,geometry.lon+buffer,geometry. [...]
-var arcxml=new OpenLayers.Format.ArcXML(requestOptions);OpenLayers.Util.extend(arcxml.request.get_feature,options);arcxml.request.get_feature.layer=layer.id;if(typeof layer.query.accuracy=="number"){arcxml.request.get_feature.query.accuracy=layer.query.accuracy;}else{var mapCenter=this.map.getCenter();var viewPx=this.map.getViewPortPxFromLonLat(mapCenter);viewPx.x++;var mapOffCenter=this.map.getLonLatFromPixel(viewPx);arcxml.request.get_feature.query.accuracy=mapOffCenter.lon-mapCenter.lon;}
-arcxml.request.get_feature.query.where=layer.query.where;arcxml.request.get_feature.query.spatialfilter.relation="area_intersection";OpenLayers.Request.POST({url:this.getFullRequestString({'CustomService':'Query'}),data:arcxml.write(),callback:function(request){var response=arcxml.parseResponse(request.responseText);if(!arcxml.iserror()){callback.call(scope,response.features);}else{callback.call(scope,null);}}});},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.ArcIMS(this.nam [...]
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},CLASS_NAME:"OpenLayers.Layer.ArcIMS"});OpenLayers.Format.OWSCommon.v1_1_0=OpenLayers.Class(OpenLayers.Format.OWSCommon.v1,{namespaces:{ows:"http://www.opengis.net/ows/1.1",xlink:"http://www.w3.org/1999/xlink"},readers:{"ows":OpenLayers.Util.applyDefaults({"ExceptionReport":function(node,obj){obj.exceptionReport={version:node.getAttribute('version'),language:node.getAttribute('xml:lang'),exceptions:[]};this.readChild [...]
-return node;},"TemporalSubset":function(temporalSubset){var node=this.createElementNSPlus("wcs:TemporalSubset",{});for(var i=0,len=temporalSubset.timePeriods.length;i<len;++i){this.writeNode("wcs:TimePeriod",temporalSubset.timePeriods[i],node);}
-return node;},"TimePeriod":function(timePeriod){var node=this.createElementNSPlus("wcs:TimePeriod",{});this.writeNode("wcs:BeginPosition",timePeriod.begin,node);this.writeNode("wcs:EndPosition",timePeriod.end,node);if(timePeriod.resolution){this.writeNode("wcs:TimeResolution",timePeriod.resolution,node);}
-return node;},"BeginPosition":function(begin){var node=this.createElementNSPlus("wcs:BeginPosition",{value:begin});return node;},"EndPosition":function(end){var node=this.createElementNSPlus("wcs:EndPosition",{value:end});return node;},"TimeResolution":function(resolution){var node=this.createElementNSPlus("wcs:TimeResolution",{value:resolution});return node;},"Output":function(output){var node=this.createElementNSPlus("wcs:Output",{attributes:{format:output.format,store:output.store}}); [...]
-return node;},"GridCRS":function(gridCRS){var node=this.createElementNSPlus("wcs:GridCRS",{});this.writeNode("wcs:GridBaseCRS",gridCRS.baseCRS,node);if(gridCRS.type){this.writeNode("wcs:GridType",gridCRS.type,node);}
-if(gridCRS.origin){this.writeNode("wcs:GridOrigin",gridCRS.origin,node);}
-this.writeNode("wcs:GridOffsets",gridCRS.offsets,node);if(gridCRS.CS){this.writeNode("wcs:GridCS",gridCRS.CS,node);}
-return node;},"GridBaseCRS":function(baseCRS){return this.createElementNSPlus("wcs:GridBaseCRS",{value:baseCRS});},"GridOrigin":function(origin){return this.createElementNSPlus("wcs:GridOrigin",{value:origin});},"GridType":function(type){return this.createElementNSPlus("wcs:GridType",{value:type});},"GridOffsets":function(offsets){return this.createElementNSPlus("wcs:GridOffsets",{value:offsets});},"GridCS":function(CS){return this.createElementNSPlus("wcs:GridCS",{value:CS});}},"ows":Op [...]
-var node=this.writeNode("wps:Execute",options,doc);this.setAttributeNS(node,this.namespaces.xsi,"xsi:schemaLocation",this.schemaLocation);return OpenLayers.Format.XML.prototype.write.apply(this,[node]);},writers:{"wps":{"Execute":function(options){var node=this.createElementNSPlus("wps:Execute",{attributes:{version:this.VERSION,service:'WPS'}});this.writeNode("ows:Identifier",options.identifier,node);this.writeNode("wps:DataInputs",options.dataInputs,node);this.writeNode("wps:ResponseFor [...]
-if(responseForm.responseDocument){this.writeNode("wps:ResponseDocument",responseForm.responseDocument,node);}
-return node;},"ResponseDocument":function(responseDocument){var node=this.createElementNSPlus("wps:ResponseDocument",{attributes:{storeExecuteResponse:responseDocument.storeExecuteResponse,lineage:responseDocument.lineage,status:responseDocument.status}});if(responseDocument.output){this.writeNode("wps:Output",responseDocument.output,node);}
-return node;},"Output":function(output){var node=this.createElementNSPlus("wps:Output",{attributes:{asReference:output.asReference}});this.writeNode("ows:Identifier",output.identifier,node);this.writeNode("ows:Title",output.title,node);this.writeNode("ows:Abstract",output["abstract"],node);return node;},"RawDataOutput":function(rawDataOutput){var node=this.createElementNSPlus("wps:RawDataOutput",{attributes:{mimeType:rawDataOutput.mimeType}});this.writeNode("ows:Identifier",rawDataOutput [...]
-return node;},"Input":function(input){var node=this.createElementNSPlus("wps:Input",{});this.writeNode("ows:Identifier",input.identifier,node);if(input.title){this.writeNode("ows:Title",input.title,node);}
-if(input.data){this.writeNode("wps:Data",input.data,node);}
-if(input.reference){this.writeNode("wps:Reference",input.reference,node);}
-return node;},"Data":function(data){var node=this.createElementNSPlus("wps:Data",{});if(data.literalData){this.writeNode("wps:LiteralData",data.literalData,node);}else if(data.complexData){this.writeNode("wps:ComplexData",data.complexData,node);}
-return node;},"LiteralData":function(literalData){var node=this.createElementNSPlus("wps:LiteralData",{attributes:{uom:literalData.uom},value:literalData.value});return node;},"ComplexData":function(complexData){var node=this.createElementNSPlus("wps:ComplexData",{attributes:{mimeType:complexData.mimeType,encoding:complexData.encoding,schema:complexData.schema}});node.appendChild(this.getXMLDoc().createCDATASection(complexData.value));return node;},"Reference":function(reference){var nod [...]
-return node;},"Body":function(body){var node=this.createElementNSPlus("wps:Body",{});if(body.wcs){this.writeNode("wcs:GetCoverage",body.wcs,node);}
-else if(body.wfs){this.featureType=body.wfs.featureType;this.version=body.wfs.version;this.writeNode("wfs:GetFeature",body.wfs,node);}else{this.writeNode("wps:Execute",body,node);}
-return node;}},"wcs":OpenLayers.Format.WCSGetCoverage.prototype.writers.wcs,"wfs":OpenLayers.Format.WFST.v1_1_0.prototype.writers.wfs,"ows":OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows},CLASS_NAME:"OpenLayers.Format.WPSExecute"});OpenLayers.Control.PanZoom=OpenLayers.Class(OpenLayers.Control,{slideFactor:50,slideRatio:null,buttons:null,position:null,initialize:function(options){this.position=new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X,OpenLayers.Control.PanZoom.Y);OpenL [...]
-btn.getSlideFactor=getSlideFactor;this.buttons.push(btn);return btn;},_removeButton:function(btn){OpenLayers.Event.stopObservingElement(btn);btn.map=null;btn.getSlideFactor=null;this.div.removeChild(btn);OpenLayers.Util.removeItem(this.buttons,btn);},removeButtons:function(){for(var i=this.buttons.length-1;i>=0;--i){this._removeButton(this.buttons[i]);}},doubleClick:function(evt){OpenLayers.Event.stop(evt);return false;},buttonDown:function(evt){if(!OpenLayers.Event.isLeftClick(evt)){return;}
-switch(this.action){case"panup":this.map.pan(0,-this.getSlideFactor("h"));break;case"pandown":this.map.pan(0,this.getSlideFactor("h"));break;case"panleft":this.map.pan(-this.getSlideFactor("w"),0);break;case"panright":this.map.pan(this.getSlideFactor("w"),0);break;case"zoomin":this.map.zoomIn();break;case"zoomout":this.map.zoomOut();break;case"zoomworld":this.map.zoomToMaxExtent();break;}
-OpenLayers.Event.stop(evt);},CLASS_NAME:"OpenLayers.Control.PanZoom"});OpenLayers.Control.PanZoom.X=4;OpenLayers.Control.PanZoom.Y=4;OpenLayers.Control.PanZoomBar=OpenLayers.Class(OpenLayers.Control.PanZoom,{zoomStopWidth:18,zoomStopHeight:11,slider:null,sliderEvents:null,zoombarDiv:null,divEvents:null,zoomWorldIcon:false,panIcons:true,forceFixedZoomLevel:false,mouseDragStart:null,deltaY:null,zoomStart:null,destroy:function(){this._removeZoomBar();this.map.events.un({"changebaselayer":th [...]
-this.draw();},draw:function(px){OpenLayers.Control.prototype.draw.apply(this,arguments);px=this.position.clone();this.buttons=[];var sz=new OpenLayers.Size(18,18);if(this.panIcons){var centered=new OpenLayers.Pixel(px.x+sz.w/2,px.y);var wposition=sz.w;if(this.zoomWorldIcon){centered=new OpenLayers.Pixel(px.x+sz.w,px.y);}
-this._addButton("panup","north-mini.png",centered,sz);px.y=centered.y+sz.h;this._addButton("panleft","west-mini.png",px,sz);if(this.zoomWorldIcon){this._addButton("zoomworld","zoom-world-mini.png",px.add(sz.w,0),sz);wposition*=2;}
-this._addButton("panright","east-mini.png",px.add(wposition,0),sz);this._addButton("pandown","south-mini.png",centered.add(0,sz.h*2),sz);this._addButton("zoomin","zoom-plus-mini.png",centered.add(0,sz.h*3+5),sz);centered=this._addZoomBar(centered.add(0,sz.h*4+5));this._addButton("zoomout","zoom-minus-mini.png",centered,sz);}
-else{this._addButton("zoomin","zoom-plus-mini.png",px,sz);centered=this._addZoomBar(px.add(0,sz.h));this._addButton("zoomout","zoom-minus-mini.png",centered,sz);if(this.zoomWorldIcon){centered=centered.add(0,sz.h+3);this._addButton("zoomworld","zoom-world-mini.png",centered,sz);}}
-return this.div;},_addZoomBar:function(centered){var imgLocation=OpenLayers.Util.getImagesLocation();var id=this.id+"_"+this.map.id;var zoomsToEnd=this.map.getNumZoomLevels()-1-this.map.getZoom();var slider=OpenLayers.Util.createAlphaImageDiv(id,centered.add(-1,zoomsToEnd*this.zoomStopHeight),new OpenLayers.Size(20,9),imgLocation+"slider.png","absolute");slider.style.cursor="move";this.slider=slider;this.sliderEvents=new OpenLayers.Events(this,slider,null,true,{includeXY:true});this.slid [...]
-div.style.cursor="pointer";this.zoombarDiv=div;this.divEvents=new OpenLayers.Events(this,div,null,true,{includeXY:true});this.divEvents.on({"touchmove":this.passEventToSlider,"mousedown":this.divClick,"mousemove":this.passEventToSlider,"dblclick":this.doubleClick,"click":this.doubleClick});this.div.appendChild(div);this.startTop=parseInt(div.style.top);this.div.appendChild(slider);this.map.events.register("zoomend",this,this.moveZoomBar);centered=centered.add(0,this.zoomStopHeight*this.m [...]
-var levels=evt.xy.y/this.zoomStopHeight;if(this.forceFixedZoomLevel||!this.map.fractionalZoom){levels=Math.floor(levels);}
-var zoom=(this.map.getNumZoomLevels()-1)-levels;zoom=Math.min(Math.max(zoom,0),this.map.getNumZoomLevels()-1);this.map.zoomTo(zoom);OpenLayers.Event.stop(evt);},zoomBarDown:function(evt){if(!OpenLayers.Event.isLeftClick(evt)&&!OpenLayers.Event.isSingleTouch(evt)){return;}
-this.map.events.on({"touchmove":this.passEventToSlider,"mousemove":this.passEventToSlider,"mouseup":this.passEventToSlider,scope:this});this.mouseDragStart=evt.xy.clone();this.zoomStart=evt.xy.clone();this.div.style.cursor="move";this.zoombarDiv.offsets=null;OpenLayers.Event.stop(evt);},zoomBarDrag:function(evt){if(this.mouseDragStart!=null){var deltaY=this.mouseDragStart.y-evt.xy.y;var offsets=OpenLayers.Util.pagePosition(this.zoombarDiv);if((evt.clientY-offsets[1])>0&&(evt.clientY-offs [...]
-this.deltaY=this.zoomStart.y-evt.xy.y;OpenLayers.Event.stop(evt);}},zoomBarUp:function(evt){if(!OpenLayers.Event.isLeftClick(evt)&&evt.type!=="touchend"){return;}
-if(this.mouseDragStart){this.div.style.cursor="";this.map.events.un({"touchmove":this.passEventToSlider,"mouseup":this.passEventToSlider,"mousemove":this.passEventToSlider,scope:this});var zoomLevel=this.map.zoom;if(!this.forceFixedZoomLevel&&this.map.fractionalZoom){zoomLevel+=this.deltaY/this.zoomStopHeight;zoomLevel=Math.min(Math.max(zoomLevel,0),this.map.getNumZoomLevels()-1);}else{zoomLevel+=this.deltaY/this.zoomStopHeight;zoomLevel=Math.max(Math.round(zoomLevel),0);}
-this.map.zoomTo(zoomLevel);this.mouseDragStart=null;this.zoomStart=null;this.deltaY=0;OpenLayers.Event.stop(evt);}},moveZoomBar:function(){var newTop=((this.map.getNumZoomLevels()-1)-this.map.getZoom())*this.zoomStopHeight+this.startTop+1;this.slider.style.top=newTop+"px";},CLASS_NAME:"OpenLayers.Control.PanZoomBar"});OpenLayers.Layer.Image=OpenLayers.Class(OpenLayers.Layer,{isBaseLayer:true,url:null,extent:null,size:null,tile:null,aspectRatio:null,initialize:function(name,url,extent,siz [...]
-OpenLayers.Layer.prototype.destroy.apply(this,arguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.Image(this.name,this.url,this.extent,this.size,this.getOptions());}
-obj=OpenLayers.Layer.prototype.clone.apply(this,[obj]);return obj;},setMap:function(map){if(this.options.maxResolution==null){this.options.maxResolution=this.aspectRatio*this.extent.getWidth()/this.size.w;}
-OpenLayers.Layer.prototype.setMap.apply(this,arguments);},moveTo:function(bounds,zoomChanged,dragging){OpenLayers.Layer.prototype.moveTo.apply(this,arguments);var firstRendering=(this.tile==null);if(zoomChanged||firstRendering){this.setTileSize();var ul=new OpenLayers.LonLat(this.extent.left,this.extent.top);var ulPx=this.map.getLayerPxFromLonLat(ul);if(firstRendering){this.tile=new OpenLayers.Tile.Image(this,ulPx,this.extent,null,this.tileSize);this.addTileMonitoringHooks(this.tile);}el [...]
-this.tile.draw();}},setTileSize:function(){var tileWidth=this.extent.getWidth()/this.map.getResolution();var tileHeight=this.extent.getHeight()/this.map.getResolution();this.tileSize=new OpenLayers.Size(tileWidth,tileHeight);},addTileMonitoringHooks:function(tile){tile.onLoadStart=function(){this.events.triggerEvent("loadstart");};tile.events.register("loadstart",this,tile.onLoadStart);tile.onLoadEnd=function(){this.events.triggerEvent("loadend");};tile.events.register("loadend",this,til [...]
-return false;},deactivate:function(){if(this.active){this.active=false;return true;}
-return false;},CLASS_NAME:"OpenLayers.Strategy"});OpenLayers.Strategy.Save=OpenLayers.Class(OpenLayers.Strategy,{EVENT_TYPES:["start","success","fail"],events:null,auto:false,timer:null,initialize:function(options){OpenLayers.Strategy.prototype.initialize.apply(this,[options]);this.events=new OpenLayers.Events(this,null,this.EVENT_TYPES);},activate:function(){var activated=OpenLayers.Strategy.prototype.activate.call(this);if(activated){if(this.auto){if(typeof this.auto==="number"){this.t [...]
-return activated;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){if(this.auto){if(typeof this.auto==="number"){window.clearInterval(this.timer);}else{this.layer.events.un({"featureadded":this.triggerSave,"afterfeaturemodified":this.triggerSave,scope:this});}}}
-return deactivated;},triggerSave:function(event){var feature=event.feature;if(feature.state===OpenLayers.State.INSERT||feature.state===OpenLayers.State.UPDATE||feature.state===OpenLayers.State.DELETE){this.save([event.feature]);}},save:function(features){if(!features){features=this.layer.features;}
-this.events.triggerEvent("start",{features:features});var remote=this.layer.projection;var local=this.layer.map.getProjectionObject();if(!local.equals(remote)){var len=features.length;var clones=new Array(len);var orig,clone;for(var i=0;i<len;++i){orig=features[i];clone=orig.clone();clone.fid=orig.fid;clone.state=orig.state;if(orig.url){clone.url=orig.url;}
-clone._original=orig;clone.geometry.transform(local,remote);clones[i]=clone;}
-features=clones;}
-this.layer.protocol.commit(features,{callback:this.onCommit,scope:this});},onCommit:function(response){var evt={"response":response};if(response.success()){var features=response.reqFeatures;var state,feature;var destroys=[];var insertIds=response.insertIds||[];var j=0;for(var i=0,len=features.length;i<len;++i){feature=features[i];feature=feature._original||feature;state=feature.state;if(state){if(state==OpenLayers.State.DELETE){destroys.push(feature);}else if(state==OpenLayers.State.INSE [...]
-feature.state=null;}}
-if(destroys.length>0){this.layer.destroyFeatures(destroys);}
-this.events.triggerEvent("success",evt);}else{this.events.triggerEvent("fail",evt);}},CLASS_NAME:"OpenLayers.Strategy.Save"});OpenLayers.Format.GPX=OpenLayers.Class(OpenLayers.Format.XML,{extractWaypoints:true,extractTracks:true,extractRoutes:true,extractAttributes:true,initialize:function(options){this.externalProjection=new OpenLayers.Projection("EPSG:4326");OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);},read:function(doc){if(typeof doc=="string"){doc=OpenLayers.For [...]
-var features=[];if(this.extractTracks){var tracks=doc.getElementsByTagName("trk");for(var i=0,len=tracks.length;i<len;i++){var attrs={};if(this.extractAttributes){attrs=this.parseAttributes(tracks[i]);}
-var segs=this.getElementsByTagNameNS(tracks[i],tracks[i].namespaceURI,"trkseg");for(var j=0,seglen=segs.length;j<seglen;j++){var track=this.extractSegment(segs[j],"trkpt");features.push(new OpenLayers.Feature.Vector(track,attrs));}}}
-if(this.extractRoutes){var routes=doc.getElementsByTagName("rte");for(var k=0,klen=routes.length;k<klen;k++){var attrs={};if(this.extractAttributes){attrs=this.parseAttributes(routes[k]);}
-var route=this.extractSegment(routes[k],"rtept");features.push(new OpenLayers.Feature.Vector(route,attrs));}}
-if(this.extractWaypoints){var waypoints=doc.getElementsByTagName("wpt");for(var l=0,len=waypoints.length;l<len;l++){var attrs={};if(this.extractAttributes){attrs=this.parseAttributes(waypoints[l]);}
-var wpt=new OpenLayers.Geometry.Point(waypoints[l].getAttribute("lon"),waypoints[l].getAttribute("lat"));features.push(new OpenLayers.Feature.Vector(wpt,attrs));}}
-if(this.internalProjection&&this.externalProjection){for(var g=0,featLength=features.length;g<featLength;g++){features[g].geometry.transform(this.externalProjection,this.internalProjection);}}
-return features;},extractSegment:function(segment,segmentType){var points=this.getElementsByTagNameNS(segment,segment.namespaceURI,segmentType);var point_features=[];for(var i=0,len=points.length;i<len;i++){point_features.push(new OpenLayers.Geometry.Point(points[i].getAttribute("lon"),points[i].getAttribute("lat")));}
-return new OpenLayers.Geometry.LineString(point_features);},parseAttributes:function(node){var attributes={};var attrNode=node.firstChild,value,name;while(attrNode){if(attrNode.nodeType==1){value=attrNode.firstChild;if(value.nodeType==3||value.nodeType==4){name=(attrNode.prefix)?attrNode.nodeName.split(":")[1]:attrNode.nodeName;if(name!="trkseg"&&name!="rtept"){attributes[name]=value.nodeValue;}}}
-attrNode=attrNode.nextSibling;}
-return attributes;},CLASS_NAME:"OpenLayers.Format.GPX"});OpenLayers.Format.WMSDescribeLayer=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{defaultVersion:"1.1.1",getVersion:function(root,options){var version=OpenLayers.Format.XML.VersionedOGC.prototype.getVersion.apply(this,arguments);if(version=="1.1.1"||version=="1.1.0"){version="1.1";}
-return version;},CLASS_NAME:"OpenLayers.Format.WMSDescribeLayer"});OpenLayers.Format.WMSDescribeLayer.v1_1=OpenLayers.Class(OpenLayers.Format.WMSDescribeLayer,{initialize:function(options){OpenLayers.Format.WMSDescribeLayer.prototype.initialize.apply(this,[options]);},read:function(data){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);}
-var root=data.documentElement;var children=root.childNodes;var describelayer=[];var childNode,nodeName;for(var i=0;i<children.length;++i){childNode=children[i];nodeName=childNode.nodeName;if(nodeName=='LayerDescription'){var layerName=childNode.getAttribute('name');var owsType='';var owsURL='';var typeName='';if(childNode.getAttribute('owsType')){owsType=childNode.getAttribute('owsType');owsURL=childNode.getAttribute('owsURL');}else{if(childNode.getAttribute('wfs')!=''){owsType='WFS';ows [...]
-var query=childNode.getElementsByTagName('Query');if(query.length>0){typeName=query[0].getAttribute('typeName');if(!typeName){typeName=query[0].getAttribute('typename');}}
-describelayer.push({layerName:layerName,owsType:owsType,owsURL:owsURL,typeName:typeName});}}
-return describelayer;},CLASS_NAME:"OpenLayers.Format.WMSDescribeLayer.v1_1"});OpenLayers.Format.XLS=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{defaultVersion:"1.1.0",stringifyOutput:true,CLASS_NAME:"OpenLayers.Format.XLS"});OpenLayers.Format.XLS.v1=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{xls:"http://www.opengis.net/xls",gml:"http://www.opengis.net/gml",xsi:"http://www.w3.org/2001/XMLSchema-instance"},regExes:{trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s*/g),splitSpace: [...]
-return node;},"Address":function(address){var node=this.createElementNSPlus("xls:Address",{attributes:{countryCode:address.countryCode}});if(address.freeFormAddress){this.writeNode("freeFormAddess",address.freeFormAddress,node);}else{if(address.street){this.writeNode("StreetAddress",address,node);}
-if(address.municipality){this.writeNode("Municipality",address.municipality,node);}
-if(address.countrySubdivision){this.writeNode("CountrySubdivision",address.countrySubdivision,node);}
-if(address.postalCode){this.writeNode("PostalCode",address.postalCode,node);}}
-return node;},"freeFormAddress":function(freeFormAddress){return this.createElementNSPlus("freeFormAddress",{value:freeFormAddress});},"StreetAddress":function(address){var node=this.createElementNSPlus("xls:StreetAddress");if(address.building){this.writeNode(node,"Building",address.building);}
-var street=address.street;if(!(OpenLayers.Util.isArray(street))){street=[street];}
-for(var i=0,len=street.length;i<len;i++){this.writeNode("Street",street[i],node);}
-return node;},"Building":function(building){return this.createElementNSPlus("xls:Building",{attributes:{"number":building["number"],"subdivision":building.subdivision,"buildingName":building.buildingName}});},"Street":function(street){return this.createElementNSPlus("xls:Street",{value:street});},"Municipality":function(municipality){return this.createElementNSPlus("xls:Place",{attributes:{type:"Municipality"},value:municipality});},"CountrySubdivision":function(countrySubdivision){retur [...]
-if(feature.geometry){var bounds=feature.geometry.getBounds();if(bounds){if(!bounds.intersectsBounds(this.extent)){style={display:"none"};}
-var rendered=this.drawGeometry(feature.geometry,style,feature.id);if(style.display!="none"&&style.label&&rendered!==false){var location=feature.geometry.getCentroid();if(style.labelXOffset||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);}
-this.drawText(feature.id,style,location);}else{this.removeText(feature.id);}
-return rendered;}}},drawGeometry:function(geometry,style,featureId){},drawText:function(featureId,style,location){},removeText:function(featureId){},clear:function(){},getFeatureIdFromEvent:function(evt){},eraseFeatures:function(features){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-for(var i=0,len=features.length;i<len;++i){var feature=features[i];this.eraseGeometry(feature.geometry,feature.id);this.removeText(feature.id);}},eraseGeometry:function(geometry,featureId){},moveRoot:function(renderer){},getRenderLayerId:function(){return this.container.id;},applyDefaultSymbolizer:function(symbolizer){var result=OpenLayers.Util.extend({},OpenLayers.Renderer.defaultSymbolizer);if(symbolizer.stroke===false){delete result.strokeWidth;delete result.strokeColor;}
-if(symbolizer.fill===false){delete result.fillColor;}
-OpenLayers.Util.extend(result,symbolizer);return result;},CLASS_NAME:"OpenLayers.Renderer"});OpenLayers.Renderer.defaultSymbolizer={fillColor:"#000000",strokeColor:"#000000",strokeWidth:2,fillOpacity:1,strokeOpacity:1,pointRadius:0};OpenLayers.Renderer.Canvas=OpenLayers.Class(OpenLayers.Renderer,{hitDetection:true,hitOverflow:0,canvas:null,features:null,pendingRedraw:false,initialize:function(containerID,options){OpenLayers.Renderer.prototype.initialize.apply(this,arguments);this.root=do [...]
-else{delete(this.features[feature.id]);}
-this.pendingRedraw=true;}
-if(this.pendingRedraw&&!this.locked){this.redraw();this.pendingRedraw=false;}
-return rendered;},drawGeometry:function(geometry,style,featureId){var className=geometry.CLASS_NAME;if((className=="OpenLayers.Geometry.Collection")||(className=="OpenLayers.Geometry.MultiPoint")||(className=="OpenLayers.Geometry.MultiLineString")||(className=="OpenLayers.Geometry.MultiPolygon")){for(var i=0;i<geometry.components.length;i++){this.drawGeometry(geometry.components[i],style,featureId);}
-return;}
-switch(geometry.CLASS_NAME){case"OpenLayers.Geometry.Point":this.drawPoint(geometry,style,featureId);break;case"OpenLayers.Geometry.LineString":this.drawLineString(geometry,style,featureId);break;case"OpenLayers.Geometry.LinearRing":this.drawLinearRing(geometry,style,featureId);break;case"OpenLayers.Geometry.Polygon":this.drawPolygon(geometry,style,featureId);break;default:break;}},drawExternalGraphic:function(geometry,style,featureId){var img=new Image();if(style.graphicTitle){img.title [...]
-var width=style.graphicWidth||style.graphicHeight;var height=style.graphicHeight||style.graphicWidth;width=width?width:style.pointRadius*2;height=height?height:style.pointRadius*2;var xOffset=(style.graphicXOffset!=undefined)?style.graphicXOffset:-(0.5*width);var yOffset=(style.graphicYOffset!=undefined)?style.graphicYOffset:-(0.5*height);var opacity=style.graphicOpacity||style.fillOpacity;var onLoad=function(){if(!this.features[featureId]){return;}
-var pt=this.getLocalXY(geometry);var p0=pt[0];var p1=pt[1];if(!isNaN(p0)&&!isNaN(p1)){var x=(p0+xOffset)|0;var y=(p1+yOffset)|0;var canvas=this.canvas;canvas.globalAlpha=opacity;var factor=OpenLayers.Renderer.Canvas.drawImageScaleFactor||(OpenLayers.Renderer.Canvas.drawImageScaleFactor=/android 2.1/.test(navigator.userAgent.toLowerCase())?320/window.screen.width:1);canvas.drawImage(img,x*factor,y*factor,width*factor,height*factor);if(this.hitDetection){this.setHitContextStyle("fill",feat [...]
-var hex="000000"+id.toString(16);var len=hex.length;hex="#"+hex.substring(len-6,len);return hex;},setHitContextStyle:function(type,featureId,symbolizer){var hex=this.featureIdToHex(featureId);if(type=="fill"){this.hitContext.globalAlpha=1.0;this.hitContext.fillStyle=hex;}else if(type=="stroke"){this.hitContext.globalAlpha=1.0;this.hitContext.strokeStyle=hex;this.hitContext.lineWidth=symbolizer.strokeWidth+2;}else{this.hitContext.globalAlpha=0;this.hitContext.lineWidth=1;}},drawPoint:func [...]
-if(style.stroke!==false){this.setCanvasStyle("stroke",style);this.canvas.beginPath();this.canvas.arc(p0,p1,radius,0,twoPi,true);this.canvas.stroke();if(this.hitDetection){this.setHitContextStyle("stroke",featureId,style);this.hitContext.beginPath();this.hitContext.arc(p0,p1,radius,0,twoPi,true);this.hitContext.stroke();}
-this.setCanvasStyle("reset");}}}}},drawLineString:function(geometry,style,featureId){style=OpenLayers.Util.applyDefaults({fill:false},style);this.drawLinearRing(geometry,style,featureId);},drawLinearRing:function(geometry,style,featureId){if(style.fill!==false){this.setCanvasStyle("fill",style);this.renderPath(this.canvas,geometry,style,featureId,"fill");if(this.hitDetection){this.setHitContextStyle("fill",featureId,style);this.renderPath(this.hitContext,geometry,style,featureId,"fill");}}
-if(style.stroke!==false){this.setCanvasStyle("stroke",style);this.renderPath(this.canvas,geometry,style,featureId,"stroke");if(this.hitDetection){this.setHitContextStyle("stroke",featureId,style);this.renderPath(this.hitContext,geometry,style,featureId,"stroke");}}
-this.setCanvasStyle("reset");},renderPath:function(context,geometry,style,featureId,type){var components=geometry.components;var len=components.length;context.beginPath();var start=this.getLocalXY(components[0]);var x=start[0];var y=start[1];if(!isNaN(x)&&!isNaN(y)){context.moveTo(start[0],start[1]);for(var i=1;i<len;++i){var pt=this.getLocalXY(components[i]);context.lineTo(pt[0],pt[1]);}
-if(type==="fill"){context.fill();}else{context.stroke();}}},drawPolygon:function(geometry,style,featureId){var components=geometry.components;var len=components.length;this.drawLinearRing(components[0],style,featureId);for(var i=1;i<len;++i){this.canvas.globalCompositeOperation="destination-out";if(this.hitDetection){this.hitContext.globalCompositeOperation="destination-out";}
-this.drawLinearRing(components[i],OpenLayers.Util.applyDefaults({stroke:false,fillOpacity:1.0},style),featureId);this.canvas.globalCompositeOperation="source-over";if(this.hitDetection){this.hitContext.globalCompositeOperation="source-over";}
-this.drawLinearRing(components[i],OpenLayers.Util.applyDefaults({fill:false},style),featureId);}},drawText:function(location,style){style=OpenLayers.Util.extend({fontColor:"#000000",labelAlign:"cm"},style);var pt=this.getLocalXY(location);this.setCanvasStyle("reset");this.canvas.fillStyle=style.fontColor;this.canvas.globalAlpha=style.fontOpacity||1.0;var fontStyle=[style.fontStyle?style.fontStyle:"normal","normal",style.fontWeight?style.fontWeight:"normal",style.fontSize?style.fontSize:" [...]
-var lineHeight=this.canvas.measureText('Mg').height||this.canvas.measureText('xx').width;pt[1]+=lineHeight*vfactor*(numRows-1);for(var i=0;i<numRows;i++){this.canvas.fillText(labelRows[i],pt[0],pt[1]+(lineHeight*i));}}else if(this.canvas.mozDrawText){this.canvas.mozTextStyle=fontStyle;var hfactor=OpenLayers.Renderer.Canvas.LABEL_FACTOR[style.labelAlign[0]];if(hfactor==null){hfactor=-.5;}
-var vfactor=OpenLayers.Renderer.Canvas.LABEL_FACTOR[style.labelAlign[1]];if(vfactor==null){vfactor=-.5;}
-var lineHeight=this.canvas.mozMeasureText('xx');pt[1]+=lineHeight*(1+(vfactor*numRows));for(var i=0;i<numRows;i++){var x=pt[0]+(hfactor*this.canvas.mozMeasureText(labelRows[i]));var y=pt[1]+(i*lineHeight);this.canvas.translate(x,y);this.canvas.mozDrawText(labelRows[i]);this.canvas.translate(-x,-y);}}
-this.setCanvasStyle("reset");},getLocalXY:function(point){var resolution=this.getResolution();var extent=this.extent;var x=(point.x/resolution+(-extent.left/resolution));var y=((extent.top/resolution)-point.y/resolution);return[x,y];},clear:function(){var height=this.root.height;var width=this.root.width;this.canvas.clearRect(0,0,width,height);this.features={};if(this.hitDetection){this.hitContext.clearRect(0,0,width,height);}},getFeatureIdFromEvent:function(evt){var feature=null;if(this [...]
-return feature;},eraseFeatures:function(features){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-for(var i=0;i<features.length;++i){delete this.features[features[i].id];}
-this.redraw();},redraw:function(){if(!this.locked){var height=this.root.height;var width=this.root.width;this.canvas.clearRect(0,0,width,height);if(this.hitDetection){this.hitContext.clearRect(0,0,width,height);}
-var labelMap=[];var feature,style;for(var id in this.features){if(!this.features.hasOwnProperty(id)){continue;}
-feature=this.features[id][0];style=this.features[id][1];this.drawGeometry(feature.geometry,style,feature.id);if(style.label){labelMap.push([feature,style]);}}
-var item;for(var i=0,len=labelMap.length;i<len;++i){item=labelMap[i];this.drawText(item[0].geometry.getCentroid(),item[1]);}}},CLASS_NAME:"OpenLayers.Renderer.Canvas"});OpenLayers.Renderer.Canvas.LABEL_ALIGN={"l":"left","r":"right","t":"top","b":"bottom"};OpenLayers.Renderer.Canvas.LABEL_FACTOR={"l":0,"r":-1,"t":0,"b":-1};OpenLayers.Renderer.Canvas.drawImageScaleFactor=null;OpenLayers.Format.OSM=OpenLayers.Class(OpenLayers.Format.XML,{checkTags:false,interestingTagsExclude:null,areaTags: [...]
-layer_defaults.interestingTagsExclude=interesting;var area={};for(var i=0;i<layer_defaults.areaTags.length;i++){area[layer_defaults.areaTags[i]]=true;}
-layer_defaults.areaTags=area;this.externalProjection=new OpenLayers.Projection("EPSG:4326");OpenLayers.Format.XML.prototype.initialize.apply(this,[layer_defaults]);},read:function(doc){if(typeof doc=="string"){doc=OpenLayers.Format.XML.prototype.read.apply(this,[doc]);}
-var nodes=this.getNodes(doc);var ways=this.getWays(doc);var feat_list=new Array(ways.length);for(var i=0;i<ways.length;i++){var point_list=new Array(ways[i].nodes.length);var poly=this.isWayArea(ways[i])?1:0;for(var j=0;j<ways[i].nodes.length;j++){var node=nodes[ways[i].nodes[j]];var point=new OpenLayers.Geometry.Point(node.lon,node.lat);point.osm_id=parseInt(ways[i].nodes[j]);point_list[j]=point;node.used=true;}
-var geometry=null;if(poly){geometry=new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing(point_list));}else{geometry=new OpenLayers.Geometry.LineString(point_list);}
-if(this.internalProjection&&this.externalProjection){geometry.transform(this.externalProjection,this.internalProjection);}
-var feat=new OpenLayers.Feature.Vector(geometry,ways[i].tags);feat.osm_id=parseInt(ways[i].id);feat.fid="way."+feat.osm_id;feat_list[i]=feat;}
-for(var node_id in nodes){var node=nodes[node_id];if(!node.used||this.checkTags){var tags=null;if(this.checkTags){var result=this.getTags(node.node,true);if(node.used&&!result[1]){continue;}
-tags=result[0];}else{tags=this.getTags(node.node);}
-var feat=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(node['lon'],node['lat']),tags);if(this.internalProjection&&this.externalProjection){feat.geometry.transform(this.externalProjection,this.internalProjection);}
-feat.osm_id=parseInt(node_id);feat.fid="node."+feat.osm_id;feat_list.push(feat);}
-node.node=null;}
-return feat_list;},getNodes:function(doc){var node_list=doc.getElementsByTagName("node");var nodes={};for(var i=0;i<node_list.length;i++){var node=node_list[i];var id=node.getAttribute("id");nodes[id]={'lat':node.getAttribute("lat"),'lon':node.getAttribute("lon"),'node':node};}
-return nodes;},getWays:function(doc){var way_list=doc.getElementsByTagName("way");var return_ways=[];for(var i=0;i<way_list.length;i++){var way=way_list[i];var way_object={id:way.getAttribute("id")};way_object.tags=this.getTags(way);var node_list=way.getElementsByTagName("nd");way_object.nodes=new Array(node_list.length);for(var j=0;j<node_list.length;j++){way_object.nodes[j]=node_list[j].getAttribute("ref");}
-return_ways.push(way_object);}
-return return_ways;},getTags:function(dom_node,interesting_tags){var tag_list=dom_node.getElementsByTagName("tag");var tags={};var interesting=false;for(var j=0;j<tag_list.length;j++){var key=tag_list[j].getAttribute("k");tags[key]=tag_list[j].getAttribute("v");if(interesting_tags){if(!this.interestingTagsExclude[key]){interesting=true;}}}
-return interesting_tags?[tags,interesting]:tags;},isWayArea:function(way){var poly_shaped=false;var poly_tags=false;if(way.nodes[0]==way.nodes[way.nodes.length-1]){poly_shaped=true;}
-if(this.checkTags){for(var key in way.tags){if(this.areaTags[key]){poly_tags=true;break;}}}
-return poly_shaped&&(this.checkTags?poly_tags:true);},write:function(features){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-this.osm_id=1;this.created_nodes={};var root_node=this.createElementNS(null,"osm");root_node.setAttribute("version","0.5");root_node.setAttribute("generator","OpenLayers "+OpenLayers.VERSION_NUMBER);for(var i=features.length-1;i>=0;i--){var nodes=this.createFeatureNodes(features[i]);for(var j=0;j<nodes.length;j++){root_node.appendChild(nodes[j]);}}
-return OpenLayers.Format.XML.prototype.write.apply(this,[root_node]);},createFeatureNodes:function(feature){var nodes=[];var className=feature.geometry.CLASS_NAME;var type=className.substring(className.lastIndexOf(".")+1);type=type.toLowerCase();var builder=this.createXML[type];if(builder){nodes=builder.apply(this,[feature]);}
-return nodes;},createXML:{'point':function(point){var id=null;var geometry=point.geometry?point.geometry:point;if(this.internalProjection&&this.externalProjection){geometry=geometry.clone();geometry.transform(this.internalProjection,this.externalProjection);}
-var already_exists=false;if(point.osm_id){id=point.osm_id;if(this.created_nodes[id]){already_exists=true;}}else{id=-this.osm_id;this.osm_id++;}
-if(already_exists){node=this.created_nodes[id];}else{var node=this.createElementNS(null,"node");}
-this.created_nodes[id]=node;node.setAttribute("id",id);node.setAttribute("lon",geometry.x);node.setAttribute("lat",geometry.y);if(point.attributes){this.serializeTags(point,node);}
-this.setState(point,node);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++;}
-var way=this.createElementNS(null,"way");way.setAttribute("id",id);for(var i=0;i<geometry.components.length;i++){var node=this.createXML['point'].apply(this,[geometry.components[i]]);if(node.length){node=node[0];var node_ref=node.getAttribute("id");nodes.push(node);}else{node_ref=geometry.components[i].osm_id;node=this.created_nodes[node_ref];}
-this.setState(feature,node);var nd_dom=this.createElementNS(null,"nd");nd_dom.setAttribute("ref",node_ref);way.appendChild(nd_dom);}
-this.serializeTags(feature,way);nodes.push(way);return nodes;},polygon:function(feature){var attrs=OpenLayers.Util.extend({'area':'yes'},feature.attributes);var feat=new OpenLayers.Feature.Vector(feature.geometry.components[0],attrs);feat.osm_id=feature.osm_id;return this.createXML['linestring'].apply(this,[feat]);}},serializeTags:function(feature,node){for(var key in feature.attributes){var tag=this.createElementNS(null,"tag");tag.setAttribute("k",key);tag.setAttribute("v",feature.attri [...]
-if(state){node.setAttribute("action",state);}}},CLASS_NAME:"OpenLayers.Format.OSM"});OpenLayers.Handler=OpenLayers.Class({id:null,control:null,map:null,keyMask:null,active:false,evt:null,initialize:function(control,callbacks,options){OpenLayers.Util.extend(this,options);this.control=control;this.callbacks=callbacks;var map=this.map||control.map;if(map){this.setMap(map);}
-this.id=OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");},setMap:function(map){this.map=map;},checkModifiers:function(evt){if(this.keyMask==null){return true;}
-var keyModifiers=(evt.shiftKey?OpenLayers.Handler.MOD_SHIFT:0)|(evt.ctrlKey?OpenLayers.Handler.MOD_CTRL:0)|(evt.altKey?OpenLayers.Handler.MOD_ALT:0);return(keyModifiers==this.keyMask);},activate:function(){if(this.active){return false;}
-var events=OpenLayers.Events.prototype.BROWSER_EVENTS;for(var i=0,len=events.length;i<len;i++){if(this[events[i]]){this.register(events[i],this[events[i]]);}}
-this.active=true;return true;},deactivate:function(){if(!this.active){return false;}
-var events=OpenLayers.Events.prototype.BROWSER_EVENTS;for(var i=0,len=events.length;i<len;i++){if(this[events[i]]){this.unregister(events[i],this[events[i]]);}}
-this.active=false;return true;},callback:function(name,args){if(name&&this.callbacks[name]){this.callbacks[name].apply(this.control,args);}},register:function(name,method){this.map.events.registerPriority(name,this,method);this.map.events.registerPriority(name,this,this.setEvent);},unregister:function(name,method){this.map.events.unregister(name,this,method);this.map.events.unregister(name,this,this.setEvent);},setEvent:function(evt){this.evt=evt;return true;},destroy:function(){this.dea [...]
-document.onselectstart=OpenLayers.Function.False;propagate=!this.stopDown;}else{this.started=false;this.start=null;this.last=null;}
-return propagate;},dragmove:function(evt){this.lastMoveEvt=evt;if(this.started&&!this.timeoutId&&(evt.xy.x!=this.last.x||evt.xy.y!=this.last.y)){if(this.documentDrag===true&&this.documentEvents){if(evt.element===document){this.adjustXY(evt);this.setEvent(evt);}else{this.removeDocumentEvents();}}
-if(this.interval>0){this.timeoutId=setTimeout(OpenLayers.Function.bind(this.removeTimeout,this),this.interval);}
-this.dragging=true;this.move(evt);this.callback("move",[evt.xy]);if(!this.oldOnselectstart){this.oldOnselectstart=document.onselectstart;document.onselectstart=OpenLayers.Function.False;}
-this.last=evt.xy;}
-return true;},dragend:function(evt){if(this.started){if(this.documentDrag===true&&this.documentEvents){this.adjustXY(evt);this.removeDocumentEvents();}
-var dragged=(this.start!=this.last);this.started=false;this.dragging=false;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olDragDown");this.up(evt);this.callback("up",[evt.xy]);if(dragged){this.callback("done",[evt.xy]);}
-document.onselectstart=this.oldOnselectstart;}
-return true;},down:function(evt){},move:function(evt){},up:function(evt){},out:function(evt){},mousedown:function(evt){return this.dragstart(evt);},touchstart:function(evt){if(!this.touch){this.touch=true;this.map.events.un({mousedown:this.mousedown,mouseup:this.mouseup,mousemove:this.mousemove,click:this.click,scope:this});}
-return this.dragstart(evt);},mousemove:function(evt){return this.dragmove(evt);},touchmove:function(evt){return this.dragmove(evt);},removeTimeout:function(){this.timeoutId=null;if(this.dragging){this.mousemove(this.lastMoveEvt);}},mouseup:function(evt){return this.dragend(evt);},touchend:function(evt){evt.xy=this.last;return this.dragend(evt);},mouseout:function(evt){if(this.started&&OpenLayers.Util.mouseLeft(evt,this.map.eventsDiv)){if(this.documentDrag===true){this.addDocumentEvents() [...]
-if(document.onselectstart){document.onselectstart=this.oldOnselectstart;}}}
-return true;},click:function(evt){return(this.start==this.last);},activate:function(){var activated=false;if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){this.dragging=false;activated=true;}
-return activated;},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){this.touch=false;this.started=false;this.dragging=false;this.start=null;this.last=null;deactivated=true;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olDragDown");}
-return deactivated;},adjustXY:function(evt){var pos=OpenLayers.Util.pagePosition(this.map.viewPortDiv);evt.xy.x-=pos[0];evt.xy.y-=pos[1];},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);},removeDocumentEvents:function(){OpenLayers.Element.removeClass(document.body,"olDragDown");this.documentEvents=false;OpenLa [...]
-return OpenLayers.Event.isMultiTouch(evt)?true:this.mousedown(evt);},touchmove:function(evt){OpenLayers.Event.stop(evt);},mousedown:function(evt){this.down=evt.xy;return this.handle(evt)?!this.stopDown:true;},mouseup:function(evt){this.up=evt.xy;return this.handle(evt)?!this.stopUp:true;},click:function(evt){return this.handle(evt)?!this.stopClick:true;},mousemove:function(evt){if(!this.callbacks['over']&&!this.callbacks['out']){return true;}
-this.handle(evt);return true;},dblclick:function(evt){return!this.handle(evt);},geometryTypeMatches:function(feature){return this.geometryTypes==null||OpenLayers.Util.indexOf(this.geometryTypes,feature.geometry.CLASS_NAME)>-1;},handle:function(evt){if(this.feature&&!this.feature.layer){this.feature=null;}
-var type=evt.type;var handled=false;var previouslyIn=!!(this.feature);var click=(type=="click"||type=="dblclick"||type=="touchstart");this.feature=this.layer.getFeatureFromEvent(evt);if(this.feature&&!this.feature.layer){this.feature=null;}
-if(this.lastFeature&&!this.lastFeature.layer){this.lastFeature=null;}
-if(this.feature){if(type==="touchstart"){OpenLayers.Event.stop(evt);}
-var inNew=(this.feature!=this.lastFeature);if(this.geometryTypeMatches(this.feature)){if(previouslyIn&&inNew){if(this.lastFeature){this.triggerCallback(type,'out',[this.lastFeature]);}
-this.triggerCallback(type,'in',[this.feature]);}else if(!previouslyIn||click){this.triggerCallback(type,'in',[this.feature]);}
-this.lastFeature=this.feature;handled=true;}else{if(this.lastFeature&&(previouslyIn&&inNew||click)){this.triggerCallback(type,'out',[this.lastFeature]);}
-this.feature=null;}}else{if(this.lastFeature&&(previouslyIn||click)){this.triggerCallback(type,'out',[this.lastFeature]);}}
-return handled;},triggerCallback:function(type,mode,args){var key=this.EVENTMAP[type][mode];if(key){if(type=='click'&&this.up&&this.down){var dpx=Math.sqrt(Math.pow(this.up.x-this.down.x,2)+
-Math.pow(this.up.y-this.down.y,2));if(dpx<=this.clickTolerance){this.callback(key,args);}}else{this.callback(key,args);}}},activate:function(){var activated=false;if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){this.moveLayerToTop();this.map.events.on({"removelayer":this.handleMapEvents,"changelayer":this.handleMapEvents,scope:this});activated=true;}
-return activated;},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){this.moveLayerBack();this.feature=null;this.lastFeature=null;this.down=null;this.up=null;this.touch=false;this.map.events.un({"removelayer":this.handleMapEvents,"changelayer":this.handleMapEvents,scope:this});deactivated=true;}
-return deactivated;},handleMapEvents:function(evt){if(evt.type=="removelayer"||evt.property=="order"){this.moveLayerToTop();}},moveLayerToTop:function(){var index=Math.max(this.map.Z_INDEX_BASE['Feature']-1,this.layer.getZIndex())+1;this.layer.setZIndex(index);},moveLayerBack:function(){var index=this.layer.getZIndex()-1;if(index>=this.map.Z_INDEX_BASE['Feature']){this.layer.setZIndex(index);}else{this.map.setLayerZIndex(this.layer,this.map.getLayerIndex(this.layer));}},CLASS_NAME:"OpenL [...]
-return activated;},downFeature:function(pixel){this.lastPixel=pixel;this.onStart(this.feature,pixel);},moveFeature:function(pixel){var res=this.map.getResolution();this.feature.geometry.move(res*(pixel.x-this.lastPixel.x),res*(this.lastPixel.y-pixel.y));this.layer.drawFeature(this.feature);this.lastPixel=pixel;this.onDrag(this.feature,pixel);},upFeature:function(pixel){if(!this.over){this.handlers.drag.deactivate();}},doneDragging:function(pixel){this.onComplete(this.feature,pixel);},out [...]
-OpenLayers.Util.extend(this,options);},destroy:function(){for(var key in this.styles){this.styles[key].destroy();}
-this.styles=null;},createSymbolizer:function(feature,intent){if(!feature){feature=new OpenLayers.Feature.Vector();}
-if(!this.styles[intent]){intent="default";}
-feature.renderIntent=intent;var defaultSymbolizer={};if(this.extendDefault&&intent!="default"){defaultSymbolizer=this.styles["default"].createSymbolizer(feature);}
-return OpenLayers.Util.extend(defaultSymbolizer,this.styles[intent].createSymbolizer(feature));},addUniqueValueRules:function(renderIntent,property,symbolizers,context){var rules=[];for(var value in symbolizers){rules.push(new OpenLayers.Rule({symbolizer:symbolizers[value],context:context,filter:new OpenLayers.Filter.Comparison({type:OpenLayers.Filter.Comparison.EQUAL_TO,property:property,value:value})}));}
-this.styles[renderIntent].addRules(rules);},CLASS_NAME:"OpenLayers.StyleMap"});OpenLayers.Layer.Vector=OpenLayers.Class(OpenLayers.Layer,{EVENT_TYPES:["beforefeatureadded","beforefeaturesadded","featureadded","featuresadded","beforefeatureremoved","beforefeaturesremoved","featureremoved","featuresremoved","beforefeatureselected","featureselected","featureunselected","beforefeaturemodified","featuremodified","afterfeaturemodified","vertexmodified","vertexremoved","sketchstarted","sketchmo [...]
-if(!this.renderer||!this.renderer.supported()){this.renderer=null;this.displayError();}
-if(!this.styleMap){this.styleMap=new OpenLayers.StyleMap();}
-this.features=[];this.selectedFeatures=[];this.unrenderedFeatures={};if(this.strategies){for(var i=0,len=this.strategies.length;i<len;i++){this.strategies[i].setLayer(this);}}},destroy:function(){if(this.strategies){var strategy,i,len;for(i=0,len=this.strategies.length;i<len;i++){strategy=this.strategies[i];if(strategy.autoDestroy){strategy.destroy();}}
-this.strategies=null;}
-if(this.protocol){if(this.protocol.autoDestroy){this.protocol.destroy();}
-this.protocol=null;}
-this.destroyFeatures();this.features=null;this.selectedFeatures=null;this.unrenderedFeatures=null;if(this.renderer){this.renderer.destroy();}
-this.renderer=null;this.geometryType=null;this.drawn=null;OpenLayers.Layer.prototype.destroy.apply(this,arguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.Vector(this.name,this.getOptions());}
-obj=OpenLayers.Layer.prototype.clone.apply(this,[obj]);var features=this.features;var len=features.length;var clonedFeatures=new Array(len);for(var i=0;i<len;++i){clonedFeatures[i]=features[i].clone();}
-obj.features=clonedFeatures;return obj;},refresh:function(obj){if(this.calculateInRange()&&this.visibility){this.events.triggerEvent("refresh",obj);}},assignRenderer:function(){for(var i=0,len=this.renderers.length;i<len;i++){var rendererClass=this.renderers[i];var renderer=(typeof rendererClass=="function")?rendererClass:OpenLayers.Renderer[rendererClass];if(renderer&&renderer.prototype.supported()){this.renderer=new renderer(this.div,this.rendererOptions);break;}}},displayError:functio [...]
-if(!zoomChanged&&coordSysUnchanged){for(var i in this.unrenderedFeatures){var feature=this.unrenderedFeatures[i];this.drawFeature(feature);}}}}
-if(!this.drawn||(!ng&&(zoomChanged||!coordSysUnchanged))){this.drawn=true;var feature;for(var i=0,len=this.features.length;i<len;i++){this.renderer.locked=(i!==(len-1));feature=this.features[i];this.drawFeature(feature);}}},redraw:function(){if(OpenLayers.Renderer.NG&&this.renderer instanceof OpenLayers.Renderer.NG){this.drawn=false;}
-return OpenLayers.Layer.prototype.redraw.apply(this,arguments);},display:function(display){OpenLayers.Layer.prototype.display.apply(this,arguments);var currentDisplay=this.div.style.display;if(currentDisplay!=this.renderer.root.style.display){this.renderer.root.style.display=currentDisplay;}},addFeatures:function(features,options){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-var notify=!options||!options.silent;if(notify){var event={features:features};var ret=this.events.triggerEvent("beforefeaturesadded",event);if(ret===false){return;}
-features=event.features;}
-var featuresAdded=[];for(var i=0,len=features.length;i<len;i++){if(i!=(features.length-1)){this.renderer.locked=true;}else{this.renderer.locked=false;}
-var feature=features[i];if(this.geometryType&&!(feature.geometry instanceof this.geometryType)){var throwStr=OpenLayers.i18n('componentShouldBe',{'geomType':this.geometryType.prototype.CLASS_NAME});throw throwStr;}
-feature.layer=this;if(!feature.style&&this.style){feature.style=OpenLayers.Util.extend({},this.style);}
-if(notify){if(this.events.triggerEvent("beforefeatureadded",{feature:feature})===false){continue;}
-this.preFeatureInsert(feature);}
-featuresAdded.push(feature);this.features.push(feature);this.drawFeature(feature);if(notify){this.events.triggerEvent("featureadded",{feature:feature});this.onFeatureInsert(feature);}}
-if(notify){this.events.triggerEvent("featuresadded",{features:featuresAdded});}},removeFeatures:function(features,options){if(!features||features.length===0){return;}
-if(features===this.features){return this.removeAllFeatures(options);}
-if(!(OpenLayers.Util.isArray(features))){features=[features];}
-if(features===this.selectedFeatures){features=features.slice();}
-var notify=!options||!options.silent;if(notify){this.events.triggerEvent("beforefeaturesremoved",{features:features});}
-for(var i=features.length-1;i>=0;i--){if(i!=0&&features[i-1].geometry){this.renderer.locked=true;}else{this.renderer.locked=false;}
-var feature=features[i];delete this.unrenderedFeatures[feature.id];if(notify){this.events.triggerEvent("beforefeatureremoved",{feature:feature});}
-this.features=OpenLayers.Util.removeItem(this.features,feature);feature.layer=null;if(feature.geometry){this.renderer.eraseFeatures(feature);}
-if(OpenLayers.Util.indexOf(this.selectedFeatures,feature)!=-1){OpenLayers.Util.removeItem(this.selectedFeatures,feature);}
-if(notify){this.events.triggerEvent("featureremoved",{feature:feature});}}
-if(notify){this.events.triggerEvent("featuresremoved",{features:features});}},removeAllFeatures:function(options){var notify=!options||!options.silent;var features=this.features;if(notify){this.events.triggerEvent("beforefeaturesremoved",{features:features});}
-var feature;for(var i=features.length-1;i>=0;i--){feature=features[i];if(notify){this.events.triggerEvent("beforefeatureremoved",{feature:feature});}
-feature.layer=null;if(notify){this.events.triggerEvent("featureremoved",{feature:feature});}}
-this.renderer.clear();this.features=[];this.unrenderedFeatures={};this.selectedFeatures=[];if(notify){this.events.triggerEvent("featuresremoved",{features:features});}},destroyFeatures:function(features,options){var all=(features==undefined);if(all){features=this.features;}
-if(features){this.removeFeatures(features,options);for(var i=features.length-1;i>=0;i--){features[i].destroy();}}},drawFeature:function(feature,style){if(!this.drawn){return;}
-if(typeof style!="object"){if(!style&&feature.state===OpenLayers.State.DELETE){style="delete";}
-var renderIntent=style||feature.renderIntent;style=feature.style||this.style;if(!style){style=this.styleMap.createSymbolizer(feature,renderIntent);}}
-var drawn=this.renderer.drawFeature(feature,style);if(drawn===false||drawn===null){this.unrenderedFeatures[feature.id]=feature;}else{delete this.unrenderedFeatures[feature.id];}},eraseFeatures:function(features){this.renderer.eraseFeatures(features);},getFeatureFromEvent:function(evt){if(!this.renderer){OpenLayers.Console.error(OpenLayers.i18n("getFeatureError"));return null;}
-var feature=null;var featureId=this.renderer.getFeatureIdFromEvent(evt);if(featureId){if(typeof featureId==="string"){feature=this.getFeatureById(featureId);}else{feature=featureId;}}
-return feature;},getFeatureBy:function(property,value){var feature=null;for(var i=0,len=this.features.length;i<len;++i){if(this.features[i][property]==value){feature=this.features[i];break;}}
-return feature;},getFeatureById:function(featureId){return this.getFeatureBy('id',featureId);},getFeatureByFid:function(featureFid){return this.getFeatureBy('fid',featureFid);},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;},onFeatureInsert:function(feature){},preFeatureInsert:function(feature){},getDataExtent:function(){var maxExtent=null;var features=this.features;if(features&&(features.length>0)){var geometry=null;for(var i=0,len=features.length;i<len;i++){geometry=features[i].geometry;if(geometry){if(maxExtent===null){maxExtent=new OpenLayers.Bounds();}
-maxExtent.extend(geometry.getBounds());}}}
-return maxExtent;},CLASS_NAME:"OpenLayers.Layer.Vector"});OpenLayers.Layer.Vector.RootContainer=OpenLayers.Class(OpenLayers.Layer.Vector,{displayInLayerSwitcher:false,layers:null,initialize:function(name,options){OpenLayers.Layer.Vector.prototype.initialize.apply(this,arguments);},display:function(){},getFeatureFromEvent:function(evt){var layers=this.layers;var feature;for(var i=0;i<layers.length;i++){feature=layers[i].getFeatureFromEvent(evt);if(feature){return feature;}}},setMap:functi [...]
-this.initLayer(layers);var callbacks={click:this.clickFeature,clickout:this.clickoutFeature};if(this.hover){callbacks.over=this.overFeature;callbacks.out=this.outFeature;}
-this.callbacks=OpenLayers.Util.extend(callbacks,this.callbacks);this.handlers={feature:new OpenLayers.Handler.Feature(this,this.layer,this.callbacks,{geometryTypes:this.geometryTypes})};if(this.box){this.handlers.box=new OpenLayers.Handler.Box(this,{done:this.selectBox},{boxDivClassName:"olHandlerBoxSelectFeature"});}},initLayer:function(layers){if(OpenLayers.Util.isArray(layers)){this.layers=layers;this.layer=new OpenLayers.Layer.Vector.RootContainer(this.id+"_container",{layers:layers} [...]
-OpenLayers.Control.prototype.destroy.apply(this,arguments);if(this.layers){this.layer.destroy();}},activate:function(){if(!this.active){if(this.layers){this.map.addLayer(this.layer);}
-this.handlers.feature.activate();if(this.box&&this.handlers.box){this.handlers.box.activate();}}
-return OpenLayers.Control.prototype.activate.apply(this,arguments);},deactivate:function(){if(this.active){this.handlers.feature.deactivate();if(this.handlers.box){this.handlers.box.deactivate();}
-if(this.layers){this.map.removeLayer(this.layer);}}
-return OpenLayers.Control.prototype.deactivate.apply(this,arguments);},unselectAll:function(options){var layers=this.layers||[this.layer];var layer,feature;for(var l=0;l<layers.length;++l){layer=layers[l];for(var i=layer.selectedFeatures.length-1;i>=0;--i){feature=layer.selectedFeatures[i];if(!options||options.except!=feature){this.unselect(feature);}}}},clickFeature:function(feature){if(!this.hover){var selected=(OpenLayers.Util.indexOf(feature.layer.selectedFeatures,feature)>-1);if(sel [...]
-this.select(feature);}}},multipleSelect:function(){return this.multiple||(this.handlers.feature.evt&&this.handlers.feature.evt[this.multipleKey]);},toggleSelect:function(){return this.toggle||(this.handlers.feature.evt&&this.handlers.feature.evt[this.toggleKey]);},clickoutFeature:function(feature){if(!this.hover&&this.clickout){this.unselectAll();}},overFeature:function(feature){var layer=feature.layer;if(this.hover){if(this.highlightOnly){this.highlight(feature);}else if(OpenLayers.Util [...]
-layer.drawFeature(feature,feature.style||feature.layer.style||"default");this.events.triggerEvent("featureunhighlighted",{feature:feature});},select:function(feature){var cont=this.onBeforeSelect.call(this.scope,feature);var layer=feature.layer;if(cont!==false){cont=layer.events.triggerEvent("beforefeatureselected",{feature:feature});if(cont!==false){layer.selectedFeatures.push(feature);this.highlight(feature);if(!this.handlers.feature.lastFeature){this.handlers.feature.lastFeature=layer [...]
-layer.events.triggerEvent("featureselected",{feature:feature});this.onSelect.call(this.scope,feature);}}},unselect:function(feature){var layer=feature.layer;this.unhighlight(feature);OpenLayers.Util.removeItem(layer.selectedFeatures,feature);layer.events.triggerEvent("featureunselected",{feature:feature});this.onUnselect.call(this.scope,feature);},selectBox:function(position){if(position instanceof OpenLayers.Bounds){var minXY=this.map.getLonLatFromPixel(new OpenLayers.Pixel(position.lef [...]
-var prevMultiple=this.multiple;this.multiple=true;var layers=this.layers||[this.layer];var layer;for(var l=0;l<layers.length;++l){layer=layers[l];for(var i=0,len=layer.features.length;i<len;++i){var feature=layer.features[i];if(!feature.getVisibility()){continue;}
-if(this.geometryTypes==null||OpenLayers.Util.indexOf(this.geometryTypes,feature.geometry.CLASS_NAME)>-1){if(bounds.toGeometry().intersects(feature.geometry)){if(OpenLayers.Util.indexOf(layer.selectedFeatures,feature)==-1){this.select(feature);}}}}}
-this.multiple=prevMultiple;}},setMap:function(map){this.handlers.feature.setMap(map);if(this.box){this.handlers.box.setMap(map);}
-OpenLayers.Control.prototype.setMap.apply(this,arguments);},setLayer:function(layers){var isActive=this.active;this.unselectAll();this.deactivate();if(this.layers){this.layer.destroy();this.layers=null;}
-this.initLayer(layers);this.handlers.feature.layer=this.layer;if(isActive){this.activate();}},CLASS_NAME:"OpenLayers.Control.SelectFeature"});OpenLayers.Handler.Keyboard=OpenLayers.Class(OpenLayers.Handler,{KEY_EVENTS:["keydown","keyup"],eventListener:null,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);this.eventListener=OpenLayers.Function.bindAsEventListener(this.handleKeyEvent,this);},destroy:function(){this.deactivate();th [...]
-return true;}else{return false;}},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){for(var i=0,len=this.KEY_EVENTS.length;i<len;i++){OpenLayers.Event.stopObserving(document,this.KEY_EVENTS[i],this.eventListener);}
-deactivated=true;}
-return deactivated;},handleKeyEvent:function(evt){if(this.checkModifiers(evt)){this.callback(evt.type,[evt]);}},CLASS_NAME:"OpenLayers.Handler.Keyboard"});OpenLayers.Control.ModifyFeature=OpenLayers.Class(OpenLayers.Control,{geometryTypes:null,clickout:true,toggle:true,standalone:false,layer:null,feature:null,vertices:null,virtualVertices:null,selectControl:null,dragControl:null,handlers:null,deleteCodes:null,virtualStyle:null,vertexRenderIntent:null,mode:null,modified:false,radiusHandle [...]
-var control=this;var selectOptions={geometryTypes:this.geometryTypes,clickout:this.clickout,toggle:this.toggle,onBeforeSelect:this.beforeSelectFeature,onSelect:this.selectFeature,onUnselect:this.unselectFeature,scope:this};if(this.standalone===false){this.selectControl=new OpenLayers.Control.SelectFeature(layer,selectOptions);}
-var dragOptions={geometryTypes:["OpenLayers.Geometry.Point"],snappingOptions:this.snappingOptions,onStart:function(feature,pixel){control.dragStart.apply(control,[feature,pixel]);},onDrag:function(feature,pixel){control.dragVertex.apply(control,[feature,pixel]);},onComplete:function(feature){control.dragComplete.apply(control,[feature]);},featureCallbacks:{over:function(feature){if(control.standalone!==true||feature._sketch||control.feature===feature){control.dragControl.overFeature.appl [...]
-this.selectControl.deactivate();}else{if(valid){this.unselectFeature(feature);}}
-this.handlers.keyboard.deactivate();deactivated=true;}
-return deactivated;},beforeSelectFeature:function(feature){return this.layer.events.triggerEvent("beforefeaturemodified",{feature:feature});},selectFeature:function(feature){if(!this.standalone||this.beforeSelectFeature(feature)!==false){this.feature=feature;this.modified=false;this.resetVertices();this.dragControl.activate();this.onModificationStart(this.feature);}
-var modified=feature.modified;if(feature.geometry&&!(modified&&modified.geometry)){this._originalGeometry=feature.geometry.clone();}},unselectFeature:function(feature){this.layer.removeFeatures(this.vertices,{silent:true});this.vertices=[];this.layer.destroyFeatures(this.virtualVertices,{silent:true});this.virtualVertices=[];if(this.dragHandle){this.layer.destroyFeatures([this.dragHandle],{silent:true});delete this.dragHandle;}
-if(this.radiusHandle){this.layer.destroyFeatures([this.radiusHandle],{silent:true});delete this.radiusHandle;}
-this.feature=null;this.dragControl.deactivate();this.onModificationEnd(feature);this.layer.events.triggerEvent("afterfeaturemodified",{feature:feature,modified:this.modified});this.modified=false;},dragStart:function(feature,pixel){if(feature!=this.feature&&!feature.geometry.parent&&feature!=this.dragHandle&&feature!=this.radiusHandle){if(this.standalone===false&&this.feature){this.selectControl.clickFeature.apply(this.selectControl,[this.feature]);}
-if(this.geometryTypes==null||OpenLayers.Util.indexOf(this.geometryTypes,feature.geometry.CLASS_NAME)!=-1){this.standalone||this.selectControl.clickFeature.apply(this.selectControl,[feature]);this.dragControl.overFeature.apply(this.dragControl,[feature]);this.dragControl.lastPixel=pixel;this.dragControl.handlers.drag.started=true;this.dragControl.handlers.drag.start=pixel;this.dragControl.handlers.drag.last=pixel;}}},dragVertex:function(vertex,pixel){this.modified=true;if(this.feature.geo [...]
-this.layer.events.triggerEvent("vertexmodified",{vertex:vertex.geometry,feature:this.feature,pixel:pixel});}else{if(vertex._index){vertex.geometry.parent.addComponent(vertex.geometry,vertex._index);delete vertex._index;OpenLayers.Util.removeItem(this.virtualVertices,vertex);this.vertices.push(vertex);}else if(vertex==this.dragHandle){this.layer.removeFeatures(this.vertices,{silent:true});this.vertices=[];if(this.radiusHandle){this.layer.destroyFeatures([this.radiusHandle],{silent:true}); [...]
-if(this.virtualVertices.length>0){this.layer.destroyFeatures(this.virtualVertices,{silent:true});this.virtualVertices=[];}
-this.layer.drawFeature(this.feature,this.standalone?undefined:this.selectControl.renderIntent);}
-this.layer.drawFeature(vertex);},dragComplete:function(vertex){this.resetVertices();this.setFeatureState();this.onModification(this.feature);this.layer.events.triggerEvent("featuremodified",{feature:this.feature});},setFeatureState:function(){if(this.feature.state!=OpenLayers.State.INSERT&&this.feature.state!=OpenLayers.State.DELETE){this.feature.state=OpenLayers.State.UPDATE;if(this.modified&&this._originalGeometry){var feature=this.feature;feature.modified=OpenLayers.Util.extend(featur [...]
-if(this.vertices.length>0){this.layer.removeFeatures(this.vertices,{silent:true});this.vertices=[];}
-if(this.virtualVertices.length>0){this.layer.removeFeatures(this.virtualVertices,{silent:true});this.virtualVertices=[];}
-if(this.dragHandle){this.layer.destroyFeatures([this.dragHandle],{silent:true});this.dragHandle=null;}
-if(this.radiusHandle){this.layer.destroyFeatures([this.radiusHandle],{silent:true});this.radiusHandle=null;}
-if(this.feature&&this.feature.geometry.CLASS_NAME!="OpenLayers.Geometry.Point"){if((this.mode&OpenLayers.Control.ModifyFeature.DRAG)){this.collectDragHandle();}
-if((this.mode&(OpenLayers.Control.ModifyFeature.ROTATE|OpenLayers.Control.ModifyFeature.RESIZE))){this.collectRadiusHandle();}
-if(this.mode&OpenLayers.Control.ModifyFeature.RESHAPE){if(!(this.mode&OpenLayers.Control.ModifyFeature.RESIZE)){this.collectVertices();}}}},handleKeypress:function(evt){var code=evt.keyCode;if(this.feature&&OpenLayers.Util.indexOf(this.deleteCodes,code)!=-1){var vertex=this.dragControl.feature;if(vertex&&OpenLayers.Util.indexOf(this.vertices,vertex)!=-1&&!this.dragControl.handlers.drag.dragging&&vertex.geometry.parent){vertex.geometry.parent.removeComponent(vertex.geometry);this.layer.ev [...]
-for(i=0;i<numVert;++i){component=geometry.components[i];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);}}
-if(geometry.CLASS_NAME!="OpenLayers.Geometry.MultiPoint"){for(i=0,len=geometry.components.length;i<len-1;++i){var prevVertex=geometry.components[i];var nextVertex=geometry.components[i+1];if(prevVertex.CLASS_NAME=="OpenLayers.Geometry.Point"&&nextVertex.CLASS_NAME=="OpenLayers.Geometry.Point"){var x=(prevVertex.x+nextVertex.x)/2;var y=(prevVertex.y+nextVertex.y)/2;var point=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(x,y),null,control.virtualStyle);point.geometry.parent=g [...]
-collectComponentVertices.call(this,this.feature.geometry);this.layer.addFeatures(this.virtualVertices,{silent:true});this.layer.addFeatures(this.vertices,{silent:true});},collectDragHandle:function(){var geometry=this.feature.geometry;var center=geometry.getBounds().getCenterLonLat();var originGeometry=new OpenLayers.Geometry.Point(center.lon,center.lat);var origin=new OpenLayers.Feature.Vector(originGeometry);originGeometry.move=function(x,y){OpenLayers.Geometry.Point.prototype.move.cal [...]
-if(resize){var scale,ratio;if(reshape){scale=dy1/dy0;ratio=(dx1/dx0)/scale;}else{var l0=Math.sqrt((dx0*dx0)+(dy0*dy0));var l1=Math.sqrt((dx1*dx1)+(dy1*dy1));scale=l1/l0;}
-geometry.resize(scale,originGeometry,ratio);}};radius._sketch=true;this.radiusHandle=radius;this.layer.addFeatures([this.radiusHandle],{silent:true});},setMap:function(map){this.standalone||this.selectControl.setMap(map);this.dragControl.setMap(map);OpenLayers.Control.prototype.setMap.apply(this,arguments);},CLASS_NAME:"OpenLayers.Control.ModifyFeature"});OpenLayers.Control.ModifyFeature.RESHAPE=1;OpenLayers.Control.ModifyFeature.RESIZE=2;OpenLayers.Control.ModifyFeature.ROTATE=4;OpenLay [...]
-url=url||this.url;name=name||this.name;var newArguments=[name,url,{},options];OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.XYZ(this.name,this.url,this.getOptions());}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){var xyz=this.getXYZ(bounds);var url=this.url;if(OpenLayers.Util.isArray(url)){var s=''+xyz.x+xyz.y+xyz.z;url=this.selectUrl(s,url);}
-return OpenLayers.String.format(url,xyz);},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.serverResolutions!=null?OpenLayers.Util.indexOf(this.serverResolutions,res):this.map.getZoom()+this.zoomOffset;var limit=Math.pow(2,z);if(this.wrapDateLine)
-{x=((x%limit)+limit)%limit;}
-return{'x':x,'y':y,'z':z};},setMap:function(map){OpenLayers.Layer.Grid.prototype.setMap.apply(this,arguments);if(!this.tileOrigin){this.tileOrigin=new OpenLayers.LonLat(this.maxExtent.left,this.maxExtent.bottom);}},CLASS_NAME:"OpenLayers.Layer.XYZ"});OpenLayers.Layer.OSM=OpenLayers.Class(OpenLayers.Layer.XYZ,{name:"OpenStreetMap",attribution:"Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>",sphericalMercator:true,url:'http://tile.openstreetmap.org/${z}/${x}/${y}.pn [...]
-obj=OpenLayers.Layer.XYZ.prototype.clone.apply(this,[obj]);return obj;},wrapDateLine:true,CLASS_NAME:"OpenLayers.Layer.OSM"});OpenLayers.Layer.Bing=OpenLayers.Class(OpenLayers.Layer.XYZ,{serverResolutions:[156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625,4891.9698095703125,2445.9849047851562,1222.9924523925781,611.4962261962891,305.74811309814453,152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017,4.777314267158 [...]
-this.type+"?"+OpenLayers.Util.getParameterString(params);var script=document.createElement("script");script.type="text/javascript";script.src=url;script.id=this._callbackId;document.getElementsByTagName("head")[0].appendChild(script);},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])); [...]
-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});},updateAttribution:function(){var metadata=this.metadata;if(!metadata||!this.map||!this.map.center){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 [...]
-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,property:"attribution"});},setMap:function(){OpenLayers.Layer.XYZ.prototype.setMap.apply(this,arguments);this.updateAttribution();this.map.events.register("moveend",this,this.updateAttribution);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.Bing(this.options);}
-obj=OpenLayers.Layer.XYZ.prototype.clone.apply(this,[obj]);return obj;},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"});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;de [...]
-return this.origin;},setRotation:function(rotation){this.rotation=rotation;this.updateGrid(true);},onMoveEnd:function(){this.updateGrid();},getViewBounds:function(){var bounds=this.map.getExtent();if(this.rotation){var origin=this.getOrigin();var rotationOrigin=new OpenLayers.Geometry.Point(origin.lon,origin.lat);var rect=bounds.toGeometry();rect.rotate(-this.rotation,rotationOrigin);bounds=rect.getBounds();}
-return bounds;},updateGrid:function(force){if(force||this.invalidBounds()){var viewBounds=this.getViewBounds();var origin=this.getOrigin();var rotationOrigin=new OpenLayers.Geometry.Point(origin.lon,origin.lat);var viewBoundsWidth=viewBounds.getWidth();var viewBoundsHeight=viewBounds.getHeight();var aspectRatio=viewBoundsWidth/viewBoundsHeight;var maxHeight=Math.sqrt(this.dx*this.dy*this.maxFeatures/aspectRatio);var maxWidth=maxHeight*aspectRatio;var gridWidth=Math.min(viewBoundsWidth*th [...]
-features[(i*rows)+j]=new OpenLayers.Feature.Vector(point);}}
-this.destroyFeatures(this.features,{silent:true});this.addFeatures(features,{silent:true});}},invalidBounds:function(){return!this.gridBounds||!this.gridBounds.containsBounds(this.getViewBounds());},CLASS_NAME:"OpenLayers.Layer.PointGrid"});OpenLayers.Handler.MouseWheel=OpenLayers.Class(OpenLayers.Handler,{wheelListener:null,mousePosition:null,interval:0,delta:0,cumulative:true,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);th [...]
-var overScrollableDiv=false;var overLayerDiv=false;var overMapDiv=false;var elem=OpenLayers.Event.element(e);while((elem!=null)&&!overMapDiv&&!overScrollableDiv){if(!overScrollableDiv){try{if(elem.currentStyle){overflow=elem.currentStyle["overflow"];}else{var style=document.defaultView.getComputedStyle(elem,null);var overflow=style.getPropertyValue("overflow");}
-overScrollableDiv=(overflow&&(overflow=="auto")||(overflow=="scroll"));}catch(err){}}
-if(!overLayerDiv){for(var i=0,len=this.map.layers.length;i<len;i++){if(elem==this.map.layers[i].div||elem==this.map.layers[i].pane){overLayerDiv=true;break;}}}
-overMapDiv=(elem==this.map.div);elem=elem.parentNode;}
-if(!overScrollableDiv&&overMapDiv){if(overLayerDiv){var delta=0;if(!e){e=window.event;}
-if(e.wheelDelta){delta=e.wheelDelta/120;if(window.opera&&window.opera.version()<9.2){delta=-delta;}}else if(e.detail){delta=-e.detail/3;}
-this.delta=this.delta+delta;if(this.interval){window.clearTimeout(this._timeoutId);this._timeoutId=window.setTimeout(OpenLayers.Function.bind(function(){this.wheelZoom(e);},this),this.interval);}else{this.wheelZoom(e);}}
-OpenLayers.Event.stop(e);}},wheelZoom:function(e){var delta=this.delta;this.delta=0;if(delta){if(this.mousePosition){e.xy=this.mousePosition;}
-if(!e.xy){e.xy=this.map.getPixelFromLonLat(this.map.getCenter());}
-if(delta<0){this.callback("down",[e,this.cumulative?delta:-1]);}else{this.callback("up",[e,this.cumulative?delta:1]);}}},mousemove:function(evt){this.mousePosition=evt.xy;},activate:function(evt){if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){var wheelListener=this.wheelListener;OpenLayers.Event.observe(window,"DOMMouseScroll",wheelListener);OpenLayers.Event.observe(window,"mousewheel",wheelListener);OpenLayers.Event.observe(document,"mousewheel",wheelListener);return tr [...]
-this.id=OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");},destroy:function(){for(var i in this.symbolizer){this.symbolizer[i]=null;}
-this.symbolizer=null;delete this.symbolizers;},evaluate:function(feature){var context=this.getContext(feature);var applies=true;if(this.minScaleDenominator||this.maxScaleDenominator){var scale=feature.layer.map.getScale();}
-if(this.minScaleDenominator){applies=scale>=OpenLayers.Style.createLiteral(this.minScaleDenominator,context);}
-if(applies&&this.maxScaleDenominator){applies=scale<OpenLayers.Style.createLiteral(this.maxScaleDenominator,context);}
-if(applies&&this.filter){if(this.filter.CLASS_NAME=="OpenLayers.Filter.FeatureId"){applies=this.filter.evaluate(feature);}else{applies=this.filter.evaluate(context);}}
-return applies;},getContext:function(feature){var context=this.context;if(!context){context=feature.attributes||feature.data;}
-if(typeof this.context=="function"){context=this.context(feature);}
-return context;},clone:function(){var options=OpenLayers.Util.extend({},this);if(this.symbolizers){var len=this.symbolizers.length;options.symbolizers=new Array(len);for(var i=0;i<len;++i){options.symbolizers[i]=this.symbolizers[i].clone();}}else{options.symbolizer={};var value,type;for(var key in this.symbolizer){value=this.symbolizer[key];type=typeof value;if(type==="object"){options.symbolizer[key]=OpenLayers.Util.extend({},value);}else if(type==="string"){options.symbolizer[key]=value;}}}
-options.filter=this.filter&&this.filter.clone();options.context=this.context&&OpenLayers.Util.extend({},this.context);return new OpenLayers.Rule(options);},CLASS_NAME:"OpenLayers.Rule"});OpenLayers.Filter.Spatial=OpenLayers.Class(OpenLayers.Filter,{type:null,property:null,value:null,distance:null,distanceUnits:null,initialize:function(options){OpenLayers.Filter.prototype.initialize.apply(this,[options]);},evaluate:function(feature){var intersect=false;switch(this.type){case OpenLayers.Fi [...]
-if(feature.geometry.intersects(geom)){intersect=true;}}
-break;default:OpenLayers.Console.error(OpenLayers.i18n("filterEvaluateNotImplemented"));break;}
-return intersect;},clone:function(){var options=OpenLayers.Util.applyDefaults({value:this.value&&this.value.clone&&this.value.clone()},this);return new OpenLayers.Filter.Spatial(options);},CLASS_NAME:"OpenLayers.Filter.Spatial"});OpenLayers.Filter.Spatial.BBOX="BBOX";OpenLayers.Filter.Spatial.INTERSECTS="INTERSECTS";OpenLayers.Filter.Spatial.DWITHIN="DWITHIN";OpenLayers.Filter.Spatial.WITHIN="WITHIN";OpenLayers.Filter.Spatial.CONTAINS="CONTAINS";OpenLayers.Format.SLD=OpenLayers.Class(Ope [...]
-var min=obj.points[0];var max=obj.points[1];container.components.push(new OpenLayers.Bounds(min.x,min.y,max.x,max.y));}},OpenLayers.Format.GML.Base.prototype.readers["gml"]),"feature":OpenLayers.Format.GML.Base.prototype.readers["feature"],"wfs":OpenLayers.Format.GML.Base.prototype.readers["wfs"]},write:function(features){var name;if(OpenLayers.Util.isArray(features)){name="wfs:FeatureCollection";}else{name="gml:featureMember";}
-var root=this.writeNode(name,features);this.setAttributeNS(root,this.namespaces["xsi"],"xsi:schemaLocation",this.schemaLocation);return OpenLayers.Format.XML.prototype.write.apply(this,[root]);},writers:{"gml":OpenLayers.Util.applyDefaults({"Point":function(geometry){var node=this.createElementNSPlus("gml:Point");this.writeNode("coordinates",[geometry],node);return node;},"coordinates":function(points){var numPoints=points.length;var parts=new Array(numPoints);var point;for(var i=0;i<num [...]
-if(point.z!=undefined){parts[i]+=","+point.z;}}
-return this.createElementNSPlus("gml:coordinates",{attributes:{decimal:".",cs:",",ts:" "},value:(numPoints==1)?parts[0]:parts.join(" ")});},"LineString":function(geometry){var node=this.createElementNSPlus("gml:LineString");this.writeNode("coordinates",geometry.components,node);return node;},"Polygon":function(geometry){var node=this.createElementNSPlus("gml:Polygon");this.writeNode("outerBoundaryIs",geometry.components[0],node);for(var i=1;i<geometry.components.length;++i){this.writeNod [...]
-return node;},"outerBoundaryIs":function(ring){var node=this.createElementNSPlus("gml:outerBoundaryIs");this.writeNode("LinearRing",ring,node);return node;},"innerBoundaryIs":function(ring){var node=this.createElementNSPlus("gml:innerBoundaryIs");this.writeNode("LinearRing",ring,node);return node;},"LinearRing":function(ring){var node=this.createElementNSPlus("gml:LinearRing");this.writeNode("coordinates",ring.components,node);return node;},"Box":function(bounds){var node=this.createElem [...]
-return node;}},OpenLayers.Format.GML.Base.prototype.writers["gml"]),"feature":OpenLayers.Format.GML.Base.prototype.writers["feature"],"wfs":OpenLayers.Format.GML.Base.prototype.writers["wfs"]},CLASS_NAME:"OpenLayers.Format.GML.v2"});OpenLayers.Format.Filter.v1_0_0=OpenLayers.Class(OpenLayers.Format.GML.v2,OpenLayers.Format.Filter.v1,{VERSION:"1.0.0",schemaLocation:"http://www.opengis.net/ogc/filter/1.0.0/filter.xsd",initialize:function(options){OpenLayers.Format.GML.v2.prototype.initiali [...]
-return node;}},OpenLayers.Format.Filter.v1.prototype.writers["ogc"]),"gml":OpenLayers.Format.GML.v2.prototype.writers["gml"],"feature":OpenLayers.Format.GML.v2.prototype.writers["feature"]},writeSpatial:function(filter,name){var node=this.createElementNSPlus("ogc:"+name);this.writeNode("PropertyName",filter,node);if(filter.value instanceof OpenLayers.Filter.Function){this.writeNode("Function",filter.value,node);}else{var child;if(filter.value instanceof OpenLayers.Geometry){child=this.wr [...]
-if(filter.projection){child.setAttribute("srsName",filter.projection);}
-node.appendChild(child);}
-return node;},CLASS_NAME:"OpenLayers.Format.Filter.v1_0_0"});OpenLayers.Format.WFST.v1_0_0=OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0,OpenLayers.Format.WFST.v1,{version:"1.0.0",srsNameInQuery:false,schemaLocations:{"wfs":"http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd"},initialize:function(options){OpenLayers.Format.Filter.v1_0_0.prototype.initialize.apply(this,[options]);OpenLayers.Format.WFST.v1.prototype.initialize.apply(this,[options]);},readNode:function(node,obj,fir [...]
-options.featureType}});if(options.srsNameInQuery&&options.srsName){node.setAttribute("srsName",options.srsName);}
-if(options.featureNS){node.setAttribute("xmlns:"+prefix,options.featureNS);}
-if(options.propertyNames){for(var i=0,len=options.propertyNames.length;i<len;i++){this.writeNode("ogc:PropertyName",{property:options.propertyNames[i]},node);}}
-if(options.filter){this.setFilterProperty(options.filter);this.writeNode("ogc:Filter",options.filter,node);}
-return node;}},OpenLayers.Format.WFST.v1.prototype.writers["wfs"]),"gml":OpenLayers.Format.GML.v2.prototype.writers["gml"],"feature":OpenLayers.Format.GML.v2.prototype.writers["feature"],"ogc":OpenLayers.Format.Filter.v1_0_0.prototype.writers["ogc"]},CLASS_NAME:"OpenLayers.Format.WFST.v1_0_0"});OpenLayers.ElementsIndexer=OpenLayers.Class({maxZIndex:null,order:null,indices:null,compare:null,initialize:function(yOrdering){this.compare=yOrdering?OpenLayers.ElementsIndexer.IndexingMethods.Z_ [...]
-var nodeId=newNode.id;this.determineZIndex(newNode);var leftIndex=-1;var rightIndex=this.order.length;var middle;while(rightIndex-leftIndex>1){middle=parseInt((leftIndex+rightIndex)/2);var placement=this.compare(this,newNode,OpenLayers.Util.getElement(this.order[middle]));if(placement>0){leftIndex=middle;}else{rightIndex=middle;}}
-this.order.splice(rightIndex,0,nodeId);this.indices[nodeId]=this.getZIndex(newNode);return this.getNextElement(rightIndex);},remove:function(node){var nodeId=node.id;var arrayIndex=OpenLayers.Util.indexOf(this.order,nodeId);if(arrayIndex>=0){this.order.splice(arrayIndex,1);delete this.indices[nodeId];if(this.order.length>0){var lastId=this.order[this.order.length-1];this.maxZIndex=this.indices[lastId];}else{this.maxZIndex=0;}}},clear:function(){this.order=[];this.indices={};this.maxZInde [...]
-return nextElement;}else{return null;}},CLASS_NAME:"OpenLayers.ElementsIndexer"});OpenLayers.ElementsIndexer.IndexingMethods={Z_ORDER:function(indexer,newNode,nextNode){var newZIndex=indexer.getZIndex(newNode);var returnVal=0;if(nextNode){var nextZIndex=indexer.getZIndex(nextNode);returnVal=newZIndex-nextZIndex;}
-return returnVal;},Z_ORDER_DRAWING_ORDER:function(indexer,newNode,nextNode){var returnVal=OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(indexer,newNode,nextNode);if(nextNode&&returnVal==0){returnVal=1;}
-return returnVal;},Z_ORDER_Y_ORDER:function(indexer,newNode,nextNode){var returnVal=OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(indexer,newNode,nextNode);if(nextNode&&returnVal===0){var result=nextNode._boundsBottom-newNode._boundsBottom;returnVal=(result===0)?1:result;}
-return returnVal;}};OpenLayers.Renderer.Elements=OpenLayers.Class(OpenLayers.Renderer,{rendererRoot:null,root:null,vectorRoot:null,textRoot:null,xmlns:null,indexer:null,BACKGROUND_ID_SUFFIX:"_background",LABEL_ID_SUFFIX:"_label",initialize:function(containerID,options){OpenLayers.Renderer.prototype.initialize.apply(this,arguments);this.rendererRoot=this.createRenderRoot();this.root=this.createRoot("_root");this.vectorRoot=this.createRoot("_vroot");this.textRoot=this.createRoot("_troot"); [...]
-root=this.textRoot;if(root){while(child=root.firstChild){root.removeChild(child);}}
-if(this.indexer){this.indexer.clear();}},getNodeType:function(geometry,style){},drawGeometry:function(geometry,style,featureId){var className=geometry.CLASS_NAME;var rendered=true;if((className=="OpenLayers.Geometry.Collection")||(className=="OpenLayers.Geometry.MultiPoint")||(className=="OpenLayers.Geometry.MultiLineString")||(className=="OpenLayers.Geometry.MultiPolygon")){for(var i=0,len=geometry.components.length;i<len;i++){rendered=this.drawGeometry(geometry.components[i],style,feat [...]
-return rendered;};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);}
-if(rendered==false){var node=document.getElementById(geometry.id);if(node){if(node._style.backgroundGraphic){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;},redrawNode:function(id,geometry,style,featureId){style=this.applyDefaultSymbolizer(style);var node=this.nodeFactory(id,this.getNodeType(geometry,style));node._featureId=featureId;node._boundsBottom=geometry.getBounds().bottom;node._geometryClass=geometry.CLASS_NAME;node._style=style;var drawResult=this.drawGeometryNode(node,geometry,style);if(drawResult===false){return false;}
-node=drawResult.node;if(this.indexer){var insert=this.indexer.insert(node);if(insert){this.vectorRoot.insertBefore(node,insert);}else{this.vectorRoot.appendChild(node);}}else{if(node.parentNode!==this.vectorRoot){this.vectorRoot.appendChild(node);}}
-this.postDraw(node);return drawResult.complete;},redrawBackgroundNode:function(id,geometry,style,featureId){var backgroundStyle=OpenLayers.Util.extend({},style);backgroundStyle.externalGraphic=backgroundStyle.backgroundGraphic;backgroundStyle.graphicXOffset=backgroundStyle.backgroundXOffset;backgroundStyle.graphicYOffset=backgroundStyle.backgroundYOffset;backgroundStyle.graphicZIndex=backgroundStyle.backgroundGraphicZIndex;backgroundStyle.graphicWidth=backgroundStyle.backgroundWidth||bac [...]
-drawn=this.drawPoint(node,geometry);break;case"OpenLayers.Geometry.LineString":options.isFilled=false;drawn=this.drawLineString(node,geometry);break;case"OpenLayers.Geometry.LinearRing":drawn=this.drawLinearRing(node,geometry);break;case"OpenLayers.Geometry.Polygon":drawn=this.drawPolygon(node,geometry);break;case"OpenLayers.Geometry.Surface":drawn=this.drawSurface(node,geometry);break;case"OpenLayers.Geometry.Rectangle":drawn=this.drawRectangle(node,geometry);break;default:break;}
-node._options=options;if(drawn!=false){return{node:this.setStyle(node,style,options,geometry),complete:drawn};}else{return false;}},postDraw:function(node){},drawPoint:function(node,geometry){},drawLineString:function(node,geometry){},drawLinearRing:function(node,geometry){},drawPolygon:function(node,geometry){},drawRectangle:function(node,geometry){},drawCircle:function(node,geometry){},drawSurface:function(node,geometry){},removeText:function(featureId){var label=document.getElementByI [...]
-element.parentNode.removeChild(element);if(this.indexer){this.indexer.remove(element);}
-if(element._style.backgroundGraphic){var backgroundId=geometry.id+this.BACKGROUND_ID_SUFFIX;var bElem=OpenLayers.Util.getElement(backgroundId);if(bElem&&bElem.parentNode){bElem.parentNode.removeChild(bElem);}}}}},nodeFactory:function(id,type){var node=OpenLayers.Util.getElement(id);if(node){if(!this.nodeTypeCompare(node,type)){node.parentNode.removeChild(node);node=this.nodeFactory(id,type);}}else{node=this.createNode(type,id);}
-return node;},nodeTypeCompare:function(node,type){},createNode:function(type,id){},moveRoot:function(renderer){var root=this.root;if(renderer.root.parentNode==this.rendererRoot){root=renderer.root;}
-root.parentNode.removeChild(root);renderer.rendererRoot.appendChild(root);},getRenderLayerId:function(){return this.root.parentNode.parentNode.id;},isComplexSymbol:function(graphicName){return(graphicName!="circle")&&!!graphicName;},CLASS_NAME:"OpenLayers.Renderer.Elements"});OpenLayers.Renderer.symbol={"star":[350,75,379,161,469,161,397,215,423,301,350,250,277,301,303,215,231,161,321,161,350,75],"cross":[4,0,6,0,6,4,10,4,10,6,6,6,6,10,4,10,4,6,0,6,0,4,4,4,4,0],"x":[0,0,25,0,50,35,75,0,1 [...]
-return parameters;},setMap:function(map){OpenLayers.Control.prototype.setMap.apply(this,arguments);for(var i=0,len=this.map.controls.length;i<len;i++){var control=this.map.controls[i];if((control!=this)&&(control.CLASS_NAME=="OpenLayers.Control.ArgParser")){if(control.displayProjection!=this.displayProjection){this.displayProjection=control.displayProjection;}
-break;}}
-if(i==this.map.controls.length){var args=this.getParameters();if(args.layers){this.layers=args.layers;this.map.events.register('addlayer',this,this.configureLayers);this.configureLayers();}
-if(args.lat&&args.lon){this.center=new OpenLayers.LonLat(parseFloat(args.lon),parseFloat(args.lat));if(args.zoom){this.zoom=parseInt(args.zoom);}
-this.map.events.register('changebaselayer',this,this.setCenter);this.setCenter();}}},setCenter:function(){if(this.map.baseLayer){this.map.events.unregister('changebaselayer',this,this.setCenter);if(this.displayProjection){this.center.transform(this.displayProjection,this.map.getProjectionObject());}
-this.map.setCenter(this.center,this.zoom);}},configureLayers:function(){if(this.layers.length==this.map.layers.length){this.map.events.unregister('addlayer',this,this.configureLayers);for(var i=0,len=this.layers.length;i<len;i++){var layer=this.map.layers[i];var c=this.layers.charAt(i);if(c=="B"){this.map.setBaseLayer(layer);}else if((c=="T")||(c=="F")){layer.setVisibility(c=="T");}}}},CLASS_NAME:"OpenLayers.Control.ArgParser"});OpenLayers.Control.Permalink=OpenLayers.Class(OpenLayers.Co [...]
-else{OpenLayers.Control.prototype.initialize.apply(this,[options]);this.element=OpenLayers.Util.getElement(element);this.base=base||document.location.href;}},destroy:function(){if(this.element.parentNode==this.div){this.div.removeChild(this.element);}
-this.element=null;this.map.events.unregister('moveend',this,this.updateLink);OpenLayers.Control.prototype.destroy.apply(this,arguments);},setMap:function(map){OpenLayers.Control.prototype.setMap.apply(this,arguments);for(var i=0,len=this.map.controls.length;i<len;i++){var control=this.map.controls[i];if(control.CLASS_NAME==this.argParserClass.CLASS_NAME){if(control.displayProjection!=this.displayProjection){this.displayProjection=control.displayProjection;}
-break;}}
-if(i==this.map.controls.length){this.map.addControl(new this.argParserClass({'displayProjection':this.displayProjection}));}},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);if(!this.element&&!this.anchor){this.element=document.createElement("a");this.element.innerHTML=OpenLayers.i18n("Permalink");this.element.href="";this.div.appendChild(this.element);}
-this.map.events.on({'moveend':this.updateLink,'changelayer':this.updateLink,'changebaselayer':this.updateLink,scope:this});this.updateLink();return this.div;},updateLink:function(){var separator=this.anchor?'#':'?';var href=this.base;if(href.indexOf(separator)!=-1){href=href.substring(0,href.indexOf(separator));}
-href+=separator+OpenLayers.Util.getParameterString(this.createParams());if(this.anchor&&!this.element){window.location.href=href;}
-else{this.element.href=href;}},createParams:function(center,zoom,layers){center=center||this.map.getCenter();var params=OpenLayers.Util.getParameters(this.base);if(center){params.zoom=zoom||this.map.getZoom();var lat=center.lat;var lon=center.lon;if(this.displayProjection){var mapPosition=OpenLayers.Projection.transform({x:lon,y:lat},this.map.getProjectionObject(),this.displayProjection);lon=mapPosition.x;lat=mapPosition.y;}
-params.lat=Math.round(lat*100000)/100000;params.lon=Math.round(lon*100000)/100000;layers=layers||this.map.layers;params.layers='';for(var i=0,len=layers.length;i<len;i++){var layer=layers[i];if(layer.isBaseLayer){params.layers+=(layer==this.map.baseLayer)?"B":"0";}else{params.layers+=(layer.getVisibility())?"T":"F";}}}
-return params;},CLASS_NAME:"OpenLayers.Control.Permalink"});OpenLayers.Layer.TMS=OpenLayers.Class(OpenLayers.Layer.Grid,{serviceVersion:"1.0.0",layername:null,type:null,isBaseLayer:true,tileOrigin:null,serverResolutions:null,zoomOffset:0,initialize:function(name,url,options){var newArguments=[];newArguments.push(name,url,{},options);OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);},destroy:function(){OpenLayers.Layer.Grid.prototype.destroy.apply(this,arguments);},clon [...]
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){bounds=this.adjustBounds(bounds);var res=this.map.getResolution();var x=Math.round((bounds.left-this.tileOrigin.lon)/(res*this.tileSize.w));var y=Math.round((bounds.bottom-this.tileOrigin.lat)/(res*this.tileSize.h));var z=this.serverResolutions!=null?OpenLayers.Util.indexOf(this.serverResolutions,res):this.map.getZoom()+this.zoomOffset;var path=this.serviceVersion+"/"+this.layername+"/"+z+"/" [...]
-return url+path;},setMap:function(map){OpenLayers.Layer.Grid.prototype.setMap.apply(this,arguments);if(!this.tileOrigin){this.tileOrigin=new OpenLayers.LonLat(this.map.maxExtent.left,this.map.maxExtent.bottom);}},CLASS_NAME:"OpenLayers.Layer.TMS"});OpenLayers.Strategy.Fixed=OpenLayers.Class(OpenLayers.Strategy,{preload:false,activate:function(){if(OpenLayers.Strategy.prototype.activate.apply(this,arguments)){this.layer.events.on({"refresh":this.load,scope:this});if(this.layer.visibility= [...]
-return true;}
-return false;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){this.layer.events.un({"refresh":this.load,"visibilitychanged":this.load,scope:this});}
-return deactivated;},load:function(options){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));layer.events.un({"visibilitychanged":this.load,scope:this});},merge:function(mapProjection,resp){var layer=this.layer;layer.destroyFeatures();var features=resp.features;if(features&&features.length>0){if(!mapProjection.equa [...]
-layer.addFeatures(features);}
-layer.events.triggerEvent("loadend");},CLASS_NAME:"OpenLayers.Strategy.Fixed"});OpenLayers.Format.WFSCapabilities=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{defaultVersion:"1.1.0",errorProperty:"service",CLASS_NAME:"OpenLayers.Format.WFSCapabilities"});OpenLayers.Format.WFSCapabilities.v1=OpenLayers.Class(OpenLayers.Format.WFSCapabilities,{initialize:function(options){OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);this.options=options;},read:function(data){if( [...]
-var capabilities={};var root=data.documentElement;this.runChildNodes(capabilities,root);return capabilities;},runChildNodes:function(obj,node){var children=node.childNodes;var childNode,processor;for(var i=0;i<children.length;++i){childNode=children[i];if(childNode.nodeType==1){processor=this["read_cap_"+childNode.nodeName];if(processor){processor.apply(this,[obj,childNode]);}}}},read_cap_FeatureTypeList:function(request,node){var featureTypeList={featureTypes:[]};this.runChildNodes(feat [...]
-var lines=new Array(pointFeatures.length-1);var pointFeature,startPoint,endPoint;for(var i=0,len=pointFeatures.length;i<len;i++){pointFeature=pointFeatures[i];endPoint=pointFeature.geometry;if(!endPoint){var lonlat=pointFeature.lonlat;endPoint=new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);}else if(endPoint.CLASS_NAME!="OpenLayers.Geometry.Point"){OpenLayers.Console.error("Only features with point geometries are supported.");return;}
-if(i>0){var attributes=(this.dataFrom!=null)?(pointFeatures[i+this.dataFrom].data||pointFeatures[i+this.dataFrom].attributes):null;var style=(this.styleFrom!=null)?(pointFeatures[i+this.styleFrom].style):null;var line=new OpenLayers.Geometry.LineString([startPoint,endPoint]);lines[i-1]=new OpenLayers.Feature.Vector(line,attributes,style);}
-startPoint=endPoint;}
-this.addFeatures(lines,options);},CLASS_NAME:"OpenLayers.Layer.PointTrack"});OpenLayers.Layer.PointTrack.SOURCE_NODE=-1;OpenLayers.Layer.PointTrack.TARGET_NODE=0;OpenLayers.Layer.PointTrack.dataFrom={'SOURCE_NODE':-1,'TARGET_NODE':0};OpenLayers.Protocol.WFS=function(options){options=OpenLayers.Util.applyDefaults(options,OpenLayers.Protocol.WFS.DEFAULTS);var cls=OpenLayers.Protocol.WFS["v"+options.version.replace(/\./g,"_")];if(!cls){throw"Unsupported WFS version: "+options.version;}
-return new cls(options);};OpenLayers.Protocol.WFS.fromWMSLayer=function(layer,options){var typeName,featurePrefix;var param=layer.params["LAYERS"];var parts=(OpenLayers.Util.isArray(param)?param[0]:param).split(":");if(parts.length>1){featurePrefix=parts[0];}
-typeName=parts.pop();var protocolOptions={url:layer.url,featureType:typeName,featurePrefix:featurePrefix,srsName:layer.projection&&layer.projection.getCode()||layer.map&&layer.map.getProjectionObject().getCode(),version:"1.1.0"};return new OpenLayers.Protocol.WFS(OpenLayers.Util.applyDefaults(options,protocolOptions));};OpenLayers.Protocol.WFS.DEFAULTS={"version":"1.0.0"};OpenLayers.Layer.Markers=OpenLayers.Class(OpenLayers.Layer,{isBaseLayer:false,markers:null,drawn:false,initialize:fun [...]
-this.drawn=true;}},addMarker:function(marker){this.markers.push(marker);if(this.opacity!=null){marker.setOpacity(this.opacity);}
-if(this.map&&this.map.getExtent()){marker.map=this.map;this.drawMarker(marker);}},removeMarker:function(marker){if(this.markers&&this.markers.length){OpenLayers.Util.removeItem(this.markers,marker);marker.erase();}},clearMarkers:function(){if(this.markers!=null){while(this.markers.length>0){this.removeMarker(this.markers[0]);}}},drawMarker:function(marker){var px=this.map.getLayerPxFromLonLat(marker.lonlat);if(px==null){marker.display(false);}else{if(!marker.isDrawn()){var markerImg=mark [...]
-return maxExtent;},CLASS_NAME:"OpenLayers.Layer.Markers"});OpenLayers.Control.Pan=OpenLayers.Class(OpenLayers.Control,{slideFactor:50,slideRatio:null,direction:null,type:OpenLayers.Control.TYPE_BUTTON,initialize:function(direction,options){this.direction=direction;this.CLASS_NAME+=this.direction;OpenLayers.Control.prototype.initialize.apply(this,[options]);},trigger:function(){var getSlideFactor=OpenLayers.Function.bind(function(dim){return this.slideRatio?this.map.getSize()[dim]*this.sl [...]
-newArguments.push(name,url,params,options);OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);OpenLayers.Util.applyDefaults(this.params,OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS));if(!this.noMagic&&this.params.TRANSPARENT&&this.params.TRANSPARENT.toString().toLowerCase()=="true"){if((options==null)||(!options.isBaseLayer)){this.isBaseLayer=false;}
-if(this.params.FORMAT=="image/jpeg"){this.params.FORMAT=OpenLayers.Util.alphaHack()?"image/gif":"image/png";}}},destroy:function(){OpenLayers.Layer.Grid.prototype.destroy.apply(this,arguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.WMS(this.name,this.url,this.params,this.getOptions());}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},reverseAxisOrder:function(){return(parseFloat(this.params.VERSION)>=1.3&&!!this.yx[this.map.getProjectionObject().getCode()]);},getURL:function(bounds){bounds=this.adjustBounds(bounds);var imageSize=this.getImageSize();var newParams={};var reverseAxisOrder=this.reverseAxisOrder();newParams.BBOX=this.encodeBBOX?bounds.toBBOX(null,reverseAxisOrder):bounds.toArray(reverseAxisOrder);newParams.WIDTH=imageSize.w;newParams [...]
-if(typeof this.params.TRANSPARENT=="boolean"){newParams.TRANSPARENT=this.params.TRANSPARENT?"TRUE":"FALSE";}
-return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this,arguments);},CLASS_NAME:"OpenLayers.Layer.WMS"});OpenLayers.Layer.WMS.Untiled=OpenLayers.Class(OpenLayers.Layer.WMS,{singleTile:true,initialize:function(name,url,params,options){OpenLayers.Layer.WMS.prototype.initialize.apply(this,arguments);var msg="The OpenLayers.Layer.WMS.Untiled class is deprecated and "+"will be removed in 3.0. Instead, you should use the "+"normal OpenLayers.Layer.WMS class, passing it the optio [...]
-obj=OpenLayers.Layer.WMS.prototype.clone.apply(this,[obj]);return obj;},CLASS_NAME:"OpenLayers.Layer.WMS.Untiled"});OpenLayers.Geometry.Surface=OpenLayers.Class(OpenLayers.Geometry,{initialize:function(){OpenLayers.Geometry.prototype.initialize.apply(this,arguments);},CLASS_NAME:"OpenLayers.Geometry.Surface"});OpenLayers.Format.ArcXML.Features=OpenLayers.Class(OpenLayers.Format.XML,{initialize:function(options){OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);},read:funct [...]
-var defaults=OpenLayers.Util.extend({},this.options.defaults);this.defaults=OpenLayers.Util.applyDefaults(defaults,this.DEFAULTS);this.setTargets(this.options.targets);if(this.targets.length===0&&this.layer){this.addTargetLayer(this.layer);}
-this.geoToleranceCache={};},setLayer:function(layer){if(this.active){this.deactivate();this.layer=layer;this.activate();}else{this.layer=layer;}},setTargets:function(targets){this.targets=[];if(targets&&targets.length){var target;for(var i=0,len=targets.length;i<len;++i){target=targets[i];if(target instanceof OpenLayers.Layer.Vector){this.addTargetLayer(target);}else{this.addTarget(target);}}}},addTargetLayer:function(layer){this.addTarget({layer:layer});},addTarget:function(target){targ [...]
-return activated;},deactivate:function(){var deactivated=OpenLayers.Control.prototype.deactivate.call(this);if(deactivated){if(this.layer&&this.layer.events){this.layer.events.un({sketchstarted:this.onSketchModified,sketchmodified:this.onSketchModified,vertexmodified:this.onVertexModified,scope:this});}}
-this.feature=null;this.point=null;return deactivated;},onSketchModified:function(event){this.feature=event.feature;this.considerSnapping(event.vertex,event.vertex);},onVertexModified:function(event){this.feature=event.feature;var loc=this.layer.map.getLonLatFromViewPortPx(event.pixel);this.considerSnapping(event.vertex,new OpenLayers.Geometry.Point(loc.lon,loc.lat));},considerSnapping:function(point,loc){var best={rank:Number.POSITIVE_INFINITY,dist:Number.POSITIVE_INFINITY,x:null,y:null} [...]
-if(snapped){var proceed=this.events.triggerEvent("beforesnap",{point:point,x:best.x,y:best.y,distance:best.dist,layer:best.target.layer,snapType:this.precedence[best.rank]});if(proceed!==false){point.x=best.x;point.y=best.y;this.point=point;this.events.triggerEvent("snap",{point:point,snapType:this.precedence[best.rank],layer:best.target.layer,distance:best.dist});}else{snapped=false;}}
-if(this.point&&!snapped){point.x=loc.x;point.y=loc.y;this.point=null;this.events.triggerEvent("unsnap",{point:point});}},testTarget:function(target,loc){var resolution=this.layer.map.getResolution();if("minResolution"in target){if(resolution<target.minResolution){return null;}}
-if("maxResolution"in target){if(resolution>=target.maxResolution){return null;}}
-var tolerance={node:this.getGeoTolerance(target.nodeTolerance,resolution),vertex:this.getGeoTolerance(target.vertexTolerance,resolution),edge:this.getGeoTolerance(target.edgeTolerance,resolution)};var maxTolerance=Math.max(tolerance.node,tolerance.vertex,tolerance.edge);var result={rank:Number.POSITIVE_INFINITY,dist:Number.POSITIVE_INFINITY};var eligible=false;var features=target.layer.features;var feature,type,vertices,vertex,closest,dist,found;var numTypes=this.precedence.length;var ll [...]
-if(found){break;}}}}}}}
-return eligible?result:null;},getGeoTolerance:function(tolerance,resolution){if(resolution!==this.resolution){this.resolution=resolution;this.geoToleranceCache={};}
-var geoTolerance=this.geoToleranceCache[tolerance];if(geoTolerance===undefined){geoTolerance=tolerance*resolution;this.geoToleranceCache[tolerance]=geoTolerance;}
-return geoTolerance;},destroy:function(){if(this.active){this.deactivate();}
-delete this.layer;delete this.targets;OpenLayers.Control.prototype.destroy.call(this);},CLASS_NAME:"OpenLayers.Control.Snapping"});OpenLayers.Date={toISOString:(function(){if("toISOString"in Date.prototype){return function(date){return date.toISOString();};}else{function pad(num,len){var str=num+"";while(str.length<len){str="0"+str;}
-return str;}
-return function(date){var str;if(isNaN(date.getTime())){str="Invalid Date";}else{str=date.getUTCFullYear()+"-"+
-pad(date.getUTCMonth()+1,2)+"-"+
-pad(date.getUTCDate(),2)+"T"+
-pad(date.getUTCHours(),2)+":"+
-pad(date.getUTCMinutes(),2)+":"+
-pad(date.getUTCSeconds(),2)+"."+
-pad(date.getUTCMilliseconds(),3)+"Z";}
-return str;};}})(),parse:function(str){var date;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}))?)))?$/);if(match&&(match[1]||match[7])){var year=parseInt(match[1],10)||0;var month=(parseInt(match[2],10)-1)||0;var day=parseInt(match[3],10)||1;date=new Date(Date.UTC(year,month,day));var type=match[7];if(type){var hours=parseInt(match[4],10);var minutes=parseInt(match[5],10);var secFrac=parseFloat(match[6]);var [...]
-return date;}};(function(){var oXMLHttpRequest=window.XMLHttpRequest;var bGecko=!!window.controllers,bIE=window.document.all&&!window.opera,bIE7=bIE&&window.navigator.userAgent.match(/MSIE 7.0/);function fXMLHttpRequest(){this._object=oXMLHttpRequest&&!bIE7?new oXMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");this._listeners=[];};function cXMLHttpRequest(){return new fXMLHttpRequest;};cXMLHttpRequest.prototype=fXMLHttpRequest.prototype;if(bGecko&&oXMLHttpRequest.wrapped)
-cXMLHttpRequest.wrapped=oXMLHttpRequest.wrapped;cXMLHttpRequest.UNSENT=0;cXMLHttpRequest.OPENED=1;cXMLHttpRequest.HEADERS_RECEIVED=2;cXMLHttpRequest.LOADING=3;cXMLHttpRequest.DONE=4;cXMLHttpRequest.prototype.readyState=cXMLHttpRequest.UNSENT;cXMLHttpRequest.prototype.responseText='';cXMLHttpRequest.prototype.responseXML=null;cXMLHttpRequest.prototype.status=0;cXMLHttpRequest.prototype.statusText='';cXMLHttpRequest.prototype.priority="NORMAL";cXMLHttpRequest.prototype.onreadystatechange=n [...]
-bAsync=true;this._async=bAsync;var oRequest=this,nState=this.readyState,fOnUnload;if(bIE&&bAsync){fOnUnload=function(){if(nState!=cXMLHttpRequest.DONE){fCleanTransport(oRequest);oRequest.abort();}};window.attachEvent("onunload",fOnUnload);}
-if(cXMLHttpRequest.onopen)
-cXMLHttpRequest.onopen.apply(this,arguments);if(arguments.length>4)
-this._object.open(sMethod,sUrl,bAsync,sUser,sPassword);else
-if(arguments.length>3)
-this._object.open(sMethod,sUrl,bAsync,sUser);else
-this._object.open(sMethod,sUrl,bAsync);this.readyState=cXMLHttpRequest.OPENED;fReadyStateChange(this);this._object.onreadystatechange=function(){if(bGecko&&!bAsync)
-return;oRequest.readyState=oRequest._object.readyState;fSynchronizeValues(oRequest);if(oRequest._aborted){oRequest.readyState=cXMLHttpRequest.UNSENT;return;}
-if(oRequest.readyState==cXMLHttpRequest.DONE){delete oRequest._data;fCleanTransport(oRequest);if(bIE&&bAsync)
-window.detachEvent("onunload",fOnUnload);}
-if(nState!=oRequest.readyState)
-fReadyStateChange(oRequest);nState=oRequest.readyState;}};function fXMLHttpRequest_send(oRequest){oRequest._object.send(oRequest._data);if(bGecko&&!oRequest._async){oRequest.readyState=cXMLHttpRequest.OPENED;fSynchronizeValues(oRequest);while(oRequest.readyState<cXMLHttpRequest.DONE){oRequest.readyState++;fReadyStateChange(oRequest);if(oRequest._aborted)
-return;}}};cXMLHttpRequest.prototype.send=function(vData){if(cXMLHttpRequest.onsend)
-cXMLHttpRequest.onsend.apply(this,arguments);if(!arguments.length)
-vData=null;if(vData&&vData.nodeType){vData=window.XMLSerializer?new window.XMLSerializer().serializeToString(vData):vData.xml;if(!oRequest._headers["Content-Type"])
-oRequest._object.setRequestHeader("Content-Type","application/xml");}
-this._data=vData;fXMLHttpRequest_send(this);};cXMLHttpRequest.prototype.abort=function(){if(cXMLHttpRequest.onabort)
-cXMLHttpRequest.onabort.apply(this,arguments);if(this.readyState>cXMLHttpRequest.UNSENT)
-this._aborted=true;this._object.abort();fCleanTransport(this);this.readyState=cXMLHttpRequest.UNSENT;delete this._data;};cXMLHttpRequest.prototype.getAllResponseHeaders=function(){return this._object.getAllResponseHeaders();};cXMLHttpRequest.prototype.getResponseHeader=function(sName){return this._object.getResponseHeader(sName);};cXMLHttpRequest.prototype.setRequestHeader=function(sName,sValue){if(!this._headers)
-this._headers={};this._headers[sName]=sValue;return this._object.setRequestHeader(sName,sValue);};cXMLHttpRequest.prototype.addEventListener=function(sName,fHandler,bUseCapture){for(var nIndex=0,oListener;oListener=this._listeners[nIndex];nIndex++)
-if(oListener[0]==sName&&oListener[1]==fHandler&&oListener[2]==bUseCapture)
-return;this._listeners.push([sName,fHandler,bUseCapture]);};cXMLHttpRequest.prototype.removeEventListener=function(sName,fHandler,bUseCapture){for(var nIndex=0,oListener;oListener=this._listeners[nIndex];nIndex++)
-if(oListener[0]==sName&&oListener[1]==fHandler&&oListener[2]==bUseCapture)
-break;if(oListener)
-this._listeners.splice(nIndex,1);};cXMLHttpRequest.prototype.dispatchEvent=function(oEvent){var oEventPseudo={'type':oEvent.type,'target':this,'currentTarget':this,'eventPhase':2,'bubbles':oEvent.bubbles,'cancelable':oEvent.cancelable,'timeStamp':oEvent.timeStamp,'stopPropagation':function(){},'preventDefault':function(){},'initEvent':function(){}};if(oEventPseudo.type=="readystatechange"&&this.onreadystatechange)
-(this.onreadystatechange.handleEvent||this.onreadystatechange).apply(this,[oEventPseudo]);for(var nIndex=0,oListener;oListener=this._listeners[nIndex];nIndex++)
-if(oListener[0]==oEventPseudo.type&&!oListener[2])
-(oListener[1].handleEvent||oListener[1]).apply(this,[oEventPseudo]);};cXMLHttpRequest.prototype.toString=function(){return'['+"object"+' '+"XMLHttpRequest"+']';};cXMLHttpRequest.toString=function(){return'['+"XMLHttpRequest"+']';};function fReadyStateChange(oRequest){if(cXMLHttpRequest.onreadystatechange)
-cXMLHttpRequest.onreadystatechange.apply(oRequest);oRequest.dispatchEvent({'type':"readystatechange",'bubbles':false,'cancelable':false,'timeStamp':new Date+0});};function fGetDocument(oRequest){var oDocument=oRequest.responseXML,sResponse=oRequest.responseText;if(bIE&&sResponse&&oDocument&&!oDocument.documentElement&&oRequest.getResponseHeader("Content-Type").match(/[^\/]+\/[^\+]+\+xml/)){oDocument=new window.ActiveXObject("Microsoft.XMLDOM");oDocument.async=false;oDocument.validateOnPa [...]
-if(oDocument)
-if((bIE&&oDocument.parseError!=0)||!oDocument.documentElement||(oDocument.documentElement&&oDocument.documentElement.tagName=="parsererror"))
-return null;return oDocument;};function fSynchronizeValues(oRequest){try{oRequest.responseText=oRequest._object.responseText;}catch(e){}
-try{oRequest.responseXML=fGetDocument(oRequest._object);}catch(e){}
-try{oRequest.status=oRequest._object.status;}catch(e){}
-try{oRequest.statusText=oRequest._object.statusText;}catch(e){}};function fCleanTransport(oRequest){oRequest._object.onreadystatechange=new window.Function;};if(!window.Function.prototype.apply){window.Function.prototype.apply=function(oRequest,oArguments){if(!oArguments)
-oArguments=[];oRequest.__func=this;oRequest.__func(oArguments[0],oArguments[1],oArguments[2],oArguments[3],oArguments[4]);delete oRequest.__func;};};OpenLayers.Request.XMLHttpRequest=cXMLHttpRequest;})();OpenLayers.Format.KML=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{kml:"http://www.opengis.net/kml/2.2",gx:"http://www.google.com/kml/ext/2.2"},kmlns:"http://earth.google.com/kml/2.0",placemarksDesc:"No description available",foldersName:"OpenLayers export",foldersDesc:"Exported o [...]
-var types=["Link","NetworkLink","Style","StyleMap","Placemark"];for(var i=0,len=types.length;i<len;++i){var type=types[i];var nodes=this.getElementsByTagNameNS(data,"*",type);if(nodes.length==0){continue;}
-switch(type.toLowerCase()){case"link":case"networklink":this.parseLinks(nodes,options);break;case"style":if(this.extractStyles){this.parseStyles(nodes,options);}
-break;case"stylemap":if(this.extractStyles){this.parseStyleMaps(nodes,options);}
-break;case"placemark":this.parseFeatures(nodes,options);break;}}
-return this.features;},parseLinks:function(nodes,options){if(options.depth>=this.maxDepth){return false;}
-var newOptions=OpenLayers.Util.extend({},options);newOptions.depth++;for(var i=0,len=nodes.length;i<len;i++){var href=this.parseProperty(nodes[i],"*","href");if(href&&!this.fetched[href]){this.fetched[href]=true;var data=this.fetchLink(href);if(data){this.parseData(data,newOptions);}}}},fetchLink:function(href){var request=OpenLayers.Request.GET({url:href,async:false});if(request){return request.responseText;}},parseStyles:function(nodes,options){for(var i=0,len=nodes.length;i<len;i++){v [...]
-return color;},parseStyle:function(node){var style={};var types=["LineStyle","PolyStyle","IconStyle","BalloonStyle","LabelStyle"];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];if(!styleTypeNode){continue;}
-switch(type.toLowerCase()){case"linestyle":var kmlColor=this.parseProperty(styleTypeNode,"*","color");var color=this.parseKmlColor(kmlColor);if(color){style["strokeColor"]=color.color;style["strokeOpacity"]=color.opacity;}
-var width=this.parseProperty(styleTypeNode,"*","width");if(width){style["strokeWidth"]=width;}
-break;case"polystyle":var kmlColor=this.parseProperty(styleTypeNode,"*","color");var color=this.parseKmlColor(kmlColor);if(color){style["fillOpacity"]=color.opacity;style["fillColor"]=color.color;}
-var fill=this.parseProperty(styleTypeNode,"*","fill");if(fill=="0"){style["fillColor"]="none";}
-var outline=this.parseProperty(styleTypeNode,"*","outline");if(outline=="0"){style["strokeWidth"]="0";}
-break;case"iconstyle":var scale=parseFloat(this.parseProperty(styleTypeNode,"*","scale")||1);var width=32*scale;var height=32*scale;var iconNode=this.getElementsByTagNameNS(styleTypeNode,"*","Icon")[0];if(iconNode){var href=this.parseProperty(iconNode,"*","href");if(href){var w=this.parseProperty(iconNode,"*","w");var h=this.parseProperty(iconNode,"*","h");var google="http://maps.google.com/mapfiles/kml";if(OpenLayers.String.startsWith(href,google)&&!w&&!h){w=64;h=64;scale=scale/2;}
-w=w||h;h=h||w;if(w){width=parseInt(w)*scale;}
-if(h){height=parseInt(h)*scale;}
-var matches=href.match(this.regExes.kmlIconPalette);if(matches){var palette=matches[1];var file_extension=matches[2];var x=this.parseProperty(iconNode,"*","x");var y=this.parseProperty(iconNode,"*","y");var posX=x?x/32:0;var posY=y?(7-y/32):7;var pos=posY*8+posX;href="http://maps.google.com/mapfiles/kml/pal"
-+palette+"/icon"+pos+file_extension;}
-style["graphicOpacity"]=1;style["externalGraphic"]=href;}}
-var hotSpotNode=this.getElementsByTagNameNS(styleTypeNode,"*","hotSpot")[0];if(hotSpotNode){var x=parseFloat(hotSpotNode.getAttribute("x"));var y=parseFloat(hotSpotNode.getAttribute("y"));var xUnits=hotSpotNode.getAttribute("xunits");if(xUnits=="pixels"){style["graphicXOffset"]=-x*scale;}
-else if(xUnits=="insetPixels"){style["graphicXOffset"]=-width+(x*scale);}
-else if(xUnits=="fraction"){style["graphicXOffset"]=-width*x;}
-var yUnits=hotSpotNode.getAttribute("yunits");if(yUnits=="pixels"){style["graphicYOffset"]=-height+(y*scale)+1;}
-else if(yUnits=="insetPixels"){style["graphicYOffset"]=-(y*scale)+1;}
-else if(yUnits=="fraction"){style["graphicYOffset"]=-height*(1-y)+1;}}
-style["graphicWidth"]=width;style["graphicHeight"]=height;break;case"balloonstyle":var balloonStyle=OpenLayers.Util.getXmlNodeValue(styleTypeNode);if(balloonStyle){style["balloonStyle"]=balloonStyle.replace(this.regExes.straightBracket,"${$1}");}
-break;case"labelstyle":var kmlColor=this.parseProperty(styleTypeNode,"*","color");var color=this.parseKmlColor(kmlColor);if(color){style["fontColor"]=color.color;style["fontOpacity"]=color.opacity;}
-break;default:}}
-if(!style["strokeColor"]&&style["fillColor"]){style["strokeColor"]=style["fillColor"];}
-var id=node.getAttribute("id");if(id&&style){style.id=id;}
-return style;},parseStyleMaps:function(nodes,options){for(var i=0,len=nodes.length;i<len;i++){var node=nodes[i];var pairs=this.getElementsByTagNameNS(node,"*","Pair");var id=node.getAttribute("id");for(var j=0,jlen=pairs.length;j<jlen;j++){var pair=pairs[j];var key=this.parseProperty(pair,"*","key");var styleUrl=this.parseProperty(pair,"*","styleUrl");if(styleUrl&&key=="normal"){this.styles[(options.styleBaseUrl||"")+"#"+id]=this.styles[(options.styleBaseUrl||"")+styleUrl];}
-if(styleUrl&&key=="highlight"){}}}},parseFeatures:function(nodes,options){var features=[];for(var i=0,len=nodes.length;i<len;i++){var featureNode=nodes[i];var feature=this.parseFeature.apply(this,[featureNode]);if(feature){if(this.extractStyles&&feature.attributes&&feature.attributes.styleUrl){feature.style=this.getStyle(feature.attributes.styleUrl,options);}
-if(this.extractStyles){var inlineStyleNode=this.getElementsByTagNameNS(featureNode,"*","Style")[0];if(inlineStyleNode){var inlineStyle=this.parseStyle(inlineStyleNode);if(inlineStyle){feature.style=OpenLayers.Util.extend(feature.style,inlineStyle);}}}
-if(this.extractTracks){var tracks=this.getElementsByTagNameNS(featureNode,this.namespaces.gx,"Track");if(tracks&&tracks.length>0){var track=tracks[0];var container={features:[],feature:feature};this.readNode(track,container);if(container.features.length>0){features.push.apply(features,container.features);}}}else{features.push(feature);}}else{throw"Bad Placemark: "+i;}}
-this.features=this.features.concat(features);},readers:{"kml":{"when":function(node,container){container.whens.push(OpenLayers.Date.parse(this.getChildValue(node)));},"_trackPointAttribute":function(node,container){var name=node.nodeName.split(":").pop();container.attributes[name].push(this.getChildValue(node));}},"gx":{"Track":function(node,container){var obj={whens:[],points:[],angles:[]};if(this.trackAttributes){var name;obj.attributes={};for(var i=0,ii=this.trackAttributes.length;i<i [...]
-this.readChildNodes(node,obj);if(obj.whens.length!==obj.points.length){throw new Error("gx:Track with unequal number of when ("+obj.whens.length+") and gx:coord ("+obj.points.length+") elements.");}
-var hasAngles=obj.angles.length>0;if(hasAngles&&obj.whens.length!==obj.angles.length){throw new Error("gx:Track with unequal number of when ("+obj.whens.length+") and gx:angles ("+obj.angles.length+") elements.");}
-var feature,point,angles;for(var i=0,ii=obj.whens.length;i<ii;++i){feature=container.feature.clone();feature.fid=container.feature.fid||container.feature.id;point=obj.points[i];feature.geometry=point;if("z"in point){feature.attributes.altitude=point.z;}
-if(this.internalProjection&&this.externalProjection){feature.geometry.transform(this.externalProjection,this.internalProjection);}
-if(this.trackAttributes){for(var j=0,jj=this.trackAttributes.length;j<jj;++j){feature.attributes[name]=obj.attributes[this.trackAttributes[j]][i];}}
-feature.attributes.when=obj.whens[i];feature.attributes.trackId=container.feature.id;if(hasAngles){angles=obj.angles[i];feature.attributes.heading=parseFloat(angles[0]);feature.attributes.tilt=parseFloat(angles[1]);feature.attributes.roll=parseFloat(angles[2]);}
-container.features.push(feature);}},"coord":function(node,container){var str=this.getChildValue(node);var coords=str.replace(this.regExes.trimSpace,"").split(/\s+/);var point=new OpenLayers.Geometry.Point(coords[0],coords[1]);if(coords.length>2){point.z=parseFloat(coords[2]);}
-container.points.push(point);},"angles":function(node,container){var str=this.getChildValue(node);var parts=str.replace(this.regExes.trimSpace,"").split(/\s+/);container.angles.push(parts);}}},parseFeature:function(node){var order=["MultiGeometry","Polygon","LineString","Point"];var type,nodeList,geometry,parser;for(var i=0,len=order.length;i<len;++i){type=order[i];this.internalns=node.namespaceURI?node.namespaceURI:this.kmlns;nodeList=this.getElementsByTagNameNS(node,this.internalns,typ [...]
-break;}}
-var attributes;if(this.extractAttributes){attributes=this.parseAttributes(node);}
-var feature=new OpenLayers.Feature.Vector(geometry,attributes);var fid=node.getAttribute("id")||node.getAttribute("name");if(fid!=null){feature.fid=fid;}
-return feature;},getStyle:function(styleUrl,options){var styleBaseUrl=OpenLayers.Util.removeTail(styleUrl);var newOptions=OpenLayers.Util.extend({},options);newOptions.depth++;newOptions.styleBaseUrl=styleBaseUrl;if(!this.styles[styleUrl]&&!OpenLayers.String.startsWith(styleUrl,"#")&&newOptions.depth<=this.maxDepth&&!this.fetched[styleBaseUrl]){var data=this.fetchLink(styleBaseUrl);if(data){this.parseData(data,newOptions);}}
-var style=OpenLayers.Util.extend({},this.styles[styleUrl]);return style;},parseGeometry:{point:function(node){var nodeList=this.getElementsByTagNameNS(node,this.internalns,"coordinates");var coords=[];if(nodeList.length>0){var coordString=nodeList[0].firstChild.nodeValue;coordString=coordString.replace(this.regExes.removeSpace,"");coords=coordString.split(",");}
-var point=null;if(coords.length>1){if(coords.length==2){coords[2]=null;}
-point=new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]);}else{throw"Bad coordinate string: "+coordString;}
-return point;},linestring:function(node,ring){var nodeList=this.getElementsByTagNameNS(node,this.internalns,"coordinates");var line=null;if(nodeList.length>0){var coordString=this.getChildValue(nodeList[0]);coordString=coordString.replace(this.regExes.trimSpace,"");coordString=coordString.replace(this.regExes.trimComma,",");var pointList=coordString.split(this.regExes.splitSpace);var numPoints=pointList.length;var points=new Array(numPoints);var coords,numCoords;for(var i=0;i<numPoints;+ [...]
-points[i]=new OpenLayers.Geometry.Point(coords[0],coords[1],coords[2]);}else{throw"Bad LineString point coordinates: "+
-pointList[i];}}
-if(numPoints){if(ring){line=new OpenLayers.Geometry.LinearRing(points);}else{line=new OpenLayers.Geometry.LineString(points);}}else{throw"Bad LineString coordinates: "+coordString;}}
-return line;},polygon:function(node){var nodeList=this.getElementsByTagNameNS(node,this.internalns,"LinearRing");var numRings=nodeList.length;var components=new Array(numRings);if(numRings>0){var ring;for(var i=0,len=nodeList.length;i<len;++i){ring=this.parseGeometry.linestring.apply(this,[nodeList[i],true]);if(ring){components[i]=ring;}else{throw"Bad LinearRing geometry: "+i;}}}
-return new OpenLayers.Geometry.Polygon(components);},multigeometry:function(node){var child,parser;var parts=[];var children=node.childNodes;for(var i=0,len=children.length;i<len;++i){child=children[i];if(child.nodeType==1){var type=(child.prefix)?child.nodeName.split(":")[1]:child.nodeName;var parser=this.parseGeometry[type.toLowerCase()];if(parser){parts.push(parser.apply(this,[child]));}}}
-return new OpenLayers.Geometry.Collection(parts);}},parseAttributes:function(node){var attributes={};var edNodes=node.getElementsByTagName("ExtendedData");if(edNodes.length){attributes=this.parseExtendedData(edNodes[0]);}
-var child,grandchildren,grandchild;var children=node.childNodes;for(var i=0,len=children.length;i<len;++i){child=children[i];if(child.nodeType==1){grandchildren=child.childNodes;if(grandchildren.length>=1&&grandchildren.length<=3){var grandchild;switch(grandchildren.length){case 1:grandchild=grandchildren[0];break;case 2:var c1=grandchildren[0];var c2=grandchildren[1];grandchild=(c1.nodeType==3||c1.nodeType==4)?c1:c2;break;case 3:default:grandchild=grandchildren[1];break;}
-if(grandchild.nodeType==3||grandchild.nodeType==4){var name=(child.prefix)?child.nodeName.split(":")[1]:child.nodeName;var value=OpenLayers.Util.getXmlNodeValue(grandchild);if(value){value=value.replace(this.regExes.trimSpace,"");attributes[name]=value;}}}}}
-return attributes;},parseExtendedData:function(node){var attributes={};var i,len,data,key;var dataNodes=node.getElementsByTagName("Data");for(i=0,len=dataNodes.length;i<len;i++){data=dataNodes[i];key=data.getAttribute("name");var ed={};var valueNode=data.getElementsByTagName("value");if(valueNode.length){ed['value']=this.getChildValue(valueNode[0]);}
-var nameNode=data.getElementsByTagName("displayName");if(nameNode.length){ed['displayName']=this.getChildValue(nameNode[0]);}
-attributes[key]=ed;}
-var simpleDataNodes=node.getElementsByTagName("SimpleData");for(i=0,len=simpleDataNodes.length;i<len;i++){var ed={};data=simpleDataNodes[i];key=data.getAttribute("name");ed['value']=this.getChildValue(data);ed['displayName']=key;attributes[key]=ed;}
-return attributes;},parseProperty:function(xmlNode,namespace,tagName){var value;var nodeList=this.getElementsByTagNameNS(xmlNode,namespace,tagName);try{value=OpenLayers.Util.getXmlNodeValue(nodeList[0]);}catch(e){value=null;}
-return value;},write:function(features){if(!(OpenLayers.Util.isArray(features))){features=[features];}
-var kml=this.createElementNS(this.kmlns,"kml");var folder=this.createFolderXML();for(var i=0,len=features.length;i<len;++i){folder.appendChild(this.createPlacemarkXML(features[i]));}
-kml.appendChild(folder);return OpenLayers.Format.XML.prototype.write.apply(this,[kml]);},createFolderXML:function(){var folder=this.createElementNS(this.kmlns,"Folder");if(this.foldersName){var folderName=this.createElementNS(this.kmlns,"name");var folderNameText=this.createTextNode(this.foldersName);folderName.appendChild(folderNameText);folder.appendChild(folderName);}
-if(this.foldersDesc){var folderDesc=this.createElementNS(this.kmlns,"description");var folderDescText=this.createTextNode(this.foldersDesc);folderDesc.appendChild(folderDescText);folder.appendChild(folderDesc);}
-return folder;},createPlacemarkXML:function(feature){var placemarkName=this.createElementNS(this.kmlns,"name");var name=feature.style&&feature.style.label?feature.style.label:feature.attributes.name||feature.id;placemarkName.appendChild(this.createTextNode(name));var placemarkDesc=this.createElementNS(this.kmlns,"description");var desc=feature.attributes.description||this.placemarksDesc;placemarkDesc.appendChild(this.createTextNode(desc));var placemarkNode=this.createElementNS(this.kmlns [...]
-placemarkNode.appendChild(placemarkName);placemarkNode.appendChild(placemarkDesc);var geometryNode=this.buildGeometryNode(feature.geometry);placemarkNode.appendChild(geometryNode);return placemarkNode;},buildGeometryNode:function(geometry){var className=geometry.CLASS_NAME;var type=className.substring(className.lastIndexOf(".")+1);var builder=this.buildGeometry[type.toLowerCase()];var node=null;if(builder){node=builder.apply(this,[geometry]);}
-return node;},buildGeometry:{point:function(geometry){var kml=this.createElementNS(this.kmlns,"Point");kml.appendChild(this.buildCoordinatesNode(geometry));return kml;},multipoint:function(geometry){return this.buildGeometry.collection.apply(this,[geometry]);},linestring:function(geometry){var kml=this.createElementNS(this.kmlns,"LineString");kml.appendChild(this.buildCoordinatesNode(geometry));return kml;},multilinestring:function(geometry){return this.buildGeometry.collection.apply(thi [...]
-return kml;},multipolygon:function(geometry){return this.buildGeometry.collection.apply(this,[geometry]);},collection:function(geometry){var kml=this.createElementNS(this.kmlns,"MultiGeometry");var child;for(var i=0,len=geometry.components.length;i<len;++i){child=this.buildGeometryNode.apply(this,[geometry.components[i]]);if(child){kml.appendChild(child);}}
-return kml;}},buildCoordinatesNode:function(geometry){var coordinatesNode=this.createElementNS(this.kmlns,"coordinates");var path;var points=geometry.components;if(points){var point;var numPoints=points.length;var parts=new Array(numPoints);for(var i=0;i<numPoints;++i){point=points[i];parts[i]=this.buildCoordinates(point);}
-path=parts.join(" ");}else{path=this.buildCoordinates(geometry);}
-var txtNode=this.createTextNode(path);coordinatesNode.appendChild(txtNode);return coordinatesNode;},buildCoordinates:function(point){if(this.internalProjection&&this.externalProjection){point=point.clone();point.transform(this.internalProjection,this.externalProjection);}
-return point.x+","+point.y;},CLASS_NAME:"OpenLayers.Format.KML"});OpenLayers.Popup=OpenLayers.Class({events:null,id:"",lonlat:null,div:null,contentSize:null,size:null,contentHTML:null,backgroundColor:"",opacity:"",border:"",contentDiv:null,groupDiv:null,closeDiv:null,autoSize:false,minSize:null,maxSize:null,displayClass:"olPopup",contentDisplayClass:"olPopupContent",padding:0,disableFirefoxOverflowHack:false,fixPadding:function(){if(typeof this.padding=="number"){this.padding=new OpenLay [...]
-this.id=id;this.lonlat=lonlat;this.contentSize=(contentSize!=null)?contentSize:new OpenLayers.Size(OpenLayers.Popup.WIDTH,OpenLayers.Popup.HEIGHT);if(contentHTML!=null){this.contentHTML=contentHTML;}
-this.backgroundColor=OpenLayers.Popup.COLOR;this.opacity=OpenLayers.Popup.OPACITY;this.border=OpenLayers.Popup.BORDER;this.div=OpenLayers.Util.createDiv(this.id,null,null,null,null,null,"hidden");this.div.className=this.displayClass;var groupDivId=this.id+"_GroupDiv";this.groupDiv=OpenLayers.Util.createDiv(groupDivId,null,null,null,"relative",null,"hidden");var id=this.div.id+"_contentDiv";this.contentDiv=OpenLayers.Util.createDiv(id,null,this.contentSize.clone(),null,"relative");this.co [...]
-this.registerEvents();},destroy:function(){this.id=null;this.lonlat=null;this.size=null;this.contentHTML=null;this.backgroundColor=null;this.opacity=null;this.border=null;if(this.closeOnMove&&this.map){this.map.events.unregister("movestart",this,this.hide);}
-this.events.destroy();this.events=null;if(this.closeDiv){OpenLayers.Event.stopObservingElement(this.closeDiv);this.groupDiv.removeChild(this.closeDiv);}
-this.closeDiv=null;this.div.removeChild(this.groupDiv);this.groupDiv=null;if(this.map!=null){this.map.removePopup(this);}
-this.map=null;this.div=null;this.autoSize=null;this.minSize=null;this.maxSize=null;this.padding=null;this.panMapIfOutOfView=null;},draw:function(px){if(px==null){if((this.lonlat!=null)&&(this.map!=null)){px=this.map.getLayerPxFromLonLat(this.lonlat);}}
-if(this.closeOnMove){this.map.events.register("movestart",this,this.hide);}
-if(!this.disableFirefoxOverflowHack&&OpenLayers.BROWSER_NAME=='firefox'){this.map.events.register("movestart",this,function(){var style=document.defaultView.getComputedStyle(this.contentDiv,null);var currentOverflow=style.getPropertyValue("overflow");if(currentOverflow!="hidden"){this.contentDiv._oldOverflow=currentOverflow;this.contentDiv.style.overflow="hidden";}});this.map.events.register("moveend",this,function(){var oldOverflow=this.contentDiv._oldOverflow;if(oldOverflow){this.conte [...]
-this.moveTo(px);if(!this.autoSize&&!this.size){this.setSize(this.contentSize);}
-this.setBackgroundColor();this.setOpacity();this.setBorder();this.setContentHTML();if(this.panMapIfOutOfView){this.panIntoView();}
-return this.div;},updatePosition:function(){if((this.lonlat)&&(this.map)){var px=this.map.getLayerPxFromLonLat(this.lonlat);if(px){this.moveTo(px);}}},moveTo:function(px){if((px!=null)&&(this.div!=null)){this.div.style.left=px.x+"px";this.div.style.top=px.y+"px";}},visible:function(){return OpenLayers.Element.visible(this.div);},toggle:function(){if(this.visible()){this.hide();}else{this.show();}},show:function(){this.div.style.display='';if(this.panMapIfOutOfView){this.panIntoView();}}, [...]
-this.size.w+=wPadding;this.size.h+=hPadding;if(OpenLayers.BROWSER_NAME=="msie"){this.contentSize.w+=contentDivPadding.left+contentDivPadding.right;this.contentSize.h+=contentDivPadding.bottom+contentDivPadding.top;}
-if(this.div!=null){this.div.style.width=this.size.w+"px";this.div.style.height=this.size.h+"px";}
-if(this.contentDiv!=null){this.contentDiv.style.width=contentSize.w+"px";this.contentDiv.style.height=contentSize.h+"px";}},updateSize:function(){var preparedHTML="<div class='"+this.contentDisplayClass+"'>"+
-this.contentDiv.innerHTML+"</div>";var containerElement=(this.map)?this.map.layerContainerDiv:document.body;var realSize=OpenLayers.Util.getRenderedDimensions(preparedHTML,null,{displayClass:this.displayClass,containerElement:containerElement});var safeSize=this.getSafeContentSize(realSize);var newSize=null;if(safeSize.equals(realSize)){newSize=realSize;}else{var fixedSize=new OpenLayers.Size();fixedSize.w=(safeSize.w<realSize.w)?safeSize.w:null;fixedSize.h=(safeSize.h<realSize.h)?safeSi [...]
-newSize=this.getSafeContentSize(clippedSize);}}
-this.setSize(newSize);},setBackgroundColor:function(color){if(color!=undefined){this.backgroundColor=color;}
-if(this.div!=null){this.div.style.backgroundColor=this.backgroundColor;}},setOpacity:function(opacity){if(opacity!=undefined){this.opacity=opacity;}
-if(this.div!=null){this.div.style.opacity=this.opacity;this.div.style.filter='alpha(opacity='+this.opacity*100+')';}},setBorder:function(border){if(border!=undefined){this.border=border;}
-if(this.div!=null){this.div.style.border=this.border;}},setContentHTML:function(contentHTML){if(contentHTML!=null){this.contentHTML=contentHTML;}
-if((this.contentDiv!=null)&&(this.contentHTML!=null)&&(this.contentHTML!=this.contentDiv.innerHTML)){this.contentDiv.innerHTML=this.contentHTML;if(this.autoSize){this.registerImageListeners();this.updateSize();}}},registerImageListeners:function(){var onImgLoad=function(){this.popup.updateSize();if(this.popup.visible()&&this.popup.panMapIfOutOfView){this.popup.panIntoView();}
-OpenLayers.Event.stopObserving(this.img,"load",this.img._onImageLoad);};var images=this.contentDiv.getElementsByTagName("img");for(var i=0,len=images.length;i<len;i++){var img=images[i];if(img.width==0||img.height==0){var context={'popup':this,'img':img};img._onImgLoad=OpenLayers.Function.bind(onImgLoad,context);OpenLayers.Event.observe(img,'load',img._onImgLoad);}}},getSafeContentSize:function(size){var safeContentSize=size.clone();var contentDivPadding=this.getContentDivPadding();var w [...]
-if(this.minSize){safeContentSize.w=Math.max(safeContentSize.w,(this.minSize.w-wPadding));safeContentSize.h=Math.max(safeContentSize.h,(this.minSize.h-hPadding));}
-if(this.maxSize){safeContentSize.w=Math.min(safeContentSize.w,(this.maxSize.w-wPadding));safeContentSize.h=Math.min(safeContentSize.h,(this.maxSize.h-hPadding));}
-if(this.map&&this.map.size){var extraX=0,extraY=0;if(this.keepInMap&&!this.panMapIfOutOfView){var px=this.map.getPixelFromLonLat(this.lonlat);switch(this.relativePosition){case"tr":extraX=px.x;extraY=this.map.size.h-px.y;break;case"tl":extraX=this.map.size.w-px.x;extraY=this.map.size.h-px.y;break;case"bl":extraX=this.map.size.w-px.x;extraY=px.y;break;case"br":extraX=px.x;extraY=px.y;break;default:extraX=px.x;extraY=this.map.size.h-px.y;break;}}
-var maxY=this.map.size.h-
-this.map.paddingForPopups.top-
-this.map.paddingForPopups.bottom-
-hPadding-extraY;var maxX=this.map.size.w-
-this.map.paddingForPopups.left-
-this.map.paddingForPopups.right-
-wPadding-extraX;safeContentSize.w=Math.min(safeContentSize.w,maxX);safeContentSize.h=Math.min(safeContentSize.h,maxY);}
-return safeContentSize;},getContentDivPadding:function(){var contentDivPadding=this._contentDivPadding;if(!contentDivPadding){if(this.div.parentNode==null){this.div.style.display="none";document.body.appendChild(this.div);}
-contentDivPadding=new OpenLayers.Bounds(OpenLayers.Element.getStyle(this.contentDiv,"padding-left"),OpenLayers.Element.getStyle(this.contentDiv,"padding-bottom"),OpenLayers.Element.getStyle(this.contentDiv,"padding-right"),OpenLayers.Element.getStyle(this.contentDiv,"padding-top"));this._contentDivPadding=contentDivPadding;if(this.div.parentNode==document.body){document.body.removeChild(this.div);this.div.style.display="";}}
-return contentDivPadding;},addCloseBox:function(callback){this.closeDiv=OpenLayers.Util.createDiv(this.id+"_close",null,new OpenLayers.Size(17,17));this.closeDiv.className="olPopupCloseBox";var contentDivPadding=this.getContentDivPadding();this.closeDiv.style.right=contentDivPadding.right+"px";this.closeDiv.style.top=contentDivPadding.top+"px";this.groupDiv.appendChild(this.closeDiv);var closePopup=callback||function(e){this.hide();OpenLayers.Event.stop(e);};OpenLayers.Event.observe(this [...]
-if((origTL.x+this.size.w)>(mapSize.w-this.map.paddingForPopups.right)){newTL.x=mapSize.w-this.map.paddingForPopups.right-this.size.w;}
-if(origTL.y<this.map.paddingForPopups.top){newTL.y=this.map.paddingForPopups.top;}else
-if((origTL.y+this.size.h)>(mapSize.h-this.map.paddingForPopups.bottom)){newTL.y=mapSize.h-this.map.paddingForPopups.bottom-this.size.h;}
-var dx=origTL.x-newTL.x;var dy=origTL.y-newTL.y;this.map.pan(dx,dy);},registerEvents:function(){this.events=new OpenLayers.Events(this,this.div,null,true);function onTouchstart(evt){OpenLayers.Event.stop(evt,true);}
-this.events.on({"mousedown":this.onmousedown,"mousemove":this.onmousemove,"mouseup":this.onmouseup,"click":this.onclick,"mouseout":this.onmouseout,"dblclick":this.ondblclick,"touchstart":onTouchstart,scope:this});},onmousedown:function(evt){this.mousedown=true;OpenLayers.Event.stop(evt,true);},onmousemove:function(evt){if(this.mousedown){OpenLayers.Event.stop(evt,true);}},onmouseup:function(evt){if(this.mousedown){this.mousedown=false;OpenLayers.Event.stop(evt,true);}},onclick:function(e [...]
-shortHexCode.charAt(i));}}
-if(hexCode.indexOf('#')==0){hexCode=hexCode.substring(1);}
-var red=hexCode.substring(0,2);var green=hexCode.substring(2,4);var blue=hexCode.substring(4,6);return new OpenLayers.Rico.Color(parseInt(red,16),parseInt(green,16),parseInt(blue,16));};OpenLayers.Rico.Color.createColorFromBackground=function(elem){var actualColor=OpenLayers.Element.getStyle(OpenLayers.Util.getElement(elem),"backgroundColor");if(actualColor=="transparent"&&elem.parentNode){return OpenLayers.Rico.Color.createColorFromBackground(elem.parentNode);}
-if(actualColor==null){return new OpenLayers.Rico.Color(255,255,255);}
-if(actualColor.indexOf("rgb(")==0){var colors=actualColor.substring(4,actualColor.length-1);var colorArray=colors.split(",");return new OpenLayers.Rico.Color(parseInt(colorArray[0]),parseInt(colorArray[1]),parseInt(colorArray[2]));}
-else if(actualColor.indexOf("#")==0){return OpenLayers.Rico.Color.createFromHex(actualColor);}
-else{return new OpenLayers.Rico.Color(255,255,255);}};OpenLayers.Rico.Color.HSBtoRGB=function(hue,saturation,brightness){var red=0;var green=0;var blue=0;if(saturation==0){red=parseInt(brightness*255.0+0.5);green=red;blue=red;}
-else{var h=(hue-Math.floor(hue))*6.0;var f=h-Math.floor(h);var p=brightness*(1.0-saturation);var q=brightness*(1.0-saturation*f);var t=brightness*(1.0-(saturation*(1.0-f)));switch(parseInt(h)){case 0:red=(brightness*255.0+0.5);green=(t*255.0+0.5);blue=(p*255.0+0.5);break;case 1:red=(q*255.0+0.5);green=(brightness*255.0+0.5);blue=(p*255.0+0.5);break;case 2:red=(p*255.0+0.5);green=(brightness*255.0+0.5);blue=(t*255.0+0.5);break;case 3:red=(p*255.0+0.5);green=(q*255.0+0.5);blue=(brightness* [...]
-return{r:parseInt(red),g:parseInt(green),b:parseInt(blue)};};OpenLayers.Rico.Color.RGBtoHSB=function(r,g,b){var hue;var saturation;var brightness;var cmax=(r>g)?r:g;if(b>cmax){cmax=b;}
-var cmin=(r<g)?r:g;if(b<cmin){cmin=b;}
-brightness=cmax/255.0;if(cmax!=0){saturation=(cmax-cmin)/cmax;}else{saturation=0;}
-if(saturation==0){hue=0;}else{var redc=(cmax-r)/(cmax-cmin);var greenc=(cmax-g)/(cmax-cmin);var bluec=(cmax-b)/(cmax-cmin);if(r==cmax){hue=bluec-greenc;}else if(g==cmax){hue=2.0+redc-bluec;}else{hue=4.0+greenc-redc;}
-hue=hue/6.0;if(hue<0){hue=hue+1.0;}}
-return{h:hue,s:saturation,b:brightness};};OpenLayers.Rico=OpenLayers.Rico||{};OpenLayers.Rico.Corner={round:function(e,options){e=OpenLayers.Util.getElement(e);this._setOptions(options);var color=this.options.color;if(this.options.color=="fromElement"){color=this._background(e);}
-var bgColor=this.options.bgColor;if(this.options.bgColor=="fromParent"){bgColor=this._background(e.offsetParent);}
-this._roundCornersImpl(e,color,bgColor);},changeColor:function(theDiv,newColor){theDiv.style.backgroundColor=newColor;var spanElements=theDiv.parentNode.getElementsByTagName("span");for(var currIdx=0;currIdx<spanElements.length;currIdx++){spanElements[currIdx].style.backgroundColor=newColor;}},changeOpacity:function(theDiv,newOpacity){var mozillaOpacity=newOpacity;var ieOpacity='alpha(opacity='+newOpacity*100+')';theDiv.style.opacity=mozillaOpacity;theDiv.style.filter=ieOpacity;var spanE [...]
-if(this._isTopRounded()){this._roundTopCorners(e,color,bgColor);}
-if(this._isBottomRounded()){this._roundBottomCorners(e,color,bgColor);}},_renderBorder:function(el,bgColor){var borderValue="1px solid "+this._borderColor(bgColor);var borderL="border-left: "+borderValue;var borderR="border-right: "+borderValue;var style="style='"+borderL+";"+borderR+"'";el.innerHTML="<div "+style+">"+el.innerHTML+"</div>";},_roundTopCorners:function(el,color,bgColor){var corner=this._createCorner(bgColor);for(var i=0;i<this.options.numSlices;i++){corner.appendChild(this [...]
-el.style.paddingTop=0;el.insertBefore(corner,el.firstChild);},_roundBottomCorners:function(el,color,bgColor){var corner=this._createCorner(bgColor);for(var i=(this.options.numSlices-1);i>=0;i--){corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom"));}
-el.style.paddingBottom=0;el.appendChild(corner);},_createCorner:function(bgColor){var corner=document.createElement("div");corner.style.backgroundColor=(this._isTransparent()?"transparent":bgColor);return corner;},_createCornerSlice:function(color,bgColor,n,position){var slice=document.createElement("span");var inStyle=slice.style;inStyle.backgroundColor=color;inStyle.display="block";inStyle.height="1px";inStyle.overflow="hidden";inStyle.fontSize="1px";var borderColor=this._borderColor(c [...]
-else if(borderColor){inStyle.borderColor=borderColor;inStyle.borderStyle="solid";inStyle.borderWidth="0px 1px";}
-if(!this.options.compact&&(n==(this.options.numSlices-1))){inStyle.height="2px";}
-this._setMargin(slice,n,position);this._setBorder(slice,n,position);return slice;},_setOptions:function(options){this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false};OpenLayers.Util.extend(this.options,options||{});this.options.numSlices=this.options.compact?2:4;if(this._isTransparent()){this.options.blend=false;}},_whichSideTop:function(){if(this._hasString(this.options.corners,"all","top")){return"";}
-if(this.options.corners.indexOf("tl")>=0&&this.options.corners.indexOf("tr")>=0){return"";}
-if(this.options.corners.indexOf("tl")>=0){return"left";}else if(this.options.corners.indexOf("tr")>=0){return"right";}
-return"";},_whichSideBottom:function(){if(this._hasString(this.options.corners,"all","bottom")){return"";}
-if(this.options.corners.indexOf("bl")>=0&&this.options.corners.indexOf("br")>=0){return"";}
-if(this.options.corners.indexOf("bl")>=0){return"left";}else if(this.options.corners.indexOf("br")>=0){return"right";}
-return"";},_borderColor:function(color,bgColor){if(color=="transparent"){return bgColor;}else if(this.options.border){return this.options.border;}else if(this.options.blend){return this._blend(bgColor,color);}else{return"";}},_setMargin:function(el,n,corners){var marginSize=this._marginSize(n);var whichSide=corners=="top"?this._whichSideTop():this._whichSideBottom();if(whichSide=="left"){el.style.marginLeft=marginSize+"px";el.style.marginRight="0px";}
-else if(whichSide=="right"){el.style.marginRight=marginSize+"px";el.style.marginLeft="0px";}
-else{el.style.marginLeft=marginSize+"px";el.style.marginRight=marginSize+"px";}},_setBorder:function(el,n,corners){var borderSize=this._borderSize(n);var whichSide=corners=="top"?this._whichSideTop():this._whichSideBottom();if(whichSide=="left"){el.style.borderLeftWidth=borderSize+"px";el.style.borderRightWidth="0px";}
-else if(whichSide=="right"){el.style.borderRightWidth=borderSize+"px";el.style.borderLeftWidth="0px";}
-else{el.style.borderLeftWidth=borderSize+"px";el.style.borderRightWidth=borderSize+"px";}
-if(this.options.border!=false){el.style.borderLeftWidth=borderSize+"px";el.style.borderRightWidth=borderSize+"px";}},_marginSize:function(n){if(this._isTransparent()){return 0;}
-var marginSizes=[5,3,2,1];var blendedMarginSizes=[3,2,1,0];var compactMarginSizes=[2,1];var smBlendedMarginSizes=[1,0];if(this.options.compact&&this.options.blend){return smBlendedMarginSizes[n];}else if(this.options.compact){return compactMarginSizes[n];}else if(this.options.blend){return blendedMarginSizes[n];}else{return marginSizes[n];}},_borderSize:function(n){var transparentBorderSizes=[5,3,2,1];var blendedBorderSizes=[2,1,1,1];var compactBorderSizes=[1,0];var actualBorderSizes=[0, [...]
-return 0;},_hasString:function(str){for(var i=1;i<arguments.length;i++)if(str.indexOf(arguments[i])>=0){return true;}return false;},_blend:function(c1,c2){var cc1=OpenLayers.Rico.Color.createFromHex(c1);cc1.blend(OpenLayers.Rico.Color.createFromHex(c2));return cc1;},_background:function(el){try{return OpenLayers.Rico.Color.createColorFromBackground(el).asHex();}catch(err){return"#ffffff";}},_isTransparent:function(){return this.options.color=="transparent";},_isTopRounded:function(){retu [...]
-if(this.div!=null){if(this.contentDiv!=null){this.div.style.background="transparent";OpenLayers.Rico.Corner.changeColor(this.groupDiv,this.backgroundColor);}}},setOpacity:function(opacity){OpenLayers.Popup.Anchored.prototype.setOpacity.call(this,opacity);if(this.div!=null){if(this.groupDiv!=null){OpenLayers.Rico.Corner.changeOpacity(this.groupDiv,this.opacity);}}},setBorder:function(border){this.border=0;},setRicoCorners:function(){var corners=this.getCornersToRound(this.relativePosition [...]
-if(!options.geometryName&&parseFloat(this.format.version)>1.0){this.setGeometryName(null);}},destroy:function(){if(this.options&&!this.options.format){this.format.destroy();}
-this.format=null;OpenLayers.Protocol.prototype.destroy.apply(this);},read:function(options){OpenLayers.Protocol.prototype.read.apply(this,arguments);options=OpenLayers.Util.extend({},options);OpenLayers.Util.applyDefaults(options,this.options||{});var response=new OpenLayers.Protocol.Response({requestType:"read"});var data=OpenLayers.Format.XML.prototype.write.apply(this.format,[this.format.writeNode("wfs:GetFeature",options)]);response.priv=OpenLayers.Request.POST({url:options.url,callb [...]
-response.code=OpenLayers.Protocol.Response.SUCCESS;}else{response.code=OpenLayers.Protocol.Response.FAILURE;response.error=result;}}else{response.code=OpenLayers.Protocol.Response.FAILURE;}
-options.callback.call(options.scope,response);}},parseResponse:function(request,options){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-if(!doc||doc.length<=0){return null;}
-var result=(this.readFormat!==null)?this.readFormat.read(doc):this.format.read(doc,options);if(!this.featureNS){var format=this.readFormat||this.format;this.featureNS=format.featureNS;format.autoConfig=false;if(!this.geometryName){this.setGeometryName(format.geometryName);}}
-return result;},commit:function(features,options){options=OpenLayers.Util.extend({},options);OpenLayers.Util.applyDefaults(options,this.options);var response=new OpenLayers.Protocol.Response({requestType:"commit",reqFeatures:features});response.priv=OpenLayers.Request.POST({url:options.url,headers:options.headers,data:this.format.write(features,options),callback:this.createCallback(this.handleCommit,response,options)});return response;},handleCommit:function(response,options){if(options. [...]
-var obj=this.format.read(data)||{};response.insertIds=obj.insertIds||[];if(obj.success){response.code=OpenLayers.Protocol.Response.SUCCESS;}else{response.code=OpenLayers.Protocol.Response.FAILURE;response.error=obj;}
-options.callback.call(options.scope,response);}},filterDelete:function(filter,options){options=OpenLayers.Util.extend({},options);OpenLayers.Util.applyDefaults(options,this.options);var response=new OpenLayers.Protocol.Response({requestType:"commit"});var root=this.format.createElementNSPlus("wfs:Transaction",{attributes:{service:"WFS",version:this.version}});var deleteNode=this.format.createElementNSPlus("wfs:Delete",{attributes:{typeName:(options.featureNS?this.featurePrefix+":":"")+
-options.featureType}});if(options.featureNS){deleteNode.setAttribute("xmlns:"+this.featurePrefix,options.featureNS);}
-var filterNode=this.format.writeNode("ogc:Filter",filter);deleteNode.appendChild(filterNode);root.appendChild(deleteNode);var data=OpenLayers.Format.XML.prototype.write.apply(this.format,[root]);return OpenLayers.Request.POST({url:this.url,callback:options.callback||function(){},data:data});},abort:function(response){if(response){response.priv.abort();}},CLASS_NAME:"OpenLayers.Protocol.WFS.v1"});OpenLayers.Handler.Point=OpenLayers.Class(OpenLayers.Handler,{point:null,layer:null,multi:fal [...]
-OpenLayers.Handler.prototype.initialize.apply(this,arguments);},activate:function(){if(!OpenLayers.Handler.prototype.activate.apply(this,arguments)){return false;}
-var options=OpenLayers.Util.extend({displayInLayerSwitcher:false,calculateInRange:OpenLayers.Function.True},this.layerOptions);this.layer=new OpenLayers.Layer.Vector(this.CLASS_NAME,options);this.map.addLayer(this.layer);return true;},createFeature:function(pixel){var lonlat=this.map.getLonLatFromPixel(pixel);var geometry=new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);this.point=new OpenLayers.Feature.Vector(geometry);this.callback("create",[this.point.geometry,this.point]);this.po [...]
-this.cancel();if(this.layer.map!=null){this.destroyFeature(true);this.layer.destroy(false);}
-this.layer=null;this.touch=false;return true;},destroyFeature:function(force){if(this.layer&&(force||!this.persist)){this.layer.destroyFeatures();}
-this.point=null;},destroyPersistedFeature:function(){var layer=this.layer;if(layer&&layer.features.length>1){this.layer.features[0].destroy();}},finalize:function(cancel){var key=cancel?"cancel":"done";this.mouseDown=false;this.lastDown=null;this.lastUp=null;this.lastTouchPx=null;this.callback(key,[this.geometryClone()]);this.destroyFeature(cancel);},cancel:function(){this.finalize(true);},click:function(evt){OpenLayers.Event.stop(evt);return false;},dblclick:function(evt){OpenLayers.Eve [...]
-var lonlat=this.map.getLonLatFromPixel(pixel);this.point.geometry.x=lonlat.lon;this.point.geometry.y=lonlat.lat;this.callback("modify",[this.point.geometry,this.point,false]);this.point.geometry.clearBounds();this.drawFeature();},drawFeature:function(){this.layer.drawFeature(this.point,this.style);},getGeometry:function(){var geometry=this.point&&this.point.geometry;if(geometry&&this.multi){geometry=new OpenLayers.Geometry.MultiPoint([geometry]);}
-return geometry;},geometryClone:function(){var geom=this.getGeometry();return geom&&geom.clone();},mousedown:function(evt){return this.down(evt);},touchstart:function(evt){if(!this.touch){this.touch=true;this.map.events.un({mousedown:this.mousedown,mouseup:this.mouseup,mousemove:this.mousemove,click:this.click,dblclick:this.dblclick,scope:this});}
-this.lastTouchPx=evt.xy;return this.down(evt);},mousemove:function(evt){return this.move(evt);},touchmove:function(evt){this.lastTouchPx=evt.xy;return this.move(evt);},mouseup:function(evt){return this.up(evt);},touchend:function(evt){evt.xy=this.lastTouchPx;return this.up(evt);},down:function(evt){this.mouseDown=true;this.lastDown=evt.xy;if(!this.touch){this.modifyFeature(evt.xy);}
-this.stoppedDown=this.stopDown;return!this.stopDown;},move:function(evt){if(!this.touch&&(!this.mouseDown||this.stoppedDown)){this.modifyFeature(evt.xy);}
-return true;},up:function(evt){this.mouseDown=false;this.stoppedDown=this.stopDown;if(!this.checkModifiers(evt)){return true;}
-if(this.lastUp&&this.lastUp.equals(evt.xy)){return true;}
-if(this.lastDown&&this.passesTolerance(this.lastDown,evt.xy,this.pixelTolerance)){if(this.touch){this.modifyFeature(evt.xy);}
-if(this.persist){this.destroyPersistedFeature();}
-this.lastUp=evt.xy;this.finalize();return!this.stopUp;}else{return true;}},mouseout:function(evt){if(OpenLayers.Util.mouseLeft(evt,this.map.eventsDiv)){this.stoppedDown=this.stopDown;this.mouseDown=false;}},passesTolerance:function(pixel1,pixel2,tolerance){var passes=true;if(tolerance!=null&&pixel1&&pixel2){var dist=pixel1.distanceTo(pixel2);if(dist>tolerance){passes=false;}}
-return passes;},CLASS_NAME:"OpenLayers.Handler.Point"});OpenLayers.Handler.Path=OpenLayers.Class(OpenLayers.Handler.Point,{line:null,maxVertices:null,doubleTouchTolerance:20,freehand:false,freehandToggle:'shiftKey',timerId:null,redoStack:null,initialize:function(control,callbacks,options){OpenLayers.Handler.Point.prototype.initialize.apply(this,arguments);},createFeature:function(pixel){var lonlat=this.map.getLonLatFromPixel(pixel);var geometry=new OpenLayers.Geometry.Point(lonlat.lon,lo [...]
-this.redoStack.push(target);this.drawFeature();}
-return undone;},redo:function(){var target=this.redoStack&&this.redoStack.pop();if(target){this.line.geometry.addComponent(target,this.getCurrentPointIndex());this.drawFeature();}
-return!!target;},freehandMode:function(evt){return(this.freehandToggle&&evt[this.freehandToggle])?!this.freehand:this.freehand;},modifyFeature:function(pixel,drawing){if(!this.line){this.createFeature(pixel);}
-var lonlat=this.control.map.getLonLatFromPixel(pixel);this.point.geometry.x=lonlat.lon;this.point.geometry.y=lonlat.lat;this.callback("modify",[this.point.geometry,this.getSketch(),drawing]);this.point.geometry.clearBounds();this.drawFeature();},drawFeature:function(){this.layer.drawFeature(this.line,this.style);this.layer.drawFeature(this.point,this.style);},getSketch:function(){return this.line;},getGeometry:function(){var geometry=this.line&&this.line.geometry;if(geometry&&this.multi) [...]
-return geometry;},touchstart:function(evt){if(this.timerId&&this.passesTolerance(this.lastTouchPx,evt.xy,this.doubleTouchTolerance)){this.finishGeometry();window.clearTimeout(this.timerId);this.timerId=null;return false;}else{if(this.timerId){window.clearTimeout(this.timerId);this.timerId=null;}
-this.timerId=window.setTimeout(OpenLayers.Function.bind(function(){this.timerId=null;},this),300);return OpenLayers.Handler.Point.prototype.touchstart.call(this,evt);}},down:function(evt){var stopDown=this.stopDown;if(this.freehandMode(evt)){stopDown=true;}
-if(!this.touch&&(!this.lastDown||!this.passesTolerance(this.lastDown,evt.xy,this.pixelTolerance))){this.modifyFeature(evt.xy,!!this.lastUp);}
-this.mouseDown=true;this.lastDown=evt.xy;this.stoppedDown=stopDown;return!stopDown;},move:function(evt){if(this.stoppedDown&&this.freehandMode(evt)){if(this.persist){this.destroyPersistedFeature();}
-this.addPoint(evt.xy);return false;}
-if(!this.touch&&(!this.mouseDown||this.stoppedDown)){this.modifyFeature(evt.xy,!!this.lastUp);}
-return true;},up:function(evt){if(this.mouseDown&&(!this.lastUp||!this.lastUp.equals(evt.xy))){if(this.stoppedDown&&this.freehandMode(evt)){if(this.persist){this.destroyPersistedFeature();}
-this.removePoint();this.finalize();}else{if(this.passesTolerance(this.lastDown,evt.xy,this.pixelTolerance)){if(this.touch){this.modifyFeature(evt.xy);}
-if(this.lastUp==null&&this.persist){this.destroyPersistedFeature();}
-this.addPoint(evt.xy);this.lastUp=evt.xy;if(this.line.geometry.components.length===this.maxVertices+1){this.finishGeometry();}}}}
-this.stoppedDown=this.stopDown;this.mouseDown=false;return!this.stopUp;},finishGeometry:function(){var index=this.line.geometry.components.length-1;this.line.geometry.removeComponent(this.line.geometry.components[index]);this.removePoint();this.finalize();},dblclick:function(evt){if(!this.freehandMode(evt)){this.finishGeometry();}
-return false;},CLASS_NAME:"OpenLayers.Handler.Path"});OpenLayers.Layer.GML=OpenLayers.Class(OpenLayers.Layer.Vector,{loaded:false,format:null,formatOptions:null,initialize:function(name,url,options){var newArguments=[];newArguments.push(name,options);OpenLayers.Layer.Vector.prototype.initialize.apply(this,newArguments);this.url=url;},setVisibility:function(visibility,noEvent){OpenLayers.Layer.Vector.prototype.setVisibility.apply(this,arguments);if(this.visibility&&!this.loaded){this.load [...]
-var options={};OpenLayers.Util.extend(options,this.formatOptions);if(this.map&&!this.projection.equals(this.map.getProjectionObject())){options.externalProjection=this.projection;options.internalProjection=this.map.getProjectionObject();}
-var gml=this.format?new this.format(options):new OpenLayers.Format.GML(options);this.addFeatures(gml.read(doc));this.events.triggerEvent("loadend");},requestFailure:function(request){OpenLayers.Console.userError(OpenLayers.i18n("errorLoadingGML",{'url':this.url}));this.events.triggerEvent("loadend");},CLASS_NAME:"OpenLayers.Layer.GML"});OpenLayers.Format.Context=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{layerOptions:null,layerParams:null,read:function(data,options){var context [...]
-map=this.contextToMap(context,mapOptions);}}else{map=context;}
-return map;},getLayerFromContext:function(layerContext){var i,len;var options={queryable:layerContext.queryable,visibility:layerContext.visibility,maxExtent:layerContext.maxExtent,metadata:OpenLayers.Util.applyDefaults(layerContext.metadata,{styles:layerContext.styles,formats:layerContext.formats,"abstract":layerContext["abstract"],dataURL:layerContext.dataURL}),numZoomLevels:layerContext.numZoomLevels,units:layerContext.units,isBaseLayer:layerContext.isBaseLayer,opacity:layerContext.opa [...]
-var params={layers:layerContext.name,transparent:layerContext.transparent,version:layerContext.version};if(layerContext.formats&&layerContext.formats.length>0){params.format=layerContext.formats[0].value;for(i=0,len=layerContext.formats.length;i<len;i++){var format=layerContext.formats[i];if(format.current==true){params.format=format.value;break;}}}
-if(layerContext.styles&&layerContext.styles.length>0){for(i=0,len=layerContext.styles.length;i<len;i++){var style=layerContext.styles[i];if(style.current==true){if(style.href){params.sld=style.href;}else if(style.body){params.sld_body=style.body;}else{params.styles=style.name;}
-break;}}}
-if(this.layerParams){OpenLayers.Util.applyDefaults(params,this.layerParams);}
-var layer=null;var service=layerContext.service;if(service==OpenLayers.Format.Context.serviceTypes.WFS){options.strategies=[new OpenLayers.Strategy.BBOX()];options.protocol=new OpenLayers.Protocol.WFS({url:layerContext.url,featurePrefix:layerContext.name.split(":")[0],featureType:layerContext.name.split(":").pop()});layer=new OpenLayers.Layer.Vector(layerContext.title||layerContext.name,options);}else if(service==OpenLayers.Format.Context.serviceTypes.KML){options.strategies=[new OpenLay [...]
-return layer;},getLayersFromContext:function(layersContext){var layers=[];for(var i=0,len=layersContext.length;i<len;i++){var layer=this.getLayerFromContext(layersContext[i]);if(layer!==null){layers.push(layer);}}
-return layers;},contextToMap:function(context,options){options=OpenLayers.Util.applyDefaults({maxExtent:context.maxExtent,projection:context.projection,units:context.units},options);if(options.maxExtent){options.maxResolution=options.maxExtent.getWidth()/OpenLayers.Map.TILE_WIDTH;}
-var metadata={contactInformation:context.contactInformation,"abstract":context["abstract"],keywords:context.keywords,logo:context.logo,descriptionURL:context.descriptionURL}
-options.metadata=metadata;var map=new OpenLayers.Map(options);map.addLayers(this.getLayersFromContext(context.layersContext));map.setCenter(context.bounds.getCenterLonLat(),map.getZoomForExtent(context.bounds,true));return map;},mergeContextToMap:function(context,map){map.addLayers(this.getLayersFromContext(context.layersContext));return map;},write:function(obj,options){obj=this.toContext(obj);return OpenLayers.Format.XML.VersionedOGC.prototype.write.apply(this,arguments);},CLASS_NAME:" [...]
-if(layer.metadata.formats&&layer.metadata.formats.length>0){for(var i=0,len=layer.metadata.formats.length;i<len;i++){var format=layer.metadata.formats[i];layerContext.formats.push({value:format.value,current:(format.value==layer.params["FORMAT"])});}}else{layerContext.formats.push({value:layer.params["FORMAT"],current:true});}
-if(layer.metadata.styles&&layer.metadata.styles.length>0){for(var i=0,len=layer.metadata.styles.length;i<len;i++){var style=layer.metadata.styles[i];if((style.href==layer.params["SLD"])||(style.body==layer.params["SLD_BODY"])||(style.name==layer.params["STYLES"])){style.current=true;}else{style.current=false;}
-layerContext.styles.push(style);}}else{layerContext.styles.push({href:layer.params["SLD"],body:layer.params["SLD_BODY"],name:layer.params["STYLES"]||parser.defaultStyleName,title:parser.defaultStyleTitle,current:true});}
-return layerContext;},toContext:function(obj){var context={};var layers=obj.layers;if(obj.CLASS_NAME=="OpenLayers.Map"){var metadata=obj.metadata||{};context.size=obj.getSize();context.bounds=obj.getExtent();context.projection=obj.projection;context.title=obj.title;context.keywords=metadata.keywords;context["abstract"]=metadata["abstract"];context.logo=metadata.logo;context.descriptionURL=metadata.descriptionURL;context.contactInformation=metadata.contactInformation;context.maxExtent=obj [...]
-if(context.layersContext==undefined){context.layersContext=[];}
-if(layers!=undefined&&OpenLayers.Util.isArray(layers)){for(var i=0,len=layers.length;i<len;i++){var layer=layers[i];if(layer instanceof OpenLayers.Layer.WMS){context.layersContext.push(this.layerToContext(layer));}}}
-return context;},CLASS_NAME:"OpenLayers.Format.WMC"});OpenLayers.Format.WMC.v1=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{ol:"http://openlayers.org/context",wmc:"http://www.opengis.net/context",sld:"http://www.opengis.net/sld",xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.org/2001/XMLSchema-instance"},schemaLocation:"",getNamespacePrefix:function(uri){var prefix=null;if(uri==null){prefix=this.namespaces[this.defaultPrefix];}else{for(prefix in this.namespaces){if(this.n [...]
-return prefix;},defaultPrefix:"wmc",rootPrefix:null,defaultStyleName:"",defaultStyleTitle:"Default",initialize:function(options){OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);},read:function(data){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);}
-var root=data.documentElement;this.rootPrefix=root.prefix;var context={version:root.getAttribute("version")};this.runChildNodes(context,root);return context;},runChildNodes:function(obj,node){var children=node.childNodes;var childNode,processor,prefix,local;for(var i=0,len=children.length;i<len;++i){childNode=children[i];if(childNode.nodeType==1){prefix=this.getNamespacePrefix(childNode.namespaceURI);local=childNode.nodeName.split(":").pop();processor=this["read_"+prefix+"_"+local];if(pr [...]
-layerContext.formats.push(format);},read_wmc_StyleList:function(layerContext,node){this.runChildNodes(layerContext,node);},read_wmc_Style:function(layerContext,node){var style={};this.runChildNodes(style,node);if(node.getAttribute("current")=="1"){style.current=true;}
-layerContext.styles.push(style);},read_wmc_SLD:function(style,node){this.runChildNodes(style,node);},read_sld_StyledLayerDescriptor:function(sld,node){var xml=OpenLayers.Format.XML.prototype.write.apply(this,[node]);sld.body=xml;},read_sld_FeatureTypeStyle:function(sld,node){var xml=OpenLayers.Format.XML.prototype.write.apply(this,[node]);sld.body=xml;},read_wmc_OnlineResource:function(obj,node){obj.href=this.getAttributeNS(node,this.namespaces.xlink,"href");},read_wmc_Name:function(obj, [...]
-if(attributes){this.setAttributes(node,attributes);}
-return node;},setAttributes:function(node,obj){var value;for(var name in obj){value=obj[name].toString();if(value.match(/[A-Z]/)){this.setAttributeNS(node,null,name,value);}else{node.setAttribute(name,value);}}},write_wmc_General:function(context){var node=this.createElementDefaultNS("General");if(context.size){node.appendChild(this.createElementDefaultNS("Window",null,{width:context.size.w,height:context.size.h}));}
-var bounds=context.bounds;node.appendChild(this.createElementDefaultNS("BoundingBox",null,{minx:bounds.left.toPrecision(18),miny:bounds.bottom.toPrecision(18),maxx:bounds.right.toPrecision(18),maxy:bounds.top.toPrecision(18),SRS:context.projection}));node.appendChild(this.createElementDefaultNS("Title",context.title));if(context.keywords){node.appendChild(this.write_wmc_KeywordList(context.keywords));}
-if(context["abstract"]){node.appendChild(this.createElementDefaultNS("Abstract",context["abstract"]));}
-if(context.logo){node.appendChild(this.write_wmc_URLType("LogoURL",context.logo.href,context.logo));}
-if(context.descriptionURL){node.appendChild(this.write_wmc_URLType("DescriptionURL",context.descriptionURL));}
-if(context.contactInformation){node.appendChild(this.write_wmc_ContactInformation(context.contactInformation));}
-node.appendChild(this.write_ol_MapExtension(context));return node;},write_wmc_KeywordList:function(keywords){var node=this.createElementDefaultNS("KeywordList");for(var i=0,len=keywords.length;i<len;i++){node.appendChild(this.createElementDefaultNS("Keyword",keywords[i]));}
-return node;},write_wmc_ContactInformation:function(contact){var node=this.createElementDefaultNS("ContactInformation");if(contact.personPrimary){node.appendChild(this.write_wmc_ContactPersonPrimary(contact.personPrimary));}
-if(contact.position){node.appendChild(this.createElementDefaultNS("ContactPosition",contact.position));}
-if(contact.contactAddress){node.appendChild(this.write_wmc_ContactAddress(contact.contactAddress));}
-if(contact.phone){node.appendChild(this.createElementDefaultNS("ContactVoiceTelephone",contact.phone));}
-if(contact.fax){node.appendChild(this.createElementDefaultNS("ContactFacsimileTelephone",contact.fax));}
-if(contact.email){node.appendChild(this.createElementDefaultNS("ContactElectronicMailAddress",contact.email));}
-return node;},write_wmc_ContactPersonPrimary:function(personPrimary){var node=this.createElementDefaultNS("ContactPersonPrimary");if(personPrimary.person){node.appendChild(this.createElementDefaultNS("ContactPerson",personPrimary.person));}
-if(personPrimary.organization){node.appendChild(this.createElementDefaultNS("ContactOrganization",personPrimary.organization));}
-return node;},write_wmc_ContactAddress:function(contactAddress){var node=this.createElementDefaultNS("ContactAddress");if(contactAddress.type){node.appendChild(this.createElementDefaultNS("AddressType",contactAddress.type));}
-if(contactAddress.address){node.appendChild(this.createElementDefaultNS("Address",contactAddress.address));}
-if(contactAddress.city){node.appendChild(this.createElementDefaultNS("City",contactAddress.city));}
-if(contactAddress.stateOrProvince){node.appendChild(this.createElementDefaultNS("StateOrProvince",contactAddress.stateOrProvince));}
-if(contactAddress.postcode){node.appendChild(this.createElementDefaultNS("PostCode",contactAddress.postcode));}
-if(contactAddress.country){node.appendChild(this.createElementDefaultNS("Country",contactAddress.country));}
-return node;},write_ol_MapExtension:function(context){var node=this.createElementDefaultNS("Extension");var bounds=context.maxExtent;if(bounds){var maxExtent=this.createElementNS(this.namespaces.ol,"ol:maxExtent");this.setAttributes(maxExtent,{minx:bounds.left.toPrecision(18),miny:bounds.bottom.toPrecision(18),maxx:bounds.right.toPrecision(18),maxy:bounds.top.toPrecision(18)});node.appendChild(maxExtent);}
-return node;},write_wmc_LayerList:function(context){var list=this.createElementDefaultNS("LayerList");for(var i=0,len=context.layersContext.length;i<len;++i){list.appendChild(this.write_wmc_Layer(context.layersContext[i]));}
-return list;},write_wmc_Layer:function(context){var node=this.createElementDefaultNS("Layer",null,{queryable:context.queryable?"1":"0",hidden:context.visibility?"0":"1"});node.appendChild(this.write_wmc_Server(context));node.appendChild(this.createElementDefaultNS("Name",context.name));node.appendChild(this.createElementDefaultNS("Title",context.title));if(context["abstract"]){node.appendChild(this.createElementDefaultNS("Abstract",context["abstract"]));}
-if(context.dataURL){node.appendChild(this.write_wmc_URLType("DataURL",context.dataURL));}
-if(context.metadataURL){node.appendChild(this.write_wmc_URLType("MetadataURL",context.metadataURL));}
-return node;},write_wmc_LayerExtension:function(context){var node=this.createElementDefaultNS("Extension");var bounds=context.maxExtent;var maxExtent=this.createElementNS(this.namespaces.ol,"ol:maxExtent");this.setAttributes(maxExtent,{minx:bounds.left.toPrecision(18),miny:bounds.bottom.toPrecision(18),maxx:bounds.right.toPrecision(18),maxy:bounds.top.toPrecision(18)});node.appendChild(maxExtent);if(context.tileSize&&!context.singleTile){var size=this.createElementNS(this.namespaces.ol," [...]
-var properties=["transparent","numZoomLevels","units","isBaseLayer","opacity","displayInLayerSwitcher","singleTile"];var child;for(var i=0,len=properties.length;i<len;++i){child=this.createOLPropertyNode(context,properties[i]);if(child){node.appendChild(child);}}
-return node;},createOLPropertyNode:function(obj,prop){var node=null;if(obj[prop]!=null){node=this.createElementNS(this.namespaces.ol,"ol:"+prop);node.appendChild(this.createTextNode(obj[prop].toString()));}
-return node;},write_wmc_Server:function(context){var server=context.server;var node=this.createElementDefaultNS("Server");var attributes={service:"OGC:WMS",version:server.version};if(server.title){attributes.title=server.title}
-this.setAttributes(node,attributes);node.appendChild(this.write_wmc_OnlineResource(server.url));return node;},write_wmc_URLType:function(elName,url,attr){var node=this.createElementDefaultNS(elName);node.appendChild(this.write_wmc_OnlineResource(url));if(attr){var optionalAttributes=["width","height","format"];for(var i=0;i<optionalAttributes.length;i++){if(optionalAttributes[i]in attr){node.setAttribute(optionalAttributes[i],attr[optionalAttributes[i]]);}}}
-return node;},write_wmc_DimensionList:function(context){var node=this.createElementDefaultNS("DimensionList");var required_attributes={name:true,units:true,unitSymbol:true,userValue:true};for(var dim in context.dimensions){var attributes={};var dimension=context.dimensions[dim];for(var name in dimension){if(typeof dimension[name]=="boolean"){attributes[name]=Number(dimension[name]);}else{attributes[name]=dimension[name];}}
-var values="";if(attributes.values){values=attributes.values.join(",");delete attributes.values;}
-node.appendChild(this.createElementDefaultNS("Dimension",values,attributes));}
-return node;},write_wmc_FormatList:function(context){var node=this.createElementDefaultNS("FormatList");for(var i=0,len=context.formats.length;i<len;i++){var format=context.formats[i];node.appendChild(this.createElementDefaultNS("Format",format.value,(format.current&&format.current==true)?{current:"1"}:null));}
-return node;},write_wmc_StyleList:function(layer){var node=this.createElementDefaultNS("StyleList");var styles=layer.styles;if(styles&&OpenLayers.Util.isArray(styles)){var sld;for(var i=0,len=styles.length;i<len;i++){var s=styles[i];var style=this.createElementDefaultNS("Style",null,(s.current&&s.current==true)?{current:"1"}:null);if(s.href){sld=this.createElementDefaultNS("SLD");if(s.name){sld.appendChild(this.createElementDefaultNS("Name",s.name));}
-if(s.title){sld.appendChild(this.createElementDefaultNS("Title",s.title));}
-if(s.legend){sld.appendChild(this.write_wmc_URLType("LegendURL",s.legend.href,s.legend));}
-var link=this.write_wmc_OnlineResource(s.href);sld.appendChild(link);style.appendChild(sld);}else if(s.body){sld=this.createElementDefaultNS("SLD");if(s.name){sld.appendChild(this.createElementDefaultNS("Name",s.name));}
-if(s.title){sld.appendChild(this.createElementDefaultNS("Title",s.title));}
-if(s.legend){sld.appendChild(this.write_wmc_URLType("LegendURL",s.legend.href,s.legend));}
-var doc=OpenLayers.Format.XML.prototype.read.apply(this,[s.body]);var imported=doc.documentElement;if(sld.ownerDocument&&sld.ownerDocument.importNode){imported=sld.ownerDocument.importNode(imported,true);}
-sld.appendChild(imported);style.appendChild(sld);}else{style.appendChild(this.createElementDefaultNS("Name",s.name));style.appendChild(this.createElementDefaultNS("Title",s.title));if(s['abstract']){style.appendChild(this.createElementDefaultNS("Abstract",s['abstract']));}
-if(s.legend){style.appendChild(this.write_wmc_URLType("LegendURL",s.legend.href,s.legend));}}
-node.appendChild(style);}}
-return node;},write_wmc_OnlineResource:function(href){var node=this.createElementDefaultNS("OnlineResource");this.setAttributeNS(node,this.namespaces.xlink,"xlink:type","simple");this.setAttributeNS(node,this.namespaces.xlink,"xlink:href",href);return node;},getOnlineResource_href:function(node){var object={};var links=node.getElementsByTagName("OnlineResource");if(links.length>0){this.read_wmc_OnlineResource(object,links[0]);}
-return object.href;},CLASS_NAME:"OpenLayers.Format.WMC.v1"});OpenLayers.Control.PanPanel=OpenLayers.Class(OpenLayers.Control.Panel,{slideFactor:50,slideRatio:null,initialize:function(options){OpenLayers.Control.Panel.prototype.initialize.apply(this,[options]);var options={slideFactor:this.slideFactor,slideRatio:this.slideRatio};this.addControls([new OpenLayers.Control.Pan(OpenLayers.Control.Pan.NORTH,options),new OpenLayers.Control.Pan(OpenLayers.Control.Pan.SOUTH,options),new OpenLayers [...]
-this.div.innerHTML=attributions.join(this.separator);}},CLASS_NAME:"OpenLayers.Control.Attribution"});OpenLayers.Renderer.NG=OpenLayers.Class(OpenLayers.Renderer.Elements,{labelNodeType:null,updateDimensions:function(zoomChanged){var mapExtent=this.map.getExtent();var renderExtent=mapExtent.scale(3);this.setExtent(renderExtent,true);var res=this.getResolution();var div=this.rendererRoot.parentNode;var layerLeft=parseFloat(div.parentNode.style.left);var layerTop=parseFloat(div.parentNode. [...]
-if(feature.geometry){var rendered=this.drawGeometry(feature.geometry,style,feature.id);if(rendered!==false&&style.label){var location=feature.geometry.getCentroid();this.drawText(feature.id,style,location);}else{this.removeText(feature.id);}
-return rendered;}},drawText:function(featureId,style,location){var label;if(typeof featureId!=="string"){label=featureId;}else{label=this.nodeFactory(featureId+this.LABEL_ID_SUFFIX,this.labelNodeType);label._featureId=featureId;}
-label._style=style;label._x=location.x;label._y=location.y;if(style.labelXOffset||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);}
-if(label.parentNode!==this.textRoot){this.textRoot.appendChild(label);}
-return label;},CLASS_NAME:"OpenLayers.Renderer.NG"});OpenLayers.Renderer.SVG2=OpenLayers.Class(OpenLayers.Renderer.NG,{xmlns:"http://www.w3.org/2000/svg",xlinkns:"http://www.w3.org/1999/xlink",symbolMetrics:null,labelNodeType:"g",initialize:function(containerID){if(!this.supported()){return;}
-OpenLayers.Renderer.Elements.prototype.initialize.apply(this,arguments);this.symbolMetrics={};},supported:function(){var svgFeature="http://www.w3.org/TR/SVG11/feature#";return(document.implementation&&(document.implementation.hasFeature("org.w3c.svg","1.0")||document.implementation.hasFeature(svgFeature+"SVG","1.1")||document.implementation.hasFeature(svgFeature+"BasicStructure","1.1")));},updateDimensions:function(zoomChanged){OpenLayers.Renderer.NG.prototype.updateDimensions.apply(thi [...]
-var textNodes=this.textRoot.childNodes;var label;for(i=0,len=textNodes.length;i<len;++i){label=textNodes[i];this.drawText(label,label._style,new OpenLayers.Geometry.Point(label._x,label._y));}}},getNodeType:function(geometry,style){var nodeType=null;switch(geometry.CLASS_NAME){case"OpenLayers.Geometry.Point":if(style.externalGraphic){nodeType="image";}else if(this.isComplexSymbol(style.graphicName)){nodeType="svg";}else{nodeType="circle";}
-break;case"OpenLayers.Geometry.Rectangle":nodeType="rect";break;case"OpenLayers.Geometry.LineString":nodeType="polyline";break;case"OpenLayers.Geometry.LinearRing":nodeType="polygon";break;case"OpenLayers.Geometry.Polygon":case"OpenLayers.Geometry.Curve":case"OpenLayers.Geometry.Surface":nodeType="path";break;default:break;}
-return nodeType;},setStyle:function(node,style,options){style=style||node._style;options=options||node._options;var resolution=this.getResolution();var r=node._radius;var widthFactor=resolution;if(node._geometryClass=="OpenLayers.Geometry.Point"&&r){node.style.visibility="";if(style.graphic===false){node.style.visibility="hidden";}else if(style.externalGraphic){if(style.graphicTitle){node.setAttributeNS(null,"title",style.graphicTitle);var label=this.nodeFactory(null,"title");label.textC [...]
-if(style.graphicWidth&&style.graphicHeight){node.setAttributeNS(null,"preserveAspectRatio","none");}
-var width=style.graphicWidth||style.graphicHeight;var height=style.graphicHeight||style.graphicWidth;width=width?width:style.pointRadius*2;height=height?height:style.pointRadius*2;width*=resolution;height*=resolution;var xOffset=(style.graphicXOffset!=undefined)?style.graphicXOffset*resolution:-(0.5*width);var yOffset=(style.graphicYOffset!=undefined)?style.graphicYOffset*resolution:-(0.5*height);var opacity=style.graphicOpacity||style.fillOpacity;node.setAttributeNS(null,"x",node._x+xOf [...]
-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",node._x-offset);node.setAttributeNS(null,"y",node._y-offset);if(nextSibling){parent.insertBefore(node,nextSibling);}else if(parent){parent.appendChild(node);}}else{node.setAttributeNS(null,"r",style.pointRadius*re [...]
-var rotation=style.rotation;if(rotation!==undefined||node._rotation!==undefined){node._rotation=rotation;rotation|=0;if(node.nodeName!=="svg"){node.setAttributeNS(null,"transform",["rotate(",rotation,node._x,node._y,")"].join(" "));}else{var metrics=this.symbolMetrics[src.id];node.firstChild.setAttributeNS(null,"transform",["rotate(",rotation,metrics.x,metrics.y,")"].join(" "));}}}
-if(options.isFilled){node.setAttributeNS(null,"fill",style.fillColor);node.setAttributeNS(null,"fill-opacity",style.fillOpacity);}else{node.setAttributeNS(null,"fill","none");}
-if(options.isStroked){node.setAttributeNS(null,"stroke",style.strokeColor);node.setAttributeNS(null,"stroke-opacity",style.strokeOpacity);node.setAttributeNS(null,"stroke-width",style.strokeWidth*widthFactor);node.setAttributeNS(null,"stroke-linecap",style.strokeLinecap||"round");node.setAttributeNS(null,"stroke-linejoin","round");style.strokeDashstyle&&node.setAttributeNS(null,"stroke-dasharray",this.dashStyle(style,widthFactor));}else{node.setAttributeNS(null,"stroke","none");}
-if(style.pointerEvents){node.setAttributeNS(null,"pointer-events",style.pointerEvents);}
-if(style.cursor!=null){node.setAttributeNS(null,"cursor",style.cursor);}
-return node;},dashStyle:function(style,widthFactor){var w=style.strokeWidth*widthFactor;var str=style.strokeDashstyle;switch(str){case'solid':return'none';case'dot':return[widthFactor,4*w].join();case'dash':return[4*w,4*w].join();case'dashdot':return[4*w,4*w,widthFactor,4*w].join();case'longdash':return[8*w,4*w].join();case'longdashdot':return[8*w,4*w,widthFactor,4*w].join();default:var parts=OpenLayers.String.trim(str).split(/\s+/g);for(var i=0,ii=parts.length;i<ii;i++){parts[i]=parts[i [...]
-return parts.join();}},createNode:function(type,id){var node=document.createElementNS(this.xmlns,type);if(id){node.setAttributeNS(null,"id",id);}
-return node;},nodeTypeCompare:function(node,type){return(type==node.nodeName);},createRenderRoot:function(){return this.nodeFactory(this.container.id+"_svgRoot","svg");},createRoot:function(suffix){return this.nodeFactory(this.container.id+suffix,"g");},createDefs:function(){var defs=this.nodeFactory(this.container.id+"_defs","defs");this.rendererRoot.appendChild(defs);return defs;},drawPoint:function(node,geometry){return this.drawCircle(node,geometry,1);},drawCircle:function(node,geome [...]
-d.push("z");node.setAttributeNS(null,"d",d.join(" "));node.setAttributeNS(null,"fill-rule","evenodd");return node;},drawRectangle:function(node,geometry){node.setAttributeNS(null,"x",geometry.x);node.setAttributeNS(null,"y",-geometry.y);node.setAttributeNS(null,"width",geometry.width);node.setAttributeNS(null,"height",geometry.height);return node;},drawSurface:function(node,geometry){var d=[];var draw=true;for(var i=0,len=geometry.components.length;i<len;i++){if((i%3)==0&&(i/3)==0){var c [...]
-d.push("Z");node.setAttributeNS(null,"d",d.join(" "));return node;},drawText:function(featureId,style,location){var g=OpenLayers.Renderer.NG.prototype.drawText.apply(this,arguments);var text=g.firstChild||this.nodeFactory(featureId+this.LABEL_ID_SUFFIX+"_text","text");var res=this.getResolution();text.setAttributeNS(null,"x",location.x/res);text.setAttributeNS(null,"y",-location.y/res);g.setAttributeNS(null,"transform","scale("+res+")");if(style.fontColor){text.setAttributeNS(null,"fill" [...]
-if(style.fontOpacity){text.setAttributeNS(null,"opacity",style.fontOpacity);}
-if(style.fontFamily){text.setAttributeNS(null,"font-family",style.fontFamily);}
-if(style.fontSize){text.setAttributeNS(null,"font-size",style.fontSize);}
-if(style.fontWeight){text.setAttributeNS(null,"font-weight",style.fontWeight);}
-if(style.fontStyle){text.setAttributeNS(null,"font-style",style.fontStyle);}
-if(style.labelSelect===true){text.setAttributeNS(null,"pointer-events","visible");text._featureId=featureId;}else{text.setAttributeNS(null,"pointer-events","none");}
-var align=style.labelAlign||"cm";text.setAttributeNS(null,"text-anchor",OpenLayers.Renderer.SVG2.LABEL_ALIGN[align[0]]||"middle");if(OpenLayers.IS_GECKO===true){text.setAttributeNS(null,"dominant-baseline",OpenLayers.Renderer.SVG2.LABEL_ALIGN[align[1]]||"central");}
-var labelRows=style.label.split('\n');var numRows=labelRows.length;while(text.childNodes.length>numRows){text.removeChild(text.lastChild);}
-for(var i=0;i<numRows;i++){var tspan=text.childNodes[i]||this.nodeFactory(featureId+this.LABEL_ID_SUFFIX+"_tspan_"+i,"tspan");if(style.labelSelect===true){tspan._featureId=featureId;}
-if(OpenLayers.IS_GECKO===false){tspan.setAttributeNS(null,"baseline-shift",OpenLayers.Renderer.SVG2.LABEL_VSHIFT[align[1]]||"-35%");}
-tspan.setAttribute("x",location.x/res);if(i==0){var vfactor=OpenLayers.Renderer.SVG2.LABEL_VFACTOR[align[1]];if(vfactor==null){vfactor=-.5;}
-tspan.setAttribute("dy",(vfactor*(numRows-1))+"em");}else{tspan.setAttribute("dy","1em");}
-tspan.textContent=(labelRows[i]==='')?' ':labelRows[i];if(!tspan.parentNode){text.appendChild(tspan);}}
-if(!text.parentNode){g.appendChild(text);}
-return g;},getComponentsString:function(components,separator){var len=components.length;var strings=new Array(len);for(var i=0;i<len;i++){strings[i]=this.getShortString(components[i]);}
-return strings.join(separator||",");},getShortString:function(point){return point.x+","+(-point.y);},importSymbol:function(graphicName){if(!this.defs){this.defs=this.createDefs();}
-var id=this.container.id+"-"+graphicName;var existing=document.getElementById(id);if(existing!=null){return existing;}
-var symbol=OpenLayers.Renderer.symbol[graphicName];if(!symbol){throw new Error(graphicName+' is not a valid symbol name');}
-var symbolNode=this.nodeFactory(id,"symbol");var node=this.nodeFactory(null,"polygon");symbolNode.appendChild(node);var symbolExtent=new OpenLayers.Bounds(Number.MAX_VALUE,Number.MAX_VALUE,0,0);var points=[];var x,y;for(var i=0,len=symbol.length;i<len;i=i+2){x=symbol[i];y=symbol[i+1];symbolExtent.left=Math.min(symbolExtent.left,x);symbolExtent.bottom=Math.min(symbolExtent.bottom,y);symbolExtent.right=Math.max(symbolExtent.right,x);symbolExtent.top=Math.max(symbolExtent.top,y);points.push [...]
-node.setAttributeNS(null,"points",points.join(" "));var width=symbolExtent.getWidth();var height=symbolExtent.getHeight();var viewBox=[symbolExtent.left-width,symbolExtent.bottom-height,width*3,height*3];symbolNode.setAttributeNS(null,"viewBox",viewBox.join(" "));this.symbolMetrics[id]={size:Math.max(width,height),x:symbolExtent.getCenterLonLat().lon,y:symbolExtent.getCenterLonLat().lat};this.defs.appendChild(symbolNode);return symbolNode;},getFeatureIdFromEvent:function(evt){var feature [...]
-return featureId;},CLASS_NAME:"OpenLayers.Renderer.SVG2"});OpenLayers.Renderer.SVG2.LABEL_ALIGN={"l":"start","r":"end","b":"bottom","t":"hanging"};OpenLayers.Renderer.SVG2.LABEL_VSHIFT={"t":"-70%","b":"0"};OpenLayers.Renderer.SVG2.LABEL_VFACTOR={"t":0,"b":-1};OpenLayers.Renderer.SVG2.preventDefault=function(e){e.preventDefault&&e.preventDefault();};OpenLayers.Kinetic=OpenLayers.Class({threshold:0,interval:10,deceleration:0.0035,nbPoints:100,delay:200,points:undefined,timerId:undefined,in [...]
-last=point;}
-if(!last){return;}
-var time=new Date().getTime()-last.tick;var dist=Math.sqrt(Math.pow(xy.x-last.xy.x,2)+
-Math.pow(xy.y-last.xy.y,2));var speed=dist/time;if(speed==0||speed<this.threshold){return;}
-var theta=Math.asin((xy.y-last.xy.y)/dist);if(last.xy.x<=xy.x){theta=Math.PI-theta;}
-return{speed:speed,theta:theta};},move:function(info,callback){var v0=info.speed;var fx=Math.cos(info.theta);var fy=-Math.sin(info.theta);var time=0;var initialTime=new Date().getTime();var lastX=0;var lastY=0;var timerCallback=function(){if(this.timerId==null){return;}
-time+=this.interval;var realTime=new Date().getTime()-initialTime;var t=(time+realTime)/2.0;var p=(-this.deceleration*Math.pow(t,2))/2.0+v0*t;var x=p*fx;var y=p*fy;var args={};args.end=false;var v=-this.deceleration*t+v0;if(v<=0){clearInterval(this.timerId);this.timerId=null;args.end=true;}
-args.x=x-lastX;args.y=y-lastY;lastX=x;lastY=y;callback(args.x,args.y,args.end);};this.timerId=window.setInterval(OpenLayers.Function.bind(timerCallback,this),this.interval);},CLASS_NAME:"OpenLayers.Kinetic"});OpenLayers.ProxyHost="";OpenLayers.nullHandler=function(request){OpenLayers.Console.userError(OpenLayers.i18n("unhandledRequest",{'statusText':request.statusText}));};OpenLayers.loadURL=function(uri,params,caller,onComplete,onFailure){if(typeof params=='string'){params=OpenLayers.Ut [...]
-var success=(onComplete)?onComplete:OpenLayers.nullHandler;var failure=(onFailure)?onFailure:OpenLayers.nullHandler;return OpenLayers.Request.GET({url:uri,params:params,success:success,failure:failure,scope:caller});};OpenLayers.parseXMLString=function(text){var index=text.indexOf('<');if(index>0){text=text.substring(index);}
-var ajaxResponse=OpenLayers.Util.Try(function(){var xmldom=new ActiveXObject('Microsoft.XMLDOM');xmldom.loadXML(text);return xmldom;},function(){return new DOMParser().parseFromString(text,'text/xml');},function(){var req=new XMLHttpRequest();req.open("GET","data:"+"text/xml"+";charset=utf-8,"+encodeURIComponent(text),false);if(req.overrideMimeType){req.overrideMimeType("text/xml");}
-req.send(null);return req.responseXML;});return ajaxResponse;};OpenLayers.Ajax={emptyFunction:function(){},getTransport:function(){return OpenLayers.Util.Try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject('Msxml2.XMLHTTP');},function(){return new ActiveXObject('Microsoft.XMLHTTP');})||false;},activeRequestCount:0};OpenLayers.Ajax.Responders={responders:[],register:function(responderToAdd){for(var i=0;i<this.responders.length;i++){if(responderToAdd==this.resp [...]
-this.responders.push(responderToAdd);},unregister:function(responderToRemove){OpenLayers.Util.removeItem(this.reponders,responderToRemove);},dispatch:function(callback,request,transport){var responder;for(var i=0;i<this.responders.length;i++){responder=this.responders[i];if(responder[callback]&&typeof responder[callback]=='function'){try{responder[callback].apply(responder,[request,transport]);}catch(e){}}}}};OpenLayers.Ajax.Responders.register({onCreate:function(){OpenLayers.Ajax.active [...]
-this.transport=OpenLayers.Ajax.getTransport();this.request(url);},request:function(url){this.url=url;this.method=this.options.method;var params=OpenLayers.Util.extend({},this.options.parameters);if(this.method!='get'&&this.method!='post'){params['_method']=this.method;this.method='post';}
-this.parameters=params;if(params=OpenLayers.Util.getParameterString(params)){if(this.method=='get'){this.url+=((this.url.indexOf('?')>-1)?'&':'?')+params;}else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){params+='&_=';}}
-try{var response=new OpenLayers.Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(response);}
-OpenLayers.Ajax.Responders.dispatch('onCreate',this,response);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){window.setTimeout(OpenLayers.Function.bind(this.respondToReadyState,this,1),10);}
-this.transport.onreadystatechange=OpenLayers.Function.bind(this.onStateChange,this);this.setRequestHeaders();this.body=this.method=='post'?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange();}}catch(e){this.dispatchException(e);}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete)){this.respondToReadyState(this.transport.r [...]
-(this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){headers['Connection']='close';}}
-if(typeof this.options.requestHeaders=='object'){var extras=this.options.requestHeaders;if(typeof extras.push=='function'){for(var i=0,length=extras.length;i<length;i+=2){headers[extras[i]]=extras[i+1];}}else{for(var i in extras){headers[i]=extras[i];}}}
-for(var name in headers){this.transport.setRequestHeader(name,headers[name]);}},success:function(){var status=this.getStatus();return!status||(status>=200&&status<300);},getStatus:function(){try{return this.transport.status||0;}catch(e){return 0;}},respondToReadyState:function(readyState){var state=OpenLayers.Ajax.Request.Events[readyState];var response=new OpenLayers.Ajax.Response(this);if(state=='Complete'){try{this._complete=true;(this.options['on'+response.status]||this.options['on'+ [...]
-var contentType=response.getHeader('Content-type');}
-try{(this.options['on'+state]||OpenLayers.Ajax.emptyFunction)(response);OpenLayers.Ajax.Responders.dispatch('on'+state,this,response);}catch(e){this.dispatchException(e);}
-if(state=='Complete'){this.transport.onreadystatechange=OpenLayers.Ajax.emptyFunction;}},getHeader:function(name){try{return this.transport.getResponseHeader(name);}catch(e){return null;}},dispatchException:function(exception){var handler=this.options.onException;if(handler){handler(this,exception);OpenLayers.Ajax.Responders.dispatch('onException',this,exception);}else{var listener=false;var responders=OpenLayers.Ajax.Responders.responders;for(var i=0;i<responders.length;i++){if(responde [...]
-if(listener){OpenLayers.Ajax.Responders.dispatch('onException',this,exception);}else{throw exception;}}}});OpenLayers.Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];OpenLayers.Ajax.Response=OpenLayers.Class({status:0,statusText:'',initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if((readyState>2&&!(!!(window.attachEvent&&!window.opera)))||readyState==4){this. [...]
-if(readyState==4){var xml=transport.responseXML;this.responseXML=xml===undefined?null:xml;}},getStatus:OpenLayers.Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||'';}catch(e){return'';}},getHeader:OpenLayers.Ajax.Request.prototype.getHeader,getResponseHeader:function(name){return this.transport.getResponseHeader(name);}});OpenLayers.Ajax.getElementsByTagNameNS=function(parentnode,nsuri,nsprefix,tagname){var elem=null;if(parentnode.getElemen [...]
-return elem;};OpenLayers.Ajax.serializeXMLToString=function(xmldom){var serializer=new XMLSerializer();var data=serializer.serializeToString(xmldom);return data;};OpenLayers.Layer.GeoRSS=OpenLayers.Class(OpenLayers.Layer.Markers,{location:null,features:null,formatOptions:null,selectedFeature:null,icon:null,popupSize:null,useFeedTitle:true,initialize:function(name,location,options){OpenLayers.Layer.Markers.prototype.initialize.apply(this,[name,options]);this.location=location;this.feature [...]
-if(this.useFeedTitle){var name=null;try{name=doc.getElementsByTagNameNS('*','title')[0].firstChild.nodeValue;}
-catch(e){name=doc.getElementsByTagName('title')[0].firstChild.nodeValue;}
-if(name){this.setName(name);}}
-var options={};OpenLayers.Util.extend(options,this.formatOptions);if(this.map&&!this.projection.equals(this.map.getProjectionObject())){options.externalProjection=this.projection;options.internalProjection=this.map.getProjectionObject();}
-var format=new OpenLayers.Format.GeoRSS(options);var features=format.read(doc);for(var i=0,len=features.length;i<len;i++){var data={};var feature=features[i];if(!feature.geometry){continue;}
-var title=feature.attributes.title?feature.attributes.title:"Untitled";var description=feature.attributes.description?feature.attributes.description:"No description.";var link=feature.attributes.link?feature.attributes.link:"";var location=feature.geometry.getBounds().getCenterLonLat();data.icon=this.icon==null?OpenLayers.Marker.defaultIcon():this.icon.clone();data.popupSize=this.popupSize?this.popupSize.clone():new OpenLayers.Size(250,120);if(title||description){data.title=title;data.de [...]
-contentHTML+=title;if(link){contentHTML+='</a>';}
-contentHTML+='</div>';contentHTML+='<div style="" class="olLayerGeoRSSDescription">';contentHTML+=description;contentHTML+='</div>';data['popupContentHTML']=contentHTML;}
-var feature=new OpenLayers.Feature(this,location,data);this.features.push(feature);var marker=feature.createMarker();marker.events.register('click',feature,this.markerClick);this.addMarker(marker);}
-this.events.triggerEvent("loadend");},markerClick:function(evt){var sameMarkerClicked=(this==this.layer.selectedFeature);this.layer.selectedFeature=(!sameMarkerClicked)?this:null;for(var i=0,len=this.layer.map.popups.length;i<len;i++){this.layer.map.removePopup(this.layer.map.popups[i]);}
-if(!sameMarkerClicked){var popup=this.createPopup();OpenLayers.Event.observe(popup.div,"click",OpenLayers.Function.bind(function(){for(var i=0,len=this.layer.map.popups.length;i<len;i++){this.layer.map.removePopup(this.layer.map.popups[i]);}},this));this.layer.map.addPopup(popup);}
-OpenLayers.Event.stop(evt);},clearFeatures:function(){if(this.features!=null){while(this.features.length>0){var feature=this.features[0];OpenLayers.Util.removeItem(this.features,feature);feature.destroy();}}},CLASS_NAME:"OpenLayers.Layer.GeoRSS"});OpenLayers.Format.SLD.v1=OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0,{namespaces:{sld:"http://www.opengis.net/sld",ogc:"http://www.opengis.net/ogc",gml:"http://www.opengis.net/gml",xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.or [...]
-if(OpenLayers.Util.isArray(sld.namedLayers)){sld.namedLayers.push(layer);}else{sld.namedLayers[layer.name]=layer;}},"NamedStyle":function(node,layer){layer.namedStyles.push(this.getChildName(node.firstChild));},"UserStyle":function(node,layer){var obj={defaultsPerSymbolizer:true,rules:[]};this.featureTypeCounter=-1;this.readChildNodes(node,obj);var style;if(this.multipleSymbolizers){delete obj.defaultsPerSymbolizer;style=new OpenLayers.Style2(obj);}else{style=new OpenLayers.Style(this.de [...]
-layer.userStyles.push(style);},"IsDefault":function(node,style){if(this.getChildValue(node)=="1"){style.isDefault=true;}},"FeatureTypeStyle":function(node,style){++this.featureTypeCounter;var obj={rules:this.multipleSymbolizers?style.rules:[]};this.readChildNodes(node,obj);if(!this.multipleSymbolizers){style.rules=obj.rules;}},"Rule":function(node,obj){var config;if(this.multipleSymbolizers){config={symbolizers:[]};}
-var rule=new OpenLayers.Rule(config);this.readChildNodes(node,rule);obj.rules.push(rule);},"ElseFilter":function(node,rule){rule.elseFilter=true;},"MinScaleDenominator":function(node,rule){rule.minScaleDenominator=parseFloat(this.getChildValue(node));},"MaxScaleDenominator":function(node,rule){rule.maxScaleDenominator=parseFloat(this.getChildValue(node));},"TextSymbolizer":function(node,rule){var config={};this.readChildNodes(node,config);if(this.multipleSymbolizers){config.zIndex=this.f [...]
-this.readChildNodes(node,config);if(this.multipleSymbolizers){config.zIndex=this.featureTypeCounter;rule.symbolizers.push(new OpenLayers.Symbolizer.Polygon(config));}else{rule.symbolizer["Polygon"]=config;}},"PointSymbolizer":function(node,rule){var config={fill:false,stroke:false,graphic:false};if(!this.multipleSymbolizers){config=rule.symbolizer["Point"]||config;}
-this.readChildNodes(node,config);if(this.multipleSymbolizers){config.zIndex=this.featureTypeCounter;rule.symbolizers.push(new OpenLayers.Symbolizer.Point(config));}else{rule.symbolizer["Point"]=config;}},"Stroke":function(node,symbolizer){symbolizer.stroke=true;this.readChildNodes(node,symbolizer);},"Fill":function(node,symbolizer){symbolizer.fill=true;this.readChildNodes(node,symbolizer);},"CssParameter":function(node,symbolizer){var cssProperty=node.getAttribute("name");var symProperty [...]
-if(graphic.opacity!=undefined){symbolizer.graphicOpacity=graphic.opacity;}
-if(graphic.size!=undefined){symbolizer.pointRadius=graphic.size/2;}
-if(graphic.href!=undefined){symbolizer.externalGraphic=graphic.href;}
-if(graphic.rotation!=undefined){symbolizer.rotation=graphic.rotation;}},"ExternalGraphic":function(node,graphic){this.readChildNodes(node,graphic);},"Mark":function(node,graphic){this.readChildNodes(node,graphic);},"WellKnownName":function(node,graphic){graphic.graphicName=this.getChildValue(node);},"Opacity":function(node,obj){var opacity=this.readOgcExpression(node);if(opacity){obj.opacity=opacity;}},"Size":function(node,obj){var size=this.readOgcExpression(node);if(size){obj.size=size [...]
-return css;},getGraphicFormat:function(href){var format,regex;for(var key in this.graphicFormats){if(this.graphicFormats[key].test(href)){format=key;break;}}
-return format||this.defautlGraphicFormat;},defaultGraphicFormat:"image/png",graphicFormats:{"image/jpeg":/\.jpe?g$/i,"image/gif":/\.gif$/i,"image/png":/\.png$/i},write:function(sld){return this.writers.sld.StyledLayerDescriptor.apply(this,[sld]);},writers:OpenLayers.Util.applyDefaults({"sld":{"StyledLayerDescriptor":function(sld){var root=this.createElementNSPlus("sld:StyledLayerDescriptor",{attributes:{"version":this.VERSION,"xsi:schemaLocation":this.schemaLocation}});root.setAttribute( [...]
-if(sld.title){this.writeNode("Title",sld.title,root);}
-if(sld.description){this.writeNode("Abstract",sld.description,root);}
-if(OpenLayers.Util.isArray(sld.namedLayers)){for(var i=0,len=sld.namedLayers.length;i<len;++i){this.writeNode("NamedLayer",sld.namedLayers[i],root);}}else{for(var name in sld.namedLayers){this.writeNode("NamedLayer",sld.namedLayers[name],root);}}
-return root;},"Name":function(name){return this.createElementNSPlus("sld:Name",{value:name});},"Title":function(title){return this.createElementNSPlus("sld:Title",{value:title});},"Abstract":function(description){return this.createElementNSPlus("sld:Abstract",{value:description});},"NamedLayer":function(layer){var node=this.createElementNSPlus("sld:NamedLayer");this.writeNode("Name",layer.name,node);if(layer.namedStyles){for(var i=0,len=layer.namedStyles.length;i<len;++i){this.writeNode( [...]
-if(layer.userStyles){for(var i=0,len=layer.userStyles.length;i<len;++i){this.writeNode("UserStyle",layer.userStyles[i],node);}}
-return node;},"NamedStyle":function(name){var node=this.createElementNSPlus("sld:NamedStyle");this.writeNode("Name",name,node);return node;},"UserStyle":function(style){var node=this.createElementNSPlus("sld:UserStyle");if(style.name){this.writeNode("Name",style.name,node);}
-if(style.title){this.writeNode("Title",style.title,node);}
-if(style.description){this.writeNode("Abstract",style.description,node);}
-if(style.isDefault){this.writeNode("IsDefault",style.isDefault,node);}
-if(this.multipleSymbolizers&&style.rules){var rulesByZ={0:[]};var zValues=[0];var rule,ruleMap,symbolizer,zIndex,clone;for(var i=0,ii=style.rules.length;i<ii;++i){rule=style.rules[i];if(rule.symbolizers){ruleMap={};for(var j=0,jj=rule.symbolizers.length;j<jj;++j){symbolizer=rule.symbolizers[j];zIndex=symbolizer.zIndex;if(!(zIndex in ruleMap)){clone=rule.clone();clone.symbolizers=[];ruleMap[zIndex]=clone;}
-ruleMap[zIndex].symbolizers.push(symbolizer.clone());}
-for(zIndex in ruleMap){if(!(zIndex in rulesByZ)){zValues.push(zIndex);rulesByZ[zIndex]=[];}
-rulesByZ[zIndex].push(ruleMap[zIndex]);}}else{rulesByZ[0].push(rule.clone());}}
-zValues.sort();var rules;for(var i=0,ii=zValues.length;i<ii;++i){rules=rulesByZ[zValues[i]];if(rules.length>0){clone=style.clone();clone.rules=rulesByZ[zValues[i]];this.writeNode("FeatureTypeStyle",clone,node);}}}else{this.writeNode("FeatureTypeStyle",style,node);}
-return node;},"IsDefault":function(bool){return this.createElementNSPlus("sld:IsDefault",{value:(bool)?"1":"0"});},"FeatureTypeStyle":function(style){var node=this.createElementNSPlus("sld:FeatureTypeStyle");for(var i=0,len=style.rules.length;i<len;++i){this.writeNode("Rule",style.rules[i],node);}
-return node;},"Rule":function(rule){var node=this.createElementNSPlus("sld:Rule");if(rule.name){this.writeNode("Name",rule.name,node);}
-if(rule.title){this.writeNode("Title",rule.title,node);}
-if(rule.description){this.writeNode("Abstract",rule.description,node);}
-if(rule.elseFilter){this.writeNode("ElseFilter",null,node);}else if(rule.filter){this.writeNode("ogc:Filter",rule.filter,node);}
-if(rule.minScaleDenominator!=undefined){this.writeNode("MinScaleDenominator",rule.minScaleDenominator,node);}
-if(rule.maxScaleDenominator!=undefined){this.writeNode("MaxScaleDenominator",rule.maxScaleDenominator,node);}
-var type,symbolizer;if(this.multipleSymbolizers&&rule.symbolizers){var symbolizer;for(var i=0,ii=rule.symbolizers.length;i<ii;++i){symbolizer=rule.symbolizers[i];type=symbolizer.CLASS_NAME.split(".").pop();this.writeNode(type+"Symbolizer",symbolizer,node);}}else{var types=OpenLayers.Style.SYMBOLIZER_PREFIXES;for(var i=0,len=types.length;i<len;++i){type=types[i];symbolizer=rule.symbolizer[type];if(symbolizer){this.writeNode(type+"Symbolizer",symbolizer,node);}}}
-return node;},"ElseFilter":function(){return this.createElementNSPlus("sld:ElseFilter");},"MinScaleDenominator":function(scale){return this.createElementNSPlus("sld:MinScaleDenominator",{value:scale});},"MaxScaleDenominator":function(scale){return this.createElementNSPlus("sld:MaxScaleDenominator",{value:scale});},"LineSymbolizer":function(symbolizer){var node=this.createElementNSPlus("sld:LineSymbolizer");this.writeNode("Stroke",symbolizer,node);return node;},"Stroke":function(symbolize [...]
-if(symbolizer.strokeOpacity!=undefined){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"strokeOpacity"},node);}
-if(symbolizer.strokeWidth!=undefined){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"strokeWidth"},node);}
-if(symbolizer.strokeDashstyle!=undefined&&symbolizer.strokeDashstyle!=="solid"){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"strokeDashstyle"},node);}
-if(symbolizer.strokeLinecap!=undefined){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"strokeLinecap"},node);}
-return node;},"CssParameter":function(obj){return this.createElementNSPlus("sld:CssParameter",{attributes:{name:this.getCssProperty(obj.key)},value:obj.symbolizer[obj.key]});},"TextSymbolizer":function(symbolizer){var node=this.createElementNSPlus("sld:TextSymbolizer");if(symbolizer.label!=null){this.writeNode("Label",symbolizer.label,node);}
-if(symbolizer.fontFamily!=null||symbolizer.fontSize!=null||symbolizer.fontWeight!=null||symbolizer.fontStyle!=null){this.writeNode("Font",symbolizer,node);}
-if(symbolizer.haloRadius!=null||symbolizer.haloColor!=null||symbolizer.haloOpacity!=null){this.writeNode("Halo",symbolizer,node);}
-if(symbolizer.fillColor!=null||symbolizer.fillOpacity!=null){this.writeNode("Fill",symbolizer,node);}
-return node;},"Font":function(symbolizer){var node=this.createElementNSPlus("sld:Font");if(symbolizer.fontFamily){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"fontFamily"},node);}
-if(symbolizer.fontSize){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"fontSize"},node);}
-if(symbolizer.fontWeight){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"fontWeight"},node);}
-if(symbolizer.fontStyle){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"fontStyle"},node);}
-return node;},"Label":function(label){var node=this.createElementNSPlus("sld:Label");var tokens=label.split("${");node.appendChild(this.createTextNode(tokens[0]));var item,last;for(var i=1,len=tokens.length;i<len;i++){item=tokens[i];last=item.indexOf("}");if(last>0){this.writeNode("ogc:PropertyName",{property:item.substring(0,last)},node);node.appendChild(this.createTextNode(item.substring(++last)));}else{node.appendChild(this.createTextNode("${"+item));}}
-return node;},"Halo":function(symbolizer){var node=this.createElementNSPlus("sld:Halo");if(symbolizer.haloRadius){this.writeNode("Radius",symbolizer.haloRadius,node);}
-if(symbolizer.haloColor||symbolizer.haloOpacity){this.writeNode("Fill",{fillColor:symbolizer.haloColor,fillOpacity:symbolizer.haloOpacity},node);}
-return node;},"Radius":function(value){return this.createElementNSPlus("sld:Radius",{value:value});},"RasterSymbolizer":function(symbolizer){var node=this.createElementNSPlus("sld:RasterSymbolizer");if(symbolizer.geometry){this.writeNode("Geometry",symbolizer.geometry,node);}
-if(symbolizer.opacity){this.writeNode("Opacity",symbolizer.opacity,node);}
-if(symbolizer.colorMap){this.writeNode("ColorMap",symbolizer.colorMap,node);}
-return node;},"Geometry":function(geometry){var node=this.createElementNSPlus("sld:Geometry");if(geometry.property){this.writeNode("ogc:PropertyName",geometry,node);}
-return node;},"ColorMap":function(colorMap){var node=this.createElementNSPlus("sld:ColorMap");for(var i=0,len=colorMap.length;i<len;++i){this.writeNode("ColorMapEntry",colorMap[i],node);}
-return node;},"ColorMapEntry":function(colorMapEntry){var node=this.createElementNSPlus("sld:ColorMapEntry");var a=colorMapEntry;node.setAttribute("color",a.color);a.opacity!==undefined&&node.setAttribute("opacity",parseFloat(a.opacity));a.quantity!==undefined&&node.setAttribute("quantity",parseFloat(a.quantity));a.label!==undefined&&node.setAttribute("label",a.label);return node;},"PolygonSymbolizer":function(symbolizer){var node=this.createElementNSPlus("sld:PolygonSymbolizer");if(symb [...]
-if(symbolizer.stroke!==false){this.writeNode("Stroke",symbolizer,node);}
-return node;},"Fill":function(symbolizer){var node=this.createElementNSPlus("sld:Fill");if(symbolizer.fillColor){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"fillColor"},node);}
-if(symbolizer.fillOpacity!=null){this.writeNode("CssParameter",{symbolizer:symbolizer,key:"fillOpacity"},node);}
-return node;},"PointSymbolizer":function(symbolizer){var node=this.createElementNSPlus("sld:PointSymbolizer");this.writeNode("Graphic",symbolizer,node);return node;},"Graphic":function(symbolizer){var node=this.createElementNSPlus("sld:Graphic");if(symbolizer.externalGraphic!=undefined){this.writeNode("ExternalGraphic",symbolizer,node);}else{this.writeNode("Mark",symbolizer,node);}
-if(symbolizer.graphicOpacity!=undefined){this.writeNode("Opacity",symbolizer.graphicOpacity,node);}
-if(symbolizer.pointRadius!=undefined){this.writeNode("Size",symbolizer.pointRadius*2,node);}
-if(symbolizer.rotation!=undefined){this.writeNode("Rotation",symbolizer.rotation,node);}
-return node;},"ExternalGraphic":function(symbolizer){var node=this.createElementNSPlus("sld:ExternalGraphic");this.writeNode("OnlineResource",symbolizer.externalGraphic,node);var format=symbolizer.graphicFormat||this.getGraphicFormat(symbolizer.externalGraphic);this.writeNode("Format",format,node);return node;},"Mark":function(symbolizer){var node=this.createElementNSPlus("sld:Mark");if(symbolizer.graphicName){this.writeNode("WellKnownName",symbolizer.graphicName,node);}
-if(symbolizer.fill!==false){this.writeNode("Fill",symbolizer,node);}
-if(symbolizer.stroke!==false){this.writeNode("Stroke",symbolizer,node);}
-return node;},"WellKnownName":function(name){return this.createElementNSPlus("sld:WellKnownName",{value:name});},"Opacity":function(value){return this.createElementNSPlus("sld:Opacity",{value:value});},"Size":function(value){return this.createElementNSPlus("sld:Size",{value:value});},"Rotation":function(value){return this.createElementNSPlus("sld:Rotation",{value:value});},"OnlineResource":function(href){return this.createElementNSPlus("sld:OnlineResource",{attributes:{"xlink:type":"simp [...]
-layerContext.srs[this.getChildValue(node)]=true;},write_wmc_Layer:function(context){var node=OpenLayers.Format.WMC.v1.prototype.write_wmc_Layer.apply(this,[context]);if(context.maxScale){var minSD=this.createElementNS(this.namespaces.sld,"sld:MinScaleDenominator");minSD.appendChild(this.createTextNode(context.maxScale.toPrecision(16)));node.appendChild(minSD);}
-if(context.minScale){var maxSD=this.createElementNS(this.namespaces.sld,"sld:MaxScaleDenominator");maxSD.appendChild(this.createTextNode(context.minScale.toPrecision(16)));node.appendChild(maxSD);}
-if(context.srs){for(var name in context.srs){node.appendChild(this.createElementDefaultNS("SRS",name));}}
-node.appendChild(this.write_wmc_FormatList(context));node.appendChild(this.write_wmc_StyleList(context));if(context.dimensions){node.appendChild(this.write_wmc_DimensionList(context));}
-node.appendChild(this.write_wmc_LayerExtension(context));return node;},CLASS_NAME:"OpenLayers.Format.WMC.v1_1_0"});OpenLayers.Format.XLS.v1_1_0=OpenLayers.Class(OpenLayers.Format.XLS.v1,{VERSION:"1.1",schemaLocation:"http://www.opengis.net/xls http://schemas.opengis.net/ols/1.1.0/LocationUtilityService.xsd",initialize:function(options){OpenLayers.Format.XLS.v1.prototype.initialize.apply(this,[options]);},CLASS_NAME:"OpenLayers.Format.XLS.v1_1_0"});OpenLayers.Format.XLS.v1_1=OpenLayers.Fo [...]
-OpenLayers.Renderer.Elements.prototype.initialize.apply(this,arguments);this.translationParameters={x:0,y:0};this.symbolMetrics={};},supported:function(){var svgFeature="http://www.w3.org/TR/SVG11/feature#";return(document.implementation&&(document.implementation.hasFeature("org.w3c.svg","1.0")||document.implementation.hasFeature(svgFeature+"SVG","1.1")||document.implementation.hasFeature(svgFeature+"BasicStructure","1.1")));},inValidRange:function(x,y,xyOnly){var left=x+(xyOnly?0:this.t [...]
-return inRange;}},translate:function(x,y){if(!this.inValidRange(x,y,true)){return false;}else{var transformString="";if(x||y){transformString="translate("+x+","+y+")";}
-this.root.setAttributeNS(null,"transform",transformString);this.translationParameters={x:x,y:y};return true;}},setSize:function(size){OpenLayers.Renderer.prototype.setSize.apply(this,arguments);this.rendererRoot.setAttributeNS(null,"width",this.size.w);this.rendererRoot.setAttributeNS(null,"height",this.size.h);},getNodeType:function(geometry,style){var nodeType=null;switch(geometry.CLASS_NAME){case"OpenLayers.Geometry.Point":if(style.externalGraphic){nodeType="image";}else if(this.isCom [...]
-break;case"OpenLayers.Geometry.Rectangle":nodeType="rect";break;case"OpenLayers.Geometry.LineString":nodeType="polyline";break;case"OpenLayers.Geometry.LinearRing":nodeType="polygon";break;case"OpenLayers.Geometry.Polygon":case"OpenLayers.Geometry.Curve":case"OpenLayers.Geometry.Surface":nodeType="path";break;default:break;}
-return nodeType;},setStyle:function(node,style,options){style=style||node._style;options=options||node._options;var r=parseFloat(node.getAttributeNS(null,"r"));var widthFactor=1;var pos;if(node._geometryClass=="OpenLayers.Geometry.Point"&&r){node.style.visibility="";if(style.graphic===false){node.style.visibility="hidden";}else if(style.externalGraphic){pos=this.getPosition(node);if(style.graphicTitle){node.setAttributeNS(null,"title",style.graphicTitle);var label=this.nodeFactory(null," [...]
-if(style.graphicWidth&&style.graphicHeight){node.setAttributeNS(null,"preserveAspectRatio","none");}
-var width=style.graphicWidth||style.graphicHeight;var height=style.graphicHeight||style.graphicWidth;width=width?width:style.pointRadius*2;height=height?height:style.pointRadius*2;var xOffset=(style.graphicXOffset!=undefined)?style.graphicXOffset:-(0.5*width);var yOffset=(style.graphicYOffset!=undefined)?style.graphicYOffset:-(0.5*height);var opacity=style.graphicOpacity||style.fillOpacity;node.setAttributeNS(null,"x",(pos.x+xOffset).toFixed());node.setAttributeNS(null,"y",(pos.y+yOffset [...]
-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);node.setAttributeNS(null,"y",pos.y-offset);if(nextSibling){parent.insertBefore(node,nextSibling);}else if(parent){parent.appendChild(node);}}else{node.setAttributeNS(null,"r",style.pointRadius);}
-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[src.id];node.firstChild.setAttributeNS(null,"transform","rotate("
-+rotation+" "
-+metrics[1]+" "
-+metrics[2]+")");}}}
-if(options.isFilled){node.setAttributeNS(null,"fill",style.fillColor);node.setAttributeNS(null,"fill-opacity",style.fillOpacity);}else{node.setAttributeNS(null,"fill","none");}
-if(options.isStroked){node.setAttributeNS(null,"stroke",style.strokeColor);node.setAttributeNS(null,"stroke-opacity",style.strokeOpacity);node.setAttributeNS(null,"stroke-width",style.strokeWidth*widthFactor);node.setAttributeNS(null,"stroke-linecap",style.strokeLinecap||"round");node.setAttributeNS(null,"stroke-linejoin","round");style.strokeDashstyle&&node.setAttributeNS(null,"stroke-dasharray",this.dashStyle(style,widthFactor));}else{node.setAttributeNS(null,"stroke","none");}
-if(style.pointerEvents){node.setAttributeNS(null,"pointer-events",style.pointerEvents);}
-if(style.cursor!=null){node.setAttributeNS(null,"cursor",style.cursor);}
-return node;},dashStyle:function(style,widthFactor){var w=style.strokeWidth*widthFactor;var str=style.strokeDashstyle;switch(str){case'solid':return'none';case'dot':return[1,4*w].join();case'dash':return[4*w,4*w].join();case'dashdot':return[4*w,4*w,1,4*w].join();case'longdash':return[8*w,4*w].join();case'longdashdot':return[8*w,4*w,1,4*w].join();default:return OpenLayers.String.trim(str).replace(/\s+/g,",");}},createNode:function(type,id){var node=document.createElementNS(this.xmlns,type [...]
-return node;},nodeTypeCompare:function(node,type){return(type==node.nodeName);},createRenderRoot:function(){return this.nodeFactory(this.container.id+"_svgRoot","svg");},createRoot:function(suffix){return this.nodeFactory(this.container.id+suffix,"g");},createDefs:function(){var defs=this.nodeFactory(this.container.id+"_defs","defs");this.rendererRoot.appendChild(defs);return defs;},drawPoint:function(node,geometry){return this.drawCircle(node,geometry,1);},drawCircle:function(node,geome [...]
-d+=" z";if(draw){node.setAttributeNS(null,"d",d);node.setAttributeNS(null,"fill-rule","evenodd");return complete?node:null;}else{return false;}},drawRectangle:function(node,geometry){var resolution=this.getResolution();var x=(geometry.x/resolution+this.left);var y=(this.top-geometry.y/resolution);if(this.inValidRange(x,y)){node.setAttributeNS(null,"x",x);node.setAttributeNS(null,"y",y);node.setAttributeNS(null,"width",geometry.width/resolution);node.setAttributeNS(null,"height",geometry. [...]
-d="M "+component;}else if((i%3)==1){var component=this.getShortString(geometry.components[i]);if(!component){draw=false;}
-d+=" C "+component;}else{var component=this.getShortString(geometry.components[i]);if(!component){draw=false;}
-d+=" "+component;}}
-d+=" Z";if(draw){node.setAttributeNS(null,"d",d);return node;}else{return false;}},drawText:function(featureId,style,location){var resolution=this.getResolution();var x=(location.x/resolution+this.left);var y=(location.y/resolution-this.top);var label=this.nodeFactory(featureId+this.LABEL_ID_SUFFIX,"text");label.setAttributeNS(null,"x",x);label.setAttributeNS(null,"y",-y);if(style.fontColor){label.setAttributeNS(null,"fill",style.fontColor);}
-if(style.fontOpacity){label.setAttributeNS(null,"opacity",style.fontOpacity);}
-if(style.fontFamily){label.setAttributeNS(null,"font-family",style.fontFamily);}
-if(style.fontSize){label.setAttributeNS(null,"font-size",style.fontSize);}
-if(style.fontWeight){label.setAttributeNS(null,"font-weight",style.fontWeight);}
-if(style.fontStyle){label.setAttributeNS(null,"font-style",style.fontStyle);}
-if(style.labelSelect===true){label.setAttributeNS(null,"pointer-events","visible");label._featureId=featureId;}else{label.setAttributeNS(null,"pointer-events","none");}
-var align=style.labelAlign||"cm";label.setAttributeNS(null,"text-anchor",OpenLayers.Renderer.SVG.LABEL_ALIGN[align[0]]||"middle");if(OpenLayers.IS_GECKO===true){label.setAttributeNS(null,"dominant-baseline",OpenLayers.Renderer.SVG.LABEL_ALIGN[align[1]]||"central");}
-var labelRows=style.label.split('\n');var numRows=labelRows.length;while(label.childNodes.length>numRows){label.removeChild(label.lastChild);}
-for(var i=0;i<numRows;i++){var tspan=this.nodeFactory(featureId+this.LABEL_ID_SUFFIX+"_tspan_"+i,"tspan");if(style.labelSelect===true){tspan._featureId=featureId;tspan._geometry=location;tspan._geometryClass=location.CLASS_NAME;}
-if(OpenLayers.IS_GECKO===false){tspan.setAttributeNS(null,"baseline-shift",OpenLayers.Renderer.SVG.LABEL_VSHIFT[align[1]]||"-35%");}
-tspan.setAttribute("x",x);if(i==0){var vfactor=OpenLayers.Renderer.SVG.LABEL_VFACTOR[align[1]];if(vfactor==null){vfactor=-.5;}
-tspan.setAttribute("dy",(vfactor*(numRows-1))+"em");}else{tspan.setAttribute("dy","1em");}
-tspan.textContent=(labelRows[i]==='')?' ':labelRows[i];if(!tspan.parentNode){label.appendChild(tspan);}}
-if(!label.parentNode){this.textRoot.appendChild(label);}},getComponentsString:function(components,separator){var renderCmp=[];var complete=true;var len=components.length;var strings=[];var str,component;for(var i=0;i<len;i++){component=components[i];renderCmp.push(component);str=this.getShortString(component);if(str){strings.push(str);}else{if(i>0){if(this.getShortString(components[i-1])){strings.push(this.clipLine(components[i],components[i-1]));}}
-if(i<len-1){if(this.getShortString(components[i+1])){strings.push(this.clipLine(components[i],components[i+1]));}}
-complete=false;}}
-return{path:strings.join(separator||","),complete:complete};},clipLine:function(badComponent,goodComponent){if(goodComponent.equals(badComponent)){return"";}
-var resolution=this.getResolution();var maxX=this.MAX_PIXEL-this.translationParameters.x;var maxY=this.MAX_PIXEL-this.translationParameters.y;var x1=goodComponent.x/resolution+this.left;var y1=this.top-goodComponent.y/resolution;var x2=badComponent.x/resolution+this.left;var y2=this.top-badComponent.y/resolution;var k;if(x2<-maxX||x2>maxX){k=(y2-y1)/(x2-x1);x2=x2<0?-maxX:maxX;y2=y1+(x2-x1)*k;}
-if(y2<-maxY||y2>maxY){k=(x2-x1)/(y2-y1);y2=y2<0?-maxY:maxY;x2=x1+(y2-y1)*k;}
-return x2+","+y2;},getShortString:function(point){var resolution=this.getResolution();var x=(point.x/resolution+this.left);var y=(this.top-point.y/resolution);if(this.inValidRange(x,y)){return x+","+y;}else{return false;}},getPosition:function(node){return({x:parseFloat(node.getAttributeNS(null,"cx")),y:parseFloat(node.getAttributeNS(null,"cy"))});},importSymbol:function(graphicName){if(!this.defs){this.defs=this.createDefs();}
-var id=this.container.id+"-"+graphicName;var existing=document.getElementById(id)
-if(existing!=null){return existing;}
-var symbol=OpenLayers.Renderer.symbol[graphicName];if(!symbol){throw new Error(graphicName+' is not a valid symbol name');}
-var symbolNode=this.nodeFactory(id,"symbol");var node=this.nodeFactory(null,"polygon");symbolNode.appendChild(node);var symbolExtent=new OpenLayers.Bounds(Number.MAX_VALUE,Number.MAX_VALUE,0,0);var points=[];var x,y;for(var i=0;i<symbol.length;i=i+2){x=symbol[i];y=symbol[i+1];symbolExtent.left=Math.min(symbolExtent.left,x);symbolExtent.bottom=Math.min(symbolExtent.bottom,y);symbolExtent.right=Math.max(symbolExtent.right,x);symbolExtent.top=Math.max(symbolExtent.top,y);points.push(x,",",y);}
-node.setAttributeNS(null,"points",points.join(" "));var width=symbolExtent.getWidth();var height=symbolExtent.getHeight();var viewBox=[symbolExtent.left-width,symbolExtent.bottom-height,width*3,height*3];symbolNode.setAttributeNS(null,"viewBox",viewBox.join(" "));this.symbolMetrics[id]=[Math.max(width,height),symbolExtent.getCenterLonLat().lon,symbolExtent.getCenterLonLat().lat];this.defs.appendChild(symbolNode);return symbolNode;},getFeatureIdFromEvent:function(evt){var featureId=OpenLa [...]
-return featureId;},CLASS_NAME:"OpenLayers.Renderer.SVG"});OpenLayers.Renderer.SVG.LABEL_ALIGN={"l":"start","r":"end","b":"bottom","t":"hanging"};OpenLayers.Renderer.SVG.LABEL_VSHIFT={"t":"-70%","b":"0"};OpenLayers.Renderer.SVG.LABEL_VFACTOR={"t":0,"b":-1};OpenLayers.Renderer.SVG.preventDefault=function(e){e.preventDefault&&e.preventDefault();};OpenLayers.Format.SLD.v1_0_0=OpenLayers.Class(OpenLayers.Format.SLD.v1,{VERSION:"1.0.0",schemaLocation:"http://www.opengis.net/sld http://schemas. [...]
-return version;},toContext:function(obj){var context={};if(obj.CLASS_NAME=="OpenLayers.Map"){context.bounds=obj.getExtent();context.maxExtent=obj.maxExtent;context.projection=obj.projection;context.size=obj.getSize();context.layers=obj.layers;}
-return context;},CLASS_NAME:"OpenLayers.Format.OWSContext"});OpenLayers.Format.OWSContext.v0_3_1=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{owc:"http://www.opengis.net/ows-context",gml:"http://www.opengis.net/gml",kml:"http://www.opengis.net/kml/2.2",ogc:"http://www.opengis.net/ogc",ows:"http://www.opengis.net/ows",sld:"http://www.opengis.net/sld",xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.org/2001/XMLSchema-instance"},VERSION:"0.3.1",schemaLocation:"http://www.open [...]
-if(nTitle!=""){nPath.push(nTitle);}
-layerContext.metadata.nestingPath=nPath;if(layerContext.layersContext){this.setNestingPath(layerContext);}}}},decomposeNestingPath:function(nPath){var a=[];if(OpenLayers.Util.isArray(nPath)){var path=nPath.slice();while(path.length>0){a.push(path.slice());path.pop();}
-a.reverse();}
-return a;},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 context={};this.readNode(data,context);this.setNestingPath({layersContext:context.layersContext});var layers=[];this.processLayer(layers,context);delete context.layersContext;context.layersContext=layers;return context;},processLayer:function(layerArray,layer){if(layer.layersContext){for(var i=0,len=layer.layersContext.length;i<len;i++){var l=layer.layersContext[i];layerArray.push(l);if(l.layersContext){this.processLayer(layerArray,l);}}}},write:function(context,options){var name="OW [...]
-obj.layersContext.push(layerContext);this.readChildNodes(node,layerContext);},"InlineGeometry":function(node,obj){obj.features=[];var elements=this.getElementsByTagNameNS(node,this.namespaces.gml,"featureMember");var el;if(elements.length>=1){el=elements[0];}
-if(el&&el.firstChild){var featurenode=(el.firstChild.nextSibling)?el.firstChild.nextSibling:el.firstChild;this.setNamespace("feature",featurenode.namespaceURI);this.featureType=featurenode.localName||featurenode.nodeName.split(":").pop();this.readChildNodes(node,obj);}},"Server":function(node,obj){if((!obj.service&&!obj.version)||(obj.service!=OpenLayers.Format.Context.serviceTypes.WMS)){obj.service=node.getAttribute("service");obj.version=node.getAttribute("version");this.readChildNodes [...]
-return node;},"Server":function(options){var node=this.createElementNSPlus("Server",{attributes:{version:options.version,service:options.service}});this.writeNode("OnlineResource",options,node);return node;},"OnlineResource":function(options){var node=this.createElementNSPlus("OnlineResource",{attributes:{"xlink:href":options.url}});return node;},"InlineGeometry":function(layer){var node=this.createElementNSPlus("InlineGeometry");this.writeNode("gml:boundedBy",layer.getDataExtent(),node) [...]
-return node;},"StyleList":function(styles){var node=this.createElementNSPlus("StyleList");for(var i=0,len=styles.length;i<len;i++){this.writeNode("Style",styles[i],node);}
-return node;},"Style":function(style){var node=this.createElementNSPlus("Style");this.writeNode("Name",style,node);this.writeNode("Title",style,node);if(style.legend){this.writeNode("LegendURL",style,node);}
-return node;},"Name":function(obj){var node=this.createElementNSPlus("Name",{value:obj.name});return node;},"Title":function(obj){var node=this.createElementNSPlus("Title",{value:obj.title});return node;},"LegendURL":function(style){var node=this.createElementNSPlus("LegendURL");this.writeNode("OnlineResource",style.legend,node);return node;},"_WMS":function(layer){var node=this.createElementNSPlus("Layer",{attributes:{name:layer.params.LAYERS,queryable:layer.queryable?"1":"0",hidden:lay [...]
-return node;},"_Layer":function(options){var layer,subPaths,node,title;layer=options.layer;subPaths=options.subPaths;node=null;title=null;if(subPaths.length>0){var path=subPaths[0].join("/");var index=path.lastIndexOf("/");node=this.nestingLayerLookup[path];title=(index>0)?path.substring(index+1,path.length):path;if(!node){node=this.createElementNSPlus("Layer");this.writeNode("ows:Title",title,node);this.nestingLayerLookup[path]=node;}
-options.subPaths.shift();this.writeNode("_Layer",options,node);return node;}else{if(layer instanceof OpenLayers.Layer.WMS){node=this.writeNode("_WMS",layer);}else if(layer instanceof OpenLayers.Layer.Vector){if(layer.protocol instanceof OpenLayers.Protocol.WFS.v1){node=this.writeNode("_WFS",layer);}else if(layer.protocol instanceof OpenLayers.Protocol.HTTP){if(layer.protocol.format instanceof OpenLayers.Format.GML){layer.protocol.format.version="2.1.2";node=this.writeNode("_GML",layer);} [...]
-if(layer.options.maxScale){this.writeNode("sld:MinScaleDenominator",layer.options.maxScale,node);}
-if(layer.options.minScale){this.writeNode("sld:MaxScaleDenominator",layer.options.minScale,node);}
-this.nestingLayerLookup[layer.name]=node;return node;}},"_WFS":function(layer){var node=this.createElementNSPlus("Layer",{attributes:{name:layer.protocol.featurePrefix+":"+layer.protocol.featureType,hidden:layer.visibility?"0":"1"}});this.writeNode("ows:Title",layer.name,node);this.writeNode("Server",{service:OpenLayers.Format.Context.serviceTypes.WFS,version:layer.protocol.version,url:layer.protocol.url},node);return node;},"_InlineGeometry":function(layer){var node=this.createElementNS [...]
-this.eBottom=document.createElement("div");this.eBottom.className=this.displayClass+"Bottom";this.div.appendChild(this.eBottom);if((this.bottomOutUnits=="")||(this.bottomInUnits=="")){this.eBottom.style.visibility="hidden";}else{this.eBottom.style.visibility="visible";}}
-this.map.events.register('moveend',this,this.update);this.update();return this.div;},getBarLen:function(maxLen){var digits=parseInt(Math.log(maxLen)/Math.log(10));var pow10=Math.pow(10,digits);var firstChar=parseInt(maxLen/pow10);var barLen;if(firstChar>5){barLen=5;}else if(firstChar>2){barLen=2;}else{barLen=1;}
-return barLen*pow10;},update:function(){var res=this.map.getResolution();if(!res){return;}
-var curMapUnits=this.map.getUnits();var inches=OpenLayers.INCHES_PER_UNIT;var maxSizeData=this.maxWidth*res*inches[curMapUnits];var geodesicRatio=1;if(this.geodesic===true){var maxSizeGeodesic=(this.map.getGeodesicPixelSize().w||0.000001)*this.maxWidth;var maxSizeKilometers=maxSizeData/inches["km"];geodesicRatio=maxSizeGeodesic/maxSizeKilometers;maxSizeData*=geodesicRatio;}
-var topUnits;var bottomUnits;if(maxSizeData>100000){topUnits=this.topOutUnits;bottomUnits=this.bottomOutUnits;}else{topUnits=this.topInUnits;bottomUnits=this.bottomInUnits;}
-var topMax=maxSizeData/inches[topUnits];var bottomMax=maxSizeData/inches[bottomUnits];var topRounded=this.getBarLen(topMax);var bottomRounded=this.getBarLen(bottomMax);topMax=topRounded/inches[curMapUnits]*inches[topUnits];bottomMax=bottomRounded/inches[curMapUnits]*inches[bottomUnits];var topPx=topMax/res/geodesicRatio;var bottomPx=bottomMax/res/geodesicRatio;if(this.eBottom.style.visibility=="visible"){this.eBottom.style.width=Math.round(bottomPx)+"px";this.eBottom.innerHTML=bottomRoun [...]
-if(this.eTop.style.visibility=="visible"){this.eTop.style.width=Math.round(topPx)+"px";this.eTop.innerHTML=topRounded+" "+topUnits;}},CLASS_NAME:"OpenLayers.Control.ScaleLine"});OpenLayers.Icon=OpenLayers.Class({url:null,size:null,offset:null,calculateOffset:null,imageDiv:null,px:null,initialize:function(url,size,offset,calculateOffset){this.url=url;this.size=(size)?size:new OpenLayers.Size(20,20);this.offset=offset?offset:new OpenLayers.Pixel(-(this.size.w/2),-(this.size.h/2));this.calc [...]
-this.draw();},setUrl:function(url){if(url!=null){this.url=url;}
-this.draw();},draw:function(px){OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv,null,null,this.size,this.url,"absolute");this.moveTo(px);return this.imageDiv;},erase:function(){if(this.imageDiv!=null&&this.imageDiv.parentNode!=null){OpenLayers.Element.remove(this.imageDiv);}},setOpacity:function(opacity){OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv,null,null,null,null,null,null,null,opacity);},moveTo:function(px){if(px!=null){this.px=px;}
-if(this.imageDiv!=null){if(this.px==null){this.display(false);}else{if(this.calculateOffset){this.offset=this.calculateOffset(this.size);}
-var offsetPx=this.px.offset(this.offset);OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv,null,offsetPx);}}},display:function(display){this.imageDiv.style.display=(display)?"":"none";},isDrawn:function(){var isDrawn=(this.imageDiv&&this.imageDiv.parentNode&&(this.imageDiv.parentNode.nodeType!=11));return isDrawn;},CLASS_NAME:"OpenLayers.Icon"});OpenLayers.Marker=OpenLayers.Class({icon:null,lonlat:null,events:null,map:null,initialize:function(lonlat,icon){this.lonlat=lonlat;var newIcon=( [...]
-this.events=new OpenLayers.Events(this,this.icon.imageDiv,null);},destroy:function(){this.erase();this.map=null;this.events.destroy();this.events=null;if(this.icon!=null){this.icon.destroy();this.icon=null;}},draw:function(px){return this.icon.draw(px);},erase:function(){if(this.icon!=null){this.icon.erase();}},moveTo:function(px){if((px!=null)&&(this.icon!=null)){this.icon.moveTo(px);}
-this.lonlat=this.map.getLonLatFromLayerPx(px);},isDrawn:function(){var isDrawn=(this.icon&&this.icon.isDrawn());return isDrawn;},onScreen:function(){var onScreen=false;if(this.map){var screenBounds=this.map.getExtent();onScreen=screenBounds.containsLonLat(this.lonlat);}
-return onScreen;},inflate:function(inflate){if(this.icon){var newSize=new OpenLayers.Size(this.icon.size.w*inflate,this.icon.size.h*inflate);this.icon.setSize(newSize);}},setOpacity:function(opacity){this.icon.setOpacity(opacity);},setUrl:function(url){this.icon.setUrl(url);},display:function(display){this.icon.display(display);},CLASS_NAME:"OpenLayers.Marker"});OpenLayers.Marker.defaultIcon=function(){var url=OpenLayers.Util.getImagesLocation()+"marker.png";var size=new OpenLayers.Size( [...]
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){var res=this.map.getResolution();var bbox=this.maxExtent;var size=this.tileSize;var tileX=Math.round((bounds.left-bbox.left)/(res*size.w));var tileY=Math.round((bounds.bottom-bbox.bottom)/(res*size.h));var tileZ=this.serverResolutions!=null?OpenLayers.Util.indexOf(this.serverResolutions,res):this.map.getZoom();function zeroPad(number,length){number=String(number);var zeros=[];for(var i=0;i<le [...]
-return zeros.join('').substring(0,length-number.length)+number;}
-var components=[this.layername,zeroPad(tileZ,2),zeroPad(parseInt(tileX/1000000),3),zeroPad((parseInt(tileX/1000)%1000),3),zeroPad((parseInt(tileX)%1000),3),zeroPad(parseInt(tileY/1000000),3),zeroPad((parseInt(tileY/1000)%1000),3),zeroPad((parseInt(tileY)%1000),3)+'.'+this.extension];var path=components.join('/');var url=this.url;if(OpenLayers.Util.isArray(url)){url=this.selectUrl(path,url);}
-url=(url.charAt(url.length-1)=='/')?url:url+'/';return url+path;},CLASS_NAME:"OpenLayers.Layer.TileCache"});OpenLayers.Strategy.Paging=OpenLayers.Class(OpenLayers.Strategy,{features:null,length:10,num:null,paging:false,activate:function(){var activated=OpenLayers.Strategy.prototype.activate.call(this);if(activated){this.layer.events.on({"beforefeaturesadded":this.cacheFeatures,scope:this});}
-return activated;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){this.clearCache();this.layer.events.un({"beforefeaturesadded":this.cacheFeatures,scope:this});}
-return deactivated;},cacheFeatures:function(event){if(!this.paging){this.clearCache();this.features=event.features;this.pageNext(event);}},clearCache:function(){if(this.features){for(var i=0;i<this.features.length;++i){this.features[i].destroy();}}
-this.features=null;this.num=null;},pageCount:function(){var numFeatures=this.features?this.features.length:0;return Math.ceil(numFeatures/this.length);},pageNum:function(){return this.num;},pageLength:function(newLength){if(newLength&&newLength>0){this.length=newLength;}
-return this.length;},pageNext:function(event){var changed=false;if(this.features){if(this.num===null){this.num=-1;}
-var start=(this.num+1)*this.length;changed=this.page(start,event);}
-return changed;},pagePrevious:function(){var changed=false;if(this.features){if(this.num===null){this.num=this.pageCount();}
-var start=(this.num-1)*this.length;changed=this.page(start);}
-return changed;},page:function(start,event){var changed=false;if(this.features){if(start>=0&&start<this.features.length){var num=Math.floor(start/this.length);if(num!=this.num){this.paging=true;var features=this.features.slice(start,start+this.length);this.layer.removeFeatures(this.layer.features);this.num=num;if(event&&event.features){event.features=features;}else{this.layer.addFeatures(features);}
-this.paging=false;changed=true;}}}
-return changed;},CLASS_NAME:"OpenLayers.Strategy.Paging"});OpenLayers.Control.TransformFeature=OpenLayers.Class(OpenLayers.Control,{EVENT_TYPES:["beforesetfeature","setfeature","beforetransform","transform","transformcomplete"],geometryTypes:null,layer:null,preserveAspectRatio:false,rotate:true,feature:null,renderIntent:"temporary",rotationHandleSymbolizer:null,box:null,center:null,scale:1,ratio:1,rotation:0,handles:null,rotationHandles:null,dragControl:null,initialize:function(layer,opt [...]
-this.createBox();this.createControl();},activate:function(){var activated=false;if(OpenLayers.Control.prototype.activate.apply(this,arguments)){this.dragControl.activate();this.layer.addFeatures([this.box]);this.rotate&&this.layer.addFeatures(this.rotationHandles);this.layer.addFeatures(this.handles);activated=true;}
-return activated;},deactivate:function(){var deactivated=false;if(OpenLayers.Control.prototype.deactivate.apply(this,arguments)){this.layer.removeFeatures(this.handles);this.rotate&&this.layer.removeFeatures(this.rotationHandles);this.layer.removeFeatures([this.box]);this.dragControl.deactivate();deactivated=true;}
-if(deactivated){this.unsetFeature();}
-return deactivated;},setMap:function(map){this.dragControl.setMap(map);OpenLayers.Control.prototype.setMap.apply(this,arguments);},setFeature:function(feature,initialParams){initialParams=OpenLayers.Util.applyDefaults(initialParams,{rotation:0,scale:1,ratio:1});var oldRotation=this.rotation;var oldCenter=this.center;OpenLayers.Util.extend(this,initialParams);var cont=this.events.triggerEvent("beforesetfeature",{feature:feature});if(cont===false){return;}
-this.feature=feature;this.activate();this._setfeature=true;var featureBounds=this.feature.geometry.getBounds();this.box.move(featureBounds.getCenterLonLat());this.box.geometry.rotate(-oldRotation,oldCenter);this._angle=0;var ll;if(this.rotation){var geom=feature.geometry.clone();geom.rotate(-this.rotation,this.center);var box=new OpenLayers.Feature.Vector(geom.getBounds().toGeometry());box.geometry.rotate(this.rotation,this.center);this.box.geometry.rotate(this.rotation,this.center);this [...]
-this.handles[0].move(ll);delete this._setfeature;this.events.triggerEvent("setfeature",{feature:feature});},unsetFeature:function(){if(this.active){this.deactivate();}else{this.feature=null;this.rotation=0;this.scale=1;this.ratio=1;}},createBox:function(){var control=this;this.center=new OpenLayers.Geometry.Point(0,0);var box=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([new OpenLayers.Geometry.Point(-1,-1),new OpenLayers.Geometry.Point(0,-1),new OpenLayers.Geometry.P [...]
-var evt=control.dragControl.handlers.drag.evt;var preserveAspectRatio=!control._setfeature&&control.preserveAspectRatio;var reshape=!preserveAspectRatio&&!(evt&&evt.shiftKey);var oldGeom=new OpenLayers.Geometry.Point(oldX,oldY);var centerGeometry=control.center;this.rotate(-control.rotation,centerGeometry);oldGeom.rotate(-control.rotation,centerGeometry);var dx1=this.x-centerGeometry.x;var dy1=this.y-centerGeometry.y;var dx0=dx1-(this.x-oldGeom.x);var dy0=dy1-(this.y-oldGeom.y);this.x=ol [...]
-control._moving=true;control.box.geometry.rotate(-control.rotation,centerGeometry);delete control._moving;control.box.geometry.resize(scale,centerGeometry,ratio);control.box.geometry.rotate(control.rotation,centerGeometry);control.transformFeature({scale:scale,ratio:ratio});};var rotationHandleMoveFn=function(x,y){var oldX=this.x,oldY=this.y;OpenLayers.Geometry.Point.prototype.move.call(this,x,y);if(control._moving){return;}
-var evt=control.dragControl.handlers.drag.evt;var constrain=(evt&&evt.shiftKey)?45:1;var centerGeometry=control.center;var dx1=this.x-centerGeometry.x;var dy1=this.y-centerGeometry.y;var dx0=dx1-x;var dy0=dy1-y;this.x=oldX;this.y=oldY;var a0=Math.atan2(dy0,dx0);var a1=Math.atan2(dy1,dx1);var angle=a1-a0;angle*=180/Math.PI;control._angle=(control._angle+angle)%360;var diff=control.rotation%constrain;if(Math.abs(control._angle)>=constrain||diff!==0){angle=Math.round(control._angle/constrai [...]
-diff;control._angle=0;control.box.geometry.rotate(angle,centerGeometry);control.transformFeature({rotation:angle});}};var handles=new Array(8);var rotationHandles=new Array(4);var geom,handle,rotationHandle;for(var i=0;i<8;++i){geom=box.geometry.components[i];handle=new OpenLayers.Feature.Vector(geom.clone(),null,typeof this.renderIntent=="string"?null:this.renderIntent);if(i%2==0){rotationHandle=new OpenLayers.Feature.Vector(geom.clone(),null,typeof this.rotationHandleSymbolizer=="strin [...]
-geom.move=vertexMoveFn;geom.resize=vertexResizeFn;geom.rotate=vertexRotateFn;handle.geometry.move=handleMoveFn;geom._handle=handle;handles[i]=handle;}
-this.box=box;this.rotationHandles=rotationHandles;this.handles=handles;},createControl:function(){var control=this;this.dragControl=new OpenLayers.Control.DragFeature(this.layer,{documentDrag:true,moveFeature:function(pixel){if(this.feature===control.feature){this.feature=control.box;}
-OpenLayers.Control.DragFeature.prototype.moveFeature.apply(this,arguments);},onDrag:function(feature,pixel){if(feature===control.box){control.transformFeature({center:control.center});control.drawHandles();}},onStart:function(feature,pixel){var eligible=!control.geometryTypes||OpenLayers.Util.indexOf(control.geometryTypes,feature.geometry.CLASS_NAME)!==-1;var i=OpenLayers.Util.indexOf(control.handles,feature);i+=OpenLayers.Util.indexOf(control.rotationHandles,feature);if(feature!==contro [...]
-layer.drawFeature(this.handles[i],this.renderIntent);}},transformFeature:function(mods){if(!this._setfeature){this.scale*=(mods.scale||1);this.ratio*=(mods.ratio||1);var oldRotation=this.rotation;this.rotation=(this.rotation+(mods.rotation||0))%360;if(this.events.triggerEvent("beforetransform",mods)!==false){var feature=this.feature;var geom=feature.geometry;var center=this.center;geom.rotate(-oldRotation,center);if(mods.scale||mods.ratio){geom.resize(mods.scale,center,mods.ratio);}else  [...]
-geom.rotate(this.rotation,center);this.layer.drawFeature(feature);feature.toState(OpenLayers.State.UPDATE);this.events.triggerEvent("transform",mods);}}
-this.layer.drawFeature(this.box,this.renderIntent);this.drawHandles();},destroy:function(){var geom;for(var i=0;i<8;++i){geom=this.box.geometry.components[i];geom._handle.destroy();geom._handle=null;geom._rotationHandle&&geom._rotationHandle.destroy();geom._rotationHandle=null;}
-this.box.destroy();this.box=null;this.layer=null;this.dragControl.destroy();OpenLayers.Control.prototype.destroy.apply(this,arguments);},CLASS_NAME:"OpenLayers.Control.TransformFeature"});OpenLayers.Layer.XYZ=OpenLayers.Class(OpenLayers.Layer.Grid,{isBaseLayer:true,sphericalMercator:false,zoomOffset:0,serverResolutions:null,initialize:function(name,url,options){if(options&&options.sphericalMercator||this.sphericalMercator){options=OpenLayers.Util.extend({maxExtent:new OpenLayers.Bounds(- [...]
-url=url||this.url;name=name||this.name;var newArguments=[name,url,{},options];OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.XYZ(this.name,this.url,this.getOptions());}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){var xyz=this.getXYZ(bounds);var url=this.url;if(OpenLayers.Util.isArray(url)){var s=''+xyz.x+xyz.y+xyz.z;url=this.selectUrl(s,url);}
-return OpenLayers.String.format(url,xyz);},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.serverResolutions!=null?OpenLayers.Util.indexOf(this.serverResolutions,res):this.map.getZoom()+this.zoomOffset;var limit=Math.pow(2,z);if(this.wrapDateLine)
-{x=((x%limit)+limit)%limit;}
-return{'x':x,'y':y,'z':z};},setMap:function(map){OpenLayers.Layer.Grid.prototype.setMap.apply(this,arguments);if(!this.tileOrigin){this.tileOrigin=new OpenLayers.LonLat(this.maxExtent.left,this.maxExtent.bottom);}},CLASS_NAME:"OpenLayers.Layer.XYZ"});OpenLayers.Layer.OSM=OpenLayers.Class(OpenLayers.Layer.XYZ,{name:"OpenStreetMap",attribution:"Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>",sphericalMercator:true,url:'http://tile.openstreetmap.org/${z}/${x}/${y}.pn [...]
-obj=OpenLayers.Layer.XYZ.prototype.clone.apply(this,[obj]);return obj;},wrapDateLine:true,CLASS_NAME:"OpenLayers.Layer.OSM"});OpenLayers.Handler.Box=OpenLayers.Class(OpenLayers.Handler,{dragHandler:null,boxDivClassName:'olHandlerBoxZoomBox',boxOffsets:null,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);this.dragHandler=new OpenLayers.Handler.Drag(this,{down:this.startBox,move:this.moveBox,out:this.removeBox,up:this.endBox},{ke [...]
-this.removeBox();this.callback("done",[result]);},removeBox:function(){this.map.eventsDiv.removeChild(this.zoomBox);this.zoomBox=null;this.boxOffsets=null;OpenLayers.Element.removeClass(this.map.eventsDiv,"olDrawBox");},activate:function(){if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){this.dragHandler.activate();return true;}else{return false;}},deactivate:function(){if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){if(this.dragHandler.deactivate()){if(t [...]
-return true;}else{return false;}},getBoxOffsets:function(){if(!this.boxOffsets){var testDiv=document.createElement("div");testDiv.style.position="absolute";testDiv.style.border="1px solid black";testDiv.style.width="3px";document.body.appendChild(testDiv);var w3cBoxModel=testDiv.clientWidth==3;document.body.removeChild(testDiv);var left=parseInt(OpenLayers.Element.getStyle(this.zoomBox,"border-left-width"));var right=parseInt(OpenLayers.Element.getStyle(this.zoomBox,"border-right-width") [...]
-return this.boxOffsets;},CLASS_NAME:"OpenLayers.Handler.Box"});OpenLayers.Control.ZoomBox=OpenLayers.Class(OpenLayers.Control,{type:OpenLayers.Control.TYPE_TOOL,out:false,alwaysZoom:false,draw:function(){this.handler=new OpenLayers.Handler.Box(this,{done:this.zoomBox},{keyMask:this.keyMask});},zoomBox:function(position){if(position instanceof OpenLayers.Bounds){var bounds;if(!this.out){var minXY=this.map.getLonLatFromPixel(new OpenLayers.Pixel(position.left,position.bottom));var maxXY=th [...]
-var lastZoom=this.map.getZoom();this.map.zoomToExtent(bounds);if(lastZoom==this.map.getZoom()&&this.alwaysZoom==true){this.map.zoomTo(lastZoom+(this.out?-1:1));}}else{if(!this.out){this.map.setCenter(this.map.getLonLatFromPixel(position),this.map.getZoom()+1);}else{this.map.setCenter(this.map.getLonLatFromPixel(position),this.map.getZoom()-1);}}},CLASS_NAME:"OpenLayers.Control.ZoomBox"});OpenLayers.Control.DragPan=OpenLayers.Class(OpenLayers.Control,{type:OpenLayers.Control.TYPE_TOOL,pan [...]
-this.kinetic=new OpenLayers.Kinetic(config);}
-this.handler=new OpenLayers.Handler.Drag(this,{"move":this.panMap,"done":this.panMapDone,"down":this.panMapStart},{interval:this.interval,documentDrag:this.documentDrag});},panMapStart:function(){if(this.kinetic){this.kinetic.begin();}},panMap:function(xy){if(this.kinetic){this.kinetic.update(xy);}
-this.panned=true;this.map.pan(this.handler.last.x-xy.x,this.handler.last.y-xy.y,{dragging:true,animate:false});},panMapDone:function(xy){if(this.panned){var res=null;if(this.kinetic){res=this.kinetic.end(xy);}
-this.map.pan(this.handler.last.x-xy.x,this.handler.last.y-xy.y,{dragging:!!res,animate:false});if(res){var self=this;this.kinetic.move(res,function(x,y,end){self.map.pan(x,y,{dragging:!end,animate:false});});}
-this.panned=false;}},CLASS_NAME:"OpenLayers.Control.DragPan"});OpenLayers.Handler.Click=OpenLayers.Class(OpenLayers.Handler,{delay:300,single:true,'double':false,pixelTolerance:0,dblclickTolerance:13,stopSingle:false,stopDouble:false,timerId:null,touch:false,down:null,last:null,first:null,rightclickTimerId:null,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);},touchstart:function(evt){if(!this.touch){this.unregisterMouseListene [...]
-this.down=this.getEventInfo(evt);this.last=this.getEventInfo(evt);return true;},touchmove:function(evt){this.last=this.getEventInfo(evt);return true;},touchend:function(evt){if(this.down){evt.xy=this.last.xy;evt.lastTouches=this.last.touches;this.handleSingle(evt);this.down=null;}
-return true;},unregisterMouseListeners:function(){this.map.events.un({mousedown:this.mousedown,mouseup:this.mouseup,click:this.click,dblclick:this.dblclick,scope:this});},mousedown:function(evt){this.down=this.getEventInfo(evt);this.last=this.getEventInfo(evt);return true;},mouseup:function(evt){var propagate=true;if(this.checkModifiers(evt)&&this.control.handleRightClicks&&OpenLayers.Event.isRightClick(evt)){propagate=this.rightclick(evt);}
-return propagate;},rightclick:function(evt){if(this.passesTolerance(evt)){if(this.rightclickTimerId!=null){this.clearTimer();this.callback('dblrightclick',[evt]);return!this.stopDouble;}else{var clickEvent=this['double']?OpenLayers.Util.extend({},evt):this.callback('rightclick',[evt]);var delayedRightCall=OpenLayers.Function.bind(this.delayedRightCall,this,clickEvent);this.rightclickTimerId=window.setTimeout(delayedRightCall,this.delay);}}
-return!this.stopSingle;},delayedRightCall:function(evt){this.rightclickTimerId=null;if(evt){this.callback('rightclick',[evt]);}},click:function(evt){if(!this.last){this.last=this.getEventInfo(evt);}
-this.handleSingle(evt);return!this.stopSingle;},dblclick:function(evt){this.handleDouble(evt);return!this.stopDouble;},handleDouble:function(evt){if(this["double"]&&this.passesDblclickTolerance(evt)){this.callback("dblclick",[evt]);}},handleSingle:function(evt){if(this.passesTolerance(evt)){if(this.timerId!=null){if(this.last.touches&&this.last.touches.length===1){if(this["double"]){OpenLayers.Event.stop(evt);}
-this.handleDouble(evt);}
-if(!this.last.touches||this.last.touches.length!==2){this.clearTimer();}}else{this.first=this.getEventInfo(evt);var clickEvent=this.single?OpenLayers.Util.extend({},evt):null;this.queuePotentialClick(clickEvent);}}},queuePotentialClick:function(evt){this.timerId=window.setTimeout(OpenLayers.Function.bind(this.delayedCall,this,evt),this.delay);},passesTolerance:function(evt){var passes=true;if(this.pixelTolerance!=null&&this.down&&this.down.xy){passes=this.pixelTolerance>=this.down.xy.dis [...]
-return passes;},getTouchDistance:function(from,to){return Math.sqrt(Math.pow(from.clientX-to.clientX,2)+
-Math.pow(from.clientY-to.clientY,2));},passesDblclickTolerance:function(evt){var passes=true;if(this.down&&this.first){passes=this.down.xy.distanceTo(this.first.xy)<=this.dblclickTolerance;}
-return passes;},clearTimer:function(){if(this.timerId!=null){window.clearTimeout(this.timerId);this.timerId=null;}
-if(this.rightclickTimerId!=null){window.clearTimeout(this.rightclickTimerId);this.rightclickTimerId=null;}},delayedCall:function(evt){this.timerId=null;if(evt){this.callback("click",[evt]);}},getEventInfo:function(evt){var touches;if(evt.touches){var len=evt.touches.length;touches=new Array(len);var touch;for(var i=0;i<len;i++){touch=evt.touches[i];touches[i]={clientX:touch.clientX,clientY:touch.clientY};}}
-return{xy:evt.xy,touches:touches};},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){this.clearTimer();this.down=null;this.first=null;this.last=null;this.touch=false;deactivated=true;}
-return deactivated;},CLASS_NAME:"OpenLayers.Handler.Click"});OpenLayers.Control.Navigation=OpenLayers.Class(OpenLayers.Control,{dragPan:null,dragPanOptions:null,pinchZoom:null,pinchZoomOptions:null,documentDrag:false,zoomBox:null,zoomBoxEnabled:true,zoomWheelEnabled:true,mouseWheelOptions:null,handleRightClicks:false,zoomBoxKeyMask:OpenLayers.Handler.MOD_SHIFT,autoActivate:true,initialize:function(options){this.handlers={};OpenLayers.Control.prototype.initialize.apply(this,arguments);},d [...]
-this.dragPan=null;if(this.zoomBox){this.zoomBox.destroy();}
-this.zoomBox=null;if(this.pinchZoom){this.pinchZoom.destroy();}
-this.pinchZoom=null;OpenLayers.Control.prototype.destroy.apply(this,arguments);},activate:function(){this.dragPan.activate();if(this.zoomWheelEnabled){this.handlers.wheel.activate();}
-this.handlers.click.activate();if(this.zoomBoxEnabled){this.zoomBox.activate();}
-if(this.pinchZoom){this.pinchZoom.activate();}
-return OpenLayers.Control.prototype.activate.apply(this,arguments);},deactivate:function(){if(this.pinchZoom){this.pinchZoom.deactivate();}
-this.zoomBox.deactivate();this.dragPan.deactivate();this.handlers.click.deactivate();this.handlers.wheel.deactivate();return OpenLayers.Control.prototype.deactivate.apply(this,arguments);},draw:function(){if(this.handleRightClicks){this.map.viewPortDiv.oncontextmenu=OpenLayers.Function.False;}
-var clickCallbacks={'click':this.defaultClick,'dblclick':this.defaultDblClick,'dblrightclick':this.defaultDblRightClick};var clickOptions={'double':true,'stopDouble':true};this.handlers.click=new OpenLayers.Handler.Click(this,clickCallbacks,clickOptions);this.dragPan=new OpenLayers.Control.DragPan(OpenLayers.Util.extend({map:this.map,documentDrag:this.documentDrag},this.dragPanOptions));this.zoomBox=new OpenLayers.Control.ZoomBox({map:this.map,keyMask:this.zoomBoxKeyMask});this.dragPan.d [...]
-var size=this.map.getSize();var deltaX=size.w/2-evt.xy.x;var deltaY=evt.xy.y-size.h/2;var newRes=this.map.baseLayer.getResolutionForZoom(newZoom);var zoomPoint=this.map.getLonLatFromPixel(evt.xy);var newCenter=new OpenLayers.LonLat(zoomPoint.lon+deltaX*newRes,zoomPoint.lat+deltaY*newRes);this.map.setCenter(newCenter,newZoom);},wheelUp:function(evt,delta){this.wheelChange(evt,delta||1);},wheelDown:function(evt,delta){this.wheelChange(evt,delta||-1);},disableZoomBox:function(){this.zoomBox [...]
-var sketchStyle=this.layer.styleMap&&this.layer.styleMap.styles.temporary;if(sketchStyle){this.handlerOptions.layerOptions=OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions,{styleMap:new OpenLayers.StyleMap({"default":sketchStyle})});}
-this.handler=new handler(this,this.callbacks,this.handlerOptions);},drawFeature:function(geometry){var feature=new OpenLayers.Feature.Vector(geometry);var proceed=this.layer.events.triggerEvent("sketchcomplete",{feature:feature});if(proceed!==false){feature.state=OpenLayers.State.INSERT;this.layer.addFeatures([feature]);this.featureAdded(feature);this.events.triggerEvent("featureadded",{feature:feature});}},insertXY:function(x,y){if(this.handler&&this.handler.line){this.handler.insertXY( [...]
-OpenLayers.Handler.Path.prototype.addPoint.apply(this,arguments);},getCurrentPointIndex:function(){return this.line.geometry.components.length-2;},enforceTopology:function(event){var point=event.vertex;var components=this.line.geometry.components;if(!this.polygon.geometry.intersects(point)){var last=components[components.length-3];point.x=last.x;point.y=last.y;}},finishGeometry:function(){var index=this.line.geometry.components.length-2;this.line.geometry.removeComponent(this.line.geomet [...]
-if(modified){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;},cancel:function(){if(this.drawingHole){this.polygon.geometry.removeComponent(this.line.geometry);this.restoreFeature(true);}
-return OpenLayers.Handler.Path.prototype.cancel.apply(this,arguments);},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){this.control.layer.events.triggerEvent("sketchcomplete",{feature:this [...]
-return geometry;},CLASS_NAME:"OpenLayers.Handler.Polygon"});OpenLayers.Control.EditingToolbar=OpenLayers.Class(OpenLayers.Control.Panel,{initialize:function(layer,options){OpenLayers.Control.Panel.prototype.initialize.apply(this,[options]);this.addControls([new OpenLayers.Control.Navigation()]);var controls=[new OpenLayers.Control.DrawFeature(layer,OpenLayers.Handler.Point,{'displayClass':'olControlDrawFeaturePoint'}),new OpenLayers.Control.DrawFeature(layer,OpenLayers.Handler.Path,{'dis [...]
-return div;},CLASS_NAME:"OpenLayers.Control.EditingToolbar"});OpenLayers.Strategy.BBOX=OpenLayers.Class(OpenLayers.Strategy,{bounds:null,resolution:null,ratio:2,resFactor:null,response:null,activate:function(){var activated=OpenLayers.Strategy.prototype.activate.call(this);if(activated){this.layer.events.on({"moveend":this.update,scope:this});this.layer.events.on({"refresh":this.update,scope:this});if(this.layer.visibility===true&&this.layer.inRange===true){this.update();}else{this.layer [...]
-return activated;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){this.layer.events.un({"moveend":this.update,"refresh":this.update,"visibilitychanged":this.update,scope:this});}
-return deactivated;},update:function(options){var mapBounds=this.getMapBounds();if(mapBounds!==null&&((options&&options.force)||this.invalidBounds(mapBounds))){this.calculateBounds(mapBounds);this.resolution=this.layer.map.getResolution();this.triggerRead(options);}},getMapBounds:function(){if(this.layer.map===null){return null;}
-var bounds=this.layer.map.getExtent();if(bounds&&!this.layer.projection.equals(this.layer.map.getProjectionObject())){bounds=bounds.clone().transform(this.layer.map.getProjectionObject(),this.layer.projection);}
-return bounds;},invalidBounds:function(mapBounds){if(!mapBounds){mapBounds=this.getMapBounds();}
-var invalid=!this.bounds||!this.bounds.containsBounds(mapBounds);if(!invalid&&this.resFactor){var ratio=this.resolution/this.layer.map.getResolution();invalid=(ratio>=this.resFactor||ratio<=(1/this.resFactor));}
-return invalid;},calculateBounds:function(mapBounds){if(!mapBounds){mapBounds=this.getMapBounds();}
-var center=mapBounds.getCenterLonLat();var dataWidth=mapBounds.getWidth()*this.ratio;var dataHeight=mapBounds.getHeight()*this.ratio;this.bounds=new OpenLayers.Bounds(center.lon-(dataWidth/2),center.lat-(dataHeight/2),center.lon+(dataWidth/2),center.lat+(dataHeight/2));},triggerRead:function(options){if(this.response){this.layer.protocol.abort(this.response);this.layer.events.triggerEvent("loadend");}
-this.layer.events.triggerEvent("loadstart");this.response=this.layer.protocol.read(OpenLayers.Util.applyDefaults({filter:this.createFilter(),callback:this.merge,scope:this},options));},createFilter:function(){var filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.BBOX,value:this.bounds,projection:this.layer.projection});if(this.layer.filter){filter=new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.AND,filters:[this.layer.filter,filter]});}
-return filter;},merge:function(resp){this.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)){var geom;for(var i=0,len=features.length;i<len;++i){geom=features[i].geometry;if(geom){geom.transform(remote,local);}}}
-this.layer.addFeatures(features);}
-this.response=null;this.layer.events.triggerEvent("loadend");},CLASS_NAME:"OpenLayers.Strategy.BBOX"});OpenLayers.Layer.WorldWind=OpenLayers.Class(OpenLayers.Layer.Grid,{DEFAULT_PARAMS:{},isBaseLayer:true,lzd:null,zoomLevels:null,initialize:function(name,url,lzd,zoomLevels,params,options){this.lzd=lzd;this.zoomLevels=zoomLevels;var newArguments=[];newArguments.push(name,url,params,options);OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);this.params=OpenLayers.Util.app [...]
-var contents=capabilities.contents;var matrixSet=contents.tileMatrixSets[config.matrixSet];var layers=contents.layers;var layerDef;for(var i=0,ii=contents.layers.length;i<ii;++i){if(contents.layers[i].identifier===config.layer){layerDef=contents.layers[i];break;}}
-if(layerDef&&matrixSet){var style;for(var i=0,ii=layerDef.styles.length;i<ii;++i){style=layerDef.styles[i];if(style.isDefault){break;}}
-layer=new OpenLayers.Layer.WMTS(OpenLayers.Util.applyDefaults(config,{url:capabilities.operationsMetadata.GetTile.dcp.http.get,name:layerDef.title,style:style.identifier,matrixIds:matrixSet.matrixIds}));}
-return layer;},CLASS_NAME:"OpenLayers.Format.WMTSCapabilities"});OpenLayers.Layer.Google.v3={DEFAULTS:{maxExtent:new OpenLayers.Bounds(-128*156543.03390625,-128*156543.03390625,128*156543.03390625,128*156543.03390625),sphericalMercator:true,maxResolution:156543.03390625,units:"m",projection:"EPSG:900913"},animationEnabled:true,loadMapObject:function(){if(!this.type){this.type=google.maps.MapTypeId.ROADMAP;}
-var mapObject;var cache=OpenLayers.Layer.Google.cache[this.map.id];if(cache){mapObject=cache.mapObject;++cache.count;}else{var container=this.map.viewPortDiv;var div=document.createElement("div");div.id=this.map.id+"_GMapContainer";div.style.position="absolute";div.style.width="100%";div.style.height="100%";container.appendChild(div);var center=this.map.getCenter();mapObject=new google.maps.Map(div,{center:center?new google.maps.LatLng(center.lat,center.lon):new google.maps.LatLng(0,0),z [...]
-this.mapObject=mapObject;this.setGMapVisibility(this.visibility);},repositionMapElements:function(){google.maps.event.trigger(this.mapObject,"resize");var div=this.mapObject.getDiv().firstChild;if(!div||div.childNodes.length<3){this.repositionTimer=window.setTimeout(OpenLayers.Function.bind(this.repositionMapElements,this),250);return false;}
-var cache=OpenLayers.Layer.Google.cache[this.map.id];var container=this.map.viewPortDiv;while(div.lastChild.style.display=="none"){container.appendChild(div.lastChild);}
-var termsOfUse=div.lastChild;container.appendChild(termsOfUse);termsOfUse.style.zIndex="1100";termsOfUse.style.bottom="";termsOfUse.className="olLayerGoogleCopyright olLayerGoogleV3";termsOfUse.style.display="";cache.termsOfUse=termsOfUse;var poweredBy=div.lastChild;container.appendChild(poweredBy);poweredBy.style.zIndex="1100";poweredBy.style.bottom="";poweredBy.className="olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint";poweredBy.style.display="";cache.poweredBy=poweredBy;this.setGMap [...]
-cache.resized=true;}},setGMapVisibility:function(visible){var cache=OpenLayers.Layer.Google.cache[this.map.id];if(cache){var type=this.type;var layers=this.map.layers;var layer;for(var i=layers.length-1;i>=0;--i){layer=layers[i];if(layer instanceof OpenLayers.Layer.Google&&layer.visibility===true&&layer.inRange===true){type=layer.type;visible=true;break;}}
-var container=this.mapObject.getDiv();if(visible===true){this.mapObject.setMapTypeId(type);container.style.left="";if(cache.termsOfUse&&cache.termsOfUse.style){cache.termsOfUse.style.left="";cache.termsOfUse.style.display="";cache.poweredBy.style.display="";}
-cache.displayed=this.id;}else{delete cache.displayed;container.style.left="-9999px";if(cache.termsOfUse&&cache.termsOfUse.style){cache.termsOfUse.style.display="none";cache.termsOfUse.style.left="-9999px";cache.poweredBy.style.display="none";}}}},getMapContainer:function(){return this.mapObject.getDiv();},getMapObjectBoundsFromOLBounds:function(olBounds){var moBounds=null;if(olBounds!=null){var sw=this.sphericalMercator?this.inverseMercator(olBounds.bottom,olBounds.left):new OpenLayers.L [...]
-return moBounds;},getMapObjectLonLatFromMapObjectPixel:function(moPixel){var size=this.map.getSize();var lon=this.getLongitudeFromMapObjectLonLat(this.mapObject.center);var lat=this.getLatitudeFromMapObjectLonLat(this.mapObject.center);var res=this.map.getResolution();var delta_x=moPixel.x-(size.w/2);var delta_y=moPixel.y-(size.h/2);var lonlat=new OpenLayers.LonLat(lon+delta_x*res,lat-delta_y*res);if(this.wrapDateLine){lonlat=lonlat.wrapDateLine(this.maxExtent);}
-return this.getMapObjectLonLatFromLonLat(lonlat.lon,lonlat.lat);},getMapObjectPixelFromMapObjectLonLat:function(moLonLat){var lon=this.getLongitudeFromMapObjectLonLat(moLonLat);var lat=this.getLatitudeFromMapObjectLonLat(moLonLat);var res=this.map.getResolution();var extent=this.map.getExtent();var px=new OpenLayers.Pixel((1/res*(lon-extent.left)),(1/res*(extent.top-lat)));return this.getMapObjectPixelFromXY(px.x,px.y);},setMapObjectCenter:function(center,zoom){if(this.animationEnabled== [...]
-this.mapObject.setOptions({center:center,zoom:zoom});},getMapObjectZoomFromMapObjectBounds:function(moBounds){return this.mapObject.getBoundsZoomLevel(moBounds);},getMapObjectLonLatFromLonLat:function(lon,lat){var gLatLng;if(this.sphericalMercator){var lonlat=this.inverseMercator(lon,lat);gLatLng=new google.maps.LatLng(lonlat.lat,lonlat.lon);}else{gLatLng=new google.maps.LatLng(lat,lon);}
-return gLatLng;},getMapObjectPixelFromXY:function(x,y){return new google.maps.Point(x,y);},destroy:function(){if(this.repositionListener){google.maps.event.removeListener(this.repositionListener);}
-if(this.repositionTimer){window.clearTimeout(this.repositionTimer);}
-OpenLayers.Layer.Google.prototype.destroy.apply(this,arguments);}};OpenLayers.Format.WPSDescribeProcess=OpenLayers.Class(OpenLayers.Format.XML,{VERSION:"1.0.0",namespaces:{wps:"http://www.opengis.net/wps/1.0.0",ows:"http://www.opengis.net/ows/1.1",xsi:"http://www.w3.org/2001/XMLSchema-instance"},schemaLocation:"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd",defaultPrefix:"wps",regExes:{trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s*/g),splitSpace:(/\s+/),tri [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var info={};this.readNode(data,info);return info;},readers:{"wps":{"ProcessDescriptions":function(node,obj){obj.processDescriptions={};this.readChildNodes(node,obj.processDescriptions);},"ProcessDescription":function(node,processDescriptions){var processVersion=this.getAttributeNS(node,this.namespaces.wps,"processVersion");var processDescription={processVersion:processVersion,statusSupported:(node.getAttribute("statusSupported")==="true"),storeSupported:(node.getAttribute("storeSupported [...]
-obj.CRSs[this.getChildValue(node)]=true;},"LiteralData":function(node,input){input.literalData={};this.readChildNodes(node,input.literalData);},"ComplexData":function(node,input){input.complexData={};this.readChildNodes(node,input.complexData);},"Default":function(node,complexData){complexData["default"]={};this.readChildNodes(node,complexData["default"]);},"Supported":function(node,complexData){complexData["supported"]={};this.readChildNodes(node,complexData["supported"]);},"Format":fun [...]
-obj.formats[format.mimeType]=true;},"MimeType":function(node,format){format.mimeType=this.getChildValue(node);}},"ows":OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers["ows"]},CLASS_NAME:"OpenLayers.Format.WPSDescribeProcess"});OpenLayers.Control.NavToolbar=OpenLayers.Class(OpenLayers.Control.Panel,{initialize:function(options){OpenLayers.Control.Panel.prototype.initialize.apply(this,[options]);this.addControls([new OpenLayers.Control.Navigation(),new OpenLayers.Control.ZoomBox()]);} [...]
-return div;},CLASS_NAME:"OpenLayers.Control.NavToolbar"});OpenLayers.Format.CSWGetRecords.v2_0_2=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{csw:"http://www.opengis.net/cat/csw/2.0.2",dc:"http://purl.org/dc/elements/1.1/",dct:"http://purl.org/dc/terms/",geonet:"http://www.fao.org/geonetwork",ogc:"http://www.opengis.net/ogc",ows:"http://www.opengis.net/ows",xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.org/2001/XMLSchema-instance"},defaultPrefix:"csw",version:"2.0.2",sch [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var obj={};this.readNode(data,obj);return obj;},readers:{"csw":{"GetRecordsResponse":function(node,obj){obj.records=[];this.readChildNodes(node,obj);var version=this.getAttributeNS(node,"",'version');if(version!=""){obj.version=version;}},"RequestId":function(node,obj){obj.RequestId=this.getChildValue(node);},"SearchStatus":function(node,obj){obj.SearchStatus={};var timestamp=this.getAttributeNS(node,"",'timestamp');if(timestamp!=""){obj.SearchStatus.timestamp=timestamp;}},"SearchResults [...]
-obj.SearchResults=SearchResults;},"SummaryRecord":function(node,obj){var record={type:"SummaryRecord"};this.readChildNodes(node,record);obj.records.push(record);},"BriefRecord":function(node,obj){var record={type:"BriefRecord"};this.readChildNodes(node,record);obj.records.push(record);},"DCMIRecord":function(node,obj){var record={type:"DCMIRecord"};this.readChildNodes(node,record);obj.records.push(record);},"Record":function(node,obj){var record={type:"Record"};this.readChildNodes(node,r [...]
-var dc_element={};var attrs=node.attributes;for(var i=0,len=attrs.length;i<len;++i){dc_element[attrs[i].name]=attrs[i].nodeValue;}
-dc_element.value=this.getChildValue(node);obj[name].push(dc_element);}},"dct":{"*":function(node,obj){var name=node.localName||node.nodeName.split(":").pop();if(!(OpenLayers.Util.isArray(obj[name]))){obj[name]=new Array();}
-obj[name].push(this.getChildValue(node));}},"ows":OpenLayers.Util.applyDefaults({"BoundingBox":function(node,obj){if(obj.bounds){obj.BoundingBox=[{crs:obj.projection,value:[obj.bounds.left,obj.bounds.bottom,obj.bounds.right,obj.bounds.top]}];delete obj.projection;delete obj.bounds;}
-OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers["ows"]["BoundingBox"].apply(this,arguments);}},OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers["ows"])},write:function(options){var node=this.writeNode("csw:GetRecords",options);return OpenLayers.Format.XML.prototype.write.apply(this,[node]);},writers:{"csw":{"GetRecords":function(options){if(!options){options={};}
-var node=this.createElementNSPlus("csw:GetRecords",{attributes:{service:"CSW",version:this.version,requestId:options.requestId||this.requestId,resultType:options.resultType||this.resultType,outputFormat:options.outputFormat||this.outputFormat,outputSchema:options.outputSchema||this.outputSchema,startPosition:options.startPosition||this.startPosition,maxRecords:options.maxRecords||this.maxRecords}});if(options.DistributedSearch||this.DistributedSearch){this.writeNode("csw:DistributedSearc [...]
-var ResponseHandler=options.ResponseHandler||this.ResponseHandler;if(OpenLayers.Util.isArray(ResponseHandler)&&ResponseHandler.length>0){for(var i=0,len=ResponseHandler.length;i<len;i++){this.writeNode("csw:ResponseHandler",ResponseHandler[i],node);}}
-this.writeNode("Query",options.Query||this.Query,node);return node;},"DistributedSearch":function(options){var node=this.createElementNSPlus("csw:DistributedSearch",{attributes:{hopCount:options.hopCount}});return node;},"ResponseHandler":function(options){var node=this.createElementNSPlus("csw:ResponseHandler",{value:options.value});return node;},"Query":function(options){if(!options){options={};}
-var node=this.createElementNSPlus("csw:Query",{attributes:{typeNames:options.typeNames||"csw:Record"}});var ElementName=options.ElementName;if(OpenLayers.Util.isArray(ElementName)&&ElementName.length>0){for(var i=0,len=ElementName.length;i<len;i++){this.writeNode("csw:ElementName",ElementName[i],node);}}else{this.writeNode("csw:ElementSetName",options.ElementSetName||{value:'summary'},node);}
-if(options.Constraint){this.writeNode("csw:Constraint",options.Constraint,node);}
-if(options.SortBy){this.writeNode("ogc:SortBy",options.SortBy,node);}
-return node;},"ElementName":function(options){var node=this.createElementNSPlus("csw:ElementName",{value:options.value});return node;},"ElementSetName":function(options){var node=this.createElementNSPlus("csw:ElementSetName",{attributes:{typeNames:options.typeNames},value:options.value});return node;},"Constraint":function(options){var node=this.createElementNSPlus("csw:Constraint",{attributes:{version:options.version}});if(options.Filter){var format=new OpenLayers.Format.Filter({version [...]
-return node;}},"ogc":OpenLayers.Format.Filter.v1_1_0.prototype.writers["ogc"]},CLASS_NAME:"OpenLayers.Format.CSWGetRecords.v2_0_2"});OpenLayers.Marker.Box=OpenLayers.Class(OpenLayers.Marker,{bounds:null,div:null,initialize:function(bounds,borderColor,borderWidth){this.bounds=bounds;this.div=OpenLayers.Util.createDiv();this.div.style.overflow='hidden';this.events=new OpenLayers.Events(this,this.div,null);this.setBorder(borderColor,borderWidth);},destroy:function(){this.bounds=null;this.di [...]
-if(!width){width=2;}
-this.div.style.border=width+"px solid "+color;},draw:function(px,sz){OpenLayers.Util.modifyDOMElement(this.div,null,px,sz);return this.div;},onScreen:function(){var onScreen=false;if(this.map){var screenBounds=this.map.getExtent();onScreen=screenBounds.containsBounds(this.bounds,true,true);}
-return onScreen;},display:function(display){this.div.style.display=(display)?"":"none";},CLASS_NAME:"OpenLayers.Marker.Box"});OpenLayers.Format.Text=OpenLayers.Class(OpenLayers.Format,{defaultStyle:null,extractStyles:true,initialize:function(options){options=options||{};if(options.extractStyles!==false){options.defaultStyle={'externalGraphic':OpenLayers.Util.getImagesLocation()+"marker.png",'graphicWidth':21,'graphicHeight':25,'graphicXOffset':-10.5,'graphicYOffset':-12.5};}
-OpenLayers.Format.prototype.initialize.apply(this,[options]);},read:function(text){var lines=text.split('\n');var columns;var features=[];for(var lcv=0;lcv<(lines.length-1);lcv++){var currLine=lines[lcv].replace(/^\s*/,'').replace(/\s*$/,'');if(currLine.charAt(0)!='#'){if(!columns){columns=currLine.split('\t');}else{var vals=currLine.split('\t');var geometry=new OpenLayers.Geometry.Point(0,0);var attributes={};var style=this.defaultStyle?OpenLayers.Util.applyDefaults({},this.defaultStyle [...]
-attributes['title']=vals[valIndex];else if(columns[valIndex]=='image'||columns[valIndex]=='icon'&&style){style['externalGraphic']=vals[valIndex];}else if(columns[valIndex]=='iconSize'&&style){var size=vals[valIndex].split(',');style['graphicWidth']=parseFloat(size[0]);style['graphicHeight']=parseFloat(size[1]);}else if(columns[valIndex]=='iconOffset'&&style){var offset=vals[valIndex].split(',');style['graphicXOffset']=parseFloat(offset[0]);style['graphicYOffset']=parseFloat(offset[1]);}e [...]
-if(set){if(this.internalProjection&&this.externalProjection){geometry.transform(this.externalProjection,this.internalProjection);}
-var feature=new OpenLayers.Feature.Vector(geometry,attributes,style);features.push(feature);}}}}
-return features;},CLASS_NAME:"OpenLayers.Format.Text"});OpenLayers.Layer.Text=OpenLayers.Class(OpenLayers.Layer.Markers,{location:null,features:null,formatOptions:null,selectedFeature:null,initialize:function(name,options){OpenLayers.Layer.Markers.prototype.initialize.apply(this,arguments);this.features=new Array();},destroy:function(){OpenLayers.Layer.Markers.prototype.destroy.apply(this,arguments);this.clearFeatures();this.features=null;},loadText:function(){if(!this.loaded){if(this.lo [...]
-var parser=new OpenLayers.Format.Text(options);var features=parser.read(text);for(var i=0,len=features.length;i<len;i++){var data={};var feature=features[i];var location;var iconSize,iconOffset;location=new OpenLayers.LonLat(feature.geometry.x,feature.geometry.y);if(feature.style.graphicWidth&&feature.style.graphicHeight){iconSize=new OpenLayers.Size(feature.style.graphicWidth,feature.style.graphicHeight);}
-if(feature.style.graphicXOffset!==undefined&&feature.style.graphicYOffset!==undefined){iconOffset=new OpenLayers.Pixel(feature.style.graphicXOffset,feature.style.graphicYOffset);}
-if(feature.style.externalGraphic!=null){data.icon=new OpenLayers.Icon(feature.style.externalGraphic,iconSize,iconOffset);}else{data.icon=OpenLayers.Marker.defaultIcon();if(iconSize!=null){data.icon.setSize(iconSize);}}
-if((feature.attributes.title!=null)&&(feature.attributes.description!=null)){data['popupContentHTML']='<h2>'+feature.attributes.title+'</h2>'+'<p>'+feature.attributes.description+'</p>';}
-data['overflow']=feature.attributes.overflow||"auto";var markerFeature=new OpenLayers.Feature(this,location,data);this.features.push(markerFeature);var marker=markerFeature.createMarker();if((feature.attributes.title!=null)&&(feature.attributes.description!=null)){marker.events.register('click',markerFeature,this.markerClick);}
-this.addMarker(marker);}
-this.events.triggerEvent("loadend");},markerClick:function(evt){var sameMarkerClicked=(this==this.layer.selectedFeature);this.layer.selectedFeature=(!sameMarkerClicked)?this:null;for(var i=0,len=this.layer.map.popups.length;i<len;i++){this.layer.map.removePopup(this.layer.map.popups[i]);}
-if(!sameMarkerClicked){this.layer.map.addPopup(this.createPopup());}
-OpenLayers.Event.stop(evt);},clearFeatures:function(){if(this.features!=null){while(this.features.length>0){var feature=this.features[0];OpenLayers.Util.removeItem(this.features,feature);feature.destroy();}}},CLASS_NAME:"OpenLayers.Layer.Text"});OpenLayers.Handler.RegularPolygon=OpenLayers.Class(OpenLayers.Handler.Drag,{sides:4,radius:null,snapAngle:null,snapToggle:'shiftKey',layerOptions:null,persist:false,irregular:false,angle:null,fixedRadius:false,feature:null,layer:null,origin:null, [...]
-OpenLayers.Handler.Drag.prototype.initialize.apply(this,[control,callbacks,options]);this.options=(options)?options:{};},setOptions:function(newOptions){OpenLayers.Util.extend(this.options,newOptions);OpenLayers.Util.extend(this,newOptions);},activate:function(){var activated=false;if(OpenLayers.Handler.Drag.prototype.activate.apply(this,arguments)){var options=OpenLayers.Util.extend({displayInLayerSwitcher:false,calculateInRange:OpenLayers.Function.True},this.layerOptions);this.layer=ne [...]
-return activated;},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.Drag.prototype.deactivate.apply(this,arguments)){if(this.dragging){this.cancel();}
-if(this.layer.map!=null){this.layer.destroy(false);if(this.feature){this.feature.destroy();}}
-this.layer=null;this.feature=null;deactivated=true;}
-return deactivated;},down:function(evt){this.fixedRadius=!!(this.radius);var maploc=this.map.getLonLatFromPixel(evt.xy);this.origin=new OpenLayers.Geometry.Point(maploc.lon,maploc.lat);if(!this.fixedRadius||this.irregular){this.radius=this.map.getResolution();}
-if(this.persist){this.clear();}
-this.feature=new OpenLayers.Feature.Vector();this.createGeometry();this.callback("create",[this.origin,this.feature]);this.layer.addFeatures([this.feature],{silent:true});this.layer.drawFeature(this.feature,this.style);},move:function(evt){var maploc=this.map.getLonLatFromPixel(evt.xy);var point=new OpenLayers.Geometry.Point(maploc.lon,maploc.lat);if(this.irregular){var ry=Math.sqrt(2)*Math.abs(point.y-this.origin.y)/2;this.radius=Math.max(this.map.getResolution()/2,ry);}else if(this.fix [...]
-this.modifyGeometry();if(this.irregular){var dx=point.x-this.origin.x;var dy=point.y-this.origin.y;var ratio;if(dy==0){ratio=dx/(this.radius*Math.sqrt(2));}else{ratio=dx/dy;}
-this.feature.geometry.resize(1,this.origin,ratio);this.feature.geometry.move(dx/2,dy/2);}
-this.layer.drawFeature(this.feature,this.style);},up:function(evt){this.finalize();if(this.start==this.last){this.callback("done",[evt.xy]);}},out:function(evt){this.finalize();},createGeometry:function(){this.angle=Math.PI*((1/this.sides)-(1/2));if(this.snapAngle){this.angle+=this.snapAngle*(Math.PI/180);}
-this.feature.geometry=OpenLayers.Geometry.Polygon.createRegularPolygon(this.origin,this.radius,this.sides,this.snapAngle);},modifyGeometry:function(){var angle,point;var ring=this.feature.geometry.components[0];if(ring.components.length!=(this.sides+1)){this.createGeometry();ring=this.feature.geometry.components[0];}
-for(var i=0;i<this.sides;++i){point=ring.components[i];angle=this.angle+(i*2*Math.PI/this.sides);point.x=this.origin.x+(this.radius*Math.cos(angle));point.y=this.origin.y+(this.radius*Math.sin(angle));point.clearBounds();}},calculateAngle:function(point,evt){var alpha=Math.atan2(point.y-this.origin.y,point.x-this.origin.x);if(this.snapAngle&&(this.snapToggle&&!evt[this.snapToggle])){var snapAngleRad=(Math.PI/180)*this.snapAngle;this.angle=Math.round(alpha/snapAngleRad)*snapAngleRad;}else [...]
-if(!this.persist&&(name=="done"||name=="cancel")){this.clear();}},CLASS_NAME:"OpenLayers.Handler.RegularPolygon"});OpenLayers.Control.SLDSelect=OpenLayers.Class(OpenLayers.Control,{EVENT_TYPES:["selected"],clearOnDeactivate:false,layers:null,callbacks:null,selectionSymbolizer:{'Polygon':{fillColor:'#FF0000',stroke:false},'Line':{strokeColor:'#FF0000',strokeWidth:2},'Point':{graphicName:'square',fillColor:'#FF0000',pointRadius:5}},layerOptions:null,handlerOptions:null,sketchStyle:null,wfs [...]
-this.handler=new handler(this,this.callbacks,this.handlerOptions);},destroy:function(){for(var key in this.layerCache){delete this.layerCache[key];}
-for(var key in this.wfsCache){delete this.wfsCache[key];}
-OpenLayers.Control.prototype.destroy.apply(this,arguments);},coupleLayerVisiblity:function(evt){this.setVisibility(evt.object.getVisibility());},createSelectionLayer:function(source){var selectionLayer;if(!this.layerCache[source.id]){selectionLayer=new OpenLayers.Layer.WMS(source.name,source.url,source.params,OpenLayers.Util.applyDefaults(this.layerOptions,source.getOptions()));this.layerCache[source.id]=selectionLayer;if(this.layerOptions.displayInLayerSwitcher===false){source.events.on [...]
-this.map.addLayer(selectionLayer);}else{selectionLayer=this.layerCache[source.id];}
-return selectionLayer;},createSLD:function(layer,filters,geometryAttributes){var sld={version:"1.0.0",namedLayers:{}};var layerNames=[layer.params.LAYERS].join(",").split(",");for(var i=0,len=layerNames.length;i<len;i++){var name=layerNames[i];sld.namedLayers[name]={name:name,userStyles:[]};var symbolizer=this.selectionSymbolizer;var geometryAttribute=geometryAttributes[i];if(geometryAttribute.type.indexOf('Polygon')>=0){symbolizer={Polygon:this.selectionSymbolizer['Polygon']};}else if(g [...]
-var filter=filters[i];sld.namedLayers[name].userStyles.push({name:'default',rules:[new OpenLayers.Rule({symbolizer:symbolizer,filter:filter,maxScaleDenominator:layer.options.minScale})]});}
-return new OpenLayers.Format.SLD({srsName:this.map.getProjection()}).write(sld);},parseDescribeLayer:function(request){var format=new OpenLayers.Format.WMSDescribeLayer();var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-var describeLayer=format.read(doc);var typeNames=[];var url=null;for(var i=0,len=describeLayer.length;i<len;i++){if(describeLayer[i].owsType=="WFS"){typeNames.push(describeLayer[i].typeName);url=describeLayer[i].owsURL;}}
-var options={url:url,params:{SERVICE:"WFS",TYPENAME:typeNames.toString(),REQUEST:"DescribeFeatureType",VERSION:"1.0.0"},callback:function(request){var format=new OpenLayers.Format.WFSDescribeFeatureType();var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-var describeFeatureType=format.read(doc);this.control.wfsCache[this.layer.id]=describeFeatureType;this.control._queue&&this.control.applySelection();},scope:this};OpenLayers.Request.GET(options);},getGeometryAttributes:function(layer){var result=[];var cache=this.wfsCache[layer.id];for(var i=0,len=cache.featureTypes.length;i<len;i++){var typeName=cache.featureTypes[i];var properties=typeName.properties;for(var j=0,lenj=properties.length;j<lenj;j++){var property=properties[j];var type=pro [...]
-return result;},activate:function(){var activated=OpenLayers.Control.prototype.activate.call(this);if(activated){for(var i=0,len=this.layers.length;i<len;i++){var layer=this.layers[i];if(layer&&!this.wfsCache[layer.id]){var options={url:layer.url,params:{SERVICE:"WMS",VERSION:layer.params.VERSION,LAYERS:layer.params.LAYERS,REQUEST:"DescribeLayer"},callback:this.parseDescribeLayer,scope:{layer:layer,control:this}};OpenLayers.Request.GET(options);}}}
-return activated;},deactivate:function(){var deactivated=OpenLayers.Control.prototype.deactivate.call(this);if(deactivated){for(var i=0,len=this.layers.length;i<len;i++){var layer=this.layers[i];if(layer&&this.clearOnDeactivate===true){var layerCache=this.layerCache;var selectionLayer=layerCache[layer.id];if(selectionLayer){layer.events.un({"visibilitychanged":this.coupleLayerVisiblity,scope:selectionLayer});selectionLayer.destroy();delete layerCache[layer.id];}}}}
-return deactivated;},setLayers:function(layers){if(this.active){this.deactivate();this.layers=layers;this.activate();}else{this.layers=layers;}},createFilter:function(geometryAttribute,geometry){var filter=null;if(this.handler instanceof OpenLayers.Handler.RegularPolygon){if(this.handler.irregular===true){filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.BBOX,property:geometryAttribute.name,value:geometry.getBounds()});}else{filter=new OpenLayers.Filter.Spatial({type:O [...]
-return filter;},select:function(geometry){this._queue=function(){for(var i=0,len=this.layers.length;i<len;i++){var layer=this.layers[i];var geometryAttributes=this.getGeometryAttributes(layer);var filters=[];for(var j=0,lenj=geometryAttributes.length;j<lenj;j++){var geometryAttribute=geometryAttributes[j];if(geometryAttribute!==null){if(!(geometry instanceof OpenLayers.Geometry)){var point=this.map.getLonLatFromPixel(geometry.xy);geometry=new OpenLayers.Geometry.Point(point.lon,point.lat);}
-var filter=this.createFilter(geometryAttribute,geometry);if(filter!==null){filters.push(filter);}}}
-var selectionLayer=this.createSelectionLayer(layer);var sld=this.createSLD(layer,filters,geometryAttributes);this.events.triggerEvent("selected",{layer:layer,filters:filters});selectionLayer.mergeNewParams({SLD_BODY:sld});delete this._queue;}};this.applySelection();},applySelection:function(){var canApply=true;for(var i=0,len=this.layers.length;i<len;i++){if(!this.wfsCache[this.layers[i].id]){canApply=false;break;}}
-canApply&&this._queue.call(this);},CLASS_NAME:"OpenLayers.Control.SLDSelect"});OpenLayers.Control.Scale=OpenLayers.Class(OpenLayers.Control,{element:null,geodesic:false,initialize:function(element,options){OpenLayers.Control.prototype.initialize.apply(this,[options]);this.element=OpenLayers.Util.getElement(element);},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);if(!this.element){this.element=document.createElement("div");this.div.appendChild(this.element);}
-this.map.events.register('moveend',this,this.updateScale);this.updateScale();return this.div;},updateScale:function(){var scale;if(this.geodesic===true){var units=this.map.getUnits();if(!units){return;}
-var inches=OpenLayers.INCHES_PER_UNIT;scale=(this.map.getGeodesicPixelSize().w||0.000001)*inches["km"]*OpenLayers.DOTS_PER_INCH;}else{scale=this.map.getScale();}
-if(!scale){return;}
-if(scale>=9500&&scale<=950000){scale=Math.round(scale/1000)+"K";}else if(scale>=950000){scale=Math.round(scale/1000000)+"M";}else{scale=Math.round(scale);}
-this.element.innerHTML=OpenLayers.i18n("Scale = 1 : ${scaleDenom}",{'scaleDenom':scale});},CLASS_NAME:"OpenLayers.Control.Scale"});OpenLayers.Control.Button=OpenLayers.Class(OpenLayers.Control,{type:OpenLayers.Control.TYPE_BUTTON,trigger:function(){},CLASS_NAME:"OpenLayers.Control.Button"});OpenLayers.Layer.MapGuide=OpenLayers.Class(OpenLayers.Layer.Grid,{isBaseLayer:true,useHttpTile:false,singleTile:false,useOverlay:false,useAsyncOverlay:true,TILE_PARAMS:{operation:'GETTILEIMAGE',versio [...]
-if(options&&options.useOverlay!=null){this.useOverlay=options.useOverlay;}
-if(this.singleTile){if(this.useOverlay){OpenLayers.Util.applyDefaults(this.params,this.OVERLAY_PARAMS);if(!this.useAsyncOverlay){this.params.version="1.0.0";}}else{OpenLayers.Util.applyDefaults(this.params,this.SINGLE_TILE_PARAMS);}}else{if(this.useHttpTile){OpenLayers.Util.applyDefaults(this.params,this.FOLDER_PARAMS);}else{OpenLayers.Util.applyDefaults(this.params,this.TILE_PARAMS);}
-this.setTileSize(this.defaultSize);}},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.MapGuide(this.name,this.url,this.params,this.getOptions());}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){var url;var center=bounds.getCenterLonLat();var mapSize=this.map.getSize();if(this.singleTile){var params={setdisplaydpi:OpenLayers.DOTS_PER_INCH,setdisplayheight:mapSize.h*this.ratio,setdisplaywidth:mapSize.w*this.ratio,setviewcenterx:center.lon,setviewcentery:center.lat,setviewscale:this.map.getScale()};if(this.useOverlay&&!this.useAsyncOverlay){var getVisParams={};getVisParams=OpenLayers.U [...]
-url=this.getFullRequestString(params);}else{var currentRes=this.map.getResolution();var colidx=Math.floor((bounds.left-this.maxExtent.left)/currentRes);colidx=Math.round(colidx/this.tileSize.w);var rowidx=Math.floor((this.maxExtent.top-bounds.top)/currentRes);rowidx=Math.round(rowidx/this.tileSize.h);if(this.useHttpTile){url=this.getImageFilePath({tilecol:colidx,tilerow:rowidx,scaleindex:this.resolutions.length-this.map.zoom-1});}else{url=this.getFullRequestString({tilecol:colidx,tilerow [...]
-return url;},getFullRequestString:function(newParams,altUrl){var url=(altUrl==null)?this.url:altUrl;if(typeof url=="object"){url=url[Math.floor(Math.random()*url.length)];}
-var requestString=url;var allParams=OpenLayers.Util.extend({},this.params);allParams=OpenLayers.Util.extend(allParams,newParams);var urlParams=OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(url));for(var key in allParams){if(key.toUpperCase()in urlParams){delete allParams[key];}}
-var paramsString=OpenLayers.Util.getParameterString(allParams);paramsString=paramsString.replace(/,/g,"+");if(paramsString!=""){var lastServerChar=url.charAt(url.length-1);if((lastServerChar=="&")||(lastServerChar=="?")){requestString+=paramsString;}else{if(url.indexOf('?')==-1){requestString+='?'+paramsString;}else{requestString+='&'+paramsString;}}}
-return requestString;},getImageFilePath:function(newParams,altUrl){var url=(altUrl==null)?this.url:altUrl;if(typeof url=="object"){url=url[Math.floor(Math.random()*url.length)];}
-var requestString=url;var tileRowGroup="";var tileColGroup="";if(newParams.tilerow<0){tileRowGroup='-';}
-if(newParams.tilerow==0){tileRowGroup+='0';}else{tileRowGroup+=Math.floor(Math.abs(newParams.tilerow/this.params.tileRowsPerFolder))*this.params.tileRowsPerFolder;}
-if(newParams.tilecol<0){tileColGroup='-';}
-if(newParams.tilecol==0){tileColGroup+='0';}else{tileColGroup+=Math.floor(Math.abs(newParams.tilecol/this.params.tileColumnsPerFolder))*this.params.tileColumnsPerFolder;}
-var tilePath='/S'+Math.floor(newParams.scaleindex)
-+'/'+this.params.basemaplayergroupname
-+'/R'+tileRowGroup
-+'/C'+tileColGroup
-+'/'+(newParams.tilerow%this.params.tileRowsPerFolder)
-+'_'+(newParams.tilecol%this.params.tileColumnsPerFolder)
-+'.'+this.params.format;if(this.params.querystring){tilePath+="?"+this.params.querystring;}
-requestString+=tilePath;return requestString;},calculateGridLayout:function(bounds,origin,resolution){var tilelon=resolution*this.tileSize.w;var tilelat=resolution*this.tileSize.h;var offsetlon=bounds.left-origin.lon;var tilecol=Math.floor(offsetlon/tilelon)-this.buffer;var tilecolremain=offsetlon/tilelon-tilecol;var tileoffsetx=-tilecolremain*this.tileSize.w;var tileoffsetlon=origin.lon+tilecol*tilelon;var offsetlat=origin.lat-bounds.top+tilelat;var tilerow=Math.floor(offsetlat/tilelat) [...]
-this.callbacks=OpenLayers.Util.extend(callbacks,this.callbacks);this.handlerOptions=OpenLayers.Util.extend({persist:this.persist},this.handlerOptions);this.handler=new handler(this,this.callbacks,this.handlerOptions);},deactivate:function(){this.cancelDelay();return OpenLayers.Control.prototype.deactivate.apply(this,arguments);},cancel:function(){this.cancelDelay();this.handler.cancel();},setImmediate:function(immediate){this.immediate=immediate;if(this.immediate){this.callbacks.modify=t [...]
-this.handler=new handler(this,this.callbacks,options);if(active){this.activate();}},measureComplete:function(geometry){this.cancelDelay();this.measure(geometry,"measure");},measurePartial:function(point,geometry){this.cancelDelay();geometry=geometry.clone();if(this.handler.freehandMode(this.handler.evt)){this.measure(geometry,"measurepartial");}else{this.delayedTrigger=window.setTimeout(OpenLayers.Function.bind(function(){this.delayedTrigger=null;this.measure(geometry,"measurepartial");} [...]
-this.events.triggerEvent(eventType,{measure:stat[0],units:stat[1],order:order,geometry:geometry});},getBestArea:function(geometry){var units=this.displaySystemUnits[this.displaySystem];var unit,area;for(var i=0,len=units.length;i<len;++i){unit=units[i];area=this.getArea(geometry,unit);if(area>1){break;}}
-return[area,unit];},getArea:function(geometry,units){var area,geomUnits;if(this.geodesic){area=geometry.getGeodesicArea(this.map.getProjectionObject());geomUnits="m";}else{area=geometry.getArea();geomUnits=this.map.getUnits();}
-var inPerDisplayUnit=OpenLayers.INCHES_PER_UNIT[units];if(inPerDisplayUnit){var inPerMapUnit=OpenLayers.INCHES_PER_UNIT[geomUnits];area*=Math.pow((inPerMapUnit/inPerDisplayUnit),2);}
-return area;},getBestLength:function(geometry){var units=this.displaySystemUnits[this.displaySystem];var unit,length;for(var i=0,len=units.length;i<len;++i){unit=units[i];length=this.getLength(geometry,unit);if(length>1){break;}}
-return[length,unit];},getLength:function(geometry,units){var length,geomUnits;if(this.geodesic){length=geometry.getGeodesicLength(this.map.getProjectionObject());geomUnits="m";}else{length=geometry.getLength();geomUnits=this.map.getUnits();}
-var inPerDisplayUnit=OpenLayers.INCHES_PER_UNIT[units];if(inPerDisplayUnit){var inPerMapUnit=OpenLayers.INCHES_PER_UNIT[geomUnits];length*=(inPerMapUnit/inPerDisplayUnit);}
-return length;},CLASS_NAME:"OpenLayers.Control.Measure"});OpenLayers.Layer.KaMap=OpenLayers.Class(OpenLayers.Layer.Grid,{isBaseLayer:true,units:null,resolution:OpenLayers.DOTS_PER_INCH,DEFAULT_PARAMS:{i:'jpeg',map:''},initialize:function(name,url,params,options){var newArguments=[];newArguments.push(name,url,params,options);OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);this.params=OpenLayers.Util.applyDefaults(this.params,this.DEFAULT_PARAMS);},getURL:function(bound [...]
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);if(this.tileSize!=null){obj.tileSize=this.tileSize.clone();}
-obj.grid=[];return obj;},getTileBounds:function(viewPortPx){var resolution=this.getResolution();var tileMapWidth=resolution*this.tileSize.w;var tileMapHeight=resolution*this.tileSize.h;var mapPoint=this.getLonLatFromViewPortPx(viewPortPx);var tileLeft=tileMapWidth*Math.floor(mapPoint.lon/tileMapWidth);var tileBottom=tileMapHeight*Math.floor(mapPoint.lat/tileMapHeight);return new OpenLayers.Bounds(tileLeft,tileBottom,tileLeft+tileMapWidth,tileBottom+tileMapHeight);},CLASS_NAME:"OpenLayers [...]
-this.contentDiv.style.position="absolute";this.contentDiv.style.zIndex=1;if(closeBox){this.closeDiv.style.zIndex=1;}
-this.groupDiv.style.position="absolute";this.groupDiv.style.top="0px";this.groupDiv.style.left="0px";this.groupDiv.style.height="100%";this.groupDiv.style.width="100%";},destroy:function(){this.imageSrc=null;this.imageSize=null;this.isAlphaImage=null;this.fixedRelativePosition=false;this.positionBlocks=null;for(var i=0;i<this.blocks.length;i++){var block=this.blocks[i];if(block.image){block.div.removeChild(block.image);}
-block.image=null;if(block.div){this.groupDiv.removeChild(block.div);}
-block.div=null;}
-this.blocks=null;OpenLayers.Popup.Anchored.prototype.destroy.apply(this,arguments);},setBackgroundColor:function(color){},setBorder:function(){},setOpacity:function(opacity){},setSize:function(contentSize){OpenLayers.Popup.Anchored.prototype.setSize.apply(this,arguments);this.updateBlocks();},updateRelativePosition:function(){this.padding=this.positionBlocks[this.relativePosition].padding;if(this.closeDiv){var contentDivPadding=this.getContentDivPadding();this.closeDiv.style.right=conten [...]
-this.padding.right+"px";this.closeDiv.style.top=contentDivPadding.top+
-this.padding.top+"px";}
-this.updateBlocks();},calculateNewPx:function(px){var newPx=OpenLayers.Popup.Anchored.prototype.calculateNewPx.apply(this,arguments);newPx=newPx.offset(this.positionBlocks[this.relativePosition].offset);return newPx;},createBlocks:function(){this.blocks=[];var firstPosition=null;for(var key in this.positionBlocks){firstPosition=key;break;}
-var position=this.positionBlocks[firstPosition];for(var i=0;i<position.blocks.length;i++){var block={};this.blocks.push(block);var divId=this.id+'_FrameDecorationDiv_'+i;block.div=OpenLayers.Util.createDiv(divId,null,null,null,"absolute",null,"hidden",null);var imgId=this.id+'_FrameDecorationImg_'+i;var imageCreator=(this.isAlphaImage)?OpenLayers.Util.createAlphaImageDiv:OpenLayers.Util.createImage;block.image=imageCreator(imgId,null,this.imageSize,this.imageSrc,"absolute",null,null,null [...]
-if(this.size&&this.relativePosition){var position=this.positionBlocks[this.relativePosition];for(var i=0;i<position.blocks.length;i++){var positionBlock=position.blocks[i];var block=this.blocks[i];var l=positionBlock.anchor.left;var b=positionBlock.anchor.bottom;var r=positionBlock.anchor.right;var t=positionBlock.anchor.top;var w=(isNaN(positionBlock.size.w))?this.size.w-(r+l):positionBlock.size.w;var h=(isNaN(positionBlock.size.h))?this.size.h-(b+t):positionBlock.size.h;block.div.style [...]
-this.contentDiv.style.left=this.padding.left+"px";this.contentDiv.style.top=this.padding.top+"px";}},CLASS_NAME:"OpenLayers.Popup.Framed"});OpenLayers.Popup.FramedCloud=OpenLayers.Class(OpenLayers.Popup.Framed,{contentDisplayClass:"olFramedCloudPopupContent",autoSize:true,panMapIfOutOfView:true,imageSize:new OpenLayers.Size(1276,736),isAlphaImage:false,fixedRelativePosition:false,positionBlocks:{"tl":{'offset':new OpenLayers.Pixel(44,0),'padding':new OpenLayers.Bounds(8,40,8,9),'blocks': [...]
-return true;},initImgDiv:function(){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")){this.removeImgDiv();this.imgDiv=null;}}
-if(this.useIFrame){if(this.imgDiv==null){var eventPane=document.createElement("div");if(OpenLayers.BROWSER_NAME=="msie"){eventPane.style.backgroundColor='#FFFFFF';eventPane.style.filter='chroma(color=#FFFFFF)';}
-OpenLayers.Util.modifyDOMElement(eventPane,null,new OpenLayers.Pixel(0,0),this.layer.getImageSize(),"absolute");this.imgDiv=document.createElement("div");this.imgDiv.appendChild(eventPane);OpenLayers.Util.modifyDOMElement(this.imgDiv,this.id,null,this.layer.getImageSize(),"relative");this.imgDiv.className='olTileImage';this.frame.appendChild(this.imgDiv);this.layer.div.appendChild(this.frame);if(this.layer.opacity!=null){OpenLayers.Util.modifyDOMElement(this.imgDiv,null,null,null,null,nu [...]
-this.imgDiv.map=this.layer.map;}
-this.imgDiv.viewRequestID=this.layer.map.viewRequestID;}else{OpenLayers.Tile.Image.prototype.initImgDiv.apply(this,arguments);}},createIFrame:function(){var id=this.id+'_iFrame';var iframe;if(OpenLayers.BROWSER_NAME=="msie"){iframe=document.createElement('<iframe name="'+id+'">');iframe.style.backgroundColor='#FFFFFF';iframe.style.filter='chroma(color=#FFFFFF)';}
-else{iframe=document.createElement('iframe');iframe.style.backgroundColor='transparent';iframe.name=id;}
-iframe.id=id;iframe.scrolling='no';iframe.marginWidth='0px';iframe.marginHeight='0px';iframe.frameBorder='0';OpenLayers.Util.modifyDOMElement(iframe,id,new OpenLayers.Pixel(0,0),this.layer.getImageSize(),"absolute");var onload=function(){if(this.isLoading){this.isLoading=false;this.events.triggerEvent("loadend");}};OpenLayers.Event.observe(iframe,'load',OpenLayers.Function.bind(onload,this));return iframe;},createRequestForm:function(){var form=document.createElement('form');form.method= [...]
-return form;}};OpenLayers.Geometry.Rectangle=OpenLayers.Class(OpenLayers.Geometry,{x:null,y:null,width:null,height:null,initialize:function(x,y,width,height){OpenLayers.Geometry.prototype.initialize.apply(this,arguments);this.x=x;this.y=y;this.width=width;this.height=height;},calculateBounds:function(){this.bounds=new OpenLayers.Bounds(this.x,this.y,this.x+this.width,this.y+this.height);},getLength:function(){var length=(2*this.width)+(2*this.height);return length;},getArea:function(){va [...]
-this.loadFeaturesForRegion(this.requestSuccess);}},loadFeaturesForRegion:function(success,failure){if(this.request){this.request.abort();}
-this.request=OpenLayers.Request.GET({url:this.url,success:success,failure:failure,scope:this});},requestSuccess:function(request){if(this.features){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-if(this.layer.vectorMode){this.layer.addFeatures(this.layer.formatObject.read(doc));}else{var xml=new OpenLayers.Format.XML();if(typeof doc=="string"){doc=xml.read(doc);}
-var resultFeatures=xml.getElementsByTagNameNS(doc,"http://www.opengis.net/gml","featureMember");this.addResults(resultFeatures);}}
-if(this.events){this.events.triggerEvent("loadend");}
-this.request=null;},addResults:function(results){for(var i=0;i<results.length;i++){var feature=new this.layer.featureClass(this.layer,results[i]);this.features.push(feature);}},destroyAllFeatures:function(){while(this.features.length>0){var feature=this.features.shift();feature.destroy();}},CLASS_NAME:"OpenLayers.Tile.WFS"});OpenLayers.Format.SOSCapabilities=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{defaultVersion:"1.0.0",CLASS_NAME:"OpenLayers.Format.SOSCapabilities"});OpenLa [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var capabilities={};this.readNode(data,capabilities);return capabilities;},readers:{"gml":OpenLayers.Util.applyDefaults({"name":function(node,obj){obj.name=this.getChildValue(node);},"TimePeriod":function(node,obj){obj.timePeriod={};this.readChildNodes(node,obj.timePeriod);},"beginPosition":function(node,timePeriod){timePeriod.beginPosition=this.getChildValue(node);},"endPosition":function(node,timePeriod){timePeriod.endPosition=this.getChildValue(node);}},OpenLayers.Format.GML.v3.protot [...]
-OpenLayers.Event.stop(evt);return propagate;},touchmove:function(evt){if(this.started&&OpenLayers.Event.isMultiTouch(evt)){this.pinching=true;var current=this.getPinchData(evt);this.callback("move",[evt,current]);this.last=current;OpenLayers.Event.stop(evt);}
-return true;},touchend:function(evt){if(this.started){this.started=false;this.pinching=false;this.callback("done",[evt,this.start,this.last]);this.start=null;this.last=null;}
-return true;},activate:function(){var activated=false;if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){this.pinching=false;activated=true;}
-return activated;},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){this.started=false;this.pinching=false;this.start=null;this.last=null;deactivated=true;}
-return deactivated;},getDistance:function(touches){var t0=touches[0];var t1=touches[1];return Math.sqrt(Math.pow(t0.clientX-t1.clientX,2)+
-Math.pow(t0.clientY-t1.clientY,2));},getPinchData:function(evt){var distance=this.getDistance(evt.touches);var scale=distance/this.start.distance;return{distance:distance,delta:this.last.distance-distance,scale:scale};},CLASS_NAME:"OpenLayers.Handler.Pinch"});OpenLayers.Control.MouseDefaults=OpenLayers.Class(OpenLayers.Control,{performedDrag:false,wheelObserver:null,initialize:function(){OpenLayers.Control.prototype.initialize.apply(this,arguments);},destroy:function(){if(this.handler){t [...]
-this.handler=null;this.map.events.un({"click":this.defaultClick,"dblclick":this.defaultDblClick,"mousedown":this.defaultMouseDown,"mouseup":this.defaultMouseUp,"mousemove":this.defaultMouseMove,"mouseout":this.defaultMouseOut,scope:this});OpenLayers.Event.stopObserving(window,"DOMMouseScroll",this.wheelObserver);OpenLayers.Event.stopObserving(window,"mousewheel",this.wheelObserver);OpenLayers.Event.stopObserving(document,"mousewheel",this.wheelObserver);this.wheelObserver=null;OpenLayers [...]
-var notAfterDrag=!this.performedDrag;this.performedDrag=false;return notAfterDrag;},defaultDblClick:function(evt){var newCenter=this.map.getLonLatFromViewPortPx(evt.xy);this.map.setCenter(newCenter,this.map.zoom+1);OpenLayers.Event.stop(evt);return false;},defaultMouseDown:function(evt){if(!OpenLayers.Event.isLeftClick(evt)){return;}
-this.mouseDragStart=evt.xy.clone();this.performedDrag=false;if(evt.shiftKey){this.map.div.style.cursor="crosshair";this.zoomBox=OpenLayers.Util.createDiv('zoomBox',this.mouseDragStart,null,null,"absolute","2px solid red");this.zoomBox.style.backgroundColor="white";this.zoomBox.style.filter="alpha(opacity=50)";this.zoomBox.style.opacity="0.50";this.zoomBox.style.fontSize="1px";this.zoomBox.style.zIndex=this.map.Z_INDEX_BASE["Popup"]-1;this.map.eventsDiv.appendChild(this.zoomBox);}
-document.onselectstart=OpenLayers.Function.False;OpenLayers.Event.stop(evt);},defaultMouseMove:function(evt){this.mousePosition=evt.xy.clone();if(this.mouseDragStart!=null){if(this.zoomBox){var deltaX=Math.abs(this.mouseDragStart.x-evt.xy.x);var deltaY=Math.abs(this.mouseDragStart.y-evt.xy.y);this.zoomBox.style.width=Math.max(1,deltaX)+"px";this.zoomBox.style.height=Math.max(1,deltaY)+"px";if(evt.xy.x<this.mouseDragStart.x){this.zoomBox.style.left=evt.xy.x+"px";}
-if(evt.xy.y<this.mouseDragStart.y){this.zoomBox.style.top=evt.xy.y+"px";}}else{var deltaX=this.mouseDragStart.x-evt.xy.x;var deltaY=this.mouseDragStart.y-evt.xy.y;var size=this.map.getSize();var newXY=new OpenLayers.Pixel(size.w/2+deltaX,size.h/2+deltaY);var newCenter=this.map.getLonLatFromViewPortPx(newXY);this.map.setCenter(newCenter,null,true);this.mouseDragStart=evt.xy.clone();this.map.div.style.cursor="move";}
-this.performedDrag=true;}},defaultMouseUp:function(evt){if(!OpenLayers.Event.isLeftClick(evt)){return;}
-if(this.zoomBox){this.zoomBoxEnd(evt);}else{if(this.performedDrag){this.map.setCenter(this.map.center);}}
-document.onselectstart=null;this.mouseDragStart=null;this.map.div.style.cursor="";},defaultMouseOut:function(evt){if(this.mouseDragStart!=null&&OpenLayers.Util.mouseLeft(evt,this.map.eventsDiv)){if(this.zoomBox){this.removeZoomBox();}
-this.mouseDragStart=null;}},defaultWheelUp:function(evt){if(this.map.getZoom()<=this.map.getNumZoomLevels()){this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),this.map.getZoom()+1);}},defaultWheelDown:function(evt){if(this.map.getZoom()>0){this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),this.map.getZoom()-1);}},zoomBoxEnd:function(evt){if(this.mouseDragStart!=null){if(Math.abs(this.mouseDragStart.x-evt.xy.x)>5||Math.abs(this.mouseDragStart.y-evt.xy.y)>5){var start=this.map.ge [...]
-this.removeZoomBox();}},removeZoomBox:function(){this.map.eventsDiv.removeChild(this.zoomBox);this.zoomBox=null;},onWheelEvent:function(e){var inMap=false;var elem=OpenLayers.Event.element(e);while(elem!=null){if(this.map&&elem==this.map.div){inMap=true;break;}
-elem=elem.parentNode;}
-if(inMap){var delta=0;if(!e){e=window.event;}
-if(e.wheelDelta){delta=e.wheelDelta/120;if(window.opera&&window.opera.version()<9.2){delta=-delta;}}else if(e.detail){delta=-e.detail/3;}
-if(delta){e.xy=this.mousePosition;if(delta<0){this.defaultWheelDown(e);}else{this.defaultWheelUp(e);}}
-OpenLayers.Event.stop(e);}},CLASS_NAME:"OpenLayers.Control.MouseDefaults"});OpenLayers.Format.WFSDescribeFeatureType=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{xsd:"http://www.w3.org/2001/XMLSchema"},readers:{"xsd":{"schema":function(node,obj){var complexTypes=[];var customTypes={};var schema={complexTypes:complexTypes,customTypes:customTypes};this.readChildNodes(node,schema);var attributes=node.attributes;var attr,name;for(var i=0,len=attributes.length;i<len;++i){attr=attribute [...]
-obj.featureTypes=complexTypes;obj.targetPrefix=this.namespaceAlias[obj.targetNamespace];var complexType,customType;for(var i=0,len=complexTypes.length;i<len;++i){complexType=complexTypes[i];customType=customTypes[complexType.typeName];if(customTypes[complexType.typeName]){complexType.typeName=customType.name;}}},"complexType":function(node,obj){var complexType={"typeName":node.getAttribute("name")};this.readChildNodes(node,complexType);obj.complexTypes.push(complexType);},"complexContent [...]
-var type=element.type;if(!type){type={};this.readChildNodes(node,type);element.restriction=type;element.type=type.base;}
-var fullType=type.base||type;element.localType=fullType.split(":").pop();obj.elements.push(element);}
-if(obj.complexTypes){var type=node.getAttribute("type");var localType=type.split(":").pop();obj.customTypes[localType]={"name":node.getAttribute("name"),"type":type};}},"simpleType":function(node,obj){this.readChildNodes(node,obj);},"restriction":function(node,obj){obj.base=node.getAttribute("base");this.readRestriction(node,obj);}}},readRestriction:function(node,obj){var children=node.childNodes;var child,nodeName,value;for(var i=0,len=children.length;i<len;++i){child=children[i];if(chi [...]
-obj[nodeName].push(value);}}}},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 schema={};this.readNode(data,schema);return schema;},CLASS_NAME:"OpenLayers.Format.WFSDescribeFeatureType"});OpenLayers.Strategy.Refresh=OpenLayers.Class(OpenLayers.Strategy,{force:false,interval:0,timer:null,activate:function(){var activated=OpenLayers.Strategy.prototype.activate.call(this);if(activated){if(this.layer.visibility===true){this.start();}
-this.layer.events.on({"visibilitychanged":this.reset,scope:this});}
-return activated;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){this.stop();}
-return deactivated;},reset:function(){if(this.layer.visibility===true){this.start();}else{this.stop();}},start:function(){if(this.interval&&typeof this.interval==="number"&&this.interval>0){this.timer=window.setInterval(OpenLayers.Function.bind(this.refresh,this),this.interval);}},refresh:function(){if(this.layer&&this.layer.refresh&&typeof this.layer.refresh=="function"){this.layer.refresh({force:this.force});}},stop:function(){if(this.timer!==null){window.clearInterval(this.timer);this [...]
-if(this.params.FORMAT=="jpg"){this.params.FORMAT=OpenLayers.Util.alphaHack()?"gif":"png";}}},destroy:function(){OpenLayers.Layer.Grid.prototype.destroy.apply(this,arguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.ArcGIS93Rest(this.name,this.url,this.params,this.getOptions());}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){bounds=this.adjustBounds(bounds);var projWords=this.projection.getCode().split(":");var srid=projWords[projWords.length-1];var imageSize=this.getImageSize();var newParams={'BBOX':bounds.toBBOX(),'SIZE':imageSize.w+","+imageSize.h,'F':"image",'BBOXSR':srid,'IMAGESR':srid};if(this.layerDefs){var layerDefStrList=[];var layerID;for(layerID in this.layerDefs){if(this.layerDefs.hasOwnProperty(layer [...]
-if(layerDefStrList.length>0){newParams['LAYERDEFS']=layerDefStrList.join("");}}
-var requestString=this.getFullRequestString(newParams);return requestString;},setLayerFilter:function(id,queryDef){if(!this.layerDefs){this.layerDefs={};}
-if(queryDef){this.layerDefs[id]=queryDef;}else{delete this.layerDefs[id];}},clearLayerFilter:function(id){if(id){delete this.layerDefs[id];}else{delete this.layerDefs;}},mergeNewParams:function(newParams){var upperParams=OpenLayers.Util.upperCaseObject(newParams);var newArguments=[upperParams];return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this,newArguments);},CLASS_NAME:"OpenLayers.Layer.ArcGIS93Rest"});OpenLayers.Layer.MapServer=OpenLayers.Class(OpenLayers.Layer.Grid,{DEFA [...]
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){bounds=this.adjustBounds(bounds);var extent=[bounds.left,bounds.bottom,bounds.right,bounds.top];var imageSize=this.getImageSize();var url=this.getFullRequestString({mapext:extent,imgext:extent,map_size:[imageSize.w,imageSize.h],imgx:imageSize.w/2,imgy:imageSize.h/2,imgxy:[imageSize.w,imageSize.h]});return url;},getFullRequestString:function(newParams,altUrl){var url=(altUrl==null)?this.url:al [...]
-var urlParams=OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(url));for(var key in allParams){if(key.toUpperCase()in urlParams){delete allParams[key];}}
-paramsString=OpenLayers.Util.getParameterString(allParams);var requestString=url;paramsString=paramsString.replace(/,/g,"+");if(paramsString!=""){var lastServerChar=url.charAt(url.length-1);if((lastServerChar=="&")||(lastServerChar=="?")){requestString+=paramsString;}else{if(url.indexOf('?')==-1){requestString+='?'+paramsString;}else{requestString+='&'+paramsString;}}}
-return requestString;},CLASS_NAME:"OpenLayers.Layer.MapServer"});OpenLayers.Layer.MapServer.Untiled=OpenLayers.Class(OpenLayers.Layer.MapServer,{singleTile:true,initialize:function(name,url,params,options){OpenLayers.Layer.MapServer.prototype.initialize.apply(this,arguments);var msg="The OpenLayers.Layer.MapServer.Untiled class is deprecated and "+"will be removed in 3.0. Instead, you should use the "+"normal OpenLayers.Layer.MapServer class, passing it the option "+"'singleTile' as true [...]
-obj=OpenLayers.Layer.MapServer.prototype.clone.apply(this,[obj]);return obj;},CLASS_NAME:"OpenLayers.Layer.MapServer.Untiled"});OpenLayers.Handler.Hover=OpenLayers.Class(OpenLayers.Handler,{delay:500,pixelTolerance:null,stopMove:false,px:null,timerId:null,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);},mousemove:function(evt){if(this.passesTolerance(evt.xy)){this.clearTimer();this.callback('move',[evt]);this.px=evt.xy;evt=Ope [...]
-return!this.stopMove;},mouseout:function(evt){if(OpenLayers.Util.mouseLeft(evt,this.map.eventsDiv)){this.clearTimer();this.callback('move',[evt]);}
-return true;},passesTolerance:function(px){var passes=true;if(this.pixelTolerance&&this.px){var dpx=Math.sqrt(Math.pow(this.px.x-px.x,2)+
-Math.pow(this.px.y-px.y,2));if(dpx<this.pixelTolerance){passes=false;}}
-return passes;},clearTimer:function(){if(this.timerId!=null){window.clearTimeout(this.timerId);this.timerId=null;}},delayedCall:function(evt){this.callback('pause',[evt]);},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){this.clearTimer();deactivated=true;}
-return deactivated;},CLASS_NAME:"OpenLayers.Handler.Hover"});OpenLayers.Control.GetFeature=OpenLayers.Class(OpenLayers.Control,{protocol:null,multipleKey:null,toggleKey:null,modifiers:null,multiple:false,click:true,single:true,clickout:true,toggle:false,clickTolerance:5,hover:false,box:false,maxFeatures:10,features:null,hoverFeature:null,handlerOptions:null,handlers:null,hoverResponse:null,filterType:OpenLayers.Filter.Spatial.BBOX,EVENT_TYPES:["featureselected","featuresselected","featur [...]
-if(this.box){this.handlers.box=new OpenLayers.Handler.Box(this,{done:this.selectBox},OpenLayers.Util.extend(this.handlerOptions.box,{boxDivClassName:"olHandlerBoxSelectFeature"}));}
-if(this.hover){this.handlers.hover=new OpenLayers.Handler.Hover(this,{'move':this.cancelHover,'pause':this.selectHover},OpenLayers.Util.extend(this.handlerOptions.hover,{'delay':250}));}},activate:function(){if(!this.active){for(var i in this.handlers){this.handlers[i].activate();}}
-return OpenLayers.Control.prototype.activate.apply(this,arguments);},deactivate:function(){if(this.active){for(var i in this.handlers){this.handlers[i].deactivate();}}
-return OpenLayers.Control.prototype.deactivate.apply(this,arguments);},selectClick:function(evt){var bounds=this.pixelToBounds(evt.xy);this.setModifiers(evt);this.request(bounds,{single:this.single});},selectBox:function(position){var bounds;if(position instanceof OpenLayers.Bounds){var minXY=this.map.getLonLatFromPixel(new OpenLayers.Pixel(position.left,position.bottom));var maxXY=this.map.getLonLatFromPixel(new OpenLayers.Pixel(position.right,position.top));bounds=new OpenLayers.Bounds [...]
-bounds=this.pixelToBounds(position);}
-this.setModifiers(this.handlers.box.dragHandler.evt);this.request(bounds);},selectHover:function(evt){var bounds=this.pixelToBounds(evt.xy);this.request(bounds,{single:true,hover:true});},cancelHover:function(){if(this.hoverResponse){this.protocol.abort(this.hoverResponse);this.hoverResponse=null;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olCursorWait");}},request:function(bounds,options){options=options||{};var filter=new OpenLayers.Filter.Spatial({type:this.filterType,value:b [...]
-OpenLayers.Element.removeClass(this.map.viewPortDiv,"olCursorWait");},scope:this});if(options.hover==true){this.hoverResponse=response;}},selectBestFeature:function(features,clickPosition,options){options=options||{};if(features.length){var point=new OpenLayers.Geometry.Point(clickPosition.lon,clickPosition.lat);var feature,resultFeature,dist;var minDist=Number.MAX_VALUE;for(var i=0;i<features.length;++i){feature=features[i];if(feature.geometry){dist=point.distanceTo(feature.geometry,{ed [...]
-if(options.hover==true){this.hoverSelect(resultFeature);}else{this.select(resultFeature||features);}}},setModifiers:function(evt){this.modifiers={multiple:this.multiple||(this.multipleKey&&evt[this.multipleKey]),toggle:this.toggle||(this.toggleKey&&evt[this.toggleKey])};},select:function(features){if(!this.modifiers.multiple&&!this.modifiers.toggle){this.unselectAll();}
-if(!(OpenLayers.Util.isArray(features))){features=[features];}
-var cont=this.events.triggerEvent("beforefeaturesselected",{features:features});if(cont!==false){var selectedFeatures=[];var feature;for(var i=0,len=features.length;i<len;++i){feature=features[i];if(this.features[feature.fid||feature.id]){if(this.modifiers.toggle){this.unselect(this.features[feature.fid||feature.id]);}}else{cont=this.events.triggerEvent("beforefeatureselected",{feature:feature});if(cont!==false){this.features[feature.fid||feature.id]=feature;selectedFeatures.push(feature [...]
-this.events.triggerEvent("featuresselected",{features:selectedFeatures});}},hoverSelect:function(feature){var fid=feature?feature.fid||feature.id:null;var hfid=this.hoverFeature?this.hoverFeature.fid||this.hoverFeature.id:null;if(hfid&&hfid!=fid){this.events.triggerEvent("outfeature",{feature:this.hoverFeature});this.hoverFeature=null;}
-if(fid&&fid!=hfid){this.events.triggerEvent("hoverfeature",{feature:feature});this.hoverFeature=feature;}},unselect:function(feature){delete this.features[feature.fid||feature.id];this.events.triggerEvent("featureunselected",{feature:feature});},unselectAll:function(){for(var fid in this.features){this.unselect(this.features[fid]);}},setMap:function(map){for(var i in this.handlers){this.handlers[i].setMap(map);}
-OpenLayers.Control.prototype.setMap.apply(this,arguments);},pixelToBounds:function(pixel){var llPx=pixel.add(-this.clickTolerance/2,this.clickTolerance/2);var urPx=pixel.add(this.clickTolerance/2,-this.clickTolerance/2);var ll=this.map.getLonLatFromPixel(llPx);var ur=this.map.getLonLatFromPixel(urPx);return new OpenLayers.Bounds(ll.lon,ll.lat,ur.lon,ur.lat);},CLASS_NAME:"OpenLayers.Control.GetFeature"});OpenLayers.Format.QueryStringFilter=(function(){var cmpToStr={};cmpToStr[OpenLayers.F [...]
-return OpenLayers.Class(OpenLayers.Format,{wildcarded:false,srsInBBOX:false,write:function(filter,params){params=params||{};var className=filter.CLASS_NAME;var filterType=className.substring(className.lastIndexOf(".")+1);switch(filterType){case"Spatial":switch(filter.type){case OpenLayers.Filter.Spatial.BBOX:params.bbox=filter.value.toArray();if(this.srsInBBOX&&filter.projection){params.bbox.push(filter.projection.getCode());}
-break;case OpenLayers.Filter.Spatial.DWITHIN:params.tolerance=filter.distance;case OpenLayers.Filter.Spatial.WITHIN:params.lon=filter.value.x;params.lat=filter.value.y;break;default:OpenLayers.Console.warn("Unknown spatial filter type "+filter.type);}
-break;case"Comparison":var op=cmpToStr[filter.type];if(op!==undefined){var value=filter.value;if(filter.type==OpenLayers.Filter.Comparison.LIKE){value=regex2value(value);if(this.wildcarded){value="%"+value+"%";}}
-params[filter.property+"__"+op]=value;params.queryable=params.queryable||[];params.queryable.push(filter.property);}else{OpenLayers.Console.warn("Unknown comparison filter type "+filter.type);}
-break;case"Logical":if(filter.type===OpenLayers.Filter.Logical.AND){for(var i=0,len=filter.filters.length;i<len;i++){params=this.write(filter.filters[i],params);}}else{OpenLayers.Console.warn("Unsupported logical filter type "+filter.type);}
-break;default:OpenLayers.Console.warn("Unknown filter type "+filterType);}
-return params;},CLASS_NAME:"OpenLayers.Format.QueryStringFilter"});})();OpenLayers.Format.SOSGetFeatureOfInterest=OpenLayers.Class(OpenLayers.Format.XML,{VERSION:"1.0.0",namespaces:{sos:"http://www.opengis.net/sos/1.0",gml:"http://www.opengis.net/gml",sa:"http://www.opengis.net/sampling/1.0",xsi:"http://www.w3.org/2001/XMLSchema-instance"},schemaLocation:"http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosAll.xsd",defaultPrefix:"sos",regExes:{trimSpace:(/^\s*|\s*$/g), [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var info={features:[]};this.readNode(data,info);var features=[];for(var i=0,len=info.features.length;i<len;i++){var container=info.features[i];if(this.internalProjection&&this.externalProjection&&container.components[0]){container.components[0].transform(this.externalProjection,this.internalProjection);}
-var feature=new OpenLayers.Feature.Vector(container.components[0],container.attributes);features.push(feature);}
-return features;},readers:{"sa":{"SamplingPoint":function(node,obj){if(!obj.attributes){var feature={attributes:{}};obj.features.push(feature);obj=feature;}
-obj.attributes.id=this.getAttributeNS(node,this.namespaces.gml,"id");this.readChildNodes(node,obj);},"position":function(node,obj){this.readChildNodes(node,obj);}},"gml":OpenLayers.Util.applyDefaults({"FeatureCollection":function(node,obj){this.readChildNodes(node,obj);},"featureMember":function(node,obj){var feature={attributes:{}};obj.features.push(feature);this.readChildNodes(node,feature);},"name":function(node,obj){obj.attributes.name=this.getChildValue(node);},"pos":function(node,o [...]
-OpenLayers.Format.GML.v3.prototype.readers.gml.pos.apply(this,[node,obj]);}},OpenLayers.Format.GML.v3.prototype.readers.gml)},writers:{"sos":{"GetFeatureOfInterest":function(options){var node=this.createElementNSPlus("GetFeatureOfInterest",{attributes:{version:this.VERSION,service:'SOS',"xsi:schemaLocation":this.schemaLocation}});for(var i=0,len=options.fois.length;i<len;i++){this.writeNode("FeatureOfInterestId",{foi:options.fois[i]},node);}
-return node;},"FeatureOfInterestId":function(options){var node=this.createElementNSPlus("FeatureOfInterestId",{value:options.foi});return node;}}},CLASS_NAME:"OpenLayers.Format.SOSGetFeatureOfInterest"});OpenLayers.Format.SOSGetObservation=OpenLayers.Class(OpenLayers.Format.XML,{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/sa [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var info={measurements:[],observations:[]};this.readNode(data,info);return info;},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]);},readers:{"om":{"ObservationCollection":function(node,obj){obj.id=this.getAttrib [...]
-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); [...]
-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(opti [...]
-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"});OpenLayers.Control.MousePosition=Op [...]
-return this.div;},redraw:function(evt){var lonLat;if(evt==null){this.reset();return;}else{if(this.lastXy==null||Math.abs(evt.xy.x-this.lastXy.x)>this.granularity||Math.abs(evt.xy.y-this.lastXy.y)>this.granularity)
-{this.lastXy=evt.xy;return;}
-lonLat=this.map.getLonLatFromPixel(evt.xy);if(!lonLat){return;}
-if(this.displayProjection){lonLat.transform(this.map.getProjectionObject(),this.displayProjection);}
-this.lastXy=evt.xy;}
-var newHtml=this.formatOutput(lonLat);if(newHtml!=this.element.innerHTML){this.element.innerHTML=newHtml;}},reset:function(evt){if(this.emptyString!=null){this.element.innerHTML=this.emptyString;}},formatOutput:function(lonLat){var digits=parseInt(this.numDigits);var newHtml=this.prefix+
-lonLat.lon.toFixed(digits)+
-this.separator+
-lonLat.lat.toFixed(digits)+
-this.suffix;return newHtml;},CLASS_NAME:"OpenLayers.Control.MousePosition"});OpenLayers.Control.Geolocate=OpenLayers.Class(OpenLayers.Control,{EVENT_TYPES:["locationupdated","locationfailed","locationuncapable"],geolocation:navigator.geolocation,bind:true,watch:false,geolocationOptions:null,initialize:function(options){this.EVENT_TYPES=OpenLayers.Control.Geolocate.prototype.EVENT_TYPES.concat(OpenLayers.Control.prototype.EVENT_TYPES);this.geolocationOptions={};OpenLayers.Control.prototyp [...]
-if(OpenLayers.Control.prototype.activate.apply(this,arguments)){if(this.watch){this.watchId=this.geolocation.watchPosition(OpenLayers.Function.bind(this.geolocate,this),OpenLayers.Function.bind(this.failure,this),this.geolocationOptions);}else{this.getCurrentLocation();}
-return true;}
-return false;},deactivate:function(){if(this.active&&this.watchId!==null){this.geolocation.clearWatch(this.watchId);}
-return OpenLayers.Control.prototype.deactivate.apply(this,arguments);},geolocate:function(position){var center=new OpenLayers.LonLat(position.coords.longitude,position.coords.latitude).transform(new OpenLayers.Projection("EPSG:4326"),this.map.getProjectionObject());if(this.bind){this.map.setCenter(center);}
-this.events.triggerEvent("locationupdated",{position:position,point:new OpenLayers.Geometry.Point(center.lon,center.lat)});},getCurrentLocation:function(){if(!this.active||this.watch){return false;}
-this.geolocation.getCurrentPosition(OpenLayers.Function.bind(this.geolocate,this),OpenLayers.Function.bind(this.failure,this),this.geolocationOptions);return true;},failure:function(error){this.events.triggerEvent("locationfailed",{error:error});},CLASS_NAME:"OpenLayers.Control.Geolocate"});OpenLayers.Control.NavigationHistory=OpenLayers.Class(OpenLayers.Control,{type:OpenLayers.Control.TYPE_TOGGLE,previous:null,previousOptions:null,next:null,nextOptions:null,limit:50,autoActivate:true,c [...]
-return state;},nextTrigger:function(){var state=this.nextStack.shift();if(state!=undefined){this.previousStack.unshift(state);this.restoring=true;this.restore(state);this.restoring=false;this.onNextChange(this.nextStack[0],this.nextStack.length);this.onPreviousChange(this.previousStack[1],this.previousStack.length-1);}
-return state;},clear:function(){this.previousStack=[];this.previous.deactivate();this.nextStack=[];this.next.deactivate();},getState:function(){return{center:this.map.getCenter(),resolution:this.map.getResolution(),projection:this.map.getProjectionObject(),units:this.map.getProjectionObject().getUnits()||this.map.units||this.map.baseLayer.units};},restore:function(state){var center,zoom;if(this.map.getProjectionObject()==state.projection){zoom=this.map.getZoomForResolution(state.resoluti [...]
-this.map.setCenter(center,zoom);},setListeners:function(){this.listeners={};for(var type in this.registry){this.listeners[type]=OpenLayers.Function.bind(function(){if(!this.restoring){var state=this.registry[type].apply(this,arguments);this.previousStack.unshift(state);if(this.previousStack.length>1){this.onPreviousChange(this.previousStack[1],this.previousStack.length-1);}
-if(this.previousStack.length>(this.limit+1)){this.previousStack.pop();}
-if(this.nextStack.length>0){this.nextStack=[];this.onNextChange(null,0);}}
-return true;},this);}},activate:function(){var activated=false;if(this.map){if(OpenLayers.Control.prototype.activate.apply(this)){if(this.listeners==null){this.setListeners();}
-for(var type in this.listeners){this.map.events.register(type,this,this.listeners[type]);}
-activated=true;if(this.previousStack.length==0){this.initStack();}}}
-return activated;},initStack:function(){if(this.map.getCenter()){this.listeners.moveend();}},deactivate:function(){var deactivated=false;if(this.map){if(OpenLayers.Control.prototype.deactivate.apply(this)){for(var type in this.listeners){this.map.events.unregister(type,this,this.listeners[type]);}
-if(this.clearOnDeactivate){this.clear();}
-deactivated=true;}}
-return deactivated;},CLASS_NAME:"OpenLayers.Control.NavigationHistory"});OpenLayers.Protocol.HTTP=OpenLayers.Class(OpenLayers.Protocol,{url:null,headers:null,params:null,callback:null,scope:null,readWithPOST:false,wildcarded:false,srsInBBOX:false,initialize:function(options){options=options||{};this.params={};this.headers={};OpenLayers.Protocol.prototype.initialize.apply(this,arguments);if(!this.filterToParams&&OpenLayers.Format.QueryStringFilter){var format=new OpenLayers.Format.QuerySt [...]
-var readWithPOST=(options.readWithPOST!==undefined)?options.readWithPOST:this.readWithPOST;var resp=new OpenLayers.Protocol.Response({requestType:"read"});if(readWithPOST){resp.priv=OpenLayers.Request.POST({url:options.url,callback:this.createCallback(this.handleRead,resp,options),data:OpenLayers.Util.getParameterString(options.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}});}else{resp.priv=OpenLayers.Request.GET({url:options.url,callback:this.createCallback(this.h [...]
-return resp;},handleRead:function(resp,options){this.handleResponse(resp,options);},create:function(features,options){options=OpenLayers.Util.applyDefaults(options,this.options);var resp=new OpenLayers.Protocol.Response({reqFeatures:features,requestType:"create"});resp.priv=OpenLayers.Request.POST({url:options.url,callback:this.createCallback(this.handleCreate,resp,options),headers:options.headers,data:this.format.write(features)});return resp;},handleCreate:function(resp,options){this.h [...]
-resp.code=OpenLayers.Protocol.Response.SUCCESS;}else{resp.code=OpenLayers.Protocol.Response.FAILURE;}
-options.callback.call(options.scope,resp);}},parseFeatures:function(request){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-if(!doc||doc.length<=0){return null;}
-return this.format.read(doc);},commit:function(features,options){options=OpenLayers.Util.applyDefaults(options,this.options);var resp=[],nResponses=0;var types={};types[OpenLayers.State.INSERT]=[];types[OpenLayers.State.UPDATE]=[];types[OpenLayers.State.DELETE]=[];var feature,list,requestFeatures=[];for(var i=0,len=features.length;i<len;++i){feature=features[i];list=types[feature.state];if(list){list.push(feature);requestFeatures.push(feature);}}
-var nRequests=(types[OpenLayers.State.INSERT].length>0?1:0)+
-types[OpenLayers.State.UPDATE].length+
-types[OpenLayers.State.DELETE].length;var success=true;var finalResponse=new OpenLayers.Protocol.Response({reqFeatures:requestFeatures});function insertCallback(response){var len=response.features?response.features.length:0;var fids=new Array(len);for(var i=0;i<len;++i){fids[i]=response.features[i].fid;}
-finalResponse.insertIds=fids;callback.apply(this,[response]);}
-function callback(response){this.callUserCallback(response,options);success=success&&response.success();nResponses++;if(nResponses>=nRequests){if(options.callback){finalResponse.code=success?OpenLayers.Protocol.Response.SUCCESS:OpenLayers.Protocol.Response.FAILURE;options.callback.apply(options.scope,[finalResponse]);}}}
-var queue=types[OpenLayers.State.INSERT];if(queue.length>0){resp.push(this.create(queue,OpenLayers.Util.applyDefaults({callback:insertCallback,scope:this},options.create)));}
-queue=types[OpenLayers.State.UPDATE];for(var i=queue.length-1;i>=0;--i){resp.push(this.update(queue[i],OpenLayers.Util.applyDefaults({callback:callback,scope:this},options.update)));}
-queue=types[OpenLayers.State.DELETE];for(var i=queue.length-1;i>=0;--i){resp.push(this["delete"](queue[i],OpenLayers.Util.applyDefaults({callback:callback,scope:this},options["delete"])));}
-return resp;},abort:function(response){if(response){response.priv.abort();}},callUserCallback:function(resp,options){var opt=options[resp.requestType];if(opt&&opt.callback){opt.callback.call(opt.scope,resp);}},CLASS_NAME:"OpenLayers.Protocol.HTTP"});OpenLayers.Format.CSWGetDomain=function(options){options=OpenLayers.Util.applyDefaults(options,OpenLayers.Format.CSWGetDomain.DEFAULTS);var cls=OpenLayers.Format.CSWGetDomain["v"+options.version.replace(/\./g,"_")];if(!cls){throw"Unsupported  [...]
-return new cls(options);};OpenLayers.Format.CSWGetDomain.DEFAULTS={"version":"2.0.2"};OpenLayers.Format.CSWGetDomain.v2_0_2=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{xlink:"http://www.w3.org/1999/xlink",xsi:"http://www.w3.org/2001/XMLSchema-instance",csw:"http://www.opengis.net/cat/csw/2.0.2"},defaultPrefix:"csw",version:"2.0.2",schemaLocation:"http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd",PropertyName:null,ParameterName:null,initi [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var obj={};this.readNode(data,obj);return obj;},readers:{"csw":{"GetDomainResponse":function(node,obj){this.readChildNodes(node,obj);},"DomainValues":function(node,obj){if(!(OpenLayers.Util.isArray(obj.DomainValues))){obj.DomainValues=[];}
-var attrs=node.attributes;var domainValue={};for(var i=0,len=attrs.length;i<len;++i){domainValue[attrs[i].name]=attrs[i].nodeValue;}
-this.readChildNodes(node,domainValue);obj.DomainValues.push(domainValue);},"PropertyName":function(node,obj){obj.PropertyName=this.getChildValue(node);},"ParameterName":function(node,obj){obj.ParameterName=this.getChildValue(node);},"ListOfValues":function(node,obj){if(!(OpenLayers.Util.isArray(obj.ListOfValues))){obj.ListOfValues=[];}
-this.readChildNodes(node,obj.ListOfValues);},"Value":function(node,obj){var attrs=node.attributes;var value={};for(var i=0,len=attrs.length;i<len;++i){value[attrs[i].name]=attrs[i].nodeValue;}
-value.value=this.getChildValue(node);obj.push({Value:value});},"ConceptualScheme":function(node,obj){obj.ConceptualScheme={};this.readChildNodes(node,obj.ConceptualScheme);},"Name":function(node,obj){obj.Name=this.getChildValue(node);},"Document":function(node,obj){obj.Document=this.getChildValue(node);},"Authority":function(node,obj){obj.Authority=this.getChildValue(node);},"RangeOfValues":function(node,obj){obj.RangeOfValues={};this.readChildNodes(node,obj.RangeOfValues);},"MinValue":f [...]
-value.value=this.getChildValue(node);obj.MinValue=value;},"MaxValue":function(node,obj){var attrs=node.attributes;var value={};for(var i=0,len=attrs.length;i<len;++i){value[attrs[i].name]=attrs[i].nodeValue;}
-value.value=this.getChildValue(node);obj.MaxValue=value;}}},write:function(options){var node=this.writeNode("csw:GetDomain",options);return OpenLayers.Format.XML.prototype.write.apply(this,[node]);},writers:{"csw":{"GetDomain":function(options){var node=this.createElementNSPlus("csw:GetDomain",{attributes:{service:"CSW",version:this.version}});if(options.PropertyName||this.PropertyName){this.writeNode("csw:PropertyName",options.PropertyName||this.PropertyName,node);}else if(options.Param [...]
-this.readChildNodes(node,options);return node;},"PropertyName":function(value){var node=this.createElementNSPlus("csw:PropertyName",{value:value});return node;},"ParameterName":function(value){var node=this.createElementNSPlus("csw:ParameterName",{value:value});return node;}}},CLASS_NAME:"OpenLayers.Format.CSWGetDomain.v2_0_2"});OpenLayers.Strategy.Cluster=OpenLayers.Class(OpenLayers.Strategy,{distance:20,threshold:null,features:null,clusters:null,clustering:false,resolution:null,activat [...]
-return activated;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){this.clearCache();this.layer.events.un({"beforefeaturesadded":this.cacheFeatures,"moveend":this.cluster,scope:this});}
-return deactivated;},cacheFeatures:function(event){var propagate=true;if(!this.clustering){this.clearCache();this.features=event.features;this.cluster();propagate=false;}
-return propagate;},clearCache:function(){this.features=null;},cluster:function(event){if((!event||event.zoomChanged)&&this.features){var resolution=this.layer.map.getResolution();if(resolution!=this.resolution||!this.clustersExist()){this.resolution=resolution;var clusters=[];var feature,clustered,cluster;for(var i=0;i<this.features.length;++i){feature=this.features[i];if(feature.geometry){clustered=false;for(var j=clusters.length-1;j>=0;--j){cluster=clusters[j];if(this.shouldCluster(clu [...]
-if(!clustered){clusters.push(this.createCluster(this.features[i]));}}}
-this.layer.removeAllFeatures();if(clusters.length>0){if(this.threshold>1){var clone=clusters.slice();clusters=[];var candidate;for(var i=0,len=clone.length;i<len;++i){candidate=clone[i];if(candidate.attributes.count<this.threshold){Array.prototype.push.apply(clusters,candidate.cluster);}else{clusters.push(candidate);}}}
-this.clustering=true;this.layer.addFeatures(clusters);this.clustering=false;}
-this.clusters=clusters;}}},clustersExist:function(){var exist=false;if(this.clusters&&this.clusters.length>0&&this.clusters.length==this.layer.features.length){exist=true;for(var i=0;i<this.clusters.length;++i){if(this.clusters[i]!=this.layer.features[i]){exist=false;break;}}}
-return exist;},shouldCluster:function(cluster,feature){var cc=cluster.geometry.getBounds().getCenterLonLat();var fc=feature.geometry.getBounds().getCenterLonLat();var distance=(Math.sqrt(Math.pow((cc.lon-fc.lon),2)+Math.pow((cc.lat-fc.lat),2))/this.resolution);return(distance<=this.distance);},addToCluster:function(cluster,feature){cluster.cluster.push(feature);cluster.attributes.count+=1;},createCluster:function(feature){var center=feature.geometry.getBounds().getCenterLonLat();var clus [...]
-return activated;},deactivate:function(){this.cache=null;if(this.layer&&this.layer.events){this.layer.events.un({"beforefeaturesadded":this.handleAdd,"beforefeaturesremoved":this.handleRemove,scope:this});}
-return OpenLayers.Strategy.prototype.deactivate.apply(this,arguments);},handleAdd:function(event){if(!this.caching&&this.filter){var features=event.features;event.features=[];var feature;for(var i=0,ii=features.length;i<ii;++i){feature=features[i];if(this.filter.evaluate(feature)){event.features.push(feature);}else{this.cache.push(feature);}}}},handleRemove:function(event){if(!this.caching){this.cache=[];}},setFilter:function(filter){this.filter=filter;var previousCache=this.cache;this.c [...]
-if(previousCache.length>0){var event={features:previousCache};this.handleAdd(event);if(event.features.length>0){this.caching=true;this.layer.addFeatures(event.features);this.caching=false;}}},CLASS_NAME:"OpenLayers.Strategy.Filter"});OpenLayers.Protocol.SOS=function(options){options=OpenLayers.Util.applyDefaults(options,OpenLayers.Protocol.SOS.DEFAULTS);var cls=OpenLayers.Protocol.SOS["v"+options.version.replace(/\./g,"_")];if(!cls){throw"Unsupported SOS version: "+options.version;}
-return new cls(options);};OpenLayers.Protocol.SOS.DEFAULTS={"version":"1.0.0"};OpenLayers.Format.GeoRSS=OpenLayers.Class(OpenLayers.Format.XML,{rssns:"http://backend.userland.com/rss2",featureNS:"http://mapserver.gis.umn.edu/mapserver",georssns:"http://www.georss.org/georss",geons:"http://www.w3.org/2003/01/geo/wgs84_pos#",featureTitle:"Untitled",featureDescription:"No Description",gmlParser:null,xy:false,createGeometryFromItem:function(item){var point=this.getElementsByTagNameNS(item,th [...]
-var geometry=new OpenLayers.Geometry.Point(parseFloat(location[1]),parseFloat(location[0]));}else if(line.length>0){var coords=OpenLayers.String.trim(this.concatChildValues(line[0])).split(/\s+/);var components=[];var point;for(var i=0,len=coords.length;i<len;i+=2){point=new OpenLayers.Geometry.Point(parseFloat(coords[i+1]),parseFloat(coords[i]));components.push(point);}
-geometry=new OpenLayers.Geometry.LineString(components);}else if(polygon.length>0){var coords=OpenLayers.String.trim(this.concatChildValues(polygon[0])).split(/\s+/);var components=[];var point;for(var i=0,len=coords.length;i<len;i+=2){point=new OpenLayers.Geometry.Point(parseFloat(coords[i+1]),parseFloat(coords[i]));components.push(point);}
-geometry=new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]);}else if(where.length>0){if(!this.gmlParser){this.gmlParser=new OpenLayers.Format.GML({'xy':this.xy});}
-var feature=this.gmlParser.parseFeature(where[0]);geometry=feature.geometry;}else if(box.length>0){var coords=OpenLayers.String.trim(box[0].firstChild.nodeValue).split(/\s+/);var components=[];var point;if(coords.length>3){point=new OpenLayers.Geometry.Point(parseFloat(coords[1]),parseFloat(coords[0]));components.push(point);point=new OpenLayers.Geometry.Point(parseFloat(coords[1]),parseFloat(coords[2]));components.push(point);point=new OpenLayers.Geometry.Point(parseFloat(coords[3]),par [...]
-geometry=new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]);}
-if(geometry&&this.internalProjection&&this.externalProjection){geometry.transform(this.externalProjection,this.internalProjection);}
-return geometry;},createFeatureFromItem:function(item){var geometry=this.createGeometryFromItem(item);var title=this.getChildValue(item,"*","title",this.featureTitle);var description=this.getChildValue(item,"*","description",this.getChildValue(item,"*","content",this.getChildValue(item,"*","summary",this.featureDescription)));var link=this.getChildValue(item,"*","link");if(!link){try{link=this.getElementsByTagNameNS(item,"*","link")[0].getAttribute("href");}catch(e){link=null;}}
-var id=this.getChildValue(item,"*","id",null);var data={"title":title,"description":description,"link":link};var feature=new OpenLayers.Feature.Vector(geometry,data);feature.fid=id;return feature;},getChildValue:function(node,nsuri,name,def){var value;var eles=this.getElementsByTagNameNS(node,nsuri,name);if(eles&&eles[0]&&eles[0].firstChild&&eles[0].firstChild.nodeValue){value=OpenLayers.Format.XML.prototype.getChildValue(eles[0]);}else{value=(def==undefined)?"":def;}
-return value;},read:function(doc){if(typeof doc=="string"){doc=OpenLayers.Format.XML.prototype.read.apply(this,[doc]);}
-var itemlist=null;itemlist=this.getElementsByTagNameNS(doc,'*','item');if(itemlist.length==0){itemlist=this.getElementsByTagNameNS(doc,'*','entry');}
-var numItems=itemlist.length;var features=new Array(numItems);for(var i=0;i<numItems;i++){features[i]=this.createFeatureFromItem(itemlist[i]);}
-return features;},write:function(features){var georss;if(OpenLayers.Util.isArray(features)){georss=this.createElementNS(this.rssns,"rss");for(var i=0,len=features.length;i<len;i++){georss.appendChild(this.createFeatureXML(features[i]));}}else{georss=this.createFeatureXML(features);}
-return OpenLayers.Format.XML.prototype.write.apply(this,[georss]);},createFeatureXML:function(feature){var geometryNode=this.buildGeometryNode(feature.geometry);var featureNode=this.createElementNS(this.rssns,"item");var titleNode=this.createElementNS(this.rssns,"title");titleNode.appendChild(this.createTextNode(feature.attributes.title?feature.attributes.title:""));var descNode=this.createElementNS(this.rssns,"description");descNode.appendChild(this.createTextNode(feature.attributes.des [...]
-for(var attr in feature.attributes){if(attr=="link"||attr=="title"||attr=="description"){continue;}
-var attrText=this.createTextNode(feature.attributes[attr]);var nodename=attr;if(attr.search(":")!=-1){nodename=attr.split(":")[1];}
-var attrContainer=this.createElementNS(this.featureNS,"feature:"+nodename);attrContainer.appendChild(attrText);featureNode.appendChild(attrContainer);}
-featureNode.appendChild(geometryNode);return featureNode;},buildGeometryNode:function(geometry){if(this.internalProjection&&this.externalProjection){geometry=geometry.clone();geometry.transform(this.internalProjection,this.externalProjection);}
-var node;if(geometry.CLASS_NAME=="OpenLayers.Geometry.Polygon"){node=this.createElementNS(this.georssns,'georss:polygon');node.appendChild(this.buildCoordinatesNode(geometry.components[0]));}
-else if(geometry.CLASS_NAME=="OpenLayers.Geometry.LineString"){node=this.createElementNS(this.georssns,'georss:line');node.appendChild(this.buildCoordinatesNode(geometry));}
-else if(geometry.CLASS_NAME=="OpenLayers.Geometry.Point"){node=this.createElementNS(this.georssns,'georss:point');node.appendChild(this.buildCoordinatesNode(geometry));}else{throw"Couldn't parse "+geometry.CLASS_NAME;}
-return node;},buildCoordinatesNode:function(geometry){var points=null;if(geometry.components){points=geometry.components;}
-var path;if(points){var numPoints=points.length;var parts=new Array(numPoints);for(var i=0;i<numPoints;i++){parts[i]=points[i].y+" "+points[i].x;}
-path=parts.join(" ");}else{path=geometry.y+" "+geometry.x;}
-return this.createTextNode(path);},CLASS_NAME:"OpenLayers.Format.GeoRSS"});OpenLayers.Format.WPSCapabilities=OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,{defaultVersion:"1.0.0",CLASS_NAME:"OpenLayers.Format.WPSCapabilities"});OpenLayers.Format.WPSCapabilities.v1_0_0=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{ows:"http://www.opengis.net/ows/1.1",wps:"http://www.opengis.net/wps/1.0.0",xlink:"http://www.w3.org/1999/xlink"},regExes:{trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s* [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var capabilities={};this.readNode(data,capabilities);return capabilities;},readers:{"wps":{"Capabilities":function(node,obj){this.readChildNodes(node,obj);},"ProcessOfferings":function(node,obj){obj.processOfferings={};this.readChildNodes(node,obj.processOfferings);},"Process":function(node,processOfferings){var processVersion=this.getAttributeNS(node,this.namespaces.wps,"processVersion");var process={processVersion:processVersion};this.readChildNodes(node,process);processOfferings[proce [...]
-return activated;},deactivate:function(){var deactivated=OpenLayers.Control.prototype.deactivate.apply(this,arguments);if(this.map&&this.map.events){this.map.events.un({moveend:this.updateContainerOrigin,scope:this});}
-return deactivated;},updateContainerOrigin:function(){var container=this.map.layerContainerDiv;this.containerOrigin={x:parseInt(container.style.left,10),y:parseInt(container.style.top,10)};},pinchStart:function(evt,pinchData){this.pinchOrigin=evt.xy;this.currentCenter=evt.xy;},pinchMove:function(evt,pinchData){var scale=pinchData.scale;var containerOrigin=this.containerOrigin;var pinchOrigin=this.pinchOrigin;var current=evt.xy;var dx=Math.round((current.x-pinchOrigin.x)+(scale-1)*(contai [...]
-this.dragPan=null;if(this.pinchZoom){this.pinchZoom.destroy();delete this.pinchZoom;}
-OpenLayers.Control.prototype.destroy.apply(this,arguments);},activate:function(){if(OpenLayers.Control.prototype.activate.apply(this,arguments)){this.dragPan.activate();this.handlers.click.activate();this.pinchZoom.activate();return true;}
-return false;},deactivate:function(){if(OpenLayers.Control.prototype.deactivate.apply(this,arguments)){this.dragPan.deactivate();this.handlers.click.deactivate();this.pinchZoom.deactivate();return true;}
-return false;},draw:function(){var clickCallbacks={click:this.defaultClick,dblclick:this.defaultDblClick};var clickOptions=OpenLayers.Util.extend({"double":true,stopDouble:true,pixelTolerance:2},this.clickHandlerOptions);this.handlers.click=new OpenLayers.Handler.Click(this,clickCallbacks,clickOptions);this.dragPan=new OpenLayers.Control.DragPan(OpenLayers.Util.extend({map:this.map,documentDrag:this.documentDrag},this.dragPanOptions));this.dragPan.draw();this.pinchZoom=new OpenLayers.Con [...]
-delete this.rules;},clone:function(){var config=OpenLayers.Util.extend({},this);if(this.rules){config.rules=[];for(var i=0,len=this.rules.length;i<len;++i){config.rules.push(this.rules[i].clone());}}
-return new OpenLayers.Style2(config);},CLASS_NAME:"OpenLayers.Style2"});OpenLayers.Layer.Boxes=OpenLayers.Class(OpenLayers.Layer.Markers,{initialize:function(name,options){OpenLayers.Layer.Markers.prototype.initialize.apply(this,arguments);},drawMarker:function(marker){var bounds=marker.bounds;var topleft=this.map.getLayerPxFromLonLat(new OpenLayers.LonLat(bounds.left,bounds.top));var botright=this.map.getLayerPxFromLonLat(new OpenLayers.LonLat(bounds.right,bounds.bottom));if(botright==n [...]
-var raw=data;if(data&&data.nodeType==9){data=data.documentElement;}
-var capabilities={};this.readNode(data,capabilities);if(capabilities.service===undefined){var parser=new OpenLayers.Format.OGCExceptionReport();capabilities.error=parser.read(raw);}else{this.postProcessLayers(capabilities);}
-return capabilities;},postProcessLayers:function(capabilities){if(capabilities.capability){capabilities.capability.layers=[];var layers=capabilities.capability.nestedLayers;for(var i=0,len=layers.length;i<len;++i){var layer=layers[i];this.processLayer(capabilities.capability,layer);}}},processLayer:function(capability,layer,parentLayer){if(layer.formats===undefined){layer.formats=capability.request.getmap.formats;}
-var i,len;if(parentLayer){layer.styles=layer.styles.concat(parentLayer.styles);var attributes=["queryable","cascaded","fixedWidth","fixedHeight","opaque","noSubsets","llbbox","minScale","maxScale","attribution"];var complexAttr=["srs","bbox","dimensions","authorityURLs"];var key;for(i=0,len=attributes.length;i<len;i++){key=attributes[i];if(key in parentLayer){if(layer[key]==null){layer[key]=parentLayer[key];}
-if(layer[key]==null){var intAttr=["cascaded","fixedWidth","fixedHeight"];var boolAttr=["queryable","opaque","noSubsets"];if(OpenLayers.Util.indexOf(intAttr,key)!=-1){layer[key]=0;}
-if(OpenLayers.Util.indexOf(boolAttr,key)!=-1){layer[key]=false;}}}}
-for(i=0,len=complexAttr.length;i<len;i++){key=complexAttr[i];layer[key]=OpenLayers.Util.applyDefaults(layer[key],parentLayer[key]);}}
-for(i=0,len=layer.nestedLayers.length;i<len;i++){var childLayer=layer.nestedLayers[i];this.processLayer(capability,childLayer,layer);}
-if(layer.name){capability.layers.push(layer);}},readers:{"wms":{"Service":function(node,obj){obj.service={};this.readChildNodes(node,obj.service);},"Name":function(node,obj){obj.name=this.getChildValue(node);},"Title":function(node,obj){obj.title=this.getChildValue(node);},"Abstract":function(node,obj){obj["abstract"]=this.getChildValue(node);},"BoundingBox":function(node,obj){var bbox={};bbox.bbox=[parseFloat(node.getAttribute("minx")),parseFloat(node.getAttribute("miny")),parseFloat(no [...]
-return bbox;},"OnlineResource":function(node,obj){obj.href=this.getAttributeNS(node,this.namespaces.xlink,"href");},"ContactInformation":function(node,obj){obj.contactInformation={};this.readChildNodes(node,obj.contactInformation);},"ContactPersonPrimary":function(node,obj){obj.personPrimary={};this.readChildNodes(node,obj.personPrimary);},"ContactPerson":function(node,obj){obj.person=this.getChildValue(node);},"ContactOrganization":function(node,obj){obj.organization=this.getChildValue( [...]
-this.map.events.unregister("moveend",this,this.fixYahooEventPane);}},getWarningHTML:function(){return OpenLayers.i18n("getLayerWarning",{'layerType':'Yahoo','layerLib':'Yahoo'});},getOLZoomFromMapObjectZoom:function(moZoom){var zoom=null;if(moZoom!=null){zoom=OpenLayers.Layer.FixedZoomLevels.prototype.getOLZoomFromMapObjectZoom.apply(this,[moZoom]);zoom=18-zoom;}
-return zoom;},getMapObjectZoomFromOLZoom:function(olZoom){var zoom=null;if(olZoom!=null){zoom=OpenLayers.Layer.FixedZoomLevels.prototype.getMapObjectZoomFromOLZoom.apply(this,[olZoom]);zoom=18-zoom;}
-return zoom;},setMapObjectCenter:function(center,zoom){this.mapObject.drawZoomAndCenter(center,zoom);},getMapObjectCenter:function(){return this.mapObject.getCenterLatLon();},dragPanMapObject:function(dX,dY){this.mapObject.moveByXY({'x':-dX,'y':dY});},getMapObjectZoom:function(){return this.mapObject.getZoomLevel();},getMapObjectLonLatFromMapObjectPixel:function(moPixel){return this.mapObject.convertXYLatLon(moPixel);},getMapObjectPixelFromMapObjectLonLat:function(moLonLat){return this.m [...]
-return yLatLong;},getXFromMapObjectPixel:function(moPixel){return moPixel.x;},getYFromMapObjectPixel:function(moPixel){return moPixel.y;},getMapObjectPixelFromXY:function(x,y){return new YCoordPoint(x,y);},getMapObjectSizeFromOLSize:function(olSize){return new YSize(olSize.w,olSize.h);},CLASS_NAME:"OpenLayers.Layer.Yahoo"});OpenLayers.Layer.Zoomify=OpenLayers.Class(OpenLayers.Layer.Grid,{url:null,size:null,isBaseLayer:true,standardTileSize:256,tileOriginCorner:"tl",numberOfTiers:0,tileCo [...]
-this.tierSizeInTiles.reverse();this.tierImageSize.reverse();this.numberOfTiers=this.tierSizeInTiles.length;this.tileCountUpToTier[0]=0;for(var i=1;i<this.numberOfTiers;i++){this.tileCountUpToTier.push(this.tierSizeInTiles[i-1].w*this.tierSizeInTiles[i-1].h+
-this.tileCountUpToTier[i-1]);}},destroy:function(){OpenLayers.Layer.Grid.prototype.destroy.apply(this,arguments);this.tileCountUpToTier.length=0;this.tierSizeInTiles.length=0;this.tierImageSize.length=0;},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.Zoomify(this.name,this.url,this.size,this.options);}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){bounds=this.adjustBounds(bounds);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));var z=this.map.getZoom();var tileIndex=x+y*this.tierSizeInTiles[z].w+this.tileCountUpToTier[z];var path="TileGroup"+Math.floor((tileIndex)/256)+"/"+z+"-"+x+"-"+y+".jpg";var url=this. [...]
-return url+path;},getImageSize:function(){if(arguments.length>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));var z=this.map.getZoom();var w=this.standardTileSize;var h=this.standardTileSize;if(x==this.tierSizeInTiles[z].w-1){var w=this.tierImageSize[z].w%this.standardTileSize;};if(y==this.tierSizeInTiles[z].h-1) [...]
-if(!document.namespaces.olv){document.namespaces.add("olv",this.xmlns);var style=document.createStyleSheet();var shapes=['shape','rect','oval','fill','stroke','imagedata','group','textbox'];for(var i=0,len=shapes.length;i<len;i++){style.addRule('olv\\:'+shapes[i],"behavior: url(#default#VML); "+"position: absolute; display: inline-block;");}}
-OpenLayers.Renderer.Elements.prototype.initialize.apply(this,arguments);},supported:function(){return!!(document.namespaces);},setExtent:function(extent,resolutionChanged){OpenLayers.Renderer.Elements.prototype.setExtent.apply(this,arguments);var resolution=this.getResolution();var left=(extent.left/resolution)|0;var top=(extent.top/resolution-this.size.h)|0;if(resolutionChanged||!this.offset){this.offset={x:left,y:top};left=0;top=0;}else{left=left-this.offset.x;top=top-this.offset.y;}
-var org=left+" "+top;this.root.coordorigin=org;var roots=[this.root,this.vectorRoot,this.textRoot];var root;for(var i=0,len=roots.length;i<len;++i){root=roots[i];var size=this.size.w+" "+this.size.h;root.coordsize=size;}
-this.root.style.flip="y";return true;},setSize:function(size){OpenLayers.Renderer.prototype.setSize.apply(this,arguments);var roots=[this.rendererRoot,this.root,this.vectorRoot,this.textRoot];var w=this.size.w+"px";var h=this.size.h+"px";var root;for(var i=0,len=roots.length;i<len;++i){root=roots[i];root.style.width=w;root.style.height=h;}},getNodeType:function(geometry,style){var nodeType=null;switch(geometry.CLASS_NAME){case"OpenLayers.Geometry.Point":if(style.externalGraphic){nodeType [...]
-break;case"OpenLayers.Geometry.Rectangle":nodeType="olv:rect";break;case"OpenLayers.Geometry.LineString":case"OpenLayers.Geometry.LinearRing":case"OpenLayers.Geometry.Polygon":case"OpenLayers.Geometry.Curve":case"OpenLayers.Geometry.Surface":nodeType="olv:shape";break;default:break;}
-return nodeType;},setStyle:function(node,style,options,geometry){style=style||node._style;options=options||node._options;var fillColor=style.fillColor;if(node._geometryClass==="OpenLayers.Geometry.Point"){if(style.externalGraphic){options.isFilled=true;if(style.graphicTitle){node.title=style.graphicTitle;}
-var width=style.graphicWidth||style.graphicHeight;var height=style.graphicHeight||style.graphicWidth;width=width?width:style.pointRadius*2;height=height?height:style.pointRadius*2;var resolution=this.getResolution();var xOffset=(style.graphicXOffset!=undefined)?style.graphicXOffset:-(0.5*width);var yOffset=(style.graphicYOffset!=undefined)?style.graphicYOffset:-(0.5*height);node.style.left=(((geometry.x/resolution-this.offset.x)+xOffset)|0)+"px";node.style.top=(((geometry.y/resolution-th [...]
-if(options.isFilled){node.fillcolor=fillColor;}else{node.filled="false";}
-var fills=node.getElementsByTagName("fill");var fill=(fills.length==0)?null:fills[0];if(!options.isFilled){if(fill){node.removeChild(fill);}}else{if(!fill){fill=this.createNode('olv:fill',node.id+"_fill");}
-fill.opacity=style.fillOpacity;if(node._geometryClass==="OpenLayers.Geometry.Point"&&style.externalGraphic){if(style.graphicOpacity){fill.opacity=style.graphicOpacity;}
-fill.src=style.externalGraphic;fill.type="frame";if(!(style.graphicWidth&&style.graphicHeight)){fill.aspect="atmost";}}
-if(fill.parentNode!=node){node.appendChild(fill);}}
-var rotation=style.rotation;if((rotation!==undefined||node._rotation!==undefined)){node._rotation=rotation;if(style.externalGraphic){this.graphicRotate(node,xOffset,yOffset,style);fill.opacity=0;}else if(node._geometryClass==="OpenLayers.Geometry.Point"){node.style.rotation=rotation||0;}}
-var strokes=node.getElementsByTagName("stroke");var stroke=(strokes.length==0)?null:strokes[0];if(!options.isStroked){node.stroked=false;if(stroke){stroke.on=false;}}else{if(!stroke){stroke=this.createNode('olv:stroke',node.id+"_stroke");node.appendChild(stroke);}
-stroke.on=true;stroke.color=style.strokeColor;stroke.weight=style.strokeWidth+"px";stroke.opacity=style.strokeOpacity;stroke.endcap=style.strokeLinecap=='butt'?'flat':(style.strokeLinecap||'round');if(style.strokeDashstyle){stroke.dashstyle=this.dashStyle(style);}}
-if(style.cursor!="inherit"&&style.cursor!=null){node.style.cursor=style.cursor;}
-return node;},graphicRotate:function(node,xOffset,yOffset,style){var style=style||node._style;var rotation=style.rotation||0;var aspectRatio,size;if(!(style.graphicWidth&&style.graphicHeight)){var img=new Image();img.onreadystatechange=OpenLayers.Function.bind(function(){if(img.readyState=="complete"||img.readyState=="interactive"){aspectRatio=img.width/img.height;size=Math.max(style.pointRadius*2,style.graphicWidth||0,style.graphicHeight||0);xOffset=xOffset*aspectRatio;style.graphicWidt [...]
-var width=Math.round(style.graphicWidth||size*aspectRatio);var height=Math.round(style.graphicHeight||size);node.style.width=width+"px";node.style.height=height+"px";var image=document.getElementById(node.id+"_image");if(!image){image=this.createNode("olv:imagedata",node.id+"_image");node.appendChild(image);}
-image.style.width=width+"px";image.style.height=height+"px";image.src=style.externalGraphic;image.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader("+"src='', sizingMethod='scale')";var rot=rotation*Math.PI/180;var sintheta=Math.sin(rot);var costheta=Math.cos(rot);var filter="progid:DXImageTransform.Microsoft.Matrix(M11="+costheta+",M12="+(-sintheta)+",M21="+sintheta+",M22="+costheta+",SizingMethod='auto expand')\n";var opacity=style.graphicOpacity||style.fillOpacity;if(op [...]
-opacity+")\n";}
-node.style.filter=filter;var centerPoint=new OpenLayers.Geometry.Point(-xOffset,-yOffset);var imgBox=new OpenLayers.Bounds(0,0,width,height).toGeometry();imgBox.rotate(style.rotation,centerPoint);var imgBounds=imgBox.getBounds();node.style.left=Math.round(parseInt(node.style.left)+imgBounds.left)+"px";node.style.top=Math.round(parseInt(node.style.top)-imgBounds.bottom)+"px";},postDraw:function(node){node.style.visibility="visible";var fillColor=node._style.fillColor;var strokeColor=node. [...]
-if(strokeColor=="none"&&node.strokecolor!=strokeColor){node.strokecolor=strokeColor;}},setNodeDimension:function(node,geometry){var bbox=geometry.getBounds();if(bbox){var resolution=this.getResolution();var scaledBox=new OpenLayers.Bounds((bbox.left/resolution-this.offset.x)|0,(bbox.bottom/resolution-this.offset.y)|0,(bbox.right/resolution-this.offset.x)|0,(bbox.top/resolution-this.offset.y)|0);node.style.left=scaledBox.left+"px";node.style.top=scaledBox.top+"px";node.style.width=scaledB [...]
-return(parts[0]==1||parts[1]==1)?"dot":"dash";}else if(parts.length==4){return(1*parts[0]>=2*parts[1])?"longdashdot":"dashdot";}
-return"solid";}},createNode:function(type,id){var node=document.createElement(type);if(id){node.id=id;}
-node.unselectable='on';node.onselectstart=OpenLayers.Function.False;return node;},nodeTypeCompare:function(node,type){var subType=type;var splitIndex=subType.indexOf(":");if(splitIndex!=-1){subType=subType.substr(splitIndex+1);}
-var nodeName=node.nodeName;splitIndex=nodeName.indexOf(":");if(splitIndex!=-1){nodeName=nodeName.substr(splitIndex+1);}
-return(subType==nodeName);},createRenderRoot:function(){return this.nodeFactory(this.container.id+"_vmlRoot","div");},createRoot:function(suffix){return this.nodeFactory(this.container.id+suffix,"olv:group");},drawPoint:function(node,geometry){return this.drawCircle(node,geometry,1);},drawCircle:function(node,geometry,radius){if(!isNaN(geometry.x)&&!isNaN(geometry.y)){var resolution=this.getResolution();node.style.left=(((geometry.x/resolution-this.offset.x)|0)-radius)+"px";node.style.to [...]
-return false;},drawLineString:function(node,geometry){return this.drawLine(node,geometry,false);},drawLinearRing:function(node,geometry){return this.drawLine(node,geometry,true);},drawLine:function(node,geometry,closeLine){this.setNodeDimension(node,geometry);var resolution=this.getResolution();var numComponents=geometry.components.length;var parts=new Array(numComponents);var comp,x,y;for(var i=0;i<numComponents;i++){comp=geometry.components[i];x=(comp.x/resolution-this.offset.x)|0;y=(c [...]
-var end=(closeLine)?" x e":" e";node.path="m"+parts.join("")+end;return node;},drawPolygon:function(node,geometry){this.setNodeDimension(node,geometry);var resolution=this.getResolution();var path=[];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");points=geometry.components[j].components;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 [...]
-if(!area){if(!first){first=pathComp;}else if(first!=pathComp){if(!second){second=pathComp;}else if(second!=pathComp){area=true;}}}}
-path.push(area?" x ":" ");}
-path.push("e");node.path=path.join("");return node;},drawRectangle:function(node,geometry){var resolution=this.getResolution();node.style.left=((geometry.x/resolution-this.offset.x)|0)+"px";node.style.top=((geometry.y/resolution-this.offset.y)|0)+"px";node.style.width=((geometry.width/resolution)|0)+"px";node.style.height=((geometry.height/resolution)|0)+"px";return node;},drawText:function(featureId,style,location){var label=this.nodeFactory(featureId+this.LABEL_ID_SUFFIX,"olv:rect");va [...]
-if(style.fontColor){textbox.style.color=style.fontColor;}
-if(style.fontOpacity){textbox.style.filter='alpha(opacity='+(style.fontOpacity*100)+')';}
-if(style.fontFamily){textbox.style.fontFamily=style.fontFamily;}
-if(style.fontSize){textbox.style.fontSize=style.fontSize;}
-if(style.fontWeight){textbox.style.fontWeight=style.fontWeight;}
-if(style.fontStyle){textbox.style.fontStyle=style.fontStyle;}
-if(style.labelSelect===true){label._featureId=featureId;textbox._featureId=featureId;textbox._geometry=location;textbox._geometryClass=location.CLASS_NAME;}
-textbox.style.whiteSpace="nowrap";textbox.inset="1px,0px,0px,0px";if(!label.parentNode){label.appendChild(textbox);this.textRoot.appendChild(label);}
-var align=style.labelAlign||"cm";if(align.length==1){align+="m";}
-var xshift=textbox.clientWidth*(OpenLayers.Renderer.VML.LABEL_SHIFT[align.substr(0,1)]);var yshift=textbox.clientHeight*(OpenLayers.Renderer.VML.LABEL_SHIFT[align.substr(1,1)]);label.style.left=parseInt(label.style.left)-xshift-1+"px";label.style.top=parseInt(label.style.top)+yshift+"px";},drawSurface:function(node,geometry){this.setNodeDimension(node,geometry);var resolution=this.getResolution();var path=[];var comp,x,y;for(var i=0,len=geometry.components.length;i<len;i++){comp=geometry [...]
-path.push(" "+x+","+y);}
-path.push(" x e");node.path=path.join("");return node;},moveRoot:function(renderer){var layer=this.map.getLayer(renderer.container.id);if(layer instanceof OpenLayers.Layer.Vector.RootContainer){layer=this.map.getLayer(this.container.id);}
-layer&&layer.renderer.clear();OpenLayers.Renderer.Elements.prototype.moveRoot.apply(this,arguments);layer&&layer.redraw();},importSymbol:function(graphicName){var id=this.container.id+"-"+graphicName;var cache=this.symbolCache[id];if(cache){return cache;}
-var symbol=OpenLayers.Renderer.symbol[graphicName];if(!symbol){throw new Error(graphicName+' is not a valid symbol name');}
-var symbolExtent=new OpenLayers.Bounds(Number.MAX_VALUE,Number.MAX_VALUE,0,0);var pathitems=["m"];for(var i=0;i<symbol.length;i=i+2){var x=symbol[i];var y=symbol[i+1];symbolExtent.left=Math.min(symbolExtent.left,x);symbolExtent.bottom=Math.min(symbolExtent.bottom,y);symbolExtent.right=Math.max(symbolExtent.right,x);symbolExtent.top=Math.max(symbolExtent.top,y);pathitems.push(x);pathitems.push(y);if(i==0){pathitems.push("l");}}
-pathitems.push("x e");var path=pathitems.join(" ");var diff=(symbolExtent.getWidth()-symbolExtent.getHeight())/2;if(diff>0){symbolExtent.bottom=symbolExtent.bottom-diff;symbolExtent.top=symbolExtent.top+diff;}else{symbolExtent.left=symbolExtent.left+diff;symbolExtent.right=symbolExtent.right-diff;}
-cache={path:path,size:symbolExtent.getWidth(),left:symbolExtent.left,bottom:symbolExtent.bottom};this.symbolCache[id]=cache;return cache;},CLASS_NAME:"OpenLayers.Renderer.VML"});OpenLayers.Renderer.VML.LABEL_SHIFT={"l":0,"c":.5,"r":1,"t":0,"m":.5,"b":1};OpenLayers.Layer.MultiMap=OpenLayers.Class(OpenLayers.Layer.EventPane,OpenLayers.Layer.FixedZoomLevels,{MIN_ZOOM_LEVEL:1,MAX_ZOOM_LEVEL:17,RESOLUTIONS:[9,1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.01098 [...]
-return mmLatLon;},getXFromMapObjectPixel:function(moPixel){return moPixel.x;},getYFromMapObjectPixel:function(moPixel){return moPixel.y;},getMapObjectPixelFromXY:function(x,y){return new MMPoint(x,y);},CLASS_NAME:"OpenLayers.Layer.MultiMap"});OpenLayers.Control.MouseToolbar=OpenLayers.Class(OpenLayers.Control.MouseDefaults,{mode:null,buttons:null,direction:"vertical",buttonClicked:null,initialize:function(position,direction){OpenLayers.Control.prototype.initialize.apply(this,arguments);t [...]
-if(direction){this.direction=direction;}
-this.measureDivs=[];},destroy:function(){for(var btnId in this.buttons){var btn=this.buttons[btnId];btn.map=null;btn.events.destroy();}
-OpenLayers.Control.MouseDefaults.prototype.destroy.apply(this,arguments);},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);OpenLayers.Control.MouseDefaults.prototype.draw.apply(this,arguments);this.buttons={};var sz=new OpenLayers.Size(28,28);var centered=new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X,0);this._addButton("zoombox","drag-rectangle-off.png","drag-rectangle-on.png",centered,sz,"Shift->Drag to zoom to area");centered=centered.add((this.directio [...]
-this.buttonClicked=evt.element.action;OpenLayers.Event.stop(evt);},buttonUp:function(evt){if(!OpenLayers.Event.isLeftClick(evt)){return;}
-if(this.buttonClicked!=null){if(this.buttonClicked==evt.element.action){this.switchModeTo(evt.element.action);}
-OpenLayers.Event.stop(evt);this.buttonClicked=null;}},defaultDblClick:function(evt){this.switchModeTo("pan");this.performedDrag=false;var newCenter=this.map.getLonLatFromViewPortPx(evt.xy);this.map.setCenter(newCenter,this.map.zoom+1);OpenLayers.Event.stop(evt);return false;},defaultMouseDown:function(evt){if(!OpenLayers.Event.isLeftClick(evt)){return;}
-this.mouseDragStart=evt.xy.clone();this.performedDrag=false;this.startViaKeyboard=false;if(evt.shiftKey&&this.mode!="zoombox"){this.switchModeTo("zoombox");this.startViaKeyboard=true;}else if(evt.altKey&&this.mode!="measure"){this.switchModeTo("measure");}else if(!this.mode){this.switchModeTo("pan");}
-switch(this.mode){case"zoombox":this.map.div.style.cursor="crosshair";this.zoomBox=OpenLayers.Util.createDiv('zoomBox',this.mouseDragStart,null,null,"absolute","2px solid red");this.zoomBox.style.backgroundColor="white";this.zoomBox.style.filter="alpha(opacity=50)";this.zoomBox.style.opacity="0.50";this.zoomBox.style.fontSize="1px";this.zoomBox.style.zIndex=this.map.Z_INDEX_BASE["Popup"]-1;this.map.eventsDiv.appendChild(this.zoomBox);this.performedDrag=true;break;case"measure":var distan [...]
-this.measureStart=this.map.getLonLatFromViewPortPx(this.mouseDragStart);;this.measureBox=OpenLayers.Util.createDiv(null,this.mouseDragStart.add(-2-parseInt(this.map.layerContainerDiv.style.left),-2-parseInt(this.map.layerContainerDiv.style.top)),null,null,"absolute");this.measureBox.style.width="4px";this.measureBox.style.height="4px";this.measureBox.style.fontSize="1px";this.measureBox.style.backgroundColor="red";this.measureBox.style.zIndex=this.map.Z_INDEX_BASE["Popup"]-1;this.map.lay [...]
-this.measureBox.style.zIndex=this.map.Z_INDEX_BASE["Popup"]-1;this.map.layerContainerDiv.appendChild(this.measureBox);this.measureDivs.push(this.measureBox);break;default:this.map.div.style.cursor="move";break;}
-document.onselectstart=OpenLayers.Function.False;OpenLayers.Event.stop(evt);},switchModeTo:function(mode){if(mode!=this.mode){if(this.mode&&this.buttons[this.mode]){OpenLayers.Util.modifyAlphaImageDiv(this.buttons[this.mode],null,null,null,this.buttons[this.mode].imgLocation);}
-if(this.mode=="measure"&&mode!="measure"){for(var i=0,len=this.measureDivs.length;i<len;i++){if(this.measureDivs[i]){this.map.layerContainerDiv.removeChild(this.measureDivs[i]);}}
-this.measureDivs=[];this.measureStart=null;}
-this.mode=mode;if(this.buttons[mode]){OpenLayers.Util.modifyAlphaImageDiv(this.buttons[mode],null,null,null,this.buttons[mode].activeImgLocation);}
-switch(this.mode){case"zoombox":this.map.div.style.cursor="crosshair";break;default:this.map.div.style.cursor="";break;}}},leaveMode:function(){this.switchModeTo("pan");},defaultMouseMove:function(evt){if(this.mouseDragStart!=null){switch(this.mode){case"zoombox":var deltaX=Math.abs(this.mouseDragStart.x-evt.xy.x);var deltaY=Math.abs(this.mouseDragStart.y-evt.xy.y);this.zoomBox.style.width=Math.max(1,deltaX)+"px";this.zoomBox.style.height=Math.max(1,deltaY)+"px";if(evt.xy.x<this.mouseDra [...]
-if(evt.xy.y<this.mouseDragStart.y){this.zoomBox.style.top=evt.xy.y+"px";}
-break;default:var deltaX=this.mouseDragStart.x-evt.xy.x;var deltaY=this.mouseDragStart.y-evt.xy.y;var size=this.map.getSize();var newXY=new OpenLayers.Pixel(size.w/2+deltaX,size.h/2+deltaY);var newCenter=this.map.getLonLatFromViewPortPx(newXY);this.map.setCenter(newCenter,null,true);this.mouseDragStart=evt.xy.clone();}
-this.performedDrag=true;}},defaultMouseUp:function(evt){if(!OpenLayers.Event.isLeftClick(evt)){return;}
-switch(this.mode){case"zoombox":this.zoomBoxEnd(evt);if(this.startViaKeyboard){this.leaveMode();}
-break;case"pan":if(this.performedDrag){this.map.setCenter(this.map.center);}}
-document.onselectstart=null;this.mouseDragStart=null;this.map.div.style.cursor="default";},defaultMouseOut:function(evt){if(this.mouseDragStart!=null&&OpenLayers.Util.mouseLeft(evt,this.map.eventsDiv)){if(this.zoomBox){this.removeZoomBox();if(this.startViaKeyboard){this.leaveMode();}}
-this.mouseDragStart=null;this.map.div.style.cursor="default";}},defaultClick:function(evt){if(this.performedDrag){this.performedDrag=false;return false;}},CLASS_NAME:"OpenLayers.Control.MouseToolbar"});OpenLayers.Control.MouseToolbar.X=6;OpenLayers.Control.MouseToolbar.Y=300;OpenLayers.Protocol.WFS.v1_0_0=OpenLayers.Class(OpenLayers.Protocol.WFS.v1,{version:"1.0.0",CLASS_NAME:"OpenLayers.Protocol.WFS.v1_0_0"});OpenLayers.Format.WMSGetFeatureInfo=OpenLayers.Class(OpenLayers.Format.XML,{la [...]
-var root=data.documentElement;if(root){var scope=this;var read=this["read_"+root.nodeName];if(read){result=read.call(this,root);}else{result=new OpenLayers.Format.GML((this.options?this.options:{})).read(data);}}else{result=data;}
-return result;},read_msGMLOutput:function(data){var response=[];var layerNodes=this.getSiblingNodesByTagCriteria(data,this.layerIdentifier);if(layerNodes){for(var i=0,len=layerNodes.length;i<len;++i){var node=layerNodes[i];var layerName=node.nodeName;if(node.prefix){layerName=layerName.split(':')[1];}
-var layerName=layerName.replace(this.layerIdentifier,'');var featureNodes=this.getSiblingNodesByTagCriteria(node,this.featureIdentifier);if(featureNodes){for(var j=0;j<featureNodes.length;j++){var featureNode=featureNodes[j];var geomInfo=this.parseGeometry(featureNode);var attributes=this.parseAttributes(featureNode);var feature=new OpenLayers.Feature.Vector(geomInfo.geometry,attributes,null);feature.bounds=geomInfo.bounds;feature.type=layerName;response.push(feature);}}}}
-return response;},read_FeatureInfoResponse:function(data){var response=[];var featureNodes=this.getElementsByTagNameNS(data,'*','FIELDS');for(var i=0,len=featureNodes.length;i<len;i++){var featureNode=featureNodes[i];var geom=null;var attributes={};var j;var jlen=featureNode.attributes.length;if(jlen>0){for(j=0;j<jlen;j++){var attribute=featureNode.attributes[j];attributes[attribute.nodeName]=attribute.nodeValue;}}else{var nodes=featureNode.childNodes;for(j=0,jlen=nodes.length;j<jlen;++j [...]
-response.push(new OpenLayers.Feature.Vector(geom,attributes,null));}
-return response;},getSiblingNodesByTagCriteria:function(node,criteria){var nodes=[];var children,tagName,n,matchNodes,child;if(node&&node.hasChildNodes()){children=node.childNodes;n=children.length;for(var k=0;k<n;k++){child=children[k];while(child&&child.nodeType!=1){child=child.nextSibling;k++;}
-tagName=(child?child.nodeName:'');if(tagName.length>0&&tagName.indexOf(criteria)>-1){nodes.push(child);}else{matchNodes=this.getSiblingNodesByTagCriteria(child,criteria);if(matchNodes.length>0){(nodes.length==0)?nodes=matchNodes:nodes.push(matchNodes);}}}}
-return nodes;},parseAttributes:function(node){var attributes={};if(node.nodeType==1){var children=node.childNodes;var n=children.length;for(var i=0;i<n;++i){var child=children[i];if(child.nodeType==1){var grandchildren=child.childNodes;var name=(child.prefix)?child.nodeName.split(":")[1]:child.nodeName;if(grandchildren.length==0){attributes[name]=null}else if(grandchildren.length==1){var grandchild=grandchildren[0];if(grandchild.nodeType==3||grandchild.nodeType==4){var value=grandchild.n [...]
-return attributes;},parseGeometry:function(node){if(!this.gmlFormat){this.gmlFormat=new OpenLayers.Format.GML();}
-var feature=this.gmlFormat.parseFeature(node);var geometry,bounds=null;if(feature){geometry=feature.geometry&&feature.geometry.clone();bounds=feature.bounds&&feature.bounds.clone();feature.destroy();}
-return{geometry:geometry,bounds:bounds};},CLASS_NAME:"OpenLayers.Format.WMSGetFeatureInfo"});OpenLayers.Control.WMTSGetFeatureInfo=OpenLayers.Class(OpenLayers.Control,{hover:false,requestEncoding:"KVP",drillDown:false,maxFeatures:10,clickCallback:"click",layers:null,queryVisible:true,infoFormat:'text/html',vendorParams:{},format:null,formatOptions:null,handlerOptions:null,handler:null,hoverRequest:null,EVENT_TYPES:["beforegetfeatureinfo","getfeatureinfo","exception"],pending:0,initialize [...]
-if(this.drillDown===true){this.hover=false;}
-if(this.hover){this.handler=new OpenLayers.Handler.Hover(this,{move:this.cancelHover,pause:this.getInfoForHover},OpenLayers.Util.extend(this.handlerOptions.hover||{},{delay:250}));}else{var callbacks={};callbacks[this.clickCallback]=this.getInfoForClick;this.handler=new OpenLayers.Handler.Click(this,callbacks,this.handlerOptions.click||{});}},getInfoForClick:function(evt){this.request(evt.xy,{});},getInfoForHover:function(evt){this.request(evt.xy,{hover:true});},cancelHover:function(){if [...]
-this.hoverRequest.abort();this.hoverRequest=null;}},findLayers:function(){var candidates=this.layers||this.map.layers;var layers=[];var layer;for(var i=candidates.length-1;i>=0;--i){layer=candidates[i];if(layer instanceof OpenLayers.Layer.WMTS&&layer.requestEncoding===this.requestEncoding&&(!this.queryVisible||layer.getVisibility())){layers.push(layer);if(!this.drillDown||this.hover){break;}}}
-return layers;},buildRequestOptions:function(layer,xy){var loc=this.map.getLonLatFromPixel(xy);var getTileUrl=layer.getURL(new OpenLayers.Bounds(loc.lon,loc.lat,loc.lon,loc.lat));var params=OpenLayers.Util.getParameters(getTileUrl);var tileInfo=layer.getTileInfo(loc);OpenLayers.Util.extend(params,{service:"WMTS",version:layer.version,request:"GetFeatureInfo",infoFormat:this.infoFormat,i:tileInfo.i,j:tileInfo.j});OpenLayers.Util.applyDefaults(params,this.vendorParams);return{url:OpenLayer [...]
-if(this.pending>0){OpenLayers.Element.addClass(this.map.viewPortDiv,"olCursorWait");}}},handleResponse:function(xy,request,layer){--this.pending;if(this.pending<=0){OpenLayers.Element.removeClass(this.map.viewPortDiv,"olCursorWait");this.pending=0;}
-if(request.status&&(request.status<200||request.status>=300)){this.events.triggerEvent("exception",{xy:xy,request:request,layer:layer});}else{var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-var features,except;try{features=this.format.read(doc);}catch(error){except=true;this.events.triggerEvent("exception",{xy:xy,request:request,error:error,layer:layer});}
-if(!except){this.events.triggerEvent("getfeatureinfo",{text:request.responseText,features:features,request:request,xy:xy,layer:layer});}}},CLASS_NAME:"OpenLayers.Control.WMTSGetFeatureInfo"});OpenLayers.Format.WMSCapabilities.v1_1=OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1,{readers:{"wms":OpenLayers.Util.applyDefaults({"WMT_MS_Capabilities":function(node,obj){this.readChildNodes(node,obj);},"Keyword":function(node,obj){if(obj.keywords){obj.keywords.push(this.getChildValue(node [...]
-return this.div;},activate:function(){if(OpenLayers.Control.prototype.activate.apply(this,arguments)){this.map.addLayer(this.gratLayer);this.map.events.register('moveend',this,this.update);this.update();return true;}else{return false;}},deactivate:function(){if(OpenLayers.Control.prototype.deactivate.apply(this,arguments)){this.map.events.unregister('moveend',this,this.update);this.map.removeLayer(this.gratLayer);return true;}else{return false;}},update:function(){var mapBounds=this.map. [...]
-this.gratLayer.destroyFeatures();var llProj=new OpenLayers.Projection("EPSG:4326");var mapProj=this.map.getProjectionObject();var mapRes=this.map.getResolution();if(mapProj.proj&&mapProj.proj.projName=="longlat"){this.numPoints=1;}
-var mapCenter=this.map.getCenter();var mapCenterLL=new OpenLayers.Pixel(mapCenter.lon,mapCenter.lat);OpenLayers.Projection.transform(mapCenterLL,mapProj,llProj);var testSq=this.targetSize*mapRes;testSq*=testSq;var llInterval;for(var i=0;i<this.intervals.length;++i){llInterval=this.intervals[i];var delta=llInterval/2;var p1=mapCenterLL.offset(new OpenLayers.Pixel(-delta,-delta));var p2=mapCenterLL.offset(new OpenLayers.Pixel(delta,delta));OpenLayers.Projection.transform(p1,llProj,mapProj) [...]
-mapCenterLL.x=Math.floor(mapCenterLL.x/llInterval)*llInterval;mapCenterLL.y=Math.floor(mapCenterLL.y/llInterval)*llInterval;var iter=0;var centerLonPoints=[mapCenterLL.clone()];var newPoint=mapCenterLL.clone();var mapXY;do{newPoint=newPoint.offset(new OpenLayers.Pixel(0,llInterval));mapXY=OpenLayers.Projection.transform(newPoint.clone(),llProj,mapProj);centerLonPoints.unshift(newPoint);}while(mapBounds.containsPixel(mapXY)&&++iter<1000);newPoint=mapCenterLL.clone();do{newPoint=newPoint.o [...]
-if(this.labelled){var labelPos=new OpenLayers.Geometry.Point(labelPoint.x,mapBounds.bottom);var labelAttrs={value:lon,label:this.labelled?OpenLayers.Util.getFormattedLonLat(lon,"lon",this.labelFormat):"",labelAlign:"cb",xOffset:0,yOffset:2};this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(labelPos,labelAttrs));}
-var geom=new OpenLayers.Geometry.LineString(pointList);lines.push(new OpenLayers.Feature.Vector(geom));}
-for(var j=0;j<centerLonPoints.length;++j){lat=centerLonPoints[j].y;if(lat<-90||lat>90){continue;}
-var pointList=[];var lonStart=centerLatPoints[0].x;var lonEnd=centerLatPoints[centerLatPoints.length-1].x;var lonDelta=(lonEnd-lonStart)/this.numPoints;var lon=lonStart;var labelPoint=null;for(var i=0;i<=this.numPoints;++i){var gridPoint=new OpenLayers.Geometry.Point(lon,lat);gridPoint.transform(llProj,mapProj);pointList.push(gridPoint);lon+=lonDelta;if(gridPoint.x<mapBounds.right){labelPoint=gridPoint;}}
-if(this.labelled){var labelPos=new OpenLayers.Geometry.Point(mapBounds.right,labelPoint.y);var labelAttrs={value:lat,label:this.labelled?OpenLayers.Util.getFormattedLonLat(lat,"lat",this.labelFormat):"",labelAlign:"rb",xOffset:-2,yOffset:2};this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(labelPos,labelAttrs));}
-var geom=new OpenLayers.Geometry.LineString(pointList);lines.push(new OpenLayers.Feature.Vector(geom));}
-this.gratLayer.addFeatures(lines);},CLASS_NAME:"OpenLayers.Control.Graticule"});OpenLayers.Layer.WMS.Post=OpenLayers.Class(OpenLayers.Layer.WMS,{unsupportedBrowsers:["mozilla","firefox","opera"],SUPPORTED_TRANSITIONS:[],usePost:null,initialize:function(name,url,params,options){var newArguments=[];newArguments.push(name,url,params,options);OpenLayers.Layer.WMS.prototype.initialize.apply(this,newArguments);this.usePost=OpenLayers.Util.indexOf(this.unsupportedBrowsers,OpenLayers.BROWSER_NAM [...]
-if(this.layerInfo){var info=this.layerInfo;var startingTileExtent=new OpenLayers.Bounds(info.fullExtent.xmin,info.fullExtent.ymin,info.fullExtent.xmax,info.fullExtent.ymax);this.projection='EPSG:'+info.spatialReference.wkid;this.sphericalMercator=(info.spatialReference.wkid==102100);this.units=(info.units=="esriFeet")?'ft':'m';if(!!info.tileInfo){this.tileSize=new OpenLayers.Size(info.tileInfo.width||info.tileInfo.cols,info.tileInfo.height||info.tileInfo.rows);this.tileOrigin=new OpenLay [...]
-this.lods=[];for(var key in info.tileInfo.lods){if(info.tileInfo.lods.hasOwnProperty(key)){var lod=info.tileInfo.lods[key];if(this.useScales){this.scales.push(lod.scale);}else{this.resolutions.push(lod.resolution);}
-var start=this.getContainingTileCoords(upperLeft,lod.resolution);lod.startTileCol=start.x;lod.startTileRow=start.y;var end=this.getContainingTileCoords(bottomRight,lod.resolution);lod.endTileCol=end.x;lod.endTileRow=end.y;this.lods.push(lod);}}
-this.maxExtent=this.calculateMaxExtentWithLOD(this.lods[0]);this.serverResolutions=this.resolutions;if(this.overrideDPI&&info.tileInfo.dpi){OpenLayers.DOTS_PER_INCH=info.tileInfo.dpi;}}}},getContainingTileCoords:function(point,res){return new OpenLayers.Pixel(Math.max(Math.floor((point.x-this.tileOrigin.lon)/(this.tileSize.w*res)),0),Math.max(Math.floor((this.tileOrigin.lat-point.y)/(this.tileSize.h*res)),0));},calculateMaxExtentWithLOD:function(lod){var numTileCols=(lod.endTileCol-lod.s [...]
-return OpenLayers.Layer.XYZ.prototype.clone.apply(this,[obj]);},getMaxExtent:function(){var resolution=this.map.getResolution();return this.maxExtent=this.getMaxExtentForResolution(resolution);},getTileOrigin:function(){var extent=this.getMaxExtent();return new OpenLayers.LonLat(extent.left,extent.bottom);},getURL:function(bounds){var res=this.getResolution();var originTileX=(this.tileOrigin.lon+(res*this.tileSize.w/2));var originTileY=(this.tileOrigin.lat-(res*this.tileSize.h/2));var ce [...]
-else{var start=this.getUpperLeftTileCoord(res);var end=this.getLowerRightTileCoord(res);if((x<start.x||x>=end.x)||(y<start.y||y>=end.y)){return null;}}
-var url=this.url;var s=''+x+y+z;if(OpenLayers.Util.isArray(url)){url=this.selectUrl(s,url);}
-if(this.useArcGISServer){url=url+'/tile/${z}/${y}/${x}';}else{x='C'+this.zeroPad(x,8,16);y='R'+this.zeroPad(y,8,16);z='L'+this.zeroPad(z,2,16);url=url+'/${z}/${y}/${x}.'+this.type;}
-url=OpenLayers.String.format(url,{'x':x,'y':y,'z':z});return url;},zeroPad:function(num,len,radix){var str=num.toString(radix||10);while(str.length<len){str="0"+str;}
-return str;},CLASS_NAME:'OpenLayers.Layer.ArcGISCache'});OpenLayers.Control.WMSGetFeatureInfo=OpenLayers.Class(OpenLayers.Control,{hover:false,drillDown:false,maxFeatures:10,clickCallback:"click",output:"features",layers:null,queryVisible:false,url:null,layerUrls:null,infoFormat:'text/html',vendorParams:{},format:null,formatOptions:null,handlerOptions:null,handler:null,hoverRequest:null,EVENT_TYPES:["beforegetfeatureinfo","nogetfeatureinfo","getfeatureinfo"],initialize:function(options){ [...]
-if(this.drillDown===true){this.hover=false;}
-if(this.hover){this.handler=new OpenLayers.Handler.Hover(this,{'move':this.cancelHover,'pause':this.getInfoForHover},OpenLayers.Util.extend(this.handlerOptions.hover||{},{'delay':250}));}else{var callbacks={};callbacks[this.clickCallback]=this.getInfoForClick;this.handler=new OpenLayers.Handler.Click(this,callbacks,this.handlerOptions.click||{});}},activate:function(){if(!this.active){this.handler.activate();}
-return OpenLayers.Control.prototype.activate.apply(this,arguments);},deactivate:function(){return OpenLayers.Control.prototype.deactivate.apply(this,arguments);},getInfoForClick:function(evt){this.events.triggerEvent("beforegetfeatureinfo",{xy:evt.xy});OpenLayers.Element.addClass(this.map.viewPortDiv,"olCursorWait");this.request(evt.xy,{});},getInfoForHover:function(evt){this.events.triggerEvent("beforegetfeatureinfo",{xy:evt.xy});this.request(evt.xy,{hover:true});},cancelHover:function( [...]
-if(this.drillDown===true||this.urlMatches(url)){layers.push(layer);}}}
-return layers;},urlMatches:function(url){var matches=OpenLayers.Util.isEquivalentUrl(this.url,url);if(!matches&&this.layerUrls){for(var i=0,len=this.layerUrls.length;i<len;++i){if(OpenLayers.Util.isEquivalentUrl(this.layerUrls[i],url)){matches=true;break;}}}
-return matches;},buildWMSOptions:function(url,layers,clickPosition,format){var layerNames=[],styleNames=[];for(var i=0,len=layers.length;i<len;i++){layerNames=layerNames.concat(layers[i].params.LAYERS);styleNames=styleNames.concat(this.getStyleNames(layers[i]));}
-var firstLayer=layers[0];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:firstLayer.params.VERSION,request:"GetFeatureInfo",layers:layerNames,query_layers:layerNames,styles:styleNames,bbox:this.map.getExtent().toBBOX(null,firstLayer.reverseAxisOrder()),feature_count:this.maxFeatures,height:this.map.getSize().h,width:this.map.getSize().w,format:format,info_format:firstLayer.params.INFO_FORMAT||this.infoFormat},(parseFloat(firstLayer.params.VERSION)>=1.3)?{crs:projection,i:parseInt(clickPosition.x),j:pars [...]
-return styleNames;},request:function(clickPosition,options){var layers=this.findLayers();if(layers.length==0){this.events.triggerEvent("nogetfeatureinfo");OpenLayers.Element.removeClass(this.map.viewPortDiv,"olCursorWait");return;}
-options=options||{};if(this.drillDown===false){var wmsOptions=this.buildWMSOptions(this.url,layers,clickPosition,layers[0].params.FORMAT);var request=OpenLayers.Request.GET(wmsOptions);if(options.hover===true){this.hoverRequest=request;}}else{this._requestCount=0;this._numRequests=0;this.features=[];var services={},url;for(var i=0,len=layers.length;i<len;i++){var layer=layers[i];var service,found=false;url=OpenLayers.Util.isArray(layer.url)?layer.url[0]:layer.url;if(url in services){serv [...]
-var layers;for(var url in services){layers=services[url];var wmsOptions=this.buildWMSOptions(url,layers,clickPosition,layers[0].params.FORMAT);OpenLayers.Request.GET(wmsOptions);}}},triggerGetFeatureInfo:function(request,xy,features){this.events.triggerEvent("getfeatureinfo",{text:request.responseText,features:features,request:request,xy:xy});OpenLayers.Element.removeClass(this.map.viewPortDiv,"olCursorWait");},handleResponse:function(xy,request,url){var doc=request.responseXML;if(!doc|| [...]
-var features=this.format.read(doc);if(this.drillDown===false){this.triggerGetFeatureInfo(request,xy,features);}else{this._requestCount++;if(this.output==="object"){this._features=(this._features||[]).concat({url:url,features:features});}else{this._features=(this._features||[]).concat(features);}
-if(this._requestCount===this._numRequests){this.triggerGetFeatureInfo(request,xy,this._features.concat());delete this._features;delete this._requestCount;delete this._numRequests;}}},CLASS_NAME:"OpenLayers.Control.WMSGetFeatureInfo"});OpenLayers.Format.WMSCapabilities.v1_3_0=OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_3,{version:"1.3.0",CLASS_NAME:"OpenLayers.Format.WMSCapabilities.v1_3_0"});OpenLayers.Format.CQL=(function(){var tokens=["PROPERTY","COMPARISON","VALUE","LOGICAL" [...]
-return[text.substr(0,idx+1)];}},END:/^$/},follows={LPAREN:['GEOMETRY','SPATIAL','PROPERTY','VALUE','LPAREN'],RPAREN:['NOT','LOGICAL','END','RPAREN'],PROPERTY:['COMPARISON','BETWEEN','COMMA'],BETWEEN:['VALUE'],COMPARISON:['VALUE'],COMMA:['GEOMETRY','VALUE','PROPERTY'],VALUE:['LOGICAL','COMMA','RPAREN','END'],SPATIAL:['LPAREN'],LOGICAL:['NOT','VALUE','SPATIAL','PROPERTY','LPAREN'],NOT:['PROPERTY','LPAREN'],GEOMETRY:['COMMA','RPAREN']},operators={'=':OpenLayers.Filter.Comparison.EQUAL_TO,'< [...]
-for(i in logicals){if(logicals.hasOwnProperty(i)){logicalReverse[logicals[i]]=i;}}
-function tryToken(text,pattern){if(pattern instanceof RegExp){return pattern.exec(text);}else{return pattern(text);}}
-function nextToken(text,tokens){var i,token,len=tokens.length;for(i=0;i<len;i++){token=tokens[i];var pat=patterns[token];var matches=tryToken(text,pat);if(matches){var match=matches[0];var remainder=text.substr(match.length).replace(/^\s*/,"");return{type:token,text:match,remainder:remainder};}}
-var msg="ERROR: In parsing: ["+text+"], expected one of: ";for(i=0;i<len;i++){token=tokens[i];msg+="\n    "+token+": "+patterns[token];}
-throw new Error(msg);}
-function tokenize(text){var results=[];var token,expect=["NOT","GEOMETRY","SPATIAL","PROPERTY","LPAREN"];do{token=nextToken(text,expect);text=token.remainder;expect=follows[token.type];if(token.type!="END"&&!expect){throw new Error("No follows list for "+token.type);}
-results.push(token);}while(token.type!="END");return results;}
-function buildAst(tokens){var operatorStack=[],postfix=[];while(tokens.length){var tok=tokens.shift();switch(tok.type){case"PROPERTY":case"GEOMETRY":case"VALUE":postfix.push(tok);break;case"COMPARISON":case"BETWEEN":case"LOGICAL":var p=precedence[tok.type];while(operatorStack.length>0&&(precedence[operatorStack[operatorStack.length-1].type]<=p)){postfix.push(operatorStack.pop());}
-operatorStack.push(tok);break;case"SPATIAL":case"NOT":case"LPAREN":operatorStack.push(tok);break;case"RPAREN":while(operatorStack.length>0&&(operatorStack[operatorStack.length-1].type!="LPAREN")){postfix.push(operatorStack.pop());}
-operatorStack.pop();if(operatorStack.length>0&&operatorStack[operatorStack.length-1].type=="SPATIAL"){postfix.push(operatorStack.pop());}
-case"COMMA":case"END":break;default:throw new Error("Unknown token type "+tok.type);}}
-while(operatorStack.length>0){postfix.push(operatorStack.pop());}
-function buildTree(){var tok=postfix.pop();switch(tok.type){case"LOGICAL":var rhs=buildTree(),lhs=buildTree();return new OpenLayers.Filter.Logical({filters:[lhs,rhs],type:logicals[tok.text.toUpperCase()]});case"NOT":var operand=buildTree();return new OpenLayers.Filter.Logical({filters:[operand],type:OpenLayers.Filter.Logical.NOT});case"BETWEEN":var min,max,property;postfix.pop();max=buildTree();min=buildTree();property=buildTree();return new OpenLayers.Filter.Comparison({property:propert [...]
-case"SPATIAL":switch(tok.text.toUpperCase()){case"BBOX":var maxy=buildTree(),maxx=buildTree(),miny=buildTree(),minx=buildTree(),prop=buildTree();return new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.BBOX,property:prop,value:OpenLayers.Bounds.fromArray([minx,miny,maxx,maxy])});case"INTERSECTS":var value=buildTree(),property=buildTree();return new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.INTERSECTS,property:property,value:value});case"WITHIN":var value=build [...]
-case"GEOMETRY":return OpenLayers.Geometry.fromWKT(tok.text);default:return tok.text;}}
-var result=buildTree();if(postfix.length>0){var msg="Remaining tokens after building AST: \n";for(var i=postfix.length-1;i>=0;i--){msg+=postfix[i].type+": "+postfix[i].text+"\n";}
-throw new Error(msg);}
-return result;}
-return OpenLayers.Class(OpenLayers.Format,{read:function(text){var result=buildAst(tokenize(text));if(this.keepData){this.data=result;};return result;},write:function(filter){if(filter instanceof OpenLayers.Geometry){return filter.toString();}
-switch(filter.CLASS_NAME){case"OpenLayers.Filter.Spatial":switch(filter.type){case OpenLayers.Filter.Spatial.BBOX:return"BBOX("+
-filter.property+","+
-filter.value.toBBOX()+")";case OpenLayers.Filter.Spatial.DWITHIN:return"DWITHIN("+
-filter.property+", "+
-this.write(filter.value)+", "+
-filter.distance+")";case OpenLayers.Filter.Spatial.WITHIN:return"WITHIN("+
-filter.property+", "+
-this.write(filter.value)+")";case OpenLayers.Filter.Spatial.INTERSECTS:return"INTERSECTS("+
-filter.property+", "+
-this.write(filter.value)+")";case OpenLayers.Filter.Spatial.CONTAINS:return"CONTAINS("+
-filter.property+", "+
-this.write(filter.value)+")";default:throw new Error("Unknown spatial filter type: "+filter.type);}
-case"OpenLayers.Filter.Logical":if(filter.type==OpenLayers.Filter.Logical.NOT){return"NOT ("+this.write(filter.filters[0])+")";}else{var res="(";var first=true;for(var i=0;i<filter.filters.length;i++){if(first){first=false;}else{res+=") "+logicalReverse[filter.type]+" (";}
-res+=this.write(filter.filters[i]);}
-return res+")";}
-case"OpenLayers.Filter.Comparison":if(filter.type==OpenLayers.Filter.Comparison.BETWEEN){return filter.property+" BETWEEN "+
-this.write(filter.lowerBoundary)+" AND "+
-this.write(filter.upperBoundary);}else{return filter.property+" "+operatorReverse[filter.type]+" "+
-this.write(filter.value);}
-case undefined:if(typeof filter==="string"){return"'"+filter+"'";}else if(typeof filter==="number"){return String(filter);}
-default:throw new Error("Can't encode: "+filter.CLASS_NAME+" "+filter);}},CLASS_NAME:"OpenLayers.Format.CQL"});})();OpenLayers.Control.Split=OpenLayers.Class(OpenLayers.Control,{EVENT_TYPES:["beforesplit","split","aftersplit"],layer:null,source:null,sourceOptions:null,tolerance:null,edge:true,deferDelete:false,mutual:true,targetFilter:null,sourceFilter:null,handler:null,initialize:function(options){Array.prototype.push.apply(this.EVENT_TYPES,OpenLayers.Control.prototype.EVENT_TYPES);Open [...]
-this.source=layer;this.activate();}else{this.source=layer;}},activate:function(){var activated=OpenLayers.Control.prototype.activate.call(this);if(activated){if(!this.source){if(!this.handler){this.handler=new OpenLayers.Handler.Path(this,{done:function(geometry){this.onSketchComplete({feature:new OpenLayers.Feature.Vector(geometry)});}},{layerOptions:this.sourceOptions});}
-this.handler.activate();}else if(this.source.events){this.source.events.on({sketchcomplete:this.onSketchComplete,afterfeaturemodified:this.afterFeatureModified,scope:this});}}
-return activated;},deactivate:function(){var deactivated=OpenLayers.Control.prototype.deactivate.call(this);if(deactivated){if(this.source&&this.source.events){this.layer.events.un({sketchcomplete:this.onSketchComplete,afterfeaturemodified:this.afterFeatureModified,scope:this});}}
-return deactivated;},onSketchComplete:function(event){this.feature=null;return!this.considerSplit(event.feature);},afterFeatureModified:function(event){if(event.modified){var feature=event.feature;if(feature.geometry instanceof OpenLayers.Geometry.LineString||feature.geometry instanceof OpenLayers.Geometry.MultiLineString){this.feature=event.feature;this.considerSplit(event.feature);}}},removeByGeometry:function(features,geometry){for(var i=0,len=features.length;i<len;++i){if(features[i] [...]
-results=results[1];}
-if(results.length>1){results.unshift(k,1);Array.prototype.splice.apply(targetParts,results);k+=results.length-3;}}}}}}
-if(targetParts&&targetParts.length>1){this.geomsToFeatures(targetFeature,targetParts);this.events.triggerEvent("split",{original:targetFeature,features:targetParts});Array.prototype.push.apply(additions,targetParts);removals.push(targetFeature);targetSplit=true;}}}
-if(sourceParts&&sourceParts.length>1){this.geomsToFeatures(feature,sourceParts);this.events.triggerEvent("split",{original:feature,features:sourceParts});Array.prototype.push.apply(additions,sourceParts);removals.push(feature);sourceSplit=true;}
-if(sourceSplit||targetSplit){if(this.deferDelete){var feat,destroys=[];for(var i=0,len=removals.length;i<len;++i){feat=removals[i];if(feat.state===OpenLayers.State.INSERT){destroys.push(feat);}else{feat.state=OpenLayers.State.DELETE;this.layer.drawFeature(feat);}}
-this.layer.destroyFeatures(destroys,{silent:true});for(var i=0,len=additions.length;i<len;++i){additions[i].state=OpenLayers.State.INSERT;}}else{this.layer.destroyFeatures(removals,{silent:true});}
-this.layer.addFeatures(additions,{silent:true});this.events.triggerEvent("aftersplit",{source:feature,features:additions});}}
-return sourceSplit;},geomsToFeatures:function(feature,geoms){var clone=feature.clone();delete clone.geometry;var newFeature;for(var i=0,len=geoms.length;i<len;++i){newFeature=clone.clone();newFeature.geometry=geoms[i];newFeature.state=OpenLayers.State.INSERT;geoms[i]=newFeature;}},destroy:function(){if(this.active){this.deactivate();}
-OpenLayers.Control.prototype.destroy.call(this);},CLASS_NAME:"OpenLayers.Control.Split"});OpenLayers.Layer.WMTS=OpenLayers.Class(OpenLayers.Layer.Grid,{isBaseLayer:true,version:"1.0.0",requestEncoding:"KVP",url:null,layer:null,matrixSet:null,style:null,format:"image/jpeg",tileOrigin:null,tileFullExtent:null,formatSuffix:null,matrixIds:null,dimensions:null,params:null,zoomOffset:0,formatSuffixMap:{"image/png":"png","image/png8":"png","image/png24":"png","image/png32":"png","png":"png","im [...]
-config.params=OpenLayers.Util.upperCaseObject(config.params);var args=[config.name,config.url,config.params,config];OpenLayers.Layer.Grid.prototype.initialize.apply(this,args);if(!this.formatSuffix){this.formatSuffix=this.formatSuffixMap[this.format]||this.format.split("/").pop();}
-if(this.matrixIds){var len=this.matrixIds.length;if(len&&typeof this.matrixIds[0]==="string"){var ids=this.matrixIds;this.matrixIds=new Array(len);for(var i=0;i<len;++i){this.matrixIds[i]={identifier:ids[i]};}}}},setMap:function(){OpenLayers.Layer.Grid.prototype.setMap.apply(this,arguments);this.updateMatrixProperties();},updateMatrixProperties:function(){this.matrix=this.getMatrix();if(this.matrix){if(this.matrix.topLeftCorner){this.tileOrigin=this.matrix.topLeftCorner;}
-if(this.matrix.tileWidth&&this.matrix.tileHeight){this.tileSize=new OpenLayers.Size(this.matrix.tileWidth,this.matrix.tileHeight);}
-if(!this.tileOrigin){this.tileOrigin=new OpenLayers.LonLat(this.maxExtent.left,this.maxExtent.top);}
-if(!this.tileFullExtent){this.tileFullExtent=this.maxExtent;}}},moveTo:function(bounds,zoomChanged,dragging){if(zoomChanged||!this.matrix){this.updateMatrixProperties();}
-return OpenLayers.Layer.Grid.prototype.moveTo.apply(this,arguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.WMTS(this.options);}
-obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getMatrix:function(){var matrix;if(!this.matrixIds||this.matrixIds.length===0){matrix={identifier:this.map.getZoom()+this.zoomOffset};}else{if("scaleDenominator"in this.matrixIds[0]){var denom=OpenLayers.METERS_PER_INCH*OpenLayers.INCHES_PER_UNIT[this.units]*this.map.getResolution()/0.28E-3;var diff=Number.POSITIVE_INFINITY;var delta;for(var i=0,ii=this.matrixIds.length;i<ii;++i){delta=Math.abs(1-(this.matrixIds[i]. [...]
-return matrix;},getTileInfo:function(loc){var res=this.map.getResolution();var fx=(loc.lon-this.tileOrigin.lon)/(res*this.tileSize.w);var fy=(this.tileOrigin.lat-loc.lat)/(res*this.tileSize.h);var col=Math.floor(fx);var row=Math.floor(fy);return{col:col,row:row,i:Math.floor((fx-col)*this.tileSize.w),j:Math.floor((fy-row)*this.tileSize.h)};},getURL:function(bounds){bounds=this.adjustBounds(bounds);var url="";if(!this.tileFullExtent||this.tileFullExtent.intersectsBounds(bounds)){var center [...]
-path=path+this.matrixSet+"/"+this.matrix.identifier+"/"+info.row+"/"+info.col+"."+this.formatSuffix;if(OpenLayers.Util.isArray(this.url)){url=this.selectUrl(path,this.url);}else{url=this.url;}
-if(!url.match(/\/$/)){url=url+"/";}
-url=url+path;}else if(this.requestEncoding.toUpperCase()==="KVP"){var params={SERVICE:"WMTS",REQUEST:"GetTile",VERSION:this.version,LAYER:this.layer,STYLE:this.style,TILEMATRIXSET:this.matrixSet,TILEMATRIX:this.matrix.identifier,TILEROW:info.row,TILECOL:info.col,FORMAT:this.format};url=OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this,[params]);}}
-return url;},mergeNewParams:function(newParams){if(this.requestEncoding.toUpperCase()==="KVP"){return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this,[OpenLayers.Util.upperCaseObject(newParams)]);}},CLASS_NAME:"OpenLayers.Layer.WMTS"});OpenLayers.Protocol.SOS.v1_0_0=OpenLayers.Class(OpenLayers.Protocol,{fois:null,formatOptions:null,initialize:function(options){OpenLayers.Protocol.prototype.initialize.apply(this,[options]);if(!options.format){this.format=new OpenLayers.Format.SO [...]
-this.format=null;OpenLayers.Protocol.prototype.destroy.apply(this);},read:function(options){options=OpenLayers.Util.extend({},options);OpenLayers.Util.applyDefaults(options,this.options||{});var response=new OpenLayers.Protocol.Response({requestType:"read"});var format=this.format;var data=OpenLayers.Format.XML.prototype.write.apply(format,[format.writeNode("sos:GetFeatureOfInterest",{fois:this.fois})]);response.priv=OpenLayers.Request.POST({url:options.url,callback:this.createCallback(t [...]
-options.callback.call(options.scope,response);}},parseFeatures:function(request){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
-if(!doc||doc.length<=0){return null;}
-return this.format.read(doc);},CLASS_NAME:"OpenLayers.Protocol.SOS.v1_0_0"});OpenLayers.Layer.KaMapCache=OpenLayers.Class(OpenLayers.Layer.KaMap,{IMAGE_EXTENSIONS:{'jpeg':'jpg','gif':'gif','png':'png','png8':'png','png24':'png','dithered':'png'},DEFAULT_FORMAT:'jpeg',initialize:function(name,url,params,options){OpenLayers.Layer.KaMap.prototype.initialize.apply(this,arguments);this.extension=this.IMAGE_EXTENSIONS[this.params.i.toLowerCase()||DEFAULT_FORMAT];},getURL:function(bounds){bound [...]
-var components=[url,"/",this.params.map,"/",scale,"/",this.params.g.replace(/\s/g,'_'),"/def/t",metaY,"/l",metaX,"/t",pY,"l",pX,".",this.extension];return components.join("");},CLASS_NAME:"OpenLayers.Layer.KaMapCache"});OpenLayers.Protocol.WFS.v1_1_0=OpenLayers.Class(OpenLayers.Protocol.WFS.v1,{version:"1.1.0",initialize:function(options){OpenLayers.Protocol.WFS.v1.prototype.initialize.apply(this,arguments);if(this.outputFormat&&!this.readFormat){if(this.outputFormat.toLowerCase()=="gml2 [...]
-if(options.featureClass||!OpenLayers.Layer.Vector||!OpenLayers.Feature.Vector){this.vectorMode=false;}
-params=OpenLayers.Util.upperCaseObject(params);OpenLayers.Util.extend(options,{'reportError':false});var newArguments=[];newArguments.push(name,options);OpenLayers.Layer.Vector.prototype.initialize.apply(this,newArguments);if(!this.renderer||!this.vectorMode){this.vectorMode=false;if(!options.featureClass){options.featureClass=OpenLayers.Feature.WFS;}
-OpenLayers.Layer.Markers.prototype.initialize.apply(this,newArguments);}
-if(this.params&&this.params.typename&&!this.options.typename){this.options.typename=this.params.typename;}
-if(!this.options.geometry_column){this.options.geometry_column="the_geom";}
-this.params=OpenLayers.Util.applyDefaults(params,OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS));this.url=url;},destroy:function(){if(this.vectorMode){OpenLayers.Layer.Vector.prototype.destroy.apply(this,arguments);}else{OpenLayers.Layer.Markers.prototype.destroy.apply(this,arguments);}
-if(this.tile){this.tile.destroy();}
-this.tile=null;this.ratio=null;this.featureClass=null;this.format=null;if(this.formatObject&&this.formatObject.destroy){this.formatObject.destroy();}
-this.formatObject=null;this.formatOptions=null;this.vectorMode=null;this.encodeBBOX=null;this.extractAttributes=null;},setMap:function(map){if(this.vectorMode){OpenLayers.Layer.Vector.prototype.setMap.apply(this,arguments);var options={'extractAttributes':this.extractAttributes};OpenLayers.Util.extend(options,this.formatOptions);if(this.map&&!this.projection.equals(this.map.getProjectionObject())){options.externalProjection=this.projection;options.internalProjection=this.map.getProjectio [...]
-this.formatObject=this.format?new this.format(options):new OpenLayers.Format.GML(options);}else{OpenLayers.Layer.Markers.prototype.setMap.apply(this,arguments);}},moveTo:function(bounds,zoomChanged,dragging){if(this.vectorMode){OpenLayers.Layer.Vector.prototype.moveTo.apply(this,arguments);}else{OpenLayers.Layer.Markers.prototype.moveTo.apply(this,arguments);}
-if(dragging){return false;}
-if(zoomChanged){if(this.vectorMode){this.renderer.clear();}}
-if(this.options.minZoomLevel){OpenLayers.Console.warn(OpenLayers.i18n('minZoomLevelError'));if(this.map.getZoom()<this.options.minZoomLevel){return null;}}
-if(bounds==null){bounds=this.map.getExtent();}
-var firstRendering=(this.tile==null);var outOfBounds=(!firstRendering&&!this.tile.bounds.containsBounds(bounds));if(zoomChanged||firstRendering||(!dragging&&outOfBounds)){var center=bounds.getCenterLonLat();var tileWidth=bounds.getWidth()*this.ratio;var tileHeight=bounds.getHeight()*this.ratio;var tileBounds=new OpenLayers.Bounds(center.lon-(tileWidth/2),center.lat-(tileHeight/2),center.lon+(tileWidth/2),center.lat+(tileHeight/2));var tileSize=this.map.getSize();tileSize.w=tileSize.w*thi [...]
-else{params={BBOX:this.encodeBBOX?tileBounds.toBBOX():tileBounds.toArray()};}
-if(this.map&&!this.projection.equals(this.map.getProjectionObject())){var projectedBounds=tileBounds.clone();projectedBounds.transform(this.map.getProjectionObject(),this.projection);if(!filter){params.BBOX=this.encodeBBOX?projectedBounds.toBBOX():projectedBounds.toArray();}}
-url+="&"+OpenLayers.Util.getParameterString(params);if(!this.tile){this.tile=new OpenLayers.Tile.WFS(this,pos,tileBounds,url,tileSize);this.addTileMonitoringHooks(this.tile);this.tile.draw();}else{if(this.vectorMode){this.destroyFeatures();this.renderer.clear();}else{this.clearMarkers();}
-this.removeTileMonitoringHooks(this.tile);this.tile.destroy();this.tile=null;this.tile=new OpenLayers.Tile.WFS(this,pos,tileBounds,url,tileSize);this.addTileMonitoringHooks(this.tile);this.tile.draw();}}},addTileMonitoringHooks:function(tile){tile.onLoadStart=function(){if(this==this.layer.tile){this.layer.events.triggerEvent("loadstart");}};tile.events.register("loadstart",tile,tile.onLoadStart);tile.onLoadEnd=function(){if(this==this.layer.tile){this.layer.events.triggerEvent("tileload [...]
-if(this.vectorMode){obj=OpenLayers.Layer.Vector.prototype.clone.apply(this,[obj]);}else{obj=OpenLayers.Layer.Markers.prototype.clone.apply(this,[obj]);}
-return obj;},getFullRequestString:function(newParams,altUrl){var projectionCode=this.projection.getCode()||this.map.getProjection();this.params.SRS=(projectionCode=="none")?null:projectionCode;return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this,arguments);},commit:function(){if(!this.writer){var options={};if(this.map&&!this.projection.equals(this.map.getProjectionObject())){options.externalProjection=this.projection;options.internalProjection=this.map.getProjectionObject();}
-this.writer=new OpenLayers.Format.WFS(options,this);}
-var data=this.writer.write(this.features);OpenLayers.Request.POST({url:this.url,data:data,success:this.commitSuccess,failure:this.commitFailure,scope:this});},commitSuccess:function(request){var response=request.responseText;if(response.indexOf('SUCCESS')!=-1){this.commitReport(OpenLayers.i18n("commitSuccess",{'response':response}));for(var i=0;i<this.features.length;i++){this.features[i].state=null;}}else if(response.indexOf('FAILED')!=-1||response.indexOf('Exception')!=-1){this.commitR [...]
-this.tile.draw();}},getDataExtent:function(){var extent;if(this.vectorMode){extent=OpenLayers.Layer.Vector.prototype.getDataExtent.apply(this);}else{extent=OpenLayers.Layer.Markers.prototype.getDataExtent.apply(this);}
-return extent;},setOpacity:function(opacity){if(this.vectorMode){OpenLayers.Layer.Vector.prototype.setOpacity.apply(this,[opacity]);}else{OpenLayers.Layer.Markers.prototype.setOpacity.apply(this,[opacity]);}},CLASS_NAME:"OpenLayers.Layer.WFS"});OpenLayers.Control.LayerSwitcher=OpenLayers.Class(OpenLayers.Control,{roundedCorner:true,roundedCornerColor:"darkblue",layerStates:null,layersDiv:null,baseLayersDiv:null,baseLayers:null,dataLbl:null,dataLayersDiv:null,dataLayers:null,minimizeDiv:n [...]
-this.redraw();return this.div;},clearLayersArray:function(layersType){var layers=this[layersType+"Layers"];if(layers){for(var i=0,len=layers.length;i<len;i++){var layer=layers[i];OpenLayers.Event.stopObservingElement(layer.inputElem);OpenLayers.Event.stopObservingElement(layer.labelSpan);}}
-this[layersType+"LayersDiv"].innerHTML="";this[layersType+"Layers"]=[];},checkRedraw:function(){var redraw=false;if(!this.layerStates.length||(this.map.layers.length!=this.layerStates.length)){redraw=true;}else{for(var i=0,len=this.layerStates.length;i<len;i++){var layerState=this.layerStates[i];var layer=this.map.layers[i];if((layerState.name!=layer.name)||(layerState.inRange!=layer.inRange)||(layerState.id!=layer.id)||(layerState.visibility!=layer.visibility)){redraw=true;break;}}}
-return redraw;},redraw:function(){if(!this.checkRedraw()){return this.div;}
-this.clearLayersArray("base");this.clearLayersArray("data");var containsOverlays=false;var containsBaseLayers=false;var len=this.map.layers.length;this.layerStates=new Array(len);for(var i=0;i<len;i++){var layer=this.map.layers[i];this.layerStates[i]={'name':layer.name,'visibility':layer.visibility,'inRange':layer.inRange,'id':layer.id};}
-var layers=this.map.layers.slice();if(!this.ascending){layers.reverse();}
-for(var i=0,len=layers.length;i<len;i++){var layer=layers[i];var baseLayer=layer.isBaseLayer;if(layer.displayInLayerSwitcher){if(baseLayer){containsBaseLayers=true;}else{containsOverlays=true;}
-var checked=(baseLayer)?(layer==this.map.baseLayer):layer.getVisibility();var inputElem=document.createElement("input");inputElem.id=this.id+"_input_"+layer.name;inputElem.name=(baseLayer)?this.id+"_baseLayers":layer.name;inputElem.type=(baseLayer)?"radio":"checkbox";inputElem.value=layer.name;inputElem.checked=checked;inputElem.defaultChecked=checked;if(!baseLayer&&!layer.inRange){inputElem.disabled=true;}
-var context={'inputElem':inputElem,'layer':layer,'layerSwitcher':this};OpenLayers.Event.observe(inputElem,"mouseup",OpenLayers.Function.bindAsEventListener(this.onInputClick,context));var labelSpan=document.createElement("span");OpenLayers.Element.addClass(labelSpan,"labelSpan");if(!baseLayer&&!layer.inRange){labelSpan.style.color="gray";}
-labelSpan.innerHTML=layer.name;labelSpan.style.verticalAlign=(baseLayer)?"bottom":"baseline";OpenLayers.Event.observe(labelSpan,"click",OpenLayers.Function.bindAsEventListener(this.onInputClick,context));var br=document.createElement("br");var groupArray=(baseLayer)?this.baseLayers:this.dataLayers;groupArray.push({'layer':layer,'inputElem':inputElem,'labelSpan':labelSpan});var groupDiv=(baseLayer)?this.baseLayersDiv:this.dataLayersDiv;groupDiv.appendChild(inputElem);groupDiv.appendChild( [...]
-this.dataLbl.style.display=(containsOverlays)?"":"none";this.baseLbl.style.display=(containsBaseLayers)?"":"none";return this.div;},onInputClick:function(e){if(!this.inputElem.disabled){if(this.inputElem.type=="radio"){this.inputElem.checked=true;this.layer.map.setBaseLayer(this.layer);}else{this.inputElem.checked=!this.inputElem.checked;this.layerSwitcher.updateMap();}}
-OpenLayers.Event.stop(e);},onLayerClick:function(e){this.updateMap();},updateMap:function(){for(var i=0,len=this.baseLayers.length;i<len;i++){var layerEntry=this.baseLayers[i];if(layerEntry.inputElem.checked){this.map.setBaseLayer(layerEntry.layer,false);}}
-for(var i=0,len=this.dataLayers.length;i<len;i++){var layerEntry=this.dataLayers[i];layerEntry.layer.setVisibility(layerEntry.inputElem.checked);}},maximizeControl:function(e){this.div.style.width="";this.div.style.height="";this.showControls(false);if(e!=null){OpenLayers.Event.stop(e);}},minimizeControl:function(e){this.div.style.width="0px";this.div.style.height="0px";this.showControls(true);if(e!=null){OpenLayers.Event.stop(e);}},showControls:function(minimize){this.maximizeDiv.style. [...]
-this.div.appendChild(this.layersDiv);if(this.roundedCorner){OpenLayers.Rico.Corner.round(this.div,{corners:"tl bl",bgColor:"transparent",color:this.roundedCornerColor,blend:false});OpenLayers.Rico.Corner.changeOpacity(this.layersDiv,0.75);}
-var imgLocation=OpenLayers.Util.getImagesLocation();var sz=new OpenLayers.Size(18,18);var img=imgLocation+'layer-switcher-maximize.png';this.maximizeDiv=OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_MaximizeDiv",null,sz,img,"absolute");OpenLayers.Element.addClass(this.maximizeDiv,"maximizeDiv");this.maximizeDiv.style.display="none";OpenLayers.Event.observe(this.maximizeDiv,"click",OpenLayers.Function.bindAsEventListener(this.maximizeControl,this));this.div.appendChild(this.maxi [...]
-if(this.layer.options.geometry_column){this.geometryName=this.layer.options.geometry_column;}
-if(this.layer.options.typename){this.featureName=this.layer.options.typename;}},write:function(features){var transaction=this.createElementNS(this.wfsns,'wfs:Transaction');transaction.setAttribute("version","1.0.0");transaction.setAttribute("service","WFS");for(var i=0;i<features.length;i++){switch(features[i].state){case OpenLayers.State.INSERT:transaction.appendChild(this.insert(features[i]));break;case OpenLayers.State.UPDATE:transaction.appendChild(this.update(features[i]));break;cas [...]
-return OpenLayers.Format.XML.prototype.write.apply(this,[transaction]);},createFeatureXML:function(feature){var geometryNode=this.buildGeometryNode(feature.geometry);var geomContainer=this.createElementNS(this.featureNS,"feature:"+this.geometryName);geomContainer.appendChild(geometryNode);var featureContainer=this.createElementNS(this.featureNS,"feature:"+this.featureName);featureContainer.appendChild(geomContainer);for(var attr in feature.attributes){var attrText=this.createTextNode(fea [...]
-var attrContainer=this.createElementNS(this.featureNS,"feature:"+nodename);attrContainer.appendChild(attrText);featureContainer.appendChild(attrContainer);}
-return featureContainer;},insert:function(feature){var insertNode=this.createElementNS(this.wfsns,'wfs:Insert');insertNode.appendChild(this.createFeatureXML(feature));return insertNode;},update:function(feature){if(!feature.fid){OpenLayers.Console.userError(OpenLayers.i18n("noFID"));}
-var updateNode=this.createElementNS(this.wfsns,'wfs:Update');updateNode.setAttribute("typeName",this.featurePrefix+':'+this.featureName);updateNode.setAttribute("xmlns:"+this.featurePrefix,this.featureNS);var propertyNode=this.createElementNS(this.wfsns,'wfs:Property');var nameNode=this.createElementNS(this.wfsns,'wfs:Name');var txtNode=this.createTextNode(this.geometryName);nameNode.appendChild(txtNode);propertyNode.appendChild(nameNode);var valueNode=this.createElementNS(this.wfsns,'wf [...]
-valueNode.appendChild(geometryNode);propertyNode.appendChild(valueNode);updateNode.appendChild(propertyNode);for(var propName in feature.attributes){propertyNode=this.createElementNS(this.wfsns,'wfs:Property');nameNode=this.createElementNS(this.wfsns,'wfs:Name');nameNode.appendChild(this.createTextNode(propName));propertyNode.appendChild(nameNode);valueNode=this.createElementNS(this.wfsns,'wfs:Value');valueNode.appendChild(this.createTextNode(feature.attributes[propName]));propertyNode.a [...]
-var filterNode=this.createElementNS(this.ogcns,'ogc:Filter');var filterIdNode=this.createElementNS(this.ogcns,'ogc:FeatureId');filterIdNode.setAttribute("fid",feature.fid);filterNode.appendChild(filterIdNode);updateNode.appendChild(filterNode);return updateNode;},remove:function(feature){if(!feature.fid){OpenLayers.Console.userError(OpenLayers.i18n("noFID"));return false;}
-var deleteNode=this.createElementNS(this.wfsns,'wfs:Delete');deleteNode.setAttribute("typeName",this.featurePrefix+':'+this.featureName);deleteNode.setAttribute("xmlns:"+this.featurePrefix,this.featureNS);var filterNode=this.createElementNS(this.ogcns,'ogc:Filter');var filterIdNode=this.createElementNS(this.ogcns,'ogc:FeatureId');filterIdNode.setAttribute("fid",feature.fid);filterNode.appendChild(filterIdNode);deleteNode.appendChild(filterNode);return deleteNode;},destroy:function(){this [...]
-return this.parseFeatures(doc);},write:function(features){var doc;if(OpenLayers.Util.isArray(features)){doc=this.createElementNSPlus("atom:feed");doc.appendChild(this.createElementNSPlus("atom:title",{value:this.feedTitle}));for(var i=0,ii=features.length;i<ii;i++){doc.appendChild(this.buildEntryNode(features[i]));}}
-else{doc=this.buildEntryNode(features);}
-return OpenLayers.Format.XML.prototype.write.apply(this,[doc]);},buildContentNode:function(content){var node=this.createElementNSPlus("atom:content",{attributes:{type:content.type||null}});if(content.src){node.setAttribute("src",content.src);}else{if(content.type=="text"||content.type==null){node.appendChild(this.createTextNode(content.value));}else if(content.type=="html"){if(typeof content.value!="string"){throw"HTML content must be in form of an escaped string";}
-node.appendChild(this.createTextNode(content.value));}else if(content.type=="xhtml"){node.appendChild(content.value);}else if(content.type=="xhtml"||content.type.match(/(\+|\/)xml$/)){node.appendChild(content.value);}
-else{node.appendChild(this.createTextNode(content.value));}}
-return node;},buildEntryNode:function(feature){var attrib=feature.attributes;var atomAttrib=attrib.atom||{};var entryNode=this.createElementNSPlus("atom:entry");if(atomAttrib.authors){var authors=OpenLayers.Util.isArray(atomAttrib.authors)?atomAttrib.authors:[atomAttrib.authors];for(var i=0,ii=authors.length;i<ii;i++){entryNode.appendChild(this.buildPersonConstructNode("author",authors[i]));}}
-if(atomAttrib.categories){var categories=OpenLayers.Util.isArray(atomAttrib.categories)?atomAttrib.categories:[atomAttrib.categories];var category;for(var i=0,ii=categories.length;i<ii;i++){category=categories[i];entryNode.appendChild(this.createElementNSPlus("atom:category",{attributes:{term:category.term,scheme:category.scheme||null,label:category.label||null}}));}}
-if(atomAttrib.content){entryNode.appendChild(this.buildContentNode(atomAttrib.content));}
-if(atomAttrib.contributors){var contributors=OpenLayers.Util.isArray(atomAttrib.contributors)?atomAttrib.contributors:[atomAttrib.contributors];for(var i=0,ii=contributors.length;i<ii;i++){entryNode.appendChild(this.buildPersonConstructNode("contributor",contributors[i]));}}
-if(feature.fid){entryNode.appendChild(this.createElementNSPlus("atom:id",{value:feature.fid}));}
-if(atomAttrib.links){var links=OpenLayers.Util.isArray(atomAttrib.links)?atomAttrib.links:[atomAttrib.links];var link;for(var i=0,ii=links.length;i<ii;i++){link=links[i];entryNode.appendChild(this.createElementNSPlus("atom:link",{attributes:{href:link.href,rel:link.rel||null,type:link.type||null,hreflang:link.hreflang||null,title:link.title||null,length:link.length||null}}));}}
-if(atomAttrib.published){entryNode.appendChild(this.createElementNSPlus("atom:published",{value:atomAttrib.published}));}
-if(atomAttrib.rights){entryNode.appendChild(this.createElementNSPlus("atom:rights",{value:atomAttrib.rights}));}
-if(atomAttrib.summary||attrib.description){entryNode.appendChild(this.createElementNSPlus("atom:summary",{value:atomAttrib.summary||attrib.description}));}
-entryNode.appendChild(this.createElementNSPlus("atom:title",{value:atomAttrib.title||attrib.title||this.defaultEntryTitle}));if(atomAttrib.updated){entryNode.appendChild(this.createElementNSPlus("atom:updated",{value:atomAttrib.updated}));}
-if(feature.geometry){var whereNode=this.createElementNSPlus("georss:where");whereNode.appendChild(this.buildGeometryNode(feature.geometry));entryNode.appendChild(whereNode);}
-return entryNode;},initGmlParser:function(){this.gmlParser=new OpenLayers.Format.GML.v3({xy:this.xy,featureNS:"http://example.com#feature",internalProjection:this.internalProjection,externalProjection:this.externalProjection});},buildGeometryNode:function(geometry){if(!this.gmlParser){this.initGmlParser();}
-var node=this.gmlParser.writeNode("feature:_geometry",geometry);return node.firstChild;},buildPersonConstructNode:function(name,value){var oNames=["uri","email"];var personNode=this.createElementNSPlus("atom:"+name);personNode.appendChild(this.createElementNSPlus("atom:name",{value:value.name}));for(var i=0,ii=oNames.length;i<ii;i++){if(value[oNames[i]]){personNode.appendChild(this.createElementNSPlus("atom:"+oNames[i],{value:value[oNames[i]]}));}}
-return personNode;},getFirstChildValue:function(node,nsuri,name,def){var value;var nodes=this.getElementsByTagNameNS(node,nsuri,name);if(nodes&&nodes.length>0){value=this.getChildValue(nodes[0],def);}else{value=def;}
-return value;},parseFeature:function(node){var atomAttrib={};var value=null;var nodes=null;var attval=null;var atomns=this.namespaces.atom;this.parsePersonConstructs(node,"author",atomAttrib);nodes=this.getElementsByTagNameNS(node,atomns,"category");if(nodes.length>0){atomAttrib.categories=[];}
-for(var i=0,ii=nodes.length;i<ii;i++){value={};value.term=nodes[i].getAttribute("term");attval=nodes[i].getAttribute("scheme");if(attval){value.scheme=attval;}
-attval=nodes[i].getAttribute("label");if(attval){value.label=attval;}
-atomAttrib.categories.push(value);}
-nodes=this.getElementsByTagNameNS(node,atomns,"content");if(nodes.length>0){value={};attval=nodes[0].getAttribute("type");if(attval){value.type=attval;}
-attval=nodes[0].getAttribute("src");if(attval){value.src=attval;}else{if(value.type=="text"||value.type=="html"||value.type==null){value.value=this.getFirstChildValue(node,atomns,"content",null);}else if(value.type=="xhtml"||value.type.match(/(\+|\/)xml$/)){value.value=this.getChildEl(nodes[0]);}else{value.value=this.getFirstChildValue(node,atomns,"content",null);}
-atomAttrib.content=value;}}
-this.parsePersonConstructs(node,"contributor",atomAttrib);atomAttrib.id=this.getFirstChildValue(node,atomns,"id",null);nodes=this.getElementsByTagNameNS(node,atomns,"link");if(nodes.length>0){atomAttrib.links=new Array(nodes.length);}
-var oAtts=["rel","type","hreflang","title","length"];for(var i=0,ii=nodes.length;i<ii;i++){value={};value.href=nodes[i].getAttribute("href");for(var j=0,jj=oAtts.length;j<jj;j++){attval=nodes[i].getAttribute(oAtts[j]);if(attval){value[oAtts[j]]=attval;}}
-atomAttrib.links[i]=value;}
-value=this.getFirstChildValue(node,atomns,"published",null);if(value){atomAttrib.published=value;}
-value=this.getFirstChildValue(node,atomns,"rights",null);if(value){atomAttrib.rights=value;}
-value=this.getFirstChildValue(node,atomns,"summary",null);if(value){atomAttrib.summary=value;}
-atomAttrib.title=this.getFirstChildValue(node,atomns,"title",null);atomAttrib.updated=this.getFirstChildValue(node,atomns,"updated",null);var featureAttrib={title:atomAttrib.title,description:atomAttrib.summary,atom:atomAttrib};var geometry=this.parseLocations(node)[0];var feature=new OpenLayers.Feature.Vector(geometry,featureAttrib);feature.fid=atomAttrib.id;return feature;},parseFeatures:function(node){var features=[];var entries=this.getElementsByTagNameNS(node,this.namespaces.atom,"e [...]
-for(var i=0,ii=entries.length;i<ii;i++){features.push(this.parseFeature(entries[i]));}
-return features;},parseLocations:function(node){var georssns=this.namespaces.georss;var locations={components:[]};var where=this.getElementsByTagNameNS(node,georssns,"where");if(where&&where.length>0){if(!this.gmlParser){this.initGmlParser();}
-for(var i=0,ii=where.length;i<ii;i++){this.gmlParser.readChildNodes(where[i],locations);}}
-var components=locations.components;var point=this.getElementsByTagNameNS(node,georssns,"point");if(point&&point.length>0){for(var i=0,ii=point.length;i<ii;i++){var xy=OpenLayers.String.trim(point[i].firstChild.nodeValue).split(/\s+/);if(xy.length!=2){xy=OpenLayers.String.trim(point[i].firstChild.nodeValue).split(/\s*,\s*/);}
-components.push(new OpenLayers.Geometry.Point(parseFloat(xy[1]),parseFloat(xy[0])));}}
-var line=this.getElementsByTagNameNS(node,georssns,"line");if(line&&line.length>0){var coords;var p;var points;for(var i=0,ii=line.length;i<ii;i++){coords=OpenLayers.String.trim(line[i].firstChild.nodeValue).split(/\s+/);points=[];for(var j=0,jj=coords.length;j<jj;j+=2){p=new OpenLayers.Geometry.Point(parseFloat(coords[j+1]),parseFloat(coords[j]));points.push(p);}
-components.push(new OpenLayers.Geometry.LineString(points));}}
-var polygon=this.getElementsByTagNameNS(node,georssns,"polygon");if(polygon&&polygon.length>0){var coords;var p;var points;for(var i=0,ii=polygon.length;i<ii;i++){coords=OpenLayers.String.trim(polygon[i].firstChild.nodeValue).split(/\s+/);points=[];for(var j=0,jj=coords.length;j<jj;j+=2){p=new OpenLayers.Geometry.Point(parseFloat(coords[j+1]),parseFloat(coords[j]));points.push(p);}
-components.push(new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]));}}
-if(this.internalProjection&&this.externalProjection){for(var i=0,ii=components.length;i<ii;i++){if(components[i]){components[i].transform(this.externalProjection,this.internalProjection);}}}
-return components;},parsePersonConstructs:function(node,name,data){var persons=[];var atomns=this.namespaces.atom;var nodes=this.getElementsByTagNameNS(node,atomns,name);var oAtts=["uri","email"];for(var i=0,ii=nodes.length;i<ii;i++){var value={};value.name=this.getFirstChildValue(nodes[i],atomns,"name",null);for(var j=0,jj=oAtts.length;j<jj;j++){var attval=this.getFirstChildValue(nodes[i],atomns,oAtts[j],null);if(attval){value[oAtts[j]]=attval;}}
-persons.push(value);}
-if(persons.length>0){data[name+"s"]=persons;}},CLASS_NAME:"OpenLayers.Format.Atom"});OpenLayers.Control.KeyboardDefaults=OpenLayers.Class(OpenLayers.Control,{autoActivate:true,slideFactor:75,draw:function(){this.handler=new OpenLayers.Handler.Keyboard(this,{"keydown":this.defaultKeyPress});},defaultKeyPress:function(evt){switch(evt.keyCode){case OpenLayers.Event.KEY_LEFT:this.map.pan(-this.slideFactor,0);break;case OpenLayers.Event.KEY_RIGHT:this.map.pan(this.slideFactor,0);break;case Op [...]
-var values=srs.split(/ +/);for(var i=0,len=values.length;i<len;i++){layerContext.projections[values[i]]=true;}},write_wmc_Layer:function(context){var node=OpenLayers.Format.WMC.v1.prototype.write_wmc_Layer.apply(this,[context]);if(context.srs){var projections=[];for(var name in context.srs){projections.push(name);}
-node.appendChild(this.createElementDefaultNS("SRS",projections.join(" ")));}
-node.appendChild(this.write_wmc_FormatList(context));node.appendChild(this.write_wmc_StyleList(context));if(context.dimensions){node.appendChild(this.write_wmc_DimensionList(context));}
-node.appendChild(this.write_wmc_LayerExtension(context));},CLASS_NAME:"OpenLayers.Format.WMC.v1_0_0"});OpenLayers.Feature.WFS=OpenLayers.Class(OpenLayers.Feature,{initialize:function(layer,xmlNode){var newArguments=arguments;var data=this.processXMLNode(xmlNode);newArguments=new Array(layer,data.lonlat,data);OpenLayers.Feature.prototype.initialize.apply(this,newArguments);this.createMarker();this.layer.addMarker(this.marker);},destroy:function(){if(this.marker!=null){this.layer.removeMar [...]
-OpenLayers.Feature.prototype.destroy.apply(this,arguments);},processXMLNode:function(xmlNode){var point=OpenLayers.Ajax.getElementsByTagNameNS(xmlNode,"http://www.opengis.net/gml","gml","Point");var text=OpenLayers.Util.getXmlNodeValue(OpenLayers.Ajax.getElementsByTagNameNS(point[0],"http://www.opengis.net/gml","gml","coordinates")[0]);var floats=text.split(",");return{lonlat:new OpenLayers.LonLat(parseFloat(floats[0]),parseFloat(floats[1])),id:null};},CLASS_NAME:"OpenLayers.Feature.WFS" [...]
-if(data&&data.nodeType==9){data=data.documentElement;}
-var capabilities={};this.readNode(data,capabilities);capabilities.version=this.version;return capabilities;},readers:{"wmts":{"Capabilities":function(node,obj){this.readChildNodes(node,obj);},"Contents":function(node,obj){obj.contents={};obj.contents.layers=[];obj.contents.tileMatrixSets={};this.readChildNodes(node,obj.contents);},"Layer":function(node,obj){var layer={styles:[],formats:[],tileMatrixSetLinks:[]};layer.layers=[];this.readChildNodes(node,layer);obj.layers.push(layer);},"Sty [...]
-if(yx){obj.topLeftCorner=new OpenLayers.LonLat(coords[1],coords[0]);}else{obj.topLeftCorner=new OpenLayers.LonLat(coords[0],coords[1]);}},"TileWidth":function(node,obj){obj.tileWidth=parseInt(this.getChildValue(node));},"TileHeight":function(node,obj){obj.tileHeight=parseInt(this.getChildValue(node));},"MatrixWidth":function(node,obj){obj.matrixWidth=parseInt(this.getChildValue(node));},"MatrixHeight":function(node,obj){obj.matrixHeight=parseInt(this.getChildValue(node));},"ResourceURL": [...]
\ No newline at end of file
diff --git a/build/README.txt b/build/README.txt
index ca8402c..50798db 100644
--- a/build/README.txt
+++ b/build/README.txt
@@ -41,3 +41,6 @@ The options available for compression are:
  * none
    None will leave the Javascript uncompressed.
 
+
+For more information on the build script and custom build profiles,
+see http://docs.openlayers.org/library/deploying.html
diff --git a/build/build.py b/build/build.py
index d918781..0ca2a74 100755
--- a/build/build.py
+++ b/build/build.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 import sys
+import os
 sys.path.append("../tools")
 import mergejs
 import optparse
@@ -13,7 +14,9 @@ def build(config_file = None, output_file = None, options = None):
     except ImportError:
         print "No jsmin"
     try:
-        import closure
+        # tools/closure_library_jscompiler.py from: 
+        #       http://code.google.com/p/closure-library/source/browse/trunk/closure/bin/build/jscompiler.py
+        import closure_library_jscompiler as closureCompiler
         have_compressor.append("closure")
     except Exception, E:
         print "No closure (%s)" % E
@@ -48,19 +51,57 @@ def build(config_file = None, output_file = None, options = None):
         outputFilename = output_file
 
     print "Merging libraries."
-    merged = mergejs.run(sourceDirectory, None, configFilename)
+    try:
+        if use_compressor == "closure":
+            sourceFiles = mergejs.getNames(sourceDirectory, configFilename)
+        else:
+            merged = mergejs.run(sourceDirectory, None, configFilename)
+    except mergejs.MissingImport, E:
+        print "\nAbnormal termination."
+        sys.exit("ERROR: %s" % E)
+
     print "Compressing using %s" % use_compressor
     if use_compressor == "jsmin":
         minimized = jsmin.jsmin(merged)
     elif use_compressor == "minimize":
         minimized = minimize.minimize(merged)
     elif use_compressor == "closure_ws":
-        minimized = closure_ws.minimize(merged)      
+        if len(merged) > 1000000: # The maximum file size for this web service is 1000 KB.
+            print "\nPre-compressing using jsmin"
+            merged = jsmin.jsmin(merged)
+        print "\nIs being compressed using Closure Compiler Service."
+        try:
+            minimized = closure_ws.minimize(merged)
+        except Exception, E:
+            print "\nAbnormal termination."
+            sys.exit("ERROR: Closure Compilation using Web service failed!\n%s" % E)
+        if len(minimized) <= 2:
+            print "\nAbnormal termination due to compilation errors."
+            sys.exit("ERROR: Closure Compilation using Web service failed!")
+        else:
+            print "Closure Compilation using Web service has completed successfully."
     elif use_compressor == "closure":
-        minimized = closure.minimize(merged)      
+        jscompilerJar = "../tools/closure-compiler.jar"
+        if not os.path.isfile(jscompilerJar):
+            print "\nNo closure-compiler.jar; read README.txt!"
+            sys.exit("ERROR: Closure Compiler \"%s\" does not exist! Read README.txt" % jscompilerJar)
+        minimized = closureCompiler.Compile(
+            jscompilerJar, 
+            sourceFiles, [
+                "--externs", "closure-compiler/Externs.js",
+                "--jscomp_warning", "checkVars",   # To enable "undefinedVars"
+                "--jscomp_error",   "checkRegExp", # Also necessary to enable "undefinedVars"
+                "--jscomp_error",   "undefinedVars"
+            ]
+        )
+        if minimized is None:
+            print "\nAbnormal termination due to compilation errors." 
+            sys.exit("ERROR: Closure Compilation failed! See compilation errors.") 
+        print "Closure Compilation has completed successfully."
     else: # fallback
         minimized = merged 
-    print "Adding license file."
+
+    print "\nAdding license file."
     minimized = file("license.txt").read() + minimized
 
     print "Writing to %s." % outputFilename
@@ -79,4 +120,4 @@ if __name__ == '__main__':
   elif len(args) == 2:
     build(args[0], args[1], options=options)
   else:
-    print "Wrong number of arguments"
+    print "Wrong number of arguments"
\ No newline at end of file
diff --git a/build/closure-compiler/Externs.js b/build/closure-compiler/Externs.js
new file mode 100644
index 0000000..3bb9464
--- /dev/null
+++ b/build/closure-compiler/Externs.js
@@ -0,0 +1,50 @@
+// ********************************************
+// This source file serves *ONLY* to avoid some compilation errors when the 
+//      compiler uses the flag:
+//          --jscomp_error undefinedVars
+//
+// In this source are declared all variables from other programs that use 
+//      OpenLayers. This avoids the error of undefined variable for these names.
+//
+// NOTE: The compiler does not include externs files like this in the 
+//      compilation result.
+// ********************************************
+
+// Used in lib/Firebug/firebug.js when gecko_dom
+    var frames;
+
+// Check the console when using Firebug Lite
+    var console;
+
+// Proj4js
+    var Proj4js = {Proj: function(){}};
+
+// Check JSON in lib/OpenLayers/Format/JSON.js
+    var JSON = {};
+
+// Google Maps
+    var GMap2;
+    var G_NORMAL_MAP;
+    var GEvent;
+    var GLatLngBounds = function(){};
+    var GSize = function(x, y){};
+    var GPoint = function(x, y){};
+    var GLatLng = function(lat, lon){};
+    
+// Multimap
+    var MultimapViewer = function(div){};
+    var MMLatLon = function(lat, lon){};
+    var MMPoint = function(x, y){};
+
+//VirtualEarth
+    var VEMap = function(name){};
+    var VEPixel = function(x, y){};
+    var VELatLong = function(lat, lon){};
+    var Msn = {VE:{}};
+
+// Yahoo
+    var YMap = function(div, type, size){};
+    var YGeoPoint = function(lat, lon){};
+    var YCoordPoint = function(x, y){};
+    var YSize = function(w, h){};
+
diff --git a/build/full.cfg b/build/full.cfg
index 5ed2b7b..91c817a 100644
--- a/build/full.cfg
+++ b/build/full.cfg
@@ -11,3 +11,4 @@
 Firebug
 OpenLayers.js
 OpenLayers/Lang
+deprecated.js
diff --git a/build/library.cfg b/build/library.cfg
deleted file mode 100644
index 572cd58..0000000
--- a/build/library.cfg
+++ /dev/null
@@ -1,48 +0,0 @@
-# This file includes the OpenLayers code to create a build for everything that 
-# does not require vector support.
-
-[first]
-
-[last]
-
-[include]
-
-[exclude]
-Firebug
-OpenLayers.js
-OpenLayers/Format/GeoRSS.js
-OpenLayers/Format/GML.js
-OpenLayers/Format/WKT.js
-OpenLayers/Format/KML.js
-OpenLayers/Format/WFS.js
-OpenLayers/Format.js
-OpenLayers/Handler/Path.js
-OpenLayers/Handler/Point.js
-OpenLayers/Handler/Polygon.js
-OpenLayers/Handler/Select.js
-OpenLayers/Geometry/Collection.js
-OpenLayers/Geometry/Curve.js
-OpenLayers/Geometry/LinearRing.js
-OpenLayers/Geometry/LineString.js
-OpenLayers/Geometry/MultiLineString.js
-OpenLayers/Geometry/MultiPoint.js
-OpenLayers/Geometry/MultiPolygon.js
-OpenLayers/Geometry/Point.js
-OpenLayers/Geometry/Polygon.js
-OpenLayers/Geometry/Rectangle.js
-OpenLayers/Geometry/Surface.js
-OpenLayers/Geometry.js
-OpenLayers/Layer/GML.js
-OpenLayers/Layer/Vector.js
-OpenLayers/Control/DrawFeature.js
-OpenLayers/Control/EditingToolbar.js
-OpenLayers/Control/SelectFeature.js
-OpenLayers/Feature/Vector.js
-OpenLayers/Renderer
-OpenLayers/Renderer/Elements.js
-OpenLayers/Renderer/SVG.js
-OpenLayers/Renderer/VML.js
-OpenLayers/Renderer.js
-OpenLayers/Lang
-
-
diff --git a/build/license.txt b/build/license.txt
index ffb1fe1..9c7635d 100644
--- a/build/license.txt
+++ b/build/license.txt
@@ -2,47 +2,17 @@
 
   OpenLayers.js -- OpenLayers Map Viewer Library
 
-  Copyright 2005-2011 OpenLayers Contributors, released under the FreeBSD
-  license. Please see http://svn.openlayers.org/trunk/openlayers/license.txt
-  for the full text of the license.
+  Copyright (c) 2006-2012 by OpenLayers Contributors
+  Published under the 2-clause BSD license.
+  See http://openlayers.org/dev/license.txt for the full text of the license, and http://openlayers.org/dev/authors.txt for full list of contributors.
 
   Includes compressed code under the following licenses:
 
-  (For uncompressed versions of the code used please see the
-  OpenLayers SVN repository: <http://openlayers.org/>)
+  (For uncompressed versions of the code used, please see the
+  OpenLayers Github repository: <https://github.com/openlayers/openlayers>)
 
 */
 
-/* Contains portions of Prototype.js:
- *
- * Prototype JavaScript framework, version 1.4.0
- *  (c) 2005 Sam Stephenson <sam at conio.net>
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
- *--------------------------------------------------------------------------*/
-
-/**  
-*  
-*  Contains portions of Rico <http://openrico.org/>
-* 
-*  Copyright 2005 Sabre Airline Solutions  
-*  
-*  Licensed under the Apache License, Version 2.0 (the "License"); you
-*  may not use this file except in compliance with the License. You
-*  may obtain a copy of the License at
-*  
-*         http://www.apache.org/licenses/LICENSE-2.0  
-*  
-*  Unless required by applicable law or agreed to in writing, software
-*  distributed under the License is distributed on an "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-*  implied. See the License for the specific language governing
-*  permissions and limitations under the License. 
-*
-**/
-
 /**
  * Contains XMLHttpRequest.js <http://code.google.com/p/xmlhttprequest/>
  * Copyright 2007 Sergey Ilinsky (http://www.ilinsky.com)
@@ -54,44 +24,6 @@
  */
 
 /**
- * Contains portions of Gears <http://code.google.com/apis/gears/>
- *
- * Copyright 2007, Google Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  1. Redistributions of source code must retain the above copyright notice,
- *     this list of conditions and the following disclaimer.
- *  2. 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.
- *  3. Neither the name of Google Inc. nor the names of its contributors may be
- *     used to endorse or promote products derived from this software without
- *     specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- *
- * Sets up google.gears.*, which is *the only* supported way to access Gears.
- *
- * Circumvent this file at your own risk!
- *
- * In the future, Gears may automatically define google.gears.* without this
- * file. Gears may use these objects to transparently fix bugs and compatibility
- * 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.
@@ -122,4 +54,4 @@
  * 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
+ */
diff --git a/build/light.cfg b/build/light.cfg
new file mode 100644
index 0000000..b5d7392
--- /dev/null
+++ b/build/light.cfg
@@ -0,0 +1,32 @@
+[first]
+
+[last]
+
+[include]
+OpenLayers/Map.js
+OpenLayers/Kinetic.js
+OpenLayers/Projection.js
+OpenLayers/Layer/Vector.js
+OpenLayers/Layer/OSM.js
+OpenLayers/Layer/Bing.js
+OpenLayers/Layer/WMS.js
+OpenLayers/Layer/Google/v3.js
+OpenLayers/Popup/FramedCloud.js
+OpenLayers/Control/Navigation.js
+OpenLayers/Control/Zoom.js
+OpenLayers/Control/Attribution.js
+OpenLayers/Control/SelectFeature.js
+OpenLayers/Control/Panel.js
+OpenLayers/Control/LayerSwitcher.js
+OpenLayers/Renderer/SVG.js
+OpenLayers/Renderer/VML.js
+OpenLayers/Format/GeoJSON.js
+OpenLayers/Protocol/HTTP.js
+OpenLayers/Strategy/Fixed.js
+OpenLayers/Strategy/BBOX.js
+OpenLayers/StyleMap.js
+OpenLayers/Rule.js
+OpenLayers/Filter/Comparison.js
+OpenLayers/Filter/Logical.js
+
+[exclude]
diff --git a/build/mobile.cfg b/build/mobile.cfg
index 7bf6afa..bfe4543 100644
--- a/build/mobile.cfg
+++ b/build/mobile.cfg
@@ -6,13 +6,12 @@
 OpenLayers/Map.js
 OpenLayers/Kinetic.js
 OpenLayers/Projection.js
-OpenLayers/Layer/SphericalMercator.js
-OpenLayers/Layer/XYZ.js
+OpenLayers/Layer/OSM.js
 OpenLayers/Layer/Bing.js
 OpenLayers/Layer/WMS.js
 OpenLayers/Control/TouchNavigation.js
 OpenLayers/Control/Geolocate.js
-OpenLayers/Control/ZoomPanel.js
+OpenLayers/Control/Zoom.js
 OpenLayers/Control/Attribution.js
 OpenLayers/Control/SelectFeature.js
 OpenLayers/Control/DrawFeature.js
diff --git a/doc/apidocs/files/OpenLayers-js.html b/doc/apidocs/files/OpenLayers-js.html
index 99f1c4b..25193b5 100644
--- a/doc/apidocs/files/OpenLayers-js.html
+++ b/doc/apidocs/files/OpenLayers-js.html
@@ -11,7 +11,16 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers"></a>OpenLayers</h1><div class=CBody><p>The OpenLayers object provides a namespace for all things OpenLayers</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers" >OpenLayers</a></td><td class=SDescription>The OpenLayers object provi [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers"></a>OpenLayers</h1><div class=CBody><p>The OpenLayers object provides a namespace for all things OpenLayers</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers" >OpenLayers</a></td><td class=SDescription>The OpenLayers object provi [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ImgPath"></a>ImgPath</h3><div class=CBody><p>{String} Set this to the path where control images are stored, a path given here must end with a slash.  If set to ‘’ (which is the default) OpenLayers will use its script location + “img/”.</p><p>You will need to set this property when you have a singlefile build of OpenLayers that either is not named “OpenLayers.js” or if yo [...]
+<script type="text/javascript">
+   // tell OpenLayers where the control images are
+   // remember the trailing slash
+   OpenLayers.ImgPath = "/resources/external/images/ol/";
+</script></pre></blockquote><p>Please remember that when your OpenLayers script is not named “OpenLayers.js” you will have to make sure that the default theme is loaded into the page by including an appropriate <link>-tag, e.g.:</p><blockquote><pre class="prettyprint"><link rel="stylesheet" href="/path/to/default/style.css"  type="text/css"></pre></blockquote></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Constants"></a>Constants</h3></div></div>
 
@@ -23,10 +32,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile id=MSelected>OpenLayers</div></div><div class=MEntry><div class=MFile><a href="OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Ba [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile id=MSelected>OpenLayers</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile> [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Ajax-js.html b/doc/apidocs/files/OpenLayers/Ajax-js.html
deleted file mode 100644
index b751c5a..0000000
--- a/doc/apidocs/files/OpenLayers/Ajax-js.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Ajax.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Ajax.js"></a>Ajax.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Ajax.js" >Ajax.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.loadURL"></a>OpenLayers.<wbr>loadURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.loadURL = function(</td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>params,</td></tr><tr><td>< [...]
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax"></a>OpenLayers.Ajax</h2><div class=CBody></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Responders"></a>OpenLayers.<wbr>Ajax.<wbr>Responders</h2><div class=CBody><p>{Object}</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Base.Constructor" >Constructor</a></td><td class=SDescription></td></tr><tr class="SConstructor SIndent1 SMarked"><td class=SEntry><a href="#Ope [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h2><div class=CBody><p><b>Deprecated</b>.   Use <a href="Request-js.html#OpenLayers.Request" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Request</a> method instead.</p><h4 class=CHeading>Inherit</h4><ul><li><a href="#OpenLayers.Ajax.Base" class=LClass >OpenLayers.Ajax.Base</a></li></ul><!--START_ [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Response.Constructor" >Constructor</a></td><td class=SDescription></td></tr><tr class="SConstructor SIndent1 SMarked"><td class=SEn [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>request</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile id=MSelected>Ajax</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Base [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.loadURL = function(</td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>params,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>caller,</td></tr><tr><td></td><td clas [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Animation-js.html b/doc/apidocs/files/OpenLayers/Animation-js.html
new file mode 100644
index 0000000..f0ed3ad
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Animation-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Animation - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script languag [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Animation"></a>OpenLayers.<wbr>Animation</h1><div class=CBody><p>A collection of utility functions for executing methods that repaint a portion of the browser window.   These methods take advantage of the browser’s scheduled repaints where requestAnimationFrame is available.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes-js.html b/doc/apidocs/files/OpenLayers/BaseTypes-js.html
index 60c764f..5d8ef42 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes-js.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers_Base_Types"></a>OpenLayers Base Types</h1><div class=CBody><p>OpenLayers custom string, number and function functions are described here.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers_Base_Types" >OpenLayers Base Types</a></td> [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers_Base_Types"></a>OpenLayers Base Types</h1><div class=CBody><p>OpenLayers custom string, number and function functions are described here.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers_Base_Types" >OpenLayers Base Types</a></td> [...]
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.String"></a>OpenLayers.<wbr>String</h2><div class=CBody><p>Contains convenience functions for string manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.String.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SI [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.String"></a>OpenLayers.<wbr>String</h2><div class=CBody><p>Contains convenience functions for string manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.String.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SI [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.Functions"></a>Functions</h3></div></div>
 
@@ -32,17 +32,9 @@ OpenLayers.String.isNumeric("12 dozen") // false
 OpenLayers.String.isNumeric("4") // true
 OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} String contains only a number.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.numericIf"></a>numericIf</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>numericIf: function(</td><td class="PParameter  prettyprint " nowrap>value</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.numericIf"></a>numericIf</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>numericIf: function(</td><td class="PParameter  prettyprint " nowrap>value</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.startsWith"></a>String.<wbr>startsWith</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string starts with another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sStart</td><td class=CDLDescription>{String} The string we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.contains"></a>String.<wbr>contains</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string contains another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>str</td><td class=CDLDescription>{String} The string that we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{Boole [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.trim"></a>String.trim</h3><div class=CBody><p><b>Deprecated</b>.  Removes leading and trailing whitespace characters from a string.</p><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{String} A trimmed version of the string</td><td class=CDLDescription>all leading and trailing spaces removed</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.camelize"></a>String.<wbr>camelize</h3><div class=CBody><p><b>Deprecated</b>.  Camel-case a hyphenated string.  Ex.  “chicken-head” becomes “chickenHead”, and “-chicken-head” becomes “ChickenHead”.</p><h4 class=CHeading>Returns</h4><p>{String} The string, camelized</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Number"></a>OpenLayers.<wbr>Number</h2><div class=CBody><p>Contains convenience functions for manipulating numbers.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Number.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction S [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Number"></a>OpenLayers.<wbr>Number</h2><div class=CBody><p>Contains convenience functions for manipulating numbers.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Number.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Number.Functions"></a>Functions</h3></div></div>
 
@@ -50,9 +42,7 @@ OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 clas
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Number.format"></a>format</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>format: function(</td><td class="PParameter  prettyprint " nowrap>num,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dec,</td></tr><tr><td></td><td class="PParameter   [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Number.Number.limitSigDigs"></a>Number.<wbr>limitSigDigs</h3><div class=CBody><p><b>Deprecated</b>.  Limit the number of significant digits on an integer.  Does <b>not</b> work with floats!</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sig</td><td class=CDLDescription>{Integer}</td></tr></table><h4 class=CHeading>Returns< [...]
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Function"></a>OpenLayers.<wbr>Function</h2><div class=CBody><p>Contains convenience functions for function manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Function.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFun [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Function"></a>OpenLayers.<wbr>Function</h2><div class=CBody><p>Contains convenience functions for function manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Function.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFun [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Functions"></a>Functions</h3></div></div>
 
@@ -66,10 +56,6 @@ OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 clas
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Void"></a>Void</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">Void: function()</td></tr></table></blockquote><p>A reusable function that returns ``undefined``.</p><h4 class=CHeading>Returns</h4><p>{undefined}</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Function.bind"></a>Function.bind</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object.  Method to easily create closures with ‘this’ altered.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} the this parameter</td></tr></table><h4 class=CHe [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Function.bindAsEventListener"></a>Function.<wbr>bindAsEventListener</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object, and configure it to receive the event object as first parameter when called.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} A referen [...]
-
 <div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Array"></a>OpenLayers.<wbr>Array</h2><div class=CBody><p>Contains convenience functions for array manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Array.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SInden [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Array.Functions"></a>Functions</h3></div></div>
@@ -82,10 +68,10 @@ OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 clas
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/Bounds-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/Bounds-js.html
index 582406a..33f5ac9 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/Bounds-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/Bounds-js.html
@@ -14,11 +14,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Bounds"></a>OpenLayers.<wbr>Bounds</h1><div class=CBody><p>Instances of this class represent bounding boxes.   Data stored as left, bottom, right, top floats.  All values are initialized to null, however, you should make sure you set them before using the bounds for anything.</p><h4 class=CHeading>Possible use case</h4><blockquote><pre class="prettyprint">bounds = new OpenLay [...]
 bounds.extend(new OpenLayers.LonLat(4,5));
 bounds.extend(new OpenLayers.LonLat(5,6));
-bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Bounds" >OpenLayers.<wbr>Bounds</a></td><td class=SDescription>Instances of this class represent bounding boxes. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Bounds.Constructor" >Constructor</a></td><td [...]
+bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Bounds" >OpenLayers.<wbr>Bounds</a></td><td class=SDescription>Instances of this class represent bounding boxes. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Bounds.Constructor" >Constructor</a></td><td [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.OpenLayers.Bounds"></a>OpenLayers.<wbr>Bounds</h3><div class=CBody><p>Construct a new bounds object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>left</td><td class=CDLDescription>{Number} The left bounds of the box.   Note that for width calculations, this is assumed to be less than the right value.</td></tr><tr><t [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.OpenLayers.Bounds"></a>OpenLayers.<wbr>Bounds</h3><div class=CBody><p>Construct a new bounds object.  Coordinates can either be passed as four arguments, or as a single argument.</p><h4 class=CHeading>Parameters (four arguments)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>left</td><td class=CDLDescription>{Number} The left bounds of the box.  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.Functions"></a>Functions</h3></div></div>
 
@@ -28,45 +28,43 @@ bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><di
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toBBOX"></a>toBBOX</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>toBBOX:function(</td><td class="PParameter  prettyprint " nowrap>decimal,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toGeometry"></a>toGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toGeometry: function()</td></tr></table></blockquote><p>Create a new polygon geometry based on this bounds.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link27 onMouseOver="ShowTip(e [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toGeometry"></a>toGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toGeometry: function()</td></tr></table></blockquote><p>Create a new polygon geometry based on this bounds.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link26 onMouseOver="ShowTip(e [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getWidth"></a>getWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWidth:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The width of the bounds</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getHeight"></a>getHeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getHeight:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The height of the bounds (top minus bottom).</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Size-js.html#OpenLayers.Size" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt8', 'link28')" onMouseOut="HideTip('tt8')">OpenLayers.Size</a>} The size of the box.</ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Size-js.html#OpenLayers.Size" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt8', 'link27')" onMouseOut="HideTip('tt8')">OpenLayers.Size</a>} The size of the box.</ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterPixel"></a>getCenterPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterPixel:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Pixel-js.html#OpenLayers.Pixel" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt10', 'link29')" onMouseOut="HideTip('tt10')">OpenLayers.Pixel</ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterPixel"></a>getCenterPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterPixel:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Pixel-js.html#OpenLayers.Pixel" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt10', 'link28')" onMouseOut="HideTip('tt10')">OpenLayers.Pixel</ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterLonLat"></a>getCenterLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterLonLat:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="LonLat-js.html#OpenLayers.LonLat" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt12', 'link30')" onMouseOut="HideTip('tt12')">OpenLayers.Lo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterLonLat"></a>getCenterLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterLonLat:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="LonLat-js.html#OpenLayers.LonLat" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt12', 'link29')" onMouseOut="HideTip('tt12')">OpenLayers.Lo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.scale"></a>scale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>scale: function(</td><td class="PParameter  prettyprint " nowrap>ratio,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.scale"></a>scale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>scale: function(</td><td class="PParameter  prettyprint " nowrap>ratio,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.extend"></a>extend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extend:function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Extend th [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsLonLat"></a>containsLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsLonLat:function(</td><td class="PParameter  prettyprint " nowrap>ll,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsLonLat"></a>containsLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsLonLat: function(</td><td class="PParameter  prettyprint " nowrap>ll,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAft [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsPixel"></a>containsPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsPixel:function(</td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsPixel"></a>containsPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsPixel:function(</td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td class="PAfter [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.contains"></a>contains</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>contains:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.intersectsBounds"></a>intersectsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>intersectsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.intersectsBounds"></a>intersectsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>intersectsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsBounds"></a>containsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>partial,</td></tr><tr><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsBounds"></a>containsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>partial,</td></tr><tr><t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.determineQuadrant"></a>determineQuadrant</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>determineQuadrant: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfterParameters   [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfterParameters   [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>wrapDateLine: function(</td><td class="PParameter  prettyprint " nowrap>maxExtent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromString"></a>fromString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromString = function(</td><td class="PParameter  prettyprint " nowrap>str,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromString"></a>fromString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromString = function(</td><td class="PParameter  prettyprint " nowrap>str,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromArray"></a>fromArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromArray = function(</td><td class="PParameter  prettyprint " nowrap>bbox,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromArray"></a>fromArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromArray = function(</td><td class="PParameter  prettyprint " nowrap>bbox,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</td> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromSize"></a>fromSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromSize = function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromSize"></a>fromSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromSize = function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
 </div><!--Content-->
 
@@ -74,15 +72,15 @@ bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><di
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote>{String} String representation of bounds object.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap> [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote>{String} String representation of bounds object.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap> [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/Class-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/Class-js.html
index 8a6e288..9b598ac 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/Class-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/Class-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Class.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><b [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Class.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class=" [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Class.js"></a>Class.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Class.js" >Class.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constructor" >Constructor</a></td><td class=SDescriptio [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Class.js"></a>Class.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Class.js" >Class.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constructor" >Constructor</a></td><td class=SDescriptio [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constructor"></a>Constructor</h3></div></div>
 
@@ -19,10 +19,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.create"></a>OpenLayers.<wbr>create</h3><div class=CBody><p><b>Deprecated</b>.   Old method to create an OpenLayers style class.   Use the <a href="#OpenLayers.Class" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Class</a> constructor instead.</p><h4 class=CHeading>Returns</h4><p>An OpenLayers class</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="inherit"></a>inherit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p><b>Deprec [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="extend"></a>extend</h3><div class=CBody><p>Copy all properties of a source object to a destination object.   Modifies the passed in destination object.   Any properties on the source object that are set to undefined will not be (re)set on the destination object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>destination</td><td class [...]
 
 </div><!--Content-->
@@ -31,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="tt2"><div class= [...]
+<!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/Date-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/Date-js.html
index 336bd63..6b1b0f1 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/Date-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/Date-js.html
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/Element-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/Element-js.html
index e26a06d..a39749a 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/Element-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/Element-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Element"></a>OpenLayers.<wbr>Element</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Element" >OpenLayers.<wbr>Element</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a hr [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Element"></a>OpenLayers.<wbr>Element</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Element" >OpenLayers.<wbr>Element</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a hr [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Functions"></a>Functions</h3></div></div>
 
@@ -19,16 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.toggle"></a>toggle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toggle: function()</td></tr></table></blockquote><p>Toggle the visibility of element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{D [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.hide"></a>hide</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">hide: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Hide element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Show element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.remove"></a>remove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>remove: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Remove [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getHeight"></a>getHeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getHeight: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getDimensions"></a>getDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getDimensions: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getStyle"></a>getStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getStyle: function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfterParameters   [...]
 
 </div><!--Content-->
@@ -37,15 +31,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>visible: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table bor [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>visible: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table bor [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/LonLat-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/LonLat-js.html
index 82254c2..091b490 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/LonLat-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/LonLat-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h1><div class=CBody><p>This class represents a longitude and latitude pair</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.LonLat" >OpenLayers.<wbr>LonLat</a></td><td class=SDescription>This c [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h1><div class=CBody><p>This class represents a longitude and latitude pair</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.LonLat" >OpenLayers.<wbr>LonLat</a></td><td class=SDescription>This c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h3><div class=CBody><p>Create a new map location.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lon</td><td class=CDLDescription>{Number} The x-axis coordinate in map units.   If your map is in a geographic projection, this will be the Longitude.   Otherwise, it wil [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h3><div class=CBody><p>Create a new map location.  Coordinates can be passed either as two arguments, or as a single argument.</p><h4 class=CHeading>Parameters (two arguments)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lon</td><td class=CDLDescription>{Number} The x-axis coordinate in map units.&nbsp [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.Functions"></a>Functions</h3></div></div>
 
@@ -43,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toShortString:function()</td></tr></table></blockquote>{String} Shortened String representation of OpenLayers.LonLat object. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>{Ope [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toShortString:function()</td></tr></table></blockquote>{String} Shortened String representation of OpenLayers.LonLat object. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>{Ope [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/Pixel-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/Pixel-js.html
index 5fffa5e..6f1f8ae 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/Pixel-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/Pixel-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Pixel"></a>OpenLayers.<wbr>Pixel</h1><div class=CBody><p>This class represents a screen coordinate, in x and y coordinates</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Pixel" >OpenLayers.<wbr>Pixel</a></td><td class=SDescript [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Pixel"></a>OpenLayers.<wbr>Pixel</h1><div class=CBody><p>This class represents a screen coordinate, in x and y coordinates</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Pixel" >OpenLayers.<wbr>Pixel</a></td><td class=SDescript [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.Properties"></a>Properties</h3></div></div>
 
@@ -25,15 +25,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Return a clone of this pixel object</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Pixel.OpenLayers.Pixel" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6') [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Return a clone of this pixel object</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Pixel.OpenLayers.Pixel" class=LConstructor id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6') [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine whet [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine whet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Re [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Re [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Parameters px  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Parameters px  [...]
 
 </div><!--Content-->
 
@@ -41,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>Return a clone of this pixel object</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function( [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>Return a clone of this pixel object</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function( [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/BaseTypes/Size-js.html b/doc/apidocs/files/OpenLayers/BaseTypes/Size-js.html
index df4cab6..ca792b4 100644
--- a/doc/apidocs/files/OpenLayers/BaseTypes/Size-js.html
+++ b/doc/apidocs/files/OpenLayers/BaseTypes/Size-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Size.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Create a clone of this size object</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Size.OpenLayers.Size" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">Op [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Size.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>sz</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine where [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Size.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>sz</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine where [...]
 
 </div><!--Content-->
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Console-js.html b/doc/apidocs/files/OpenLayers/Console-js.html
index d5316c7..e751c1f 100644
--- a/doc/apidocs/files/OpenLayers/Console-js.html
+++ b/doc/apidocs/files/OpenLayers/Console-js.html
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control-js.html b/doc/apidocs/files/OpenLayers/Control-js.html
index 346fc94..7a7ddda 100644
--- a/doc/apidocs/files/OpenLayers/Control-js.html
+++ b/doc/apidocs/files/OpenLayers/Control-js.html
@@ -14,7 +14,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control"></a>OpenLayers.<wbr>Control</h1><div class=CBody><p>Controls affect the display or behavior of the map.  They allow everything from panning and zooming to displaying a scale indicator.  Controls by default are added to the map they are contained within however it is possible to add a control to an external div by passing the div in the options parameter.</p><h4 class [...]
 
 map.addControl(new OpenLayers.Control.PanZoomBar());
-map.addControl(new OpenLayers.Control.MouseToolbar());
 map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
 map.addControl(new OpenLayers.Control.Permalink());
 map.addControl(new OpenLayers.Control.Permalink('permalink'));
@@ -35,7 +34,7 @@ OpenLayers.Util.extend(control, {
         OpenLayers.Console.userError(bounds);
     }
 });
-map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Control" >OpenLayers.<wbr>Control</a></td><td class=SDescription>Controls affect the display or behavior of the map. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Control.Properties" >Properties</a></td><td class=S [...]
+map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Control" >OpenLayers.<wbr>Control</a></td><td class=SDescription>Controls affect the display or behavior of the map. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Control.Properties" >Properties</a></td><td class=S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Properties"></a>Properties</h3></div></div>
 
@@ -51,11 +50,7 @@ map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Sum
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactly w [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners wil [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Constructor"></a>Constructor</h3></div></div>
 
@@ -81,10 +76,10 @@ map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Sum
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ArgParser-js.html b/doc/apidocs/files/OpenLayers/Control/ArgParser-js.html
index 1abb02c..5a435dd 100644
--- a/doc/apidocs/files/OpenLayers/Control/ArgParser-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ArgParser-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ArgParser"></a>OpenLayers.<wbr>Control.<wbr>ArgParser</h1><div class=CBody><p>The ArgParser control adds location bar querystring parsing functionality to an OpenLayers Map.  When added to a Map control, on a page load/refresh, the Map will automatically take the href string and parse it for lon, lat, zoom, and layers information.</p><h4 class=CHeading>Inherits from</h4><u [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ArgParser"></a>OpenLayers.<wbr>Control.<wbr>ArgParser</h1><div class=CBody><p>The ArgParser control adds location bar query string parsing functionality to an OpenLayers Map.  When added to a Map control, on a page load/refresh, the Map will automatically take the href string and parse it for lon, lat, zoom, and layers information.</p><h4 class=CHeading>Inherits from</h4>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="../Projection-js.html#OpenLayers.Projection" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt1', 'link3')" onMouseOut="HideTip('tt1')">OpenLayers.Projection</a>} Requires proj4js support.  Projection used when reading the coordinates from the URL.  This will</p><p>reproject the map coordinates from the UR [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="../Projection-js.html#OpenLayers.Projection" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt1', 'link3')" onMouseOut="HideTip('tt1')">OpenLayers.Projection</a>} Requires proj4js support.  Projection used when reading the coordinates from the URL.  This will reproject the map coordinates from the URL into [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Attribution-js.html b/doc/apidocs/files/OpenLayers/Control/Attribution-js.html
index 8f59c2e..eae94a1 100644
--- a/doc/apidocs/files/OpenLayers/Control/Attribution-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Attribution-js.html
@@ -11,12 +11,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Attribution"></a>OpenLayers.<wbr>Control.<wbr>Attribution</h1><div class=CBody><p>The attribution control adds attribution from layers to the map display.  It uses ‘attribution’ property of each layer.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1') [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Attribution"></a>OpenLayers.<wbr>Control.<wbr>Attribution</h1><div class=CBody><p>The attribution control adds attribution from layers to the map display.  It uses ‘attribution’ property of each layer.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1') [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.seperator"></a>seperator</h3><div class=CBody><p>{String} String used to seperate layers.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.template"></a>template</h3><div class=CBody><p>{String} Template for the attribution.  This has to include the substring “${layers}”, which will be replaced by the layer specific attributions, separated by <separator>.  The default is “${layers}”.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.OpenLayers.Control.Attribution"></a>OpenLayers.<wbr>Control.<wbr>Attribution</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Options for control.</td></tr></table></div></div></div>
@@ -27,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Button-js.html b/doc/apidocs/files/OpenLayers/Control/Button-js.html
index 957ef3b..c5f6275 100644
--- a/doc/apidocs/files/OpenLayers/Control/Button-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Button-js.html
@@ -22,10 +22,10 @@ panel.addControls([button]);</pre></blockquote><p>Will create a button with CSS
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/CacheRead-js.html b/doc/apidocs/files/OpenLayers/Control/CacheRead-js.html
new file mode 100644
index 0000000..af60f7f
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Control/CacheRead-js.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.CacheRead - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.CacheRead"></a>OpenLayers.<wbr>Control.<wbr>CacheRead</h1><div class=CBody><p>A control for using image tiles cached with <a href="CacheWrite-js.html#OpenLayers.Control.CacheWrite" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt1', 'link3')" onMouseOut="HideTip('tt1')">OpenLayers.Control.CacheWrite</a> from the browser’s local storage.</p><h4 class=CHeading>Inherits [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.fetchEvent"></a>fetchEvent</h3><div class=CBody><p>{String} The layer event to listen to for replacing remote resource tile URLs with cached data URIs.  Supported values are “tileerror” (try remote first, fall back to cached) and “tileloadstart” (try cache first, fall back to remote).  Default is “tileloadstart”.</p><p>Note that “tileerror&rd [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt2', 'link7')" onMouseOut="HideTip('tt2')">OpenLayers.Layer.Grid</a>)}.  Optional.  If provided, only these layers will receive tiles from the cache.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.OpenLayers.Control.CacheRead"></a>OpenLayers.<wbr>Control.<wbr>CacheRead</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Object with API properties for this control</td></tr></table></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>A control for caching image tiles in the browser’s local storage. </div></div><div class=CToolTip id="tt2"><div class=CClass>Base class for layers that use a lattice of tiles. </div></div><div class=CToolTip id="tt3"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt4"><div class=CProperty>The value of the crossorigin keyword to use when loading images. </div></div><div class=CT [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Control/CacheWrite-js.html b/doc/apidocs/files/OpenLayers/Control/CacheWrite-js.html
new file mode 100644
index 0000000..d6447da
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Control/CacheWrite-js.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.CacheWrite - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.CacheWrite"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite</h1><div class=CBody><p>A control for caching image tiles in the browser’s local storage.  The <a href="CacheRead-js.html#OpenLayers.Control.CacheRead" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Control.CacheRead</a> control is used to fetch and use  [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><p>To register events in the constructor, configure <a href="#OpenLayers.Control.CacheWrite.eventListeners" class=LProperty id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideT [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} Object with event listeners, keyed by event name.  An optional scope property defines the scope that listeners will be executed in.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Grid</a>)}.  Optional.  If provided, caching will be enabled for these layers only, otherwise for all cacheable layers.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.imageFormat"></a>imageFormat</h3><div class=CBody><p>{String} The image format used for caching.  The default is “image/png”.  Supported formats depend on the user agent.  If an unsupported <a href="#OpenLayers.Control.CacheWrite.imageFormat" class=LProperty id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">imageFormat</a> is provided [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.OpenLayers.Control.CacheWrite"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Object with API properties for this control.</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.OpenLayers.Control.CacheWrite.clearCache"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite.<wbr>clearCache</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Control.CacheWrite.clearCache = function()</td></tr></table></blockquote><p>Clears all tiles cached with <a href="#OpenLayers.Control.CacheWrite.OpenLayers.Con [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Base class for layers that use a lattice of tiles. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Control.CacheWrite.clearCache = function()</td></tr></table></blockquote>Clears all tiles cached with OpenLayers.Control.CacheWrite from the cache.</div></div><div class=CToolTip id="tt3"><div class=CClass>A control for [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Control/DragFeature-js.html b/doc/apidocs/files/OpenLayers/Control/DragFeature-js.html
index f3d4b08..b5402ad 100644
--- a/doc/apidocs/files/OpenLayers/Control/DragFeature-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/DragFeature-js.html
@@ -47,10 +47,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/DragPan-js.html b/doc/apidocs/files/OpenLayers/Control/DragPan-js.html
index 3bc389a..291b016 100644
--- a/doc/apidocs/files/OpenLayers/Control/DragPan-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/DragPan-js.html
@@ -17,7 +17,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.documentDrag"></a>documentDrag</h3><div class=CBody><p>{Boolean} If set to true, mouse dragging will continue even if the mouse cursor leaves the map viewport.  Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.enableKinetic"></a>enableKinetic</h3><div class=CBody><p>{Boolean} Set this option to enable “kinetic dragging”.  Can be set to true or to an object.  If set to an object this object will be passed to the {<a href="../Kinetic-js.html#OpenLayers.Kinetic" class=LConstructor >OpenLayers.Kinetic</a>} constructor.  Defaults to false.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.enableKinetic"></a>enableKinetic</h3><div class=CBody><p>{Boolean} Set this option to enable “kinetic dragging”.  Can be set to true or to an object.  If set to an object this object will be passed to the {<a href="../Kinetic-js.html#OpenLayers.Kinetic" class=LConstructor >OpenLayers.Kinetic</a>} constructor.  Defaults to false.  If you set this property, you shou [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.kineticInterval"></a>kineticInterval</h3><div class=CBody><p>{Integer} Interval in milliseconds between 2 steps in the “kinetic scrolling”.  Applies only if enableKinetic is set.  Defaults to 10 milliseconds.</p></div></div></div>
 
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/DrawFeature-js.html b/doc/apidocs/files/OpenLayers/Control/DrawFeature-js.html
index e0190f9..2dccb26 100644
--- a/doc/apidocs/files/OpenLayers/Control/DrawFeature-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/DrawFeature-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h1><div class=CBody><p>The DrawFeature control draws point, line or polygon features on a vector layer when active.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">OpenLayers.C [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>featureadded</td><td class=CDLDescription>Triggered when a feature is added</td></tr></table></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h1><div class=CBody><p>The DrawFeature control draws point, line or polygon features on a vector layer when active.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">OpenLayers.C [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote>< [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.multi"></a>multi</h3><div class=CBody><p>{Boolean} Cast features to multi-part geometries before passing to the layer.   Default is false.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.featureAdded"></a>featureAdded</h3><div class=CBody><p>{Function} Called after each feature is added</p></div></div></div>
@@ -27,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMou [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMou [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Functions"></a>Functions</h3></div></div>
 
@@ -41,7 +39,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.undo"></a>undo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">undo: function()</td></tr></table></blockquote><p>Remove the most recently added point in the current sketch geometry.</p><h4 class=CHeading>Returns</h4><p>{Boolean} An edit was undone.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.redo"></a>redo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redo: function()</td></tr></table></blockquote><p>Reinsert the most recently removed point resulting from an <a href="#OpenLayers.Control.DrawFeature.undo" class=LFunction id=link13 onMouseOver="ShowTip(event, 'tt5', 'link13')" onMouseOut="HideTip('tt5')"> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.redo"></a>redo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redo: function()</td></tr></table></blockquote><p>Reinsert the most recently removed point resulting from an <a href="#OpenLayers.Control.DrawFeature.undo" class=LFunction id=link14 onMouseOver="ShowTip(event, 'tt5', 'link14')" onMouseOut="HideTip('tt5')"> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.finishSketch"></a>finishSketch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">finishSketch: function()</td></tr></table></blockquote><p>Finishes the sketch without including the currently drawn point.  This method can be called to terminate drawing programmatically instead of waiting for the user to end the sket [...]
 
@@ -53,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>insertXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Insert a point in th [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>insertXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Insert a point in th [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/EditingToolbar-js.html b/doc/apidocs/files/OpenLayers/Control/EditingToolbar-js.html
index a4ed233..e5f77f8 100644
--- a/doc/apidocs/files/OpenLayers/Control/EditingToolbar-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/EditingToolbar-js.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.EditingToolbar"></a>OpenLayers.<wbr>Control.<wbr>EditingToolbar</h1><div class=CBody><p>The EditingToolbar is a panel of 4 controls to draw polygons, lines, points, or to navigate the map by panning.  By default it appears in the upper right corner of the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Panel-js.html#OpenLayers.Control.Panel" class=LClass id=l [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.EditingToolbar"></a>OpenLayers.<wbr>Control.<wbr>EditingToolbar</h1><div class=CBody><p>The EditingToolbar is a panel of 4 controls to draw polygons, lines, points, or to navigate the map by panning.  By default it appears in the upper right corner of the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Panel-js.html#OpenLayers.Control.Panel" class=LClass id=l [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EditingToolbar.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EditingToolbar.citeCompliant"></a>citeCompliant</h3><div class=CBody><p>{Boolean} If set to true, coordinates of features drawn in a map extent crossing the date line won’t exceed the world bounds.  Default is false.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EditingToolbar.Constructor"></a>Constructor</h3></div></div>
 
@@ -23,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Geolocate-js.html b/doc/apidocs/files/OpenLayers/Control/Geolocate-js.html
index 064a03d..4b96905 100644
--- a/doc/apidocs/files/OpenLayers/Control/Geolocate-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Geolocate-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Geolocate"></a>OpenLayers.<wbr>Control.<wbr>Geolocate</h1><div class=CBody><p>The Geolocate control wraps w3c geolocation API into control that can be bound to a map, and generate events on location update</p><p>To use this control requires to load the proj4js library if the projection of the map is not EPSG:4326 or EPSG:900913.</p><h4 class=CHeading>Inherits from</h4><ul><li>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><ul><li><b>locationupdated</b> Triggered when browser return a new position</li><li><b>locationfailed</b> Triggered when geolocation has failed</li><li><b>locationuncapable</b> Triggered when control is activated on a browser which doesn’t support geolocation</li></ul></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Geolocate"></a>OpenLayers.<wbr>Control.<wbr>Geolocate</h1><div class=CBody><p>The Geolocate control wraps w3c geolocation API into control that can be bound to a map, and generate events on location update</p><p>To use this control requires to load the proj4js library if the projection of the map is not EPSG:4326 or EPSG:900913.</p><h4 class=CHeading>Inherits from</h4><ul><li>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.bind"></a>bind</h3><div class=CBody><p>{Boolean} If true, map center will be set on location update.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.watch"></a>watch</h3><div class=CBody><p>{Boolean} If true, position will be update regularly.</p></div></div></div>
@@ -39,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCurrentLocation: function()</td></tr></table></blockquote>{Boolean} Returns true if a event will be fired (successfull registration)</div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCurrentLocation: function()</td></tr></table></blockquote>{Boolean} Returns true if a event will be fired (successfull registration)</div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{OpenLayers.Events} Events insta [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/GetFeature-js.html b/doc/apidocs/files/OpenLayers/Control/GetFeature-js.html
index 2367e71..012bc14 100644
--- a/doc/apidocs/files/OpenLayers/Control/GetFeature-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/GetFeature-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h1><div class=CBody><p>Gets vector features for locations underneath the mouse cursor.  Can be configured to act on click, hover or dragged boxes.  Uses an <a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.P [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h1><div class=CBody><p>Gets vector features for locations underneath the mouse cursor.  Can be configured to act on click, hover or dragged boxes.  Uses an <a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.P [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Properties"></a>Properties</h3></div></div>
 
@@ -41,13 +41,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Additional options for the handlers used by this control.  This is a hash with the keys “click”, “box” and “hover”.</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>beforefeatureselected</td><td class=CDLDescription>Triggered when <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt6', 'link20')" onMouseOut="HideTip('tt6' [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h3><div class=CBody><p>Create a new control for fetching remote features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} A configuration object which at least has to contain a <a href="#Open [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h3><div class=CBody><p>Create a new control for fetching remote features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} A configuration object which at least has to contain a <a href="#Open [...]
 
 </div><!--Content-->
 
@@ -55,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Abstract vector layer protocol class. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Allow selection of multiple geometries. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean} Unselect a selected feature on click. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Protocol} Required. </div></div><div class=CToolTip id="tt5"><div class=CClass>Controls affect the display or b [...]
+<div class=CToolTip id="tt1"><div class=CClass>Abstract vector layer protocol class. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Allow selection of multiple geometries. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean} Unselect a selected feature on click. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Protocol} Required. </div></div><div class=CToolTip id="tt5"><div class=CClass>Controls affect the display or b [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Graticule-js.html b/doc/apidocs/files/OpenLayers/Control/Graticule-js.html
index 1cde4cf..c3fdb75 100644
--- a/doc/apidocs/files/OpenLayers/Control/Graticule-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Graticule-js.html
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/KeyboardDefaults-js.html b/doc/apidocs/files/OpenLayers/Control/KeyboardDefaults-js.html
index 8d80607..6106228 100644
--- a/doc/apidocs/files/OpenLayers/Control/KeyboardDefaults-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/KeyboardDefaults-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults"></a>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</h1><div class=CBody><p>The KeyboardDefaults control adds panning and zooming functions, controlled with the keyboard.  By default arrow keys pan, +/- keys zoom & Page Up/Page Down/Home/End scroll by three quarters of a page.</p><p>This control has no visible appearance.</p><h4 class=CHeading>Inherits  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults"></a>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</h1><div class=CBody><p>The KeyboardDefaults control adds panning and zooming functions, controlled with the keyboard.  By default arrow keys pan, +/- keys zoom & Page Up/Page Down/Home/End scroll by three quarters of a page.</p><p>This control has no visible appearance.</p><h4 class=CHeading>Inherits  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.Properties"></a>Properties</h3></div></div>
 
@@ -19,6 +19,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.slideFactor"></a>slideFactor</h3><div class=CBody><p>Pixels to slide by.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.observeElement"></a>observeElement</h3><div class=CBody><p>{DOMelement|String} The DOM element to handle keys for.  You can use the map div here, to have the navigation keys work when the map div has the focus.  If undefined the document is used.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.OpenLayers.Control.KeyboardDefaults"></a>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</h3></div></div>
@@ -29,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/LayerSwitcher-js.html b/doc/apidocs/files/OpenLayers/Control/LayerSwitcher-js.html
index 83446f8..e7b367d 100644
--- a/doc/apidocs/files/OpenLayers/Control/LayerSwitcher-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/LayerSwitcher-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.LayerSwitcher"></a>OpenLayers.<wbr>Control.<wbr>LayerSwitcher</h1><div class=CBody><p>The LayerSwitcher control displays a table of contents for the map.  This allows the user interface to switch between BaseLasyers and to show or hide Overlays.  By default the switcher is shown minimized on the right edge of the map, the user may expand it by clicking on the handle.< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.LayerSwitcher"></a>OpenLayers.<wbr>Control.<wbr>LayerSwitcher</h1><div class=CBody><p>The LayerSwitcher control displays a table of contents for the map.  This allows the user interface to switch between BaseLasyers and to show or hide Overlays.  By default the switcher is shown minimized on the right edge of the map, the user may expand it by clicking on the handle.< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.roundedCorner"></a>roundedCorner</h3><div class=CBody><p>{Boolean} If true the Rico library is used for rounding the corners of the layer switcher div, defaults to true.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.roundedCorner"></a>roundedCorner</h3><div class=CBody><p>{Boolean} If true the Rico library is used for rounding the corners of the layer switcher div, defaults to false.  <b>Deprecated</b>.  Use CSS3’s border-radius instead.  If this option is set to true the Rico/Corner.js script must be loaded in the page, and therefore listed in the build profile.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.roundedCornerColor"></a>roundedCornerColor</h3><div class=CBody><p>{String} The color of the rounded corners, only applies if roundedCorner is true, defaults to “darkblue”.</p></div></div></div>
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Measure-js.html b/doc/apidocs/files/OpenLayers/Control/Measure-js.html
index 61c7af6..9028fe1 100644
--- a/doc/apidocs/files/OpenLayers/Control/Measure-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Measure-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h1><div class=CBody><p>Allows for drawing of features for measurements.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div class= [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on e [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h1><div class=CBody><p>Allows for drawing of features for measurements.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div class= [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 c [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Used to set non-default properties on the control’s handler</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.persist"></a>persist</h3><div class=CBody><p>{Boolean} Keep the temporary measurement sketch drawn after the measurement is complete.   The geometry will persist until a new measurement is started, the control is deactivated, or <a href="#OpenLayers.Control.Measure.cancel" class=LFunction id=link8 onMouseOver="ShowTip(event, 'tt2', 'link8')" onMouseOut="HideTip('tt2')">cancel</a> is called. [...]
@@ -27,13 +25,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt6', 'link9')" onMouseOut="HideTip('tt6')"> [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt7', 'link9')" onMouseOut="HideTip('tt7')"> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.cancel"></a>cancel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote><p>Stop the control from measuring.   If <a href="#OpenLayers.Control.Measure.persist" class=LProperty id=link10 onMouseOver="ShowTip(event, 'tt7', 'link10')" onMouseOut="HideTip('tt7')">persist</a> is  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.cancel"></a>cancel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote><p>Stop the control from measuring.   If <a href="#OpenLayers.Control.Measure.persist" class=LProperty id=link10 onMouseOver="ShowTip(event, 'tt8', 'link10')" onMouseOut="HideTip('tt8')">persist</a> is  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.setImmediate"></a>setImmediate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setImmediate: function(</td><td class="PParameter  prettyprint " nowrap>immediate</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
@@ -43,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote>Stop the control from measuring. </div></div><div class=CToolTip id="tt3"> [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote>Stop the control from measuring. </div></div><div class=CToolTip id="tt3"> [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ModifyFeature-js.html b/doc/apidocs/files/OpenLayers/Control/ModifyFeature-js.html
index 15d453b..813973d 100644
--- a/doc/apidocs/files/OpenLayers/Control/ModifyFeature-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ModifyFeature-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ModifyFeature"></a>OpenLayers.<wbr>Control.<wbr>ModifyFeature</h1><div class=CBody><p>Control to modify features.   When activated, a click renders the vertices of a feature - these vertices can then be dragged.   By default, the delete key will delete the vertex under the mouse.   New features are added by dragging “virtual vertices” between vertices [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ModifyFeature"></a>OpenLayers.<wbr>Control.<wbr>ModifyFeature</h1><div class=CBody><p>Control to modify features.   When activated, a click renders the vertices of a feature - these vertices can then be dragged.   By default, the delete key will delete the vertex under the mouse.   New features are added by dragging “virtual vertices” between vertices [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.Properties"></a>Properties</h3></div></div>
 
@@ -21,17 +21,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.toggle"></a>toggle</h3><div class=CBody><p>{Boolean} Unselect a selected feature on click.  Default is true.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.standalone"></a>standalone</h3><div class=CBody><p>{Boolean} Set to true to create a control without SelectFeature capabilities.  Default is false.   If standalone is true, to modify a feature, call the <a href="#OpenLayers.Control.ModifyFeature.selectFeature" class=LFunction id=link7 onMouseOver="ShowTip(event, 'tt4', 'link7')" onMouseOut="HideTip('tt4')">selectFeature</a> metho [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.standalone"></a>standalone</h3><div class=CBody><p>{Boolean} Set to true to create a control without SelectFeature capabilities.  Default is false.   If standalone is true, to modify a feature, call the <a href="#OpenLayers.Control.ModifyFeature.selectFeature" class=LFunction id=link8 onMouseOver="ShowTip(event, 'tt4', 'link8')" onMouseOut="HideTip('tt4')">selectFeature</a> metho [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.deleteCodes"></a>deleteCodes</h3><div class=CBody><p>{Array(Integer)} Keycodes for deleting verticies.   Set to null to disable vertex deltion by keypress.   If non-null, keypresses with codes in this array will delete vertices under the mouse.  Default is 46 and 68, the ‘delete’ and lowercase ‘d’ keys.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.virtualStyle"></a>virtualStyle</h3><div class=CBody><p>{Object} A symbolizer to be used for virtual vertices.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.vertexRenderIntent"></a>vertexRenderIntent</h3><div class=CBody><p>{String} The renderIntent to use for vertices.  If no <a href="#OpenLayers.Control.ModifyFeature.virtualStyle" class=LProperty id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">virtualStyle</a> is provided, this renderIntent will also be used for virtual vertices, with a fillOpacity and  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.vertexRenderIntent"></a>vertexRenderIntent</h3><div class=CBody><p>{String} The renderIntent to use for vertices.  If no <a href="#OpenLayers.Control.ModifyFeature.virtualStyle" class=LProperty id=link10 onMouseOver="ShowTip(event, 'tt8', 'link10')" onMouseOut="HideTip('tt8')">virtualStyle</a> is provided, this renderIntent will also be used for virtual vertices, with a fillOpacity an [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.mode"></a>mode</h3><div class=CBody><p>{Integer} Bitfields specifying the modification mode.  Defaults to OpenLayers.Control.ModifyFeature.RESHAPE.  To set the mode to a combination of options, use the | operator.  For example, to allow the control to both resize and rotate features, use the following syntax</p><blockquote><pre class="prettyprint">control.mode = OpenLayers.C [...]
                OpenLayers.Control.ModifyFeature.ROTATE;</pre></blockquote></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.createVertices"></a>createVertices</h3><div class=CBody><p>{Boolean} Create new vertices by dragging the virtual vertices in the middle of each edge.  Default is true.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.onModificationStart"></a>onModificationStart</h3><div class=CBody><p>{Function} <b>Deprecated</b>.   Register for “beforefeaturemodified” instead.  The “beforefeaturemodified” event is triggered on the layer before any modification begins.</p><p>Optional function to be called when a feature is selected to be modified.  The function should expect to be [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.onModification"></a>onModification</h3><div class=CBody><p>{Function} <b>Deprecated</b>.   Register for “featuremodified” instead.  The “featuremodified” event is triggered on the layer with each feature modification.</p><p>Optional function to be called when a feature has been modified.   The function should expect to be called with a feature.</p></d [...]
@@ -40,7 +42,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.OpenLayers.Control.ModifyFeature"></a>OpenLayers.<wbr>Control.<wbr>ModifyFeature</h3><div class=CBody><p>Create a new modify feature control.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link9 onMo [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.OpenLayers.Control.ModifyFeature"></a>OpenLayers.<wbr>Control.<wbr>ModifyFeature</h3><div class=CBody><p>Create a new modify feature control.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link11 onM [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.Functions"></a>Functions</h3></div></div>
 
@@ -50,7 +52,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivate the control.</p><h4 class=CHeading>Returns</h4><p>{Boolean} Successfully deactivated the control.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.selectFeature"></a>selectFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.selectFeature"></a>selectFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.unselectFeature"></a>unselectFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unselectFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.Constants"></a>Constants</h3></div></div>
 
@@ -68,15 +72,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Take care of things that are not handled in superclass.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activate the control [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Take care of things that are not handled in superclass.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activate the control [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/MouseDefaults-js.html b/doc/apidocs/files/OpenLayers/Control/MouseDefaults-js.html
deleted file mode 100644
index 3f881fd..0000000
--- a/doc/apidocs/files/OpenLayers/Control/MouseDefaults-js.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.MouseDefaults - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyP [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h1><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="Navigation-js.html#OpenLayers.Control.Navigation" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Control.Navigation</a> inst [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h3></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CClass>The navigation control handles map browsing with mouse events (dragging, double-clicking, and scrolling the wheel). </div></div><div class=CToolTip id="tt3"><div class=CClass>Controls affect the display or behavior of the map. </di [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Control/MousePosition-js.html b/doc/apidocs/files/OpenLayers/Control/MousePosition-js.html
index 11e2152..f028507 100644
--- a/doc/apidocs/files/OpenLayers/Control/MousePosition-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/MousePosition-js.html
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deacti [...]
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deac [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/MouseToolbar-js.html b/doc/apidocs/files/OpenLayers/Control/MouseToolbar-js.html
deleted file mode 100644
index e86ff15..0000000
--- a/doc/apidocs/files/OpenLayers/Control/MouseToolbar-js.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.MouseToolbar - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPr [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h1><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="NavToolbar-js.html#OpenLayers.Control.NavToolbar" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Control.NavToolbar</a> instea [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.direction"></a>direction</h3><div class=CBody><p>{String} ‘vertical’ or ‘horizontal’</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>position</td><td class=CDLDescription>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMous [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CClass>This Toolbar is an alternative to the Navigation control that displays the state of the control, and provides a UI for changing state to use the zoomBox via a Panel control.</div></div><div class=CToolTip id="tt3"><div class=CClass [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Control/NavToolbar-js.html b/doc/apidocs/files/OpenLayers/Control/NavToolbar-js.html
index c85f9c0..db6d37f 100644
--- a/doc/apidocs/files/OpenLayers/Control/NavToolbar-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/NavToolbar-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Navigation-js.html b/doc/apidocs/files/OpenLayers/Control/Navigation-js.html
index f22dfdb..6962745 100644
--- a/doc/apidocs/files/OpenLayers/Control/Navigation-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Navigation-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.handleRightClicks"></a>handleRightClicks</h3><div class=CBody><p>{Boolean} Whether or not to handle right clicks.  Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.zoomBoxKeyMask"></a>zoomBoxKeyMask</h3><div class=CBody><p>{Integer} <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Handler</a> key code of the key, which has to be pressed, while drawing the zoom box with the mouse on the screen.  You should probably set handleRightClicks to true i [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.zoomBoxKeyMask"></a>zoomBoxKeyMask</h3><div class=CBody><p>{Integer} <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Handler</a> key code of the key, which has to be pressed, while drawing the zoom box with the mouse on the screen.  You should probably set handleRightClicks to true i [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
 
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/NavigationHistory-js.html b/doc/apidocs/files/OpenLayers/Control/NavigationHistory-js.html
index df1db87..b250ad7 100644
--- a/doc/apidocs/files/OpenLayers/Control/NavigationHistory-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/NavigationHistory-js.html
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/OverviewMap-js.html b/doc/apidocs/files/OpenLayers/Control/OverviewMap-js.html
index 6be1a76..aa5ecdb 100644
--- a/doc/apidocs/files/OpenLayers/Control/OverviewMap-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/OverviewMap-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h1><div class=CBody><p>The OverMap control creates a small overview map, useful to display the extent of a zoomed map and your main map and provide additional navigation options to the User.   By default the overview map is drawn in the lower right corner of the main map.  Create a new overview map with the <a [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h1><div class=CBody><p>The OverMap control creates a small overview map, useful to display the extent of a zoomed map and your main map and provide additional navigation options to the User.   By default the overview map is drawn in the lower right corner of the main map.  Create a new overview map with the <a [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.Properties"></a>Properties</h3></div></div>
 
@@ -43,7 +43,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h3><div class=CBody><p>Create a new overview map</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} Properties of this object will be set on the overview map object.   Note, to set option [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h3><div class=CBody><p>Create a new overview map</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Properties of this object will be set on the overview map object.   Note, to set optio [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.Functions"></a>Functions</h3></div></div>
 
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Pan-js.html b/doc/apidocs/files/OpenLayers/Control/Pan-js.html
index 4aea4a6..4c8c893 100644
--- a/doc/apidocs/files/OpenLayers/Control/Pan-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Pan-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/PanPanel-js.html b/doc/apidocs/files/OpenLayers/Control/PanPanel-js.html
index b7c5d45..0a61ef1 100644
--- a/doc/apidocs/files/OpenLayers/Control/PanPanel-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/PanPanel-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/PanZoom-js.html b/doc/apidocs/files/OpenLayers/Control/PanZoom-js.html
index 5d43a50..33030a7 100644
--- a/doc/apidocs/files/OpenLayers/Control/PanZoom-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/PanZoom-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/PanZoomBar-js.html b/doc/apidocs/files/OpenLayers/Control/PanZoomBar-js.html
index c37918e..c8d3d04 100644
--- a/doc/apidocs/files/OpenLayers/Control/PanZoomBar-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/PanZoomBar-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Panel-js.html b/doc/apidocs/files/OpenLayers/Control/Panel-js.html
index 2b8bd56..1758110 100644
--- a/doc/apidocs/files/OpenLayers/Control/Panel-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Panel-js.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Panel"></a>OpenLayers.<wbr>Control.<wbr>Panel</h1><div class=CBody><p>The Panel control is a container for other controls.  With it toolbars may be composed.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt1', 'link10')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a></ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Panel"></a>OpenLayers.<wbr>Control.<wbr>Panel</h1><div class=CBody><p>The Panel control is a container for other controls.  With it toolbars may be composed.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.defaultControl"></a>defaultControl</h3><div class=CBody><p>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a>} The control which is activated when the control is activated (turned on), which also happens at instantiation.  If <a href="#OpenLayers.Control.Panel.saveState" class [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.defaultControl"></a>defaultControl</h3><div class=CBody><p>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a>} The control which is activated when the control is activated (turned on), which also happens at instantiation.  If <a href="#OpenLayers.Control.Panel.saveState" class [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.saveState"></a>saveState</h3><div class=CBody><p>{Boolean} If set to true, the active state of this panel’s controls will be stored on panel deactivation, and restored on reactivation.  Default is false.</p></div></div></div>
 
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.OpenLayers.Control.Panel"></a>OpenLayers.<wbr>Control.<wbr>Panel</h3><div class=CBody><p>Create a new control panel.</p><p>Each control in the panel is represented by an icon.  When clicking on an icon, the <a href="#OpenLayers.Control.Panel.activateControl" class=LFunction id=link14 onMouseOver="ShowTip(event, 'tt5', 'link14')" onMouseOut="HideTip('tt5')">activateControl</a> method is cal [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.OpenLayers.Control.Panel"></a>OpenLayers.<wbr>Control.<wbr>Panel</h3><div class=CBody><p>Create a new control panel.</p><p>Each control in the panel is represented by an icon.  When clicking on an icon, the <a href="#OpenLayers.Control.Panel.activateControl" class=LFunction id=link15 onMouseOver="ShowTip(event, 'tt5', 'link15')" onMouseOut="HideTip('tt5')">activateControl</a> method is cal [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.Functions"></a>Functions</h3></div></div>
 
@@ -35,15 +35,29 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.activateControl"></a>activateControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>activateControl: function (</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.activateControl"></a>activateControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>activateControl: function (</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function(</td><td class="PParameter  prettyprint " nowrap>controls</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function(</td><td class="PParameter  prettyprint " nowrap>controls</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.createControlMarkup"></a>createControlMarkup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createControlMarkup: function(</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
+    defaultControl: control,
+    // ovverride createControlMarkup to create actual buttons
+    // including texts wrapped into span elements.
+    createControlMarkup: function(control) {
+        var button = document.createElement('button'),
+            span = document.createElement('span');
+        if (control.text) {
+            span.innerHTML = control.text;
+        }
+        return button;
+    }
+ });</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a>} The control to create the HTML markup for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{DOMElement} The markup.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByName"></a>getControlsByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByName"></a>getControlsByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
 
 </div><!--Content-->
 
@@ -51,15 +65,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: funct [...]
+<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: funct [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Permalink-js.html b/doc/apidocs/files/OpenLayers/Control/Permalink-js.html
index 5bc9f40..4232733 100644
--- a/doc/apidocs/files/OpenLayers/Control/Permalink-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Permalink-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Permalink"></a>OpenLayers.<wbr>Control.<wbr>Permalink</h1><div class=CBody><p>The Permalink control is hyperlink that will return the user to the current map view.  By default it is drawn in the lower right corner of the map.  The href is updated as the map is zoomed, panned and whilst layers are switched.  ` Inherits from:</p><ul><li><a href="../Control-js.html# [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Permalink"></a>OpenLayers.<wbr>Control.<wbr>Permalink</h1><div class=CBody><p>The Permalink control is hyperlink that will return the user to the current map view.  By default it is drawn in the lower right corner of the map.  The href is updated as the map is zoomed, panned and whilst layers are switched.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Co [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Permalink.Properties"></a>Properties</h3></div></div>
 
@@ -39,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing [...]
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspaci [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/PinchZoom-js.html b/doc/apidocs/files/OpenLayers/Control/PinchZoom-js.html
index f495c0b..8a2e689 100644
--- a/doc/apidocs/files/OpenLayers/Control/PinchZoom-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/PinchZoom-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/SLDSelect-js.html b/doc/apidocs/files/OpenLayers/Control/SLDSelect-js.html
index 444f7dd..5aed6fc 100644
--- a/doc/apidocs/files/OpenLayers/Control/SLDSelect-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/SLDSelect-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h1><div class=CBody><p>Perform selections on WMS layers using Styled Layer Descriptor (SLD)</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Control</a></li></ul><!--START_ [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h1><div class=CBody><p>Perform selections on WMS layers using Styled Layer Descriptor (SLD)</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Control</a></li></ul><!--START_ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.clearOnDeactivate"></a>clearOnDeactivate</h3><div class=CBody><p>{Boolean} Should the selection be cleared when the control is deactivated.  Default value is false.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.WMS</a>)} The WMS layers this control will work on.</p></div></div></div>
@@ -29,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Used to set non-default properties on the control’s handler</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.sketchStyle"></a>sketchStyle</h3><div class=CBody><p>{<OpenLayers.Style>|Object} Style or symbolizer to use for the sketch handler.  The recommended way of styling the sketch layer, however, is to configure an <a href="../StyleMap-js.html#OpenLayers.StyleMap" class=LClass >OpenLayers.StyleMap</a> in the layerOptions of the <a href="#OpenLayers.Control.SLDSelect.handlerOptions" class [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.sketchStyle"></a>sketchStyle</h3><div class=CBody><p>{<OpenLayers.Style>|Object} Style or symbolizer to use for the sketch handler.  The recommended way of styling the sketch layer, however, is to configure an <a href="../StyleMap-js.html#OpenLayers.StyleMap" class=LClass >OpenLayers.StyleMap</a> in the layerOptions of the <a href="#OpenLayers.Control.SLDSelect.handlerOptions" class [...]
     handlerOptions: {
         layerOptions: {
             styleMap: new OpenLayers.StyleMap({
@@ -41,11 +39,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.wfsCache"></a>wfsCache</h3><div class=CBody><p>{Object} Cache to use for storing parsed results from <OpenLayers.Format.WFSDescribeFeatureType.read>.  If not provided, these will be cached on the prototype.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layerCache"></a>layerCache</h3><div class=CBody><p>{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.  If not provided, layers will be cached on the prototype.  Note that if <a href="#OpenLayers.Control.SLDSelect.clearOnDeactivate" class=LProperty id=link10 onMouseOve [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layerCache"></a>layerCache</h3><div class=CBody><p>{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.  If not provided, layers will be cached on the prototype.  Note that if <a href="#OpenLayers.Control.SLDSelect.clearOnDeactivate" class=LProperty id=link10 onMouseOve [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h3><div class=CBody><p>Create a new control for selecting features in WMS layers using Styled Layer Descriptor (SLD).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../BaseTypes/Class-js.html# [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h3><div class=CBody><p>Create a new control for selecting features in WMS layers using Styled Layer Descriptor (SLD).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../../deprecated-js.html#Op [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Functions"></a>Functions</h3></div></div>
 
@@ -55,7 +53,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivate the control.  If clearOnDeactivate is true, remove the selection layer(s).</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.setLayers"></a>setLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayers: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.setLayers"></a>setLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayers: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
 </div><!--Content-->
 
@@ -63,15 +61,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Take care of things that are not handled in superclass.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table borde [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Take care of things that are not handled in superclass.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table borde [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Scale-js.html b/doc/apidocs/files/OpenLayers/Control/Scale-js.html
index 5ff34ae..9870ed3 100644
--- a/doc/apidocs/files/OpenLayers/Control/Scale-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Scale-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ScaleLine-js.html b/doc/apidocs/files/OpenLayers/Control/ScaleLine-js.html
index d173e0e..be90278 100644
--- a/doc/apidocs/files/OpenLayers/Control/ScaleLine-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ScaleLine-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/SelectFeature-js.html b/doc/apidocs/files/OpenLayers/Control/SelectFeature-js.html
index 6a76d1e..ad2f1fd 100644
--- a/doc/apidocs/files/OpenLayers/Control/SelectFeature-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/SelectFeature-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h1><div class=CBody><p>The SelectFeature control selects vector features from a given layer on click or hover.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Cont [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><ul><li><b>beforefeaturehighlighted</b> Triggered before a feature is highlighted</li><li><b>featurehighlighted</b> Triggered when a feature is highlighted</li><li><b>featureunhighlighted</b> Triggered when a feature is unhighlighted</li></ul></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h1><div class=CBody><p>The SelectFeature control selects vector features from a given layer on click or hover.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Cont [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.multiple"></a>multiple</h3><div class=CBody><p>{Boolean} Allow selection of multiple geometries.   Default is false.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.clickout"></a>clickout</h3><div class=CBody><p>{Boolean} Unselect features when clicking outside any feature.  Default is true.</p></div></div></div>
@@ -43,11 +41,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h3><div class=CBody><p>Create a new control for selecting features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layers</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=l [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h3><div class=CBody><p>Create a new control for selecting features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layers</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=l [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
 </div><!--Content-->
 
@@ -55,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Attach a new layer to the control, overriding any existing layers.</div></div><div c [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Attach a new layer to the control, overriding any existing layers.</div></div><div c [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Snapping-js.html b/doc/apidocs/files/OpenLayers/Control/Snapping-js.html
index d9c5458..f91b5da 100644
--- a/doc/apidocs/files/OpenLayers/Control/Snapping-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Snapping-js.html
@@ -11,21 +11,23 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h1><div class=CBody><p>Acts as a snapping agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><d [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h1><div class=CBody><p>Acts as a snapping agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><d [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Constants"></a>Constants</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4  [...]
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on  [...]
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.DEFAULTS"></a>DEFAULTS</h3><div class=CBody><p>Default target properties.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h3><div class=CBody><p>Creates a new snapping control.  A control is constructed with an editable layer and a set of configuration objects for target layers.  While the control is active, dragging vertices while drawing new features or modifying existing features on the editable layer will engage snapping to fe [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h3><div class=CBody><p>Creates a new snapping control.  A control is constructed with an editable layer and a set of configuration objects for target layers.  While the control is active, dragging vertices while drawing new features or modifying existing features on the editable layer will engage snapping to fe [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Activate the control.   Activating the control registers listeners for editing related events so that during feature creation and modification, moving vertices will trigger snapping.</p></div> [...]
 
@@ -37,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the editable layer. </div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the editable layer. </div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Split-js.html b/doc/apidocs/files/OpenLayers/Control/Split-js.html
index db58182..206e9f8 100644
--- a/doc/apidocs/files/OpenLayers/Control/Split-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/Split-js.html
@@ -11,35 +11,33 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h1><div class=CBody><p>Acts as a split feature agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><di [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exa [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h1><div class=CBody><p>Acts as a split feature agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><di [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>} The target layer with features to be split.  Set at construction or after construction with <setLayer>.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 cla [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>} The target layer with features to be split.  Set at construction or after construction with <setLayer>.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.tolerance"></a>tolerance</h3><div class=CBody><p>{Number} Distance between the calculated intersection and a vertex on the source geometry below which the existing vertex will be used for the split.   Default is null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.edge"></a>edge</h3><div class=CBody><p>{Boolean} Allow splits given intersection of edges only.   Default is true.   If false, a vertex on the source must be within the <a href="#OpenLayers.Control.Split.tolerance" class=LProperty id=link8 onMouseOver="ShowTip(event, 'tt6', 'link8')" onMouseOut="HideTip('tt6')">tolerance</a> distance of the calculated intersection for a split to occur.</ [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.edge"></a>edge</h3><div class=CBody><p>{Boolean} Allow splits given intersection of edges only.   Default is true.   If false, a vertex on the source must be within the <a href="#OpenLayers.Control.Split.tolerance" class=LProperty id=link10 onMouseOver="ShowTip(event, 'tt8', 'link10')" onMouseOut="HideTip('tt8')">tolerance</a> distance of the calculated intersection for a split to occur. [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.deferDelete"></a>deferDelete</h3><div class=CBody><p>{Boolean} Instead of removing features from the layer, set feature states of split features to DELETE.   This assumes a save strategy or other component is in charge of removing features from the layer.   Default is false.   If false, split features will be immediately deleted from the layer.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.mutual"></a>mutual</h3><div class=CBody><p>{Boolean} If source and target layers are the same, split source features and target features where they intersect.   Default is true.   If false, only target features will be split.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.targetFilter"></a>targetFilter</h3><div class=CBody><p>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.targetFilter"></a>targetFilter</h3><div class=CBody><p>{<a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt2', 'link11')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a>} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.sourceFilter"></a>sourceFilter</h3><div class=CBody><p>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.sourceFilter"></a>sourceFilter</h3><div class=CBody><p>{<a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt2', 'link12')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a>} Optional filter that will be evaluated to determine if a feature from the source layer is eligible for splitting.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h3><div class=CBody><p>Creates a new split control.  A control is constructed with a target layer and an optional source layer.  While the control is active, creating new features or modifying existing features on the source layer will result in splitting any eligible features on the target layer.   If no source la [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h3><div class=CBody><p>Creates a new split control.  A control is constructed with a target layer and an optional source layer.  While the control is active, creating new features or modifying existing features on the source layer will result in splitting any eligible features on the target layer.   If no source la [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.setSource"></a>setSource</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.setSource"></a>setSource</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Activate the control.   Activating the control registers listeners for editing related events so that during feature creation and modification, features in the target will be considered for split [...]
 
@@ -51,15 +49,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters   [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: fu [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/TouchNavigation-js.html b/doc/apidocs/files/OpenLayers/Control/TouchNavigation-js.html
index 1cddf51..a613c49 100644
--- a/doc/apidocs/files/OpenLayers/Control/TouchNavigation-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/TouchNavigation-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/TransformFeature-js.html b/doc/apidocs/files/OpenLayers/Control/TransformFeature-js.html
index a16ce52..4873a95 100644
--- a/doc/apidocs/files/OpenLayers/Control/TransformFeature-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/TransformFeature-js.html
@@ -11,21 +11,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h1><div class=CBody><p>Control to transform features with a standard transformation box.</p><h4 class=CHeading>Inherits From</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt8', 'link11')" onMouseOut="HideTip('tt8')">OpenLayers.Control</a></li></ [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><ul><li><b>beforesetfeature</b> Triggered before a feature is set for tranformation.  The feature will not be set if a listener returns false.  Listeners receive a <b>feature</b> property, with the feature that will be set for transformation.  Listeners are allowed to set the co [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h1><div class=CBody><p>Control to transform features with a standard transformation box.</p><h4 class=CHeading>Inherits From</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt8', 'link11')" onMouseOut="HideTip('tt8')">OpenLayers.Control</a></li></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockqu [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.geometryTypes"></a>geometryTypes</h3><div class=CBody><p>{Array(String)} To restrict transformation to a limited set of geometry types, send a list of strings corresponding to the geometry class names.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.preserveAspectRatio"></a>preserveAspectRatio</h3><div class=CBody><p>{Boolean} set to true to not change the feature’s aspect ratio.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotate"></a>rotate</h3><div class=CBody><p>{Boolean} set to false if rotation should be disabled.  Default is true.  To be passed with the constructor or set when the control is not active.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.feature"></a>feature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt1', 'link15')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} Feature currently available for transformation.  Read-only, use <a href="#OpenLayers.Control.TransformFeature.setFeature" class=LFunction id=link16  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.feature"></a>feature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} Feature currently available for transformation.  Read-only, use <a href="#OpenLayers.Control.TransformFeature.setFeature" class=LFunction id=link17  [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.renderIntent"></a>renderIntent</h3><div class=CBody><p>{String|Object} Render intent for the transformation box and handles.  A symbolizer object can also be provided here.</p></div></div></div>
 
@@ -36,21 +34,23 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     cursor: "pointer"
 }</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.box"></a>box</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} The transformation box rectangle.  Read-only.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.box"></a>box</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt1', 'link18')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} The transformation box rectangle.  Read-only.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.center"></a>center</h3><div class=CBody><p>{<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt2', 'link18')" onMouseOut="HideTip('tt2')">OpenLayers.Geometry.Point</a>} The center of the feature bounds.  Read-only.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.center"></a>center</h3><div class=CBody><p>{<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt2', 'link19')" onMouseOut="HideTip('tt2')">OpenLayers.Geometry.Point</a>} The center of the feature bounds.  Read-only.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.scale"></a>scale</h3><div class=CBody><p>{Float} The scale of the feature, relative to the scale the time the feature was set.  Read-only, except for <b>beforesetfeature</b> listeners.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.ratio"></a>ratio</h3><div class=CBody><p>{Float} The ratio of the feature relative to the ratio the time the feature was set.  Read-only, except for <b>beforesetfeature</b> listeners.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.handles"></a>handles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt1', 'link19')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>)} The 8 handles currently available for scaling/resizing.  Numbered counterclockwise, starting from the southwest corner.  Read-only.</p>< [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.handles"></a>handles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>)} The 8 handles currently available for scaling/resizing.  Numbered counterclockwise, starting from the southwest corner.  Read-only.</p>< [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotationHandles"></a>rotationHandles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt1', 'link21')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>)} The 4 rotation handles currently available for rotating.  Numbered counterclockwise, starting from the southwest corner.&nbsp [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotationHandles"></a>rotationHandles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>)} The 4 rotation handles currently available for rotating.  Numbered counterclockwise, starting from the southwest corner.&nbsp [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.irregular"></a>irregular</h3><div class=CBody><p>{Boolean} Make scaling/resizing work irregularly.  If true then dragging a handle causes the feature to resize in the direction of movement.  If false then the feature resizes symetrically about it’s center.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h3><div class=CBody><p>Create a new transform feature control.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass i [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h3><div class=CBody><p>Create a new transform feature control.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass i [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Functions"></a>Functions</h3></div></div>
 
@@ -58,7 +58,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivates the control.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.setFeature"></a>setFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>initialParams</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.setFeature"></a>setFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>initialParams</t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.unsetFeature"></a>unsetFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">unsetFeature: function()</td></tr></table></blockquote><p>Remove the transformation box off any feature.  If the control is active, it will be deactivated first.</p></div></div></div>
 
@@ -70,15 +70,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CClass>Point geometry class.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activates the control.</div></div><div class=CToolTip id="tt4"><div class [...]
+<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CClass>Point geometry class.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activates the control.</div></div><div class=CToolTip id="tt4"><div class [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/UTFGrid-js.html b/doc/apidocs/files/OpenLayers/Control/UTFGrid-js.html
new file mode 100644
index 0000000..014f1df
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Control/UTFGrid-js.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.UTFGrid - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint() [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.UTFGrid"></a>OpenLayers.<wbr>Control.<wbr>UTFGrid</h1><div class=CBody><p>This Control provides behavior associated with UTFGrid Layers.  These ‘hit grids’ provide underlying feature attributes without calling the server (again).  This control allows Mousemove, Hovering and Click events to trigger callbacks that use the attributes in whatever way you need. [...]
+    'UTFGrid Layer',
+    "http://tiles/world_utfgrid/${z}/${x}/${y}.json"
+);
+map.addLayer(world_utfgrid);
+
+var control = new OpenLayers.Control.UTFGrid({
+    layers: [world_utfgrid],
+    handlerMode: 'move',
+    callback: function(infoLookup) {
+        // do something with returned data
+
+    }
+})</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Control.UTFGrid" >OpenLayers.<wbr>Control.<wbr [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Layers"></a>Layers</h3><div class=CBody><p>List of layers to consider.  Must be Layer.UTFGrids `null` is the default indicating all UTFGrid Layers are queried.  {Array} <a href="../Layer/UTFGrid-js.html#OpenLayers.Layer.UTFGrid" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Layer.UTFGrid</a></p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.handlerMode"></a>handlerMode</h3><div class=CBody><p>Defaults to ‘click’.  Can be ‘hover’ or ‘move’.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.setHandler"></a>setHandler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setHandler: function(</td><td class="PParameter  prettyprint " nowrap>hm</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.OpenLayers.Control.UTFGrid"></a><OpenLayers.<wbr>Control.<wbr>UTFGrid></h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.callback"></a>callback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>callback: function(</td><td class="PParameter  prettyprint " nowrap>infoLookup</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setHandler: function(</td><td class="PParameter  prettyprint " nowrap>hm</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>sets this.handlerMode and calls resetHandler()</div></div><div class=CToolTip id="tt2" [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html b/doc/apidocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html
index 553b35f..0be53f2 100644
--- a/doc/apidocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>The WMSGetFeatureInfo control uses a WMS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configurati [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>The WMSGetFeatureInfo control uses a WMS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configurati [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
 
@@ -30,9 +30,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     "hover": {delay: 300}
 }</pre></blockquote></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types (in addition to those from <a href="../Control-js.html#OpenLayers.Control" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt2', 'link4')" onMouseOut="HideTip('tt2')">OpenLayers.Control</a>)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>beforeget [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockq [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Constructor"></a>Constructor</h3></div></div>
 
@@ -44,15 +42,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{OpenLayers.Events} Events instance for listeners and triggering control specific events.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html b/doc/apidocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html
index be5c93a..578e414 100644
--- a/doc/apidocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMTSGetFeatureInfo</h1><div class=CBody><p>The WMTSGetFeatureInfo control uses a WMTS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configu [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMTSGetFeatureInfo</h1><div class=CBody><p>The WMTSGetFeatureInfo control uses a WMTS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configu [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
 
@@ -30,9 +30,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     "hover": {delay: 300}
 }</pre></blockquote></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types (in addition to those from <a href="../Control-js.html#OpenLayers.Control" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt2', 'link4')" onMouseOut="HideTip('tt2')">OpenLayers.Control</a>)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>beforege [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></block [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Constructor"></a>Constructor</h3></div></div>
 
@@ -44,15 +42,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{OpenLayers.Events} Events instance for listeners and triggering control specific events.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/Zoom-js.html b/doc/apidocs/files/OpenLayers/Control/Zoom-js.html
new file mode 100644
index 0000000..f0597b7
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Control/Zoom-js.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.Zoom - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Zoom"></a>OpenLayers.<wbr>Control.Zoom</h1><div class=CBody><p>The Zoom control is a pair of +/- links for zooming in and out.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div cl [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomInText"></a>zoomInText</h3><div class=CBody><p>{String} Text for zoom-in link.   Default is “+”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomInId"></a>zoomInId</h3><div class=CBody><p>{String} Instead of having the control create a zoom in link, you can provide the identifier for an anchor element already added to the document.  By default, an element with id “olZoomInLink” will be searched for and used if it exists.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomOutText"></a>zoomOutText</h3><div class=CBody><p>{String} Text for zoom-out link.   Default is “-”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomOutId"></a>zoomOutId</h3><div class=CBody><p>{String} Instead of having the control create a zoom out link, you can provide the identifier for an anchor element already added to the document.  By default, an element with id “olZoomOutLink” will be searched for and used if it exists.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Control/ZoomBox-js.html b/doc/apidocs/files/OpenLayers/Control/ZoomBox-js.html
index 42a7e17..651dab2 100644
--- a/doc/apidocs/files/OpenLayers/Control/ZoomBox-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ZoomBox-js.html
@@ -11,7 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ZoomBox"></a>OpenLayers.<wbr>Control.<wbr>ZoomBox</h1><div class=CBody><p>The ZoomBox control enables zooming directly to a given extent, by drawing a box on the map.  The box is drawn by holding down shift, whilst dragging the mouse.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link1 onMouseOver="ShowTip(e [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ZoomBox"></a>OpenLayers.<wbr>Control.<wbr>ZoomBox</h1><div class=CBody><p>The ZoomBox control enables zooming directly to a given extent, by drawing a box on the map.  The box is drawn by holding down shift, whilst dragging the mouse.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link1 onMouseOver="ShowTip(e [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.keyMask"></a>keyMask</h3><div class=CBody><p>{Integer} Zoom only occurs if the keyMask matches the combination of keys down.  Use bitwise operators and one or more of the <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Handler</a> constants to construct a keyMask.  Leave null if no [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.alwaysZoom"></a>alwaysZoom</h3><div class=CBody><p>{Boolean} Always zoom in/out, when box drawed</p></div></div></div>
 
 </div><!--Content-->
 
@@ -19,15 +25,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CClass>Base class to construct a higher-level handler for event sequences. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ZoomIn-js.html b/doc/apidocs/files/OpenLayers/Control/ZoomIn-js.html
index 87e982c..f70ce1a 100644
--- a/doc/apidocs/files/OpenLayers/Control/ZoomIn-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ZoomIn-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ZoomOut-js.html b/doc/apidocs/files/OpenLayers/Control/ZoomOut-js.html
index a1f9b8e..fdedb19 100644
--- a/doc/apidocs/files/OpenLayers/Control/ZoomOut-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ZoomOut-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ZoomPanel-js.html b/doc/apidocs/files/OpenLayers/Control/ZoomPanel-js.html
index 989911f..a94dde8 100644
--- a/doc/apidocs/files/OpenLayers/Control/ZoomPanel-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ZoomPanel-js.html
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html b/doc/apidocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html
index da6774e..56e43e0 100644
--- a/doc/apidocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html
+++ b/doc/apidocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Events-js.html b/doc/apidocs/files/OpenLayers/Events-js.html
index fdb56e3..f136d93 100644
--- a/doc/apidocs/files/OpenLayers/Events-js.html
+++ b/doc/apidocs/files/OpenLayers/Events-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Event"></a>OpenLayers.<wbr>Event</h1><div class=CBody><p>Utility functions for event handling.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Event" >OpenLayers.<wbr>Event</a></td><td class=SDescription>Utility functions for ev [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Event"></a>OpenLayers.<wbr>Event</h1><div class=CBody><p>Utility functions for event handling.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Event" >OpenLayers.<wbr>Event</a></td><td class=SDescription>Utility functions for ev [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.Constants"></a>Constants</h3></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_SPACE"></a>KEY_SPACE</h3><div class=CBody><p>{int}</p></div></div></div>
+
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_BACKSPACE"></a>KEY_BACKSPACE</h3><div class=CBody><p>{int}</p></div></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_TAB"></a>KEY_TAB</h3><div class=CBody><p>{int}</p></div></div></div>
@@ -33,7 +35,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_DELETE"></a>KEY_DELETE</h3><div class=CBody><p>{int}</p></div></div></div>
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Events"></a>OpenLayers.<wbr>Events</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Events.Constants" >Constants</a></td><td class=SDescription></td></tr><tr class="SConstant SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Events.B [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Events"></a>OpenLayers.<wbr>Events</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Events.Constants" >Constants</a></td><td class=SDescription></td></tr><tr class="SConstant SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Events.B [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Constants"></a>Constants</h3></div></div>
 
@@ -45,17 +47,49 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.includeXY"></a>includeXY</h3><div class=CBody><p>{Boolean} Should the .xy property automatically be created for browser mouse events?  In general, this should be false.  If it is true, then mouse events will automatically generate a ‘.xy’ property on the event object that is passed.  (Prior to OpenLayers 2.7, this was true by default.)  Otherwise, you can call the getMouse [...]
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.extensions"></a>extensions</h3><div class=CBody><p>{Object} Event extensions registered with this instance.  Keys are event types, values are {OpenLayers.Events.*} extension instances or {Boolean} for events that an instantiated extension provides in addition to the one it was created for.</p><p>Extensions create an event in addition to browser events, which usually fires when a sequence of browser  [...]
+    initialize: function(target) {
+        this.target = target;
+        this.target.register("click", this, this.doStuff, {extension: true});
+        // only required if extension provides more than one event type
+        this.target.extensions["foostart"] = true;
+        this.target.extensions["fooend"] = true;
+    },
+    destroy: function() {
+        var target = this.target;
+        target.unregister("click", this, this.doStuff);
+        delete this.target;
+        // only required if extension provides more than one event type
+        delete target.extensions["foostart"];
+        delete target.extensions["fooend"];
+    },
+    doStuff: function(evt) {
+        var propagate = true;
+        if (OpenLayers.Event.element(evt).className === "foo") {
+            propagate = false;
+            var target = this.target;
+            target.triggerEvent("foostart");
+            window.setTimeout(function() {
+                target.triggerEvent("fooend");
+            }, 1000);
+        }
+        return propagate;
+    }
+});
+// only required if extension provides more than one event type
+OpenLayers.Events.fooend = OpenLayers.Events.foostart;</pre></blockquote></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.OpenLayers.Events"></a>OpenLayers.<wbr>Events</h3><div class=CBody><p>Construct an OpenLayers.Events object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} The js object to which this Events object  is being added</td></tr><tr><td class=CDLEntry>element</td><td class=CDLDescript [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.OpenLayers.Events"></a>OpenLayers.<wbr>Events</h3><div class=CBody><p>Construct an OpenLayers.Events object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} The js object to which this Events object  is being added</td></tr><tr><td class=CDLEntry>element</td><td class=CDLDescript [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.addEventType"></a>addEventType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addEventType: function(</td><td class="PParameter  prettyprint " nowrap>eventName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.addEventType"></a>addEventType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addEventType: function(</td><td class="PParameter  prettyprint " nowrap>eventName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.on"></a>on</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>on: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.on"></a>on</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>on: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
 events.on({"loadstart": loadStartListener});
 
 // this is equivalent to the following
@@ -72,11 +106,11 @@ events.on({
 events.register("loadstart", object, loadStartListener);
 events.register("loadend", object, loadEndListener);</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.register"></a>register</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>register: function (</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PPar [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.register"></a>register</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>register: function (</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PPar [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.registerPriority"></a>registerPriority</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>registerPriority: function (</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.un"></a>un</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.un"></a>un</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
 events.un({"loadstart": loadStartListener});
 
 // this is equivalent to the following
@@ -105,15 +139,15 @@ events.unregister("loadend", object, loadEndListener);</pre></blockquo
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addEventType: function(</td><td class="PParamet [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addEventType: function(</td><td class="PParamet [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Events/buttonclick-js.html b/doc/apidocs/files/OpenLayers/Events/buttonclick-js.html
new file mode 100644
index 0000000..949fd42
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Events/buttonclick-js.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Events.buttonclick - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Events.buttonclick"></a>OpenLayers.<wbr>Events.<wbr>buttonclick</h1><div class=CBody><p>Extension event type for handling buttons on top of a dom element.  This event type fires “buttonclick” on its <target> when a button was clicked.  Buttons are detected by the “olButton” class.</p><p>This event type makes sure that button clicks do not interfe [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.OpenLayers.Events.buttonclick"></a>OpenLayers.<wbr>Events.<wbr>buttonclick</h3><div class=CBody><p>Construct a buttonclick event type.  Applications are not supposed to create instances of this class - they are created on demand by <a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a> instances.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspaci [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Feature-js.html b/doc/apidocs/files/OpenLayers/Feature-js.html
index fd59ae0..32aa007 100644
--- a/doc/apidocs/files/OpenLayers/Feature-js.html
+++ b/doc/apidocs/files/OpenLayers/Feature-js.html
@@ -11,15 +11,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h1><div class=CBody><p>Features are combinations of geography and attributes.  The OpenLayers.Feature class specifically combines a marker and a lonlat.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a hr [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h1><div class=CBody><p>Features are combinations of geography and attributes.  The OpenLayers.Feature class specifically combines a marker and a lonlat.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a hr [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.popupClass"></a>popupClass</h3><div class=CBody><p>{<a href="BaseTypes/Class-js.html#OpenLayers.Class" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">OpenLayers.Class</a>} The class which will be used to instantiate a new Popup.  Default is <a href="Popup/AnchoredBubble-js.html#OpenLayers.Popup.AnchoredBubble" class=LClass >OpenLayers.Popup.Anch [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.popupClass"></a>popupClass</h3><div class=CBody><p>{<a href="../deprecated-js.html#OpenLayers.Class" class=LClass >OpenLayers.Class</a>} The class which will be used to instantiate a new Popup.  Default is <a href="Popup/Anchored-js.html#OpenLayers.Popup.Anchored" class=LClass >OpenLayers.Popup.Anchored</a>.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h3><div class=CBody><p>Constructor for features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescripti [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h3><div class=CBody><p>Constructor for features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescripti [...]
 
 </div><!--Content-->
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([3, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([4, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CConstructor>Base class used to construct all other classes. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CConstructor>Constructor for features.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CConstructor>Constructor for features.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Feature/Vector-js.html b/doc/apidocs/files/OpenLayers/Feature/Vector-js.html
index ed43ca4..8470468 100644
--- a/doc/apidocs/files/OpenLayers/Feature/Vector-js.html
+++ b/doc/apidocs/files/OpenLayers/Feature/Vector-js.html
@@ -37,7 +37,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.OpenLayers.Feature.Vector.style"></a>OpenLayers.<wbr>Feature.<wbr>Vector.<wbr>style</h3><div class=CBody><p>OpenLayers features can have a number of style attributes.  The ‘default’ style will typically be used if no other style is specified.  These styles correspond for the most part, to the styling properties defined by the SVG standard.  Information on fill propertie [...]
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.OpenLayers.Feature.Vector.style"></a>OpenLayers.<wbr>Feature.<wbr>Vector.<wbr>style</h3><div class=CBody><p>OpenLayers features can have a number of style attributes.  The ‘default’ style will typically be used if no other style is specified.  These styles correspond for the most part, to the styling properties defined by the SVG standard.  Information on fill propertie [...]
 
 </div><!--Content-->
 
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([3, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([4, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Feature/WFS-js.html b/doc/apidocs/files/OpenLayers/Feature/WFS-js.html
deleted file mode 100644
index fc0d5a4..0000000
--- a/doc/apidocs/files/OpenLayers/Feature/WFS-js.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Feature.WFS - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();">< [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h1><div class=CBody><p>WFS handling class, for use as a featureClass on the WFS layer for handling ‘point’ WFS types.  Good for subclassing when creating a custom WFS like XML application.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Feature-js.html#OpenLayers.Feature" class=LClass id=link1 onMouseOver="ShowT [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h3><div class=CBody><p>Create a WFS feature.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>xmlNode</td><td class= [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([3, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Features are combinations of geography and attributes. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Filter-js.html b/doc/apidocs/files/OpenLayers/Filter-js.html
index 1b2cd7b..f36f0be 100644
--- a/doc/apidocs/files/OpenLayers/Filter-js.html
+++ b/doc/apidocs/files/OpenLayers/Filter-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h1><div class=CBody><p>This class represents an OGC Filter.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Filter" >OpenLayers.<wbr>Filter</a></td><td class=SDescription>This class represents [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h1><div class=CBody><p>This class represents an OGC Filter.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Filter" >OpenLayers.<wbr>Filter</a></td><td class=SDescription>This class represents [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h3><div class=CBody><p>This class represents a generic filter.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a href [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h3><div class=CBody><p>This class represents a generic filter.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a href [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Functions"></a>Functions</h3></div></div>
 
@@ -23,7 +23,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.evaluate"></a>evaluate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>E [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this filter.  Should be implementted by subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Filter.OpenLayers.Filter" class=LConstructor id=link5 onMouseOver="ShowTip(event, 'tt4', 'lin [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this filter.  Should be implemented by subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Filter.OpenLayers.Filter" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt6', 'link [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.toString"></a>toString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} Include <a href="Format/CQL-js.html#OpenLayers.Format.CQL" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">OpenLayers.Fo [...]
 
 </div><!--Content-->
 
@@ -31,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Remove reference to anything added.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: fun [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Remove reference to anything added.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: fun [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Filter/Comparison-js.html b/doc/apidocs/files/OpenLayers/Filter/Comparison-js.html
index 806df29..050a3e1 100644
--- a/doc/apidocs/files/OpenLayers/Filter/Comparison-js.html
+++ b/doc/apidocs/files/OpenLayers/Filter/Comparison-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Comparison"></a>OpenLayers.<wbr>Filter.<wbr>Comparison</h1><div class=CBody><p>This class represents a comparison filter.</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STi [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Comparison"></a>OpenLayers.<wbr>Filter.<wbr>Comparison</h1><div class=CBody><p>This class represents a comparison filter.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div class=Summa [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.Properties"></a>Properties</h3></div></div>
 
@@ -33,7 +33,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.evaluate"></a>evaluate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.value2regex"></a>value2regex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.value2regex"></a>value2regex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this filter.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Filter.Comparison.OpenLayers.Filter.Comparison" class=LConstructor id=link6 onMouseOver="ShowTip(event, 'tt5', 'link6')" onMou [...]
 
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Filter/FeatureId-js.html b/doc/apidocs/files/OpenLayers/Filter/FeatureId-js.html
index cf37897..712dfc0 100644
--- a/doc/apidocs/files/OpenLayers/Filter/FeatureId-js.html
+++ b/doc/apidocs/files/OpenLayers/Filter/FeatureId-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.FeatureId"></a>OpenLayers.<wbr>Filter.<wbr>FeatureId</h1><div class=CBody><p>This class represents a ogc:FeatureId Filter, as being used for rule-based SLD styling</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Filter</a></li></ul><!--START_ND_S [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.FeatureId"></a>OpenLayers.<wbr>Filter.<wbr>FeatureId</h1><div class=CBody><p>This class represents a ogc:FeatureId Filter, as being used for rule-based SLD styling</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Filter</a></li></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.fids"></a>fids</h3><div class=CBody><p>{Array(String)} Feature Ids to evaluate this rule against.  To be passed To be passed inside the params object.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.fids"></a>fids</h3><div class=CBody><p>{Array(String)} Feature Ids to evaluate this rule against.  To be passed inside the params object.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.Constructor"></a>Constructor</h3></div></div>
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Filter/Function-js.html b/doc/apidocs/files/OpenLayers/Filter/Function-js.html
index 0f50f9b..5381365 100644
--- a/doc/apidocs/files/OpenLayers/Filter/Function-js.html
+++ b/doc/apidocs/files/OpenLayers/Filter/Function-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Function"></a>OpenLayers.<wbr>Filter.<wbr>Function</h1><div class=CBody><p>This class represents a filter function.  We are using this class for creation of complex filters that can contain filter functions as values.  Nesting function as other functions parameter is supported.</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Function"></a>OpenLayers.<wbr>Filter.<wbr>Function</h1><div class=CBody><p>This class represents a filter function.  We are using this class for creation of complex filters that can contain filter functions as values.  Nesting function as other functions parameter is supported.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Function.Properties"></a>Properties</h3></div></div>
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Filter/Logical-js.html b/doc/apidocs/files/OpenLayers/Filter/Logical-js.html
index 9dd9331..ab0aead 100644
--- a/doc/apidocs/files/OpenLayers/Filter/Logical-js.html
+++ b/doc/apidocs/files/OpenLayers/Filter/Logical-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Logical"></a>OpenLayers.<wbr>Filter.<wbr>Logical</h1><div class=CBody><p>This class represents ogc:And, ogc:Or and ogc:Not rules.</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div c [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Logical"></a>OpenLayers.<wbr>Filter.<wbr>Logical</h1><div class=CBody><p>This class represents ogc:And, ogc:Or and ogc:Not rules.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div cla [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Logical.Properties"></a>Properties</h3></div></div>
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Filter/Spatial-js.html b/doc/apidocs/files/OpenLayers/Filter/Spatial-js.html
index 3b76bce..297a279 100644
--- a/doc/apidocs/files/OpenLayers/Filter/Spatial-js.html
+++ b/doc/apidocs/files/OpenLayers/Filter/Spatial-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Spatial"></a>OpenLayers.<wbr>Filter.<wbr>Spatial</h1><div class=CBody><p>This class represents a spatial filter.  Currently implemented: BBOX, DWithin and Intersects</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Filter</a></li></ul><!--STA [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Spatial"></a>OpenLayers.<wbr>Filter.<wbr>Spatial</h1><div class=CBody><p>This class represents a spatial filter.  Currently implemented: BBOX, DWithin and Intersects</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Filter</a> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Spatial.Properties"></a>Properties</h3></div></div>
 
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format-js.html b/doc/apidocs/files/OpenLayers/Format-js.html
index 0d7de8e..9505d58 100644
--- a/doc/apidocs/files/OpenLayers/Format-js.html
+++ b/doc/apidocs/files/OpenLayers/Format-js.html
@@ -37,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 cla [...]
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 c [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/ArcXML-js.html b/doc/apidocs/files/OpenLayers/Format/ArcXML-js.html
index 8c5014b..993303b 100644
--- a/doc/apidocs/files/OpenLayers/Format/ArcXML-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/ArcXML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML"></a>OpenLayers.<wbr>Format.<wbr>ArcXML</h1><div class=CBody><p>Read/Wite ArcXML.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.OpenLayers.Format.ArcXML" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.ArcXML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML"></a>OpenLayers.<wbr>Format.<wbr>ArcXML</h1><div class=CBody><p>Read/Wite ArcXML.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.OpenLayers.Format.ArcXML" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.ArcXML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Constructor"></a>Constructor</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.iserror"></a>iserror</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>iserror: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Gen [...]
 
@@ -31,15 +31,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>iserror: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Check to see if the response from the server was an error.</div></div><div class=CToolT [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>iserror: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Check to see if the response from the server was an error.</div></div><div class=CToolT [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/ArcXML/Features-js.html b/doc/apidocs/files/OpenLayers/Format/ArcXML/Features-js.html
index 29b94d8..8d34c07 100644
--- a/doc/apidocs/files/OpenLayers/Format/ArcXML/Features-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/ArcXML/Features-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML.Features"></a>OpenLayers.<wbr>Format.<wbr>ArcXML.<wbr>Features</h1><div class=CBody><p>Read/Wite ArcXML features.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.Features.OpenLayers.Format.ArcXML.Features" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.ArcXML.Features</a> const [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML.Features"></a>OpenLayers.<wbr>Format.<wbr>ArcXML.<wbr>Features</h1><div class=CBody><p>Read/Wite ArcXML features.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.Features.OpenLayers.Format.ArcXML.Features" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.ArcXML.Features</a> const [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.Constructor"></a>Constructor</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
 </div><!--Content-->
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string of ArcXML, and return a set of OpenLayers features.</div></div><di [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string of ArcXML, and return a set of OpenLayers features.</div></div><di [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Atom-js.html b/doc/apidocs/files/OpenLayers/Format/Atom-js.html
index 803ac0b..5334dfb 100644
--- a/doc/apidocs/files/OpenLayers/Format/Atom-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Atom-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Atom"></a>OpenLayers.<wbr>Format.Atom</h1><div class=CBody><p>Read/write Atom feeds.  Create a new instance with the <OpenLayers.Format.AtomFeed> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Atom"></a>OpenLayers.<wbr>Format.Atom</h1><div class=CBody><p>Read/write Atom feeds.  Create a new instance with the <OpenLayers.Format.AtomFeed> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STit [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.Properties"></a>Properties</h3></div></div>
 
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Seri [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Seri [...]
 
 </div><!--Content-->
 
@@ -35,15 +35,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Serialize or more feature nodes to Atom documents.</div></div><div class=CToolTip id= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Serialize or more feature nodes to Atom documents.</div></div><div class=CToolTip id= [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/CQL-js.html b/doc/apidocs/files/OpenLayers/Format/CQL-js.html
index e0c765d..ea9f17a 100644
--- a/doc/apidocs/files/OpenLayers/Format/CQL-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/CQL-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/CSWGetDomain-js.html b/doc/apidocs/files/OpenLayers/Format/CSWGetDomain-js.html
index fe425cd..0928034 100644
--- a/doc/apidocs/files/OpenLayers/Format/CSWGetDomain-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/CSWGetDomain-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html b/doc/apidocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html
index 260f7a7..7564a70 100644
--- a/doc/apidocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetDomain.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetDomain.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetDomain v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetDomain.v2_0_2.OpenLayers.Format.CSWGetDomain.v2_0_2" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3') [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetDomain.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetDomain.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetDomain v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetDomain.v2_0_2.OpenLayers.Format.CSWGetDomain.v2_0_2" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3') [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.CSWGetDomain.v2_0_2.Properties"></a>Properties</h3></div></div>
 
@@ -35,15 +35,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetDomain request.</div></div><div class=CToolTip id="tt2"><div  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetDomain request.</div></div><div class=CToolTip id="tt2"><div  [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/CSWGetRecords-js.html b/doc/apidocs/files/OpenLayers/Format/CSWGetRecords-js.html
index 81ed87a..88dfb38 100644
--- a/doc/apidocs/files/OpenLayers/Format/CSWGetRecords-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/CSWGetRecords-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html b/doc/apidocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html
index 2c64b80..76a0021 100644
--- a/doc/apidocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetRecords.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetRecords v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetRecords.v2_0_2.OpenLayers.Format.CSWGetRecords.v2_0_2" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip(' [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetRecords.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetRecords v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetRecords.v2_0_2.OpenLayers.Format.CSWGetRecords.v2_0_2" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip(' [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.CSWGetRecords.v2_0_2.Properties"></a>Properties</h3></div></div>
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetRecords request.</div></div><div class=CToolTip id="tt2"><div [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetRecords request.</div></div><div class=CToolTip id="tt2"><div [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Context-js.html b/doc/apidocs/files/OpenLayers/Format/Context-js.html
index 5cb0ace..19b6e93 100644
--- a/doc/apidocs/files/OpenLayers/Format/Context-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Context-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Context"></a>OpenLayers.<wbr>Format.<wbr>Context</h1><div class=CBody><p>Base class for both Format.WMC and Format.OWSContext</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Format.Context" >OpenLayers.<wbr>Format.<wbr>Co [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Context"></a>OpenLayers.<wbr>Format.<wbr>Context</h1><div class=CBody><p>Base class for both Format.WMC and Format.OWSContext</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML/VersionedOGC-js.html#OpenLayers.Format.XML.VersionedOGC" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.XML.VersionedOGC</a></li [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.Constructor"></a>Constructor</h3></div></div>
 
@@ -19,9 +19,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pretty [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pretty [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pret [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pret [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.Constants"></a>Constants</h3></div></div>
 
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read Context da [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read Context da [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Filter-js.html b/doc/apidocs/files/OpenLayers/Format/Filter-js.html
index daa0297..9256fe1 100644
--- a/doc/apidocs/files/OpenLayers/Format/Filter-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Filter-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Filter/v1-js.html b/doc/apidocs/files/OpenLayers/Format/Filter/v1-js.html
index 3d17946..584bfb5 100644
--- a/doc/apidocs/files/OpenLayers/Format/Filter/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Filter/v1-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h1><div class=CBody><p>Superclass for Filter version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h1><div class=CBody><p>Superclass for Filter version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border= [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeading>Parameters</h4 [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeading>Parameters</h4 [...]
 
 </div><!--Content-->
 
@@ -23,15 +23,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><div class=CToolTip id="tt2"><div class=CClass>Read/Wite ogc:Filter. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Read/Wite ogc:Filter. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Filter/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/Filter/v1_0_0-js.html
index a63527e..8ca5498 100644
--- a/doc/apidocs/files/OpenLayers/Format/Filter/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Filter/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Filter/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/Filter/v1_1_0-js.html
index b934caf..ecb6343 100644
--- a/doc/apidocs/files/OpenLayers/Format/Filter/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Filter/v1_1_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h1><div class=CBody><p>Write ogc:Filter version 1.1.0.</p><h4 class=CHeading>Differences from the v1.0.0 parser</h4><ul><li>uses GML v3 instead of GML v2</li><li>reads matchCase attribute on ogc:PropertyIsEqual and ogc:PropertyIsNotEqual elements.</li><li>writes matchCase attribute from comparison filters of type [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h1><div class=CBody><p>Write ogc:Filter version 1.1.0.</p><h4 class=CHeading>Differences from the v1.0.0 parser</h4><ul><li>uses GML v3 instead of GML v2</li><li>reads matchCase attribute on ogc:PropertyIsEqual and ogc:PropertyIsNotEqual elements.</li><li>writes matchCase attribute from comparison filters of type [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.Constants"></a>Constants</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeadi [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeadi [...]
 
 </div><!--Content-->
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Superclass for Filter version 1 parsers.</div></div><div class=CToolTip id="tt2"><div class=CClass>Read/Wite ogc:Filter. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Parses GML version 3.</div></div><div class=CToolTip id="tt2"><div class=CClass>Superclass for Filter version 1 parsers.</div></div><div class=CToolTip id="tt3"><div class=CClass>Read/Wite ogc:Filter. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GML-js.html b/doc/apidocs/files/OpenLayers/Format/GML-js.html
index 10af5cd..6a35800 100644
--- a/doc/apidocs/files/OpenLayers/Format/GML-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML"></a>OpenLayers.<wbr>Format.GML</h1><div class=CBody><p>Read/Wite GML.  Create a new instance with the <a href="#OpenLayers.Format.GML.OpenLayers.Format.GML" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.GML</a> constructor.   Supports the GML simple features profile.</p><h4 class=CHeading>Inh [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML"></a>OpenLayers.<wbr>Format.GML</h1><div class=CBody><p>Read/Wite GML.  Create a new instance with the <a href="#OpenLayers.Format.GML.OpenLayers.Format.GML" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.GML</a> constructor.   Supports the GML simple features profile.</p><h4 class=CHeading>Inh [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Properties"></a>Properties</h3></div></div>
 
@@ -39,9 +39,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data fr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data fr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Gener [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Gener [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometryNode"></a>buildGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
@@ -51,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string, and return a list of features.</div></div><div class=CToolTip id= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string, and return a list of features.</div></div><div class=CToolTip id= [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GML/Base-js.html b/doc/apidocs/files/OpenLayers/Format/GML/Base-js.html
index d0fb811..a35ac72 100644
--- a/doc/apidocs/files/OpenLayers/Format/GML/Base-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GML/Base-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h1><div class=CBody><p>Superclass for GML parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class= [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h1><div class=CBody><p>Superclass for GML parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.Properties"></a>Properties</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.featureNS"></a>featureNS</h3><div class=CBody><p>{String} The feature namespace.   Must be set in the options at construction.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.geometry"></a>geometry</h3><div class=CBody><p>{String} Name of geometry element.   Defaults to “geometry”.  If null, it will be set on <a href="../GML-js.html#OpenLayers.Format.GML.read" class=LFunction id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">read</a> when the first geometry is parsed.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.geometry"></a>geometry</h3><div class=CBody><p>{String} Name of geometry element.   Defaults to “geometry”.  If null, it will be set on <a href="../GML-js.html#OpenLayers.Format.GML.read" class=LFunction id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">read</a> when the first geometry is parsed.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract attributes from GML.   Default is true.</p></div></div></div>
 
@@ -29,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v2-js.html#OpenLayers.Format.GML.v2" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.GML.v2</a> or <a href="v3-js.html#OpenLayers.Format.GML.v3" class=LClass id=li [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v2-js.html#OpenLayers.Format.GML.v2" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.GML.v2</a> or <a href="v3-js.html#OpenLayers.Format.GML.v3" class=LClass id=li [...]
 
 </div><!--Content-->
 
@@ -37,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data f [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string, and return a list of features.</div></div><div class=CToolTip id= [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GML/v2-js.html b/doc/apidocs/files/OpenLayers/Format/GML/v2-js.html
index 5383b65..c07242a 100644
--- a/doc/apidocs/files/OpenLayers/Format/GML/v2-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GML/v2-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GML/v3-js.html b/doc/apidocs/files/OpenLayers/Format/GML/v3-js.html
index 1be2c7a..bf69f5e 100644
--- a/doc/apidocs/files/OpenLayers/Format/GML/v3-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GML/v3-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GPX-js.html b/doc/apidocs/files/OpenLayers/Format/GPX-js.html
index 37616b6..687b923 100644
--- a/doc/apidocs/files/OpenLayers/Format/GPX-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GPX-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GPX"></a>OpenLayers.<wbr>Format.GPX</h1><div class=CBody><p>Read/write GPX parser.  Create a new instance with the <a href="#OpenLayers.Format.GPX.OpenLayers.Format.GPX" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.GPX</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.ht [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GPX"></a>OpenLayers.<wbr>Format.GPX</h1><div class=CBody><p>Read/write GPX parser.  Create a new instance with the <a href="#OpenLayers.Format.GPX.OpenLayers.Format.GPX" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.GPX</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../dep [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.defaultDesc"></a>defaultDesc</h3><div class=CBody><p>{String} Default description for the waypoints/tracks in the case where the feature has no “description” attribute.  Default is “No description available”.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractWaypoints"></a>extractWaypoints</h3><div class=CBody><p>{Boolean} Extract waypoints from GPX.  (default: true)</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractTracks"></a>extractTracks</h3><div class=CBody><p>{Boolean} Extract tracks from GPX.  (default: true)</p></div></div></div>
@@ -23,13 +25,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract feature attributes from GPX.  (default: true) NOTE: Attributes as part of extensions to the GPX standard may not be extracted.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.creator"></a>creator</h3><div class=CBody><p>{String} The creator attribute to be added to the written GPX files.  Defaults to “OpenLayers”</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.OpenLayers.Format.GPX"></a>OpenLayers.<wbr>Format.GPX</h3><div class=CBody><p>Create a new parser for GPX.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose properties will be set on this instance.</td></tr></table></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a list [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a list [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>metadata</td><td class="PAfterParameters  pr [...]
 
 </div><!--Content-->
 
@@ -37,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a list of features from a GPX doc</div></div><div class=CToolTip id="tt2"><div class [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a list of features from a GPX doc</div></div><div class=CToolTip id="tt2"><div class [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GeoJSON-js.html b/doc/apidocs/files/OpenLayers/Format/GeoJSON-js.html
index 38505c7..4dea497 100644
--- a/doc/apidocs/files/OpenLayers/Format/GeoJSON-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GeoJSON-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/GeoRSS-js.html b/doc/apidocs/files/OpenLayers/Format/GeoRSS-js.html
index 72c0a95..f631523 100644
--- a/doc/apidocs/files/OpenLayers/Format/GeoRSS-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/GeoRSS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GeoRSS"></a>OpenLayers.<wbr>Format.<wbr>GeoRSS</h1><div class=CBody><p>Read/write GeoRSS parser.  Create a new instance with the <a href="#OpenLayers.Format.GeoRSS.OpenLayers.Format.GeoRSS" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.GeoRSS</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GeoRSS"></a>OpenLayers.<wbr>Format.<wbr>GeoRSS</h1><div class=CBody><p>Read/write GeoRSS parser.  Create a new instance with the <a href="#OpenLayers.Format.GeoRSS.OpenLayers.Format.GeoRSS" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.GeoRSS</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.Properties"></a>Properties</h3></div></div>
 
@@ -35,9 +35,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a l [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a l [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ac [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ac [...]
 
 </div><!--Content-->
 
@@ -45,15 +45,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a list of features from a GeoRSS doc</div></div><div class=CToolTip id="tt2"><div cl [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a list of features from a GeoRSS doc</div></div><div class=CToolTip id="tt2"><div cl [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/JSON-js.html b/doc/apidocs/files/OpenLayers/Format/JSON-js.html
index 244e434..7aa34b4 100644
--- a/doc/apidocs/files/OpenLayers/Format/JSON-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/JSON-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/KML-js.html b/doc/apidocs/files/OpenLayers/Format/KML-js.html
index 2a85bdd..a45220e 100644
--- a/doc/apidocs/files/OpenLayers/Format/KML-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/KML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.KML"></a>OpenLayers.<wbr>Format.KML</h1><div class=CBody><p>Read/Write KML.  Create a new instance with the <a href="#OpenLayers.Format.KML.OpenLayers.Format.KML" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.KML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#Open [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.KML"></a>OpenLayers.<wbr>Format.KML</h1><div class=CBody><p>Read/Write KML.  Create a new instance with the <a href="#OpenLayers.Format.KML.OpenLayers.Format.KML" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.KML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.Properties"></a>Properties</h3></div></div>
 
@@ -23,11 +23,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.foldersDesc"></a>foldersDesc</h3><div class=CBody><p>{String} Description of the folders.  Default is “Exported on [date].”  If set to null, no description element will be created.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract attributes from KML.   Default is true.  Extracting styleUrls requires this to be set to true</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract attributes from KML.   Default is true.  Extracting styleUrls requires this to be set to true Note that currently only Data and SimpleData elements are handled.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.kvpAttributes"></a>kvpAttributes</h3><div class=CBody><p>{Boolean} Only used if extractAttributes is true.  If set to true, attributes will be simple key-value pairs, compatible with other formats, Any displayName elements will be ignored.  If set to false, attributes will be objects, retaining any displayName elements, but not compatible with other formats.  Any CDATA in displayName w [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.extractTracks"></a>extractTracks</h3><div class=CBody><p>{Boolean} Extract gx:Track elements from Placemark elements.   Default is false.   If true, features will be generated for all points in all gx:Track elements.   Features will have a when (Date) attribute based on when elements in the track.   If tracks include angle elements, features will have heading, tilt, and roll attri [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.trackAttributes"></a>trackAttributes</h3><div class=CBody><p>{Array} If <a href="#OpenLayers.Format.KML.extractTracks" class=LProperty id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">extractTracks</a> is true, points within gx:Track elements will be parsed as features with when, heading, tilt, and roll attributes.  Any additional attribute names can be provided  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.trackAttributes"></a>trackAttributes</h3><div class=CBody><p>{Array} If <a href="#OpenLayers.Format.KML.extractTracks" class=LProperty id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">extractTracks</a> is true, points within gx:Track elements will be parsed as features with when, heading, tilt, and roll attributes.  Any additional attribute names can be provided  [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.maxDepth"></a>maxDepth</h3><div class=CBody><p>{Integer} Maximum depth for recursive loading external KML URLs Defaults to 0: do no external fetching</p></div></div></div>
 
@@ -37,9 +39,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data fr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data fr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Accep [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Accep [...]
 
 </div><!--Content-->
 
@@ -47,15 +49,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} Extract gx:Track elements from Placemark elements. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
+<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} Extract gx:Track elements from Placemark elements. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OGCExceptionReport-js.html b/doc/apidocs/files/OpenLayers/Format/OGCExceptionReport-js.html
index 8fbaa99..c212216 100644
--- a/doc/apidocs/files/OpenLayers/Format/OGCExceptionReport-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OGCExceptionReport-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OGCExceptionReport"></a>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport</h1><div class=CBody><p>Class to read exception reports for various OGC services and versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></l [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OGCExceptionReport"></a>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport</h1><div class=CBody><p>Class to read exception reports for various OGC services and versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OGCExceptionReport.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read OGC exception report data from a string, and return an object with information about  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read OGC exception report data from a string, and return an object with information about  [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OSM-js.html b/doc/apidocs/files/OpenLayers/Format/OSM-js.html
index 7300196..3fe2714 100644
--- a/doc/apidocs/files/OpenLayers/Format/OSM-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OSM-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OSM"></a>OpenLayers.<wbr>Format.OSM</h1><div class=CBody><p>OSM parser.  Create a new instance with the <a href="#OpenLayers.Format.OSM.OpenLayers.Format.OSM" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.OSM</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLaye [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OSM"></a>OpenLayers.<wbr>Format.OSM</h1><div class=CBody><p>OSM parser.  Create a new instance with the <a href="#OpenLayers.Format.OSM.OpenLayers.Format.OSM" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.OSM</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js. [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.Properties"></a>Properties</h3></div></div>
 
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Takes [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Takes [...]
 
 </div><!--Content-->
 
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a list of features, returns a serialized OSM format file for use in tools like  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a list of features, returns a serialized OSM format file for use in tools like  [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OWSCommon-js.html b/doc/apidocs/files/OpenLayers/Format/OWSCommon-js.html
index 5011184..b0447d3 100644
--- a/doc/apidocs/files/OpenLayers/Format/OWSCommon-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OWSCommon-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1-js.html b/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1-js.html
index 340f76f..85f2b73 100644
--- a/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.v1</h1><div class=CBody><p>Common readers and writers for OWSCommon v1.X formats</p></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.v1</h1><div class=CBody><p>Common readers and writers for OWSCommon v1.X formats</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul></div></div></div>
 
 </div><!--Content-->
 
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([13, 14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html
index 9b9bdf3..a0bf0f1 100644
--- a/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_0_0</h1><div class=CBody><p>Parser for OWS Common version 1.0.0.</p></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_0_0</h1><div class=CBody><p>Parser for OWS Common version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="v1-js.html#OpenLayers.Format.OWSCommon.v1" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.OWSCommon.v1</a></li></ul></div></d [...]
 
 </div><!--Content-->
 
@@ -19,15 +19,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([13, 14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Common readers and writers for OWSCommon v1.X formats</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html
index be35a27..c7193e1 100644
--- a/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_1_0</h1><div class=CBody><p>Parser for OWS Common version 1.1.0.</p></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_1_0</h1><div class=CBody><p>Parser for OWS Common version 1.1.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="v1-js.html#OpenLayers.Format.OWSCommon.v1" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.OWSCommon.v1</a></li></ul></div></d [...]
 
 </div><!--Content-->
 
@@ -19,15 +19,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([13, 14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Common readers and writers for OWSCommon v1.X formats</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OWSContext-js.html b/doc/apidocs/files/OpenLayers/Format/OWSContext-js.html
index 5d844cf..f2b59f0 100644
--- a/doc/apidocs/files/OpenLayers/Format/OWSContext-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OWSContext-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext"></a>OpenLayers.<wbr>Format.<wbr>OWSContext</h1><div class=CBody><p>Read and write OWS Context documents.  OWS Context documents are a preliminary OGC (Open Geospatial Consortium) standard for storing the state of a web mapping application.  In a way it is the successor to Web Map Context (WMC), since it is more generic and more types of layers can be stored [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext"></a>OpenLayers.<wbr>Format.<wbr>OWSContext</h1><div class=CBody><p>Read and write OWS Context documents.  OWS Context documents are a preliminary OGC (Open Geospatial Consortium) standard for storing the state of a web mapping application.  In a way it is the successor to Web Map Context (WMC), since it is more generic and more types of layers can be stored [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.Properties"></a>Properties</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Base class for both Format.WMC and Format.OWSContext</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html b/doc/apidocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html
index 9f60a6c..67d895f 100644
--- a/doc/apidocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h1><div class=CBody><p>Read and write OWSContext version 0.3.1.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMM [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h1><div class=CBody><p>Read and write OWSContext version 0.3.1.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.Constants"></a>Constants</h3></div></div>
 
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../OWSContext-js.html#OpenLayers.Format.OWSContext" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.OWSContext</a> constructor inst [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../OWSContext-js.html#OpenLayers.Format.OWSContext" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.OWSContext</a> constructor inst [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.Functions"></a>Functions</h3></div></div>
 
@@ -39,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read OWS context data from a string or DOMElement, and return a list of layers.</div></div [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read OWS context data from a string or DOMElement, and return a list of layers.</div></div [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/QueryStringFilter-js.html b/doc/apidocs/files/OpenLayers/Format/QueryStringFilter-js.html
index d5bb07e..7bddb2e 100644
--- a/doc/apidocs/files/OpenLayers/Format/QueryStringFilter-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/QueryStringFilter-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SLD-js.html b/doc/apidocs/files/OpenLayers/Format/SLD-js.html
index 2eb381a..f42ffd3 100644
--- a/doc/apidocs/files/OpenLayers/Format/SLD-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SLD-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SLD"></a>OpenLayers.<wbr>Format.SLD</h1><div class=CBody><p>Read/Wite SLD.  Create a new instance with the <a href="#OpenLayers.Format.SLD" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.SLD</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML/VersionedOGC-js.html#OpenLayers.Format.XM [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SLD"></a>OpenLayers.<wbr>Format.SLD</h1><div class=CBody><p>Read/Wite SLD.  Create a new instance with the <a href="#OpenLayers.Format.SLD" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.SLD</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML/VersionedOGC-js.html#OpenLayers.Format.XM [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.profile"></a>profile</h3><div class=CBody><p>{String} If provided, use a custom profile.</p><h4 class=CHeading>Currently supported profiles</h4><ul><li>GeoServer - parses GeoServer vendor specific capabilities for SLD.</li></ul></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.defaultVersion"></a>defaultVersion</h3><div class=CBody><p>{String} Version number to assume if none found.   Default is “1.0.0”.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.stringifyOutput"></a>stringifyOutput</h3><div class=CBody><p>{Boolean} If true, write will return a string otherwise a DOMElement.  Default is true.</p></div></div></div>
@@ -33,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([7, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SLD/v1-js.html b/doc/apidocs/files/OpenLayers/Format/SLD/v1-js.html
index dcf97c4..6df1acd 100644
--- a/doc/apidocs/files/OpenLayers/Format/SLD/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SLD/v1-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([7, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0-js.html
index 1d1812d..f9835a9 100644
--- a/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([7, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html b/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html
new file mode 100644
index 0000000..88ab259
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Format.SLD/v1_0_0_GeoServer - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad=" [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer"></a>OpenLayers.<wbr>Format.<wbr>SLD/<wbr>v1_0_0_GeoServer</h1><div class=CBody><p>Read and write SLD version 1.0.0 with GeoServer-specific enhanced options.  See <a href="http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-sld/src/main/resources/org/geotools/sld/bindings/StyledLayerDescriptor.xsd" class=LURL target=_top>http://svn.osgeo.org<w [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.OpenLayers.Format.SLD.v1_0_0_GeoServer"></a>OpenLayers.<wbr>Format.<wbr>SLD.<wbr>v1_0_0_GeoServer</h3><div class=CBody><p>Create a new parser for GeoServer-enhanced SLD version 1.0.0.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose p [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Write SLD version 1.0.0.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Format/SOSCapabilities-js.html b/doc/apidocs/files/OpenLayers/Format/SOSCapabilities-js.html
index e80a587..a7e6aa8 100644
--- a/doc/apidocs/files/OpenLayers/Format/SOSCapabilities-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SOSCapabilities-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html
index cd5fa2f..764097c 100644
--- a/doc/apidocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html b/doc/apidocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html
index d06fb23..82eabd5 100644
--- a/doc/apidocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest"></a>OpenLayers.<wbr>Format.<wbr>SOSGetFeatureOfInterest</h1><div class=CBody><p>Read and write SOS GetFeatureOfInterest.  This is used to get to the location of the features (stations).  The stations can have 1 or more sensors.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMo [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest"></a>OpenLayers.<wbr>Format.<wbr>SOSGetFeatureOfInterest</h1><div class=CBody><p>Read and write SOS GetFeatureOfInterest.  This is used to get to the location of the features (stations).  The stations can have 1 or more sensors.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.Constants"></a>Constants</h3></div></div>
 
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
 </div><!--Content-->
 
@@ -31,15 +31,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a GetFeatureOfInterest response and return an array of features</div></div><div clas [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a GetFeatureOfInterest response and return an array of features</div></div><div clas [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/SOSGetObservation-js.html b/doc/apidocs/files/OpenLayers/Format/SOSGetObservation-js.html
index 66ba20b..69cb5e1 100644
--- a/doc/apidocs/files/OpenLayers/Format/SOSGetObservation-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/SOSGetObservation-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetObservation"></a>OpenLayers.<wbr>Format.<wbr>SOSGetObservation</h1><div class=CBody><p>Read and write SOS GetObersation (to get the actual values from a sensor) version 1.0.0</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Fo [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetObservation"></a>OpenLayers.<wbr>Format.<wbr>SOSGetObservation</h1><div class=CBody><p>Read and write SOS GetObersation (to get the actual values from a sensor) version 1.0.0</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetObservation.Constants"></a>Constants</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><!--END_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/Text-js.html b/doc/apidocs/files/OpenLayers/Format/Text-js.html
index 443cef8..a592414 100644
--- a/doc/apidocs/files/OpenLayers/Format/Text-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/Text-js.html
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Text.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Text.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>text</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a li [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Text.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>text</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a li [...]
 
 </div><!--Content-->
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WCSGetCoverage-js.html b/doc/apidocs/files/OpenLayers/Format/WCSGetCoverage-js.html
index 3eb05a1..700b072 100644
--- a/doc/apidocs/files/OpenLayers/Format/WCSGetCoverage-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WCSGetCoverage-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WCSGetCoverage_version_1.1.0"></a>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.1.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div cla [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WCSGetCoverage_version_1.1.0"></a>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.1.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacin [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WCSGetCoverage_version_1.1.0.Constants"></a>Constants</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><!--END_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFS-js.html b/doc/apidocs/files/OpenLayers/Format/WFS-js.html
index e088754..924c2a2 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFS-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFS-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFS"></a>OpenLayers.<wbr>Format.WFS</h1><div class=CBody><p>Read/Write WFS.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="GML-js.html#OpenLayers.Format.GML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.GML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFS"></a>OpenLayers.<wbr>Format.WFS</h1><div class=CBody><p>Read/Write WFS.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="GML-js.html#OpenLayers.Format.GML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.GML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.wfsns"></a>wfsns</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.wfsns"></a>wfsns</h3><div class=CBody><p>{String}</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.Constructor"></a>Constructor</h3></div></div>
 
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities-js.html b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities-js.html
index 47d9a25..ec3dd19 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html
index fc97c39..601ce72 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_ND_ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div cla [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><div class=C [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><!--END_ND_T [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html
index 3f52fb1..725214f 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities/<wbr>v1_0_0</h1><div class=CBody><p>Read WFS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../WFSCapabilities-js.html#OpenLayers.Format.WFSCapabilities" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.WFSC [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities/<wbr>v1_0_0</h1><div class=CBody><p>Read WFS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="v1-js.html#OpenLayers.Format.WFSCapabilities.v1" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.WFSCapabilities.v [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.Constructor"></a>Constructor</h3></div></div>
 
@@ -23,15 +23,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read WFS Capabilities.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Abstract class not to be instantiated directly.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html
index 9daae42..f0f3416 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html b/doc/apidocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html
index e669722..f8acdfa 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CConstructor"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType"></a>OpenLayers.<wbr>Format.<wbr>WFSDescribeFeatureType</h1><div class=CBody><p>Create a new parser for WFS DescribeFeatureType responses.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose properties will [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType"></a>OpenLayers.<wbr>Format.<wbr>WFSDescribeFeatureType</h1><div class=CBody><p>Read WFS DescribeFeatureType response</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SB [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.OpenLayers.Format.WFSDescribeFeatureType"></a>OpenLayers.<wbr>Format.<wbr>WFSDescribeFeatureType</h3><div class=CBody><p>Create a new parser for WFS DescribeFeatureType responses.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose pro [...]
 
 </div><!--Content-->
 
@@ -19,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFST-js.html b/doc/apidocs/files/OpenLayers/Format/WFST-js.html
index a909eea..5d7d841 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFST-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFST-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFST/v1-js.html b/doc/apidocs/files/OpenLayers/Format/WFST/v1-js.html
index c7bcc2f..b679171 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFST/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFST/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h1><div class=CBody><p>Superclass for WFST parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=S [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h1><div class=CBody><p>Superclass for WFST parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.Properties"></a>Properties</h3></div></div>
 
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v1_0_0-js.html#OpenLayers.Format.WFST.v1_0_0" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.WFST.v1_0_0</a> or <a href="v1_1_0-js.html#OpenLayers.Format.WFST.v1_1_0 [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v1_0_0-js.html#OpenLayers.Format.WFST.v1_0_0" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.WFST.v1_0_0</a> or <a href="v1_1_0-js.html#OpenLayers.Format.WFST.v1_1_0 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.Functions"></a>Functions</h3></div></div>
 
@@ -35,15 +35,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the respo [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the respo [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFST/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/WFST/v1_0_0-js.html
index f4b050f..99bd4dc 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFST/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFST/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WFST/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/WFST/v1_1_0-js.html
index 22f5da2..3702b3b 100644
--- a/doc/apidocs/files/OpenLayers/Format/WFST/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WFST/v1_1_0-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WKT-js.html b/doc/apidocs/files/OpenLayers/Format/WKT-js.html
index 56a94ab..c47e2ba 100644
--- a/doc/apidocs/files/OpenLayers/Format/WKT-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WKT-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMC-js.html b/doc/apidocs/files/OpenLayers/Format/WMC-js.html
index eb88a9c..f63536d 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMC-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMC-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC"></a>OpenLayers.<wbr>Format.WMC</h1><div class=CBody><p>Read and write Web Map Context documents.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STit [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC"></a>OpenLayers.<wbr>Format.WMC</h1><div class=CBody><p>Read and write Web Map Context documents.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Context-js.html#OpenLayers.Format.Context" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.Context</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><di [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.Properties"></a>Properties</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Base class for both Format.WMC and Format.OWSContext</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMC/v1-js.html b/doc/apidocs/files/OpenLayers/Format/WMC/v1-js.html
index e6a0aa6..cab4169 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMC/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMC/v1-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h1><div class=CBody><p>Superclass for WMC version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h1><div class=CBody><p>Superclass for WMC version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspa [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../WMC-js.html#OpenLayers.Format.WMC" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.WMC</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border=0 c [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../WMC-js.html#OpenLayers.Format.WMC" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.WMC</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border=0 c [...]
 
 </div><!--Content-->
 
@@ -23,15 +23,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><div class=CToolTip id="tt2"><div class=CClass>Read and write Web Map Context documents.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Read and write Web Map Context documents.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMC/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/WMC/v1_0_0-js.html
index 366f144..bc7eaf6 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMC/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMC/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMC/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/WMC/v1_1_0-js.html
index d03a125..13881ba 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMC/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMC/v1_1_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities-js.html
index 114b58e..23ba7f4 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html
index d6be9c6..200daa9 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WMSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.  Creates the common parts for both WMS 1.1.X and WMS 1.3.X.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut= [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WMSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.  Creates the common parts for both WMS 1.1.X and WMS 1.3.X.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUM [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><div class=C [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><!--END_ND_T [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html
index 9aedf86..56b583f 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html
index cdc0f2b..0b8cf24 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html
index 11b3d7c..eaabc1e 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html
index f35ecfe..a7cd145 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html
index 94bbe2e..f71585d 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html
index be2a52c..00cfce9 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer-js.html b/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer-js.html
index 2dfe6de..68cb0d3 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([12, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([14, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html b/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html
index 41a0564..f4d1fc8 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([12, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([14, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html b/doc/apidocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html
index 6c10206..f710bf8 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Format.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>Class to read GetFeatureInfo responses from Web Mapping Services</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Format.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>Class to read GetFeatureInfo responses from Web Mapping Services</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
 
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
 </div><!--Content-->
 
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read WMS GetFeatureInfo data from a string, and return an array of features</div></div><di [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read WMS GetFeatureInfo data from a string, and return an array of features</div></div><di [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities-js.html b/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities-js.html
index 8872b45..6636d6a 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html
index 65a1683..ab11c9c 100644
--- a/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WPSCapabilities-js.html b/doc/apidocs/files/OpenLayers/Format/WPSCapabilities-js.html
index e020d5e..05219d4 100644
--- a/doc/apidocs/files/OpenLayers/Format/WPSCapabilities-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WPSCapabilities-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html
index be5beed..35b1d34 100644
--- a/doc/apidocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSCapabilities.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WPSCapabilities.<wbr>v1_0_0</h1><div class=CBody><p>Read WPS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_N [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSCapabilities.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WPSCapabilities.<wbr>v1_0_0</h1><div class=CBody><p>Read WPS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WPSCapabilities.v1_0_0.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return info about the WPS.</div></div><div class [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return info about the WPS.</div></div><!--END_ND [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WPSDescribeProcess-js.html b/doc/apidocs/files/OpenLayers/Format/WPSDescribeProcess-js.html
index 0fcf0ad..0ceb13f 100644
--- a/doc/apidocs/files/OpenLayers/Format/WPSDescribeProcess-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WPSDescribeProcess-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSDescribeProcess"></a>OpenLayers.<wbr>Format.<wbr>WPSDescribeProcess</h1><div class=CBody><p>Read WPS DescribeProcess responses.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSDescribeProcess"></a>OpenLayers.<wbr>Format.<wbr>WPSDescribeProcess</h1><div class=CBody><p>Read WPS DescribeProcess responses.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tab [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WPSDescribeProcess.Constants"></a>Constants</h3></div></div>
 
@@ -31,15 +31,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a WPS DescribeProcess and return an object with its information.</div></div><div cla [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a WPS DescribeProcess and return an object with its information.</div></div><!--END_ [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/WPSExecute-js.html b/doc/apidocs/files/OpenLayers/Format/WPSExecute-js.html
index e0b7636..0c27549 100644
--- a/doc/apidocs/files/OpenLayers/Format/WPSExecute-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/WPSExecute-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSExecute_version_1.0.0"></a>OpenLayers.<wbr>Format.<wbr>WPSExecute version 1.0.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSExecute_version_1.0.0"></a>OpenLayers.<wbr>Format.<wbr>WPSExecute version 1.0.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cell [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WPSExecute_version_1.0.0.Constants"></a>Constants</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><!--END_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/XLS-js.html b/doc/apidocs/files/OpenLayers/Format/XLS-js.html
index 53ca5ab..2334a71 100644
--- a/doc/apidocs/files/OpenLayers/Format/XLS-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/XLS-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/XLS/v1-js.html b/doc/apidocs/files/OpenLayers/Format/XLS/v1-js.html
index 41574b4..e09785e 100644
--- a/doc/apidocs/files/OpenLayers/Format/XLS/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/XLS/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h1><div class=CBody><p>Superclass for XLS version 1 parsers.  Only supports GeocodeRequest for now.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XML</a></li></ul><!- [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h1><div class=CBody><p>Superclass for XLS version 1 parsers.  Only supports GeocodeRequest for now.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</di [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.Properties"></a>Properties</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../XLS-js.html#OpenLayers.Format.XLS" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XLS</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border=0 c [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../XLS-js.html#OpenLayers.Format.XLS" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.XLS</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border=0 c [...]
 
 </div><!--Content-->
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read and write XML. </div></div><div class=CToolTip id="tt2"><div class=CClass>Read/Wite XLS (OpenLS). </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Read/Wite XLS (OpenLS). </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/XLS/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Format/XLS/v1_1_0-js.html
index 21e3db3..10d0fe1 100644
--- a/doc/apidocs/files/OpenLayers/Format/XLS/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/XLS/v1_1_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/XML-js.html b/doc/apidocs/files/OpenLayers/Format/XML-js.html
index 5e6881f..2738bfe 100644
--- a/doc/apidocs/files/OpenLayers/Format/XML-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/XML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML"></a>OpenLayers.<wbr>Format.XML</h1><div class=CBody><p>Read and write XML.   For cross-browser XML generation, use methods on an instance of the XML format class instead of on <code>document<end>.  The DOM creation and traversing methods exposed here all mimic the W3C XML DOM methods.   Create a new parser with the <a href="#OpenLayers.Format.XML. [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML"></a>OpenLayers.<wbr>Format.XML</h1><div class=CBody><p>Read and write XML.   For cross-browser XML generation, use methods on an instance of the XML format class instead of on <code>document<end>.  The DOM creation and traversing methods exposed here all mimic the W3C XML DOM methods.   Create a new parser with the <a href="#OpenLayers.Format.XML. [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.Constructor"></a>Constructor</h3></div></div>
 
@@ -35,8 +35,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.getChildValue"></a>getChildValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getChildValue: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>def</td><td class="PAfte [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.concatChildValues"></a>concatChildValues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>concatChildValues: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>def</td><td  [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.isSimpleContent"></a>isSimpleContent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isSimpleContent: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.contentType"></a>contentType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>contentType: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
@@ -59,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParame [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParame [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Format/XML/VersionedOGC-js.html b/doc/apidocs/files/OpenLayers/Format/XML/VersionedOGC-js.html
index d36e147..a298dfd 100644
--- a/doc/apidocs/files/OpenLayers/Format/XML/VersionedOGC-js.html
+++ b/doc/apidocs/files/OpenLayers/Format/XML/VersionedOGC-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC"></a>OpenLayers.<wbr>Format.<wbr>XML.<wbr>VersionedOGC</h1><div class=CBody><p>Base class for versioned formats, i.e. a format which supports multiple versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Fo [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC"></a>OpenLayers.<wbr>Format.<wbr>XML.<wbr>VersionedOGC</h1><div class=CBody><p>Base class for versioned formats, i.e. a format which supports multiple versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC.Properties"></a>Properties</h3></div></div>
 
@@ -41,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Write a documen [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Write a documen [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry-js.html b/doc/apidocs/files/OpenLayers/Geometry-js.html
index d2abeee..dca82ae 100644
--- a/doc/apidocs/files/OpenLayers/Geometry-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry"></a>OpenLayers.<wbr>Geometry</h1><div class=CBody><p>A Geometry is a description of a geographic object.   Create an instance of this class with the <a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Geometry</a> constructor.   This is a base class, typica [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry"></a>OpenLayers.<wbr>Geometry</h1><div class=CBody><p>A Geometry is a description of a geographic object.   Create an instance of this class with the <a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Geometry</a> constructor.   This is a base class, typica [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Constructor"></a>Constructor</h3></div></div>
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/Collection-js.html b/doc/apidocs/files/OpenLayers/Geometry/Collection-js.html
index 5e95aad..9a4b04b 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/Collection-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/Collection-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry.Collection"></a>OpenLayers.<wbr>Geometry.<wbr>Collection</h1><div class=CBody><p>A Collection is exactly what it sounds like: A collection of different Geometries.  These are stored in the local parameter <a href="#OpenLayers.Geometry.Collection.components" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">components</a> [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry.Collection"></a>OpenLayers.<wbr>Geometry.<wbr>Collection</h1><div class=CBody><p>A Collection is exactly what it sounds like: A collection of different Geometries.  These are stored in the local parameter <a href="#OpenLayers.Geometry.Collection.components" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">components</a> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.Properties"></a>Properties</h3></div></div>
 
@@ -47,11 +47,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.rotate"></a>rotate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>rotate: function(</td><td class="PParameter  prettyprint " nowrap>angle,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfte [...]
 
@@ -65,15 +65,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A Geometry is a description of a geographic object. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote>Destroy this geometry.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prett [...]
+<div class=CToolTip id="tt1"><div class=CClass>A Geometry is a description of a geographic object. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote>Destroy this geometry.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prett [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/Curve-js.html b/doc/apidocs/files/OpenLayers/Geometry/Curve-js.html
index 0902547..a10fd9f 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/Curve-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/Curve-js.html
@@ -29,15 +29,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote>{Float} The length of the curve</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeodesicLeng [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote>{Float} The length of the curve</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeodesicLeng [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/LineString-js.html b/doc/apidocs/files/OpenLayers/Geometry/LineString-js.html
index 1d26164..86748a0 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/LineString-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/LineString-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/LinearRing-js.html b/doc/apidocs/files/OpenLayers/Geometry/LinearRing-js.html
index b9cdad4..51e3b99 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/LinearRing-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/LinearRing-js.html
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.addComponent"></a>addComponent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.addComponent"></a>addComponent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td cla [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.removeComponent"></a>removeComponent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeComponent: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.rotate"></a>rotate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>rotate: function(</td><td class="PParameter  prettyprint " nowrap>angle,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfte [...]
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds a p [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds a p [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/MultiLineString-js.html b/doc/apidocs/files/OpenLayers/Geometry/MultiLineString-js.html
index 6168379..0b00861 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/MultiLineString-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/MultiLineString-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/MultiPoint-js.html b/doc/apidocs/files/OpenLayers/Geometry/MultiPoint-js.html
index 5a57d80..c6a8e10 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/MultiPoint-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/MultiPoint-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/MultiPolygon-js.html b/doc/apidocs/files/OpenLayers/Geometry/MultiPolygon-js.html
index 0032404..572dcb5 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/MultiPolygon-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/MultiPolygon-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/Point-js.html b/doc/apidocs/files/OpenLayers/Geometry/Point-js.html
index 2dadbe2..35aaba2 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/Point-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/Point-js.html
@@ -37,7 +37,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.getCentroid"></a>getCentroid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCentroid: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Geometry.Point.OpenLayers.Geometry.Point" class=LConstructor id=link18 onMouseOver="ShowTip(event, 'tt2', 'link18')" onMouseOut="HideTip( [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td class= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.intersects"></a>intersects</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>intersects: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
 
@@ -51,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>{OpenLayers.Geometry.Point} An exact clone of this OpenLayers.Geometry.Point</div></div><d [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>{OpenLayers.Geometry.Point} An exact clone of this OpenLayers.Geometry.Point</div></div><d [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/Polygon-js.html b/doc/apidocs/files/OpenLayers/Geometry/Polygon-js.html
index c059ea3..4953611 100644
--- a/doc/apidocs/files/OpenLayers/Geometry/Polygon-js.html
+++ b/doc/apidocs/files/OpenLayers/Geometry/Polygon-js.html
@@ -35,15 +35,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote>Calculated by subtracting the areas of the internal holes from the area of the outer hole.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td clas [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote>Calculated by subtracting the areas of the internal holes from the area of the outer hole.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td clas [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Geometry/Rectangle-js.html b/doc/apidocs/files/OpenLayers/Geometry/Rectangle-js.html
deleted file mode 100644
index 9458a97..0000000
--- a/doc/apidocs/files/OpenLayers/Geometry/Rectangle-js.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Geometry.Rectangle - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h1><div class=CBody><p>This class is <b>not supported</b>, and probably isn’t what you’re looking for.  Instead, most users probably want something like:</p><blockquote><pre class="prettyprint">var poly = new OpenLayers.Bounds(0,0,10,10).toGeometry();</pre></blockquote><p>This will create a rectangular Po [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>points</td><td class=CDLDescription>{Array(<a href="Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut=" [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The length of the geometry</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The area of the geometry</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote>{Float} The length of the geometry</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote>{Float} The area of the geometry</div></ [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Handler-js.html b/doc/apidocs/files/OpenLayers/Handler-js.html
index f114b48..036f978 100644
--- a/doc/apidocs/files/OpenLayers/Handler-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler-js.html
@@ -50,10 +50,10 @@ handler.keyMask = OpenLayers.Handler.MOD_SHIFT |
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Box-js.html b/doc/apidocs/files/OpenLayers/Handler/Box-js.html
index 4fdd8b2..1c66769 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Box-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Box-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Click-js.html b/doc/apidocs/files/OpenLayers/Handler/Click-js.html
index b2ce2e7..9166c65 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Click-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Click-js.html
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Drag-js.html b/doc/apidocs/files/OpenLayers/Handler/Drag-js.html
index a1d724a..3c91ec5 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Drag-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Drag-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Feature-js.html b/doc/apidocs/files/OpenLayers/Handler/Feature-js.html
index 4d9dd55..49bced1 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Feature-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Feature-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h1><div class=CBody><p>Handler to respond to mouse events related to a drawn feature.   Callbacks with the following keys will be notified of the following events associated with features: click, clickout, over, out, and dblclick.</p><p>This handler stops event propagation for mousedown and mouseup if those browser events  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h1><div class=CBody><p>Handler to respond to mouse events related to a drawn feature.   Callbacks with the following keys will be notified of the following events associated with features: click, clickout, over, out, and dblclick.</p><p>This handler stops event propagation for mousedown and mouseup if those browser events  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')"> [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')"> [...]
 
 </div><!--Content-->
 
@@ -23,15 +23,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Base class to construct a higher-level handler for event sequences. </div></div><div class=CToolTip id="tt2"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Hover-js.html b/doc/apidocs/files/OpenLayers/Handler/Hover-js.html
index fe8fd8d..4f1e5d1 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Hover-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Hover-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Keyboard-js.html b/doc/apidocs/files/OpenLayers/Handler/Keyboard-js.html
index af9cc9b..89cde64 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Keyboard-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Keyboard-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/MouseWheel-js.html b/doc/apidocs/files/OpenLayers/Handler/MouseWheel-js.html
index c5eaf17..2ed8f89 100644
--- a/doc/apidocs/files/OpenLayers/Handler/MouseWheel-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/MouseWheel-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Path-js.html b/doc/apidocs/files/OpenLayers/Handler/Path-js.html
index d4879a5..fc9eeda 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Path-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Path-js.html
@@ -15,7 +15,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.maxVertices"></a>maxVertices</h3><div class=CBody><p>{Number} The maximum number of vertices which can be drawn by this handler.  When the number of vertices reaches maxVertices, the geometry is automatically finalized.  This property doesn’t apply if freehand is set.  Default is null.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.maxVertices"></a>maxVertices</h3><div class=CBody><p>{Number} The maximum number of vertices which can be drawn by this handler.  When the number of vertices reaches maxVertices, the geometry is automatically finalized.  Default is null.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.Constructor"></a>Constructor</h3></div></div>
 
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Pinch-js.html b/doc/apidocs/files/OpenLayers/Handler/Pinch-js.html
index 9e27623..e963ba1 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Pinch-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Pinch-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Point-js.html b/doc/apidocs/files/OpenLayers/Handler/Point-js.html
index d7f4796..dfde29c 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Point-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Point-js.html
@@ -11,12 +11,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Point"></a>OpenLayers.<wbr>Handler.<wbr>Point</h1><div class=CBody><p>Handler to draw a point on the map.  Point is displayed on activation, moves on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’, ‘cancel’, and ‘modify’.  The modify callback is called with each change in the sketch and will [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Point"></a>OpenLayers.<wbr>Handler.<wbr>Point</h1><div class=CBody><p>Handler to draw a point on the map.  Point is displayed on activation, moves on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’, ‘cancel’, and ‘modify’.  The modify callback is called with each change in the sketch and will [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.multi"></a>multi</h3><div class=CBody><p>{Boolean} Cast features to multi-part geometries before passing to the layer.   Default is false.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.citeCompliant"></a>citeCompliant</h3><div class=CBody><p>{Boolean} If set to true, coordinates of features drawn in a map extent crossing the date line won’t exceed the world bounds.  Default is false.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.persist"></a>persist</h3><div class=CBody><p>{Boolean} Leave the feature rendered until destroyFeature is called.  Default is false.   If set to true, the feature remains rendered until destroyFeature is called, typically by deactivating the handler or starting another drawing.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.stopDown"></a>stopDown</h3><div class=CBody><p>{Boolean} Stop event propagation on mousedown.  Must be false to allow “pan while drawing”.  Defaults to false.</p></div></div></div>
@@ -41,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/Polygon-js.html b/doc/apidocs/files/OpenLayers/Handler/Polygon-js.html
index 8f38547..ce6717d 100644
--- a/doc/apidocs/files/OpenLayers/Handler/Polygon-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/Polygon-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Handler/RegularPolygon-js.html b/doc/apidocs/files/OpenLayers/Handler/RegularPolygon-js.html
index 4f73cca..3e8c4da 100644
--- a/doc/apidocs/files/OpenLayers/Handler/RegularPolygon-js.html
+++ b/doc/apidocs/files/OpenLayers/Handler/RegularPolygon-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.RegularPolygon"></a>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</h1><div class=CBody><p>Handler to draw a regular polygon on the map.   Polygon is displayed on mouse down, moves or is modified on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’ and ‘cancel’.   Create a new instance with the <a href="#Open [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.RegularPolygon"></a>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</h1><div class=CBody><p>Handler to draw a regular polygon on the map.   Polygon is displayed on mouse down, moves or is modified on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’ and ‘cancel’.   Create a new instance with the <a href="#Open [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.Properties"></a>Properties</h3></div></div>
 
@@ -27,6 +27,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.irregular"></a>irregular</h3><div class=CBody><p>{Boolean} Draw an irregular polygon instead of a regular polygon.  Default is false.   If true, the initial mouse down will represent one corner of the polygon bounds and with each mouse movement, the polygon will be stretched so the opposite corner of its bounds follows the mouse position.   This property takes precedence ov [...]
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.citeCompliant"></a>citeCompliant</h3><div class=CBody><p>{Boolean} If set to true, coordinates of features drawn in a map extent crossing the date line won’t exceed the world bounds.  Default is false.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.OpenLayers.Handler.RegularPolygon"></a>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</h3><div class=CBody><p>Create a new regular polygon handler.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link8 onMouseO [...]
@@ -35,9 +37,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.setOptions"></a>setOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOptions: function (</td><td class="PParameter  prettyprint " nowrap>newOptions</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Turn on the handler.</p><h4 class=CHeading>Return</h4><p>{Boolean} The handler was successfully activated</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Turn on the handler.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The handler was successfully activated</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Turn off the handler.</p><h4 class=CHeading>Return</h4><p>{Boolean} The handler was successfully deactivated</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Turn off the handler.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The handler was successfully deactivated</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.cancel"></a>cancel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote><p>Finish the geometry and call the “cancel” callback.</p></div></div></div>
 
@@ -49,10 +51,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Icon-js.html b/doc/apidocs/files/OpenLayers/Icon-js.html
index 94ef853..5b1dd8c 100644
--- a/doc/apidocs/files/OpenLayers/Icon-js.html
+++ b/doc/apidocs/files/OpenLayers/Icon-js.html
@@ -15,7 +15,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.OpenLayers.Icon"></a>OpenLayers.Icon</h3><div class=CBody><p>Creates an icon, which is an image tag in a div.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>size</td><td class=CDLDescription>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link3 onMouseOver="ShowTip(ev [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.OpenLayers.Icon"></a>OpenLayers.Icon</h3><div class=CBody><p>Creates an icon, which is an image tag in a div.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>size</td><td class=CDLDescription>{<OpenLayers.Size>|Object} An OpenLayers.Size or an object with a ‘w’ and &ls [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.Functions"></a>Functions</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">isDrawn: function()</td></tr></table></blockquote>{Boolean} Whether or not the icon is drawn.</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Marker are a combination of a OpenLayers.LonLat and an OpenLayers.Icon.</div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of this class represent  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">isDrawn: function()</td></tr></table></blockquote>{Boolean} Whether or not the icon is drawn.</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Marker are a combination of a OpenLayers.LonLat and an OpenLayers.Icon.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Kinetic-js.html b/doc/apidocs/files/OpenLayers/Kinetic-js.html
index a8c7ab9..368c8d8 100644
--- a/doc/apidocs/files/OpenLayers/Kinetic-js.html
+++ b/doc/apidocs/files/OpenLayers/Kinetic-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang-js.html b/doc/apidocs/files/OpenLayers/Lang-js.html
index f9f1304..0d537ff 100644
--- a/doc/apidocs/files/OpenLayers/Lang-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang-js.html
@@ -19,9 +19,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.getCode"></a>getCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCode: function()</td></tr></table></blockquote><p>Get the current language code.</p><h4 class=CHeading>Returns</h4><p>The current language code.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.getCode"></a>getCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCode: function()</td></tr></table></blockquote><p>Get the current language code.</p><h4 class=CHeading>Returns</h4><p>{String} The current language code.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.setCode"></a>setCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCode: function(</td><td class="PParameter  prettyprint " nowrap>code</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set the l [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.setCode"></a>setCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCode: function(</td><td class="PParameter  prettyprint " nowrap>code</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set the l [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.translate"></a>translate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>translate: function(</td><td class="PParameter  prettyprint " nowrap>key,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  pr [...]
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/ar-js.html b/doc/apidocs/files/OpenLayers/Lang/ar-js.html
index 69db88b..a13578f 100644
--- a/doc/apidocs/files/OpenLayers/Lang/ar-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/ar-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/be-tarask-js.html b/doc/apidocs/files/OpenLayers/Lang/be-tarask-js.html
index 781d522..6f07f58 100644
--- a/doc/apidocs/files/OpenLayers/Lang/be-tarask-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/be-tarask-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/bg-js.html b/doc/apidocs/files/OpenLayers/Lang/bg-js.html
index 523c343..4f865f6 100644
--- a/doc/apidocs/files/OpenLayers/Lang/bg-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/bg-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/br-js.html b/doc/apidocs/files/OpenLayers/Lang/br-js.html
index 69f4ff0..aa390ce 100644
--- a/doc/apidocs/files/OpenLayers/Lang/br-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/br-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/ca-js.html b/doc/apidocs/files/OpenLayers/Lang/ca-js.html
index b27f398..60fc0fb 100644
--- a/doc/apidocs/files/OpenLayers/Lang/ca-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/ca-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/cs-CZ-js.html b/doc/apidocs/files/OpenLayers/Lang/cs-CZ-js.html
index 064a956..7c45c81 100644
--- a/doc/apidocs/files/OpenLayers/Lang/cs-CZ-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/cs-CZ-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/da-DK-js.html b/doc/apidocs/files/OpenLayers/Lang/da-DK-js.html
index c17162b..5895ae6 100644
--- a/doc/apidocs/files/OpenLayers/Lang/da-DK-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/da-DK-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/de-js.html b/doc/apidocs/files/OpenLayers/Lang/de-js.html
index 7d093b8..7a68401 100644
--- a/doc/apidocs/files/OpenLayers/Lang/de-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/de-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/el-js.html b/doc/apidocs/files/OpenLayers/Lang/el-js.html
index ae07348..16b8059 100644
--- a/doc/apidocs/files/OpenLayers/Lang/el-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/el-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/en-CA-js.html b/doc/apidocs/files/OpenLayers/Lang/en-CA-js.html
index 1b44a81..118bbf5 100644
--- a/doc/apidocs/files/OpenLayers/Lang/en-CA-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/en-CA-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/en-js.html b/doc/apidocs/files/OpenLayers/Lang/en-js.html
index 8de9d98..a1c4080 100644
--- a/doc/apidocs/files/OpenLayers/Lang/en-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/en-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/es-js.html b/doc/apidocs/files/OpenLayers/Lang/es-js.html
index 9f0df6e..1efb1d4 100644
--- a/doc/apidocs/files/OpenLayers/Lang/es-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/es-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/fi-js.html b/doc/apidocs/files/OpenLayers/Lang/fi-js.html
index 9560671..985f13e 100644
--- a/doc/apidocs/files/OpenLayers/Lang/fi-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/fi-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/fr-js.html b/doc/apidocs/files/OpenLayers/Lang/fr-js.html
index 05444a9..fbaaf52 100644
--- a/doc/apidocs/files/OpenLayers/Lang/fr-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/fr-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/fur-js.html b/doc/apidocs/files/OpenLayers/Lang/fur-js.html
index 3a47ab8..3db16aa 100644
--- a/doc/apidocs/files/OpenLayers/Lang/fur-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/fur-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/gl-js.html b/doc/apidocs/files/OpenLayers/Lang/gl-js.html
index 77eb8ab..a58fca1 100644
--- a/doc/apidocs/files/OpenLayers/Lang/gl-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/gl-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/gsw-js.html b/doc/apidocs/files/OpenLayers/Lang/gsw-js.html
index e1a2ad3..99370ea 100644
--- a/doc/apidocs/files/OpenLayers/Lang/gsw-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/gsw-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/hr-js.html b/doc/apidocs/files/OpenLayers/Lang/hr-js.html
index 5094721..8ad88f4 100644
--- a/doc/apidocs/files/OpenLayers/Lang/hr-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/hr-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/hsb-js.html b/doc/apidocs/files/OpenLayers/Lang/hsb-js.html
index f7033be..fc1e3f3 100644
--- a/doc/apidocs/files/OpenLayers/Lang/hsb-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/hsb-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/hu-js.html b/doc/apidocs/files/OpenLayers/Lang/hu-js.html
index ffe5e62..3e6f143 100644
--- a/doc/apidocs/files/OpenLayers/Lang/hu-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/hu-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/ia-js.html b/doc/apidocs/files/OpenLayers/Lang/ia-js.html
index dfe7b82..370d147 100644
--- a/doc/apidocs/files/OpenLayers/Lang/ia-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/ia-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/id-js.html b/doc/apidocs/files/OpenLayers/Lang/id-js.html
index bdb75cf..d5637ca 100644
--- a/doc/apidocs/files/OpenLayers/Lang/id-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/id-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/io-js.html b/doc/apidocs/files/OpenLayers/Lang/io-js.html
index 081bf9b..79102e6 100644
--- a/doc/apidocs/files/OpenLayers/Lang/io-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/io-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/is-js.html b/doc/apidocs/files/OpenLayers/Lang/is-js.html
index 07e416d..88afb23 100644
--- a/doc/apidocs/files/OpenLayers/Lang/is-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/is-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/it-js.html b/doc/apidocs/files/OpenLayers/Lang/it-js.html
index 5cf5c14..ff49bab 100644
--- a/doc/apidocs/files/OpenLayers/Lang/it-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/it-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/ja-js.html b/doc/apidocs/files/OpenLayers/Lang/ja-js.html
index 7062e06..480e5b8 100644
--- a/doc/apidocs/files/OpenLayers/Lang/ja-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/ja-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/km-js.html b/doc/apidocs/files/OpenLayers/Lang/km-js.html
index b909720..1efefd7 100644
--- a/doc/apidocs/files/OpenLayers/Lang/km-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/km-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/ksh-js.html b/doc/apidocs/files/OpenLayers/Lang/ksh-js.html
index 178a45b..b8a8e08 100644
--- a/doc/apidocs/files/OpenLayers/Lang/ksh-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/ksh-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/lt-js.html b/doc/apidocs/files/OpenLayers/Lang/lt-js.html
index 4b41f36..eb6137d 100644
--- a/doc/apidocs/files/OpenLayers/Lang/lt-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/lt-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/nb-js.html b/doc/apidocs/files/OpenLayers/Lang/nb-js.html
index 59f8983..1545356 100644
--- a/doc/apidocs/files/OpenLayers/Lang/nb-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/nb-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/nds-js.html b/doc/apidocs/files/OpenLayers/Lang/nds-js.html
index 96c9607..6967c96 100644
--- a/doc/apidocs/files/OpenLayers/Lang/nds-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/nds-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/nl-js.html b/doc/apidocs/files/OpenLayers/Lang/nl-js.html
index 67bc79c..4589abf 100644
--- a/doc/apidocs/files/OpenLayers/Lang/nl-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/nl-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/nn-js.html b/doc/apidocs/files/OpenLayers/Lang/nn-js.html
index aeedd38..696e518 100644
--- a/doc/apidocs/files/OpenLayers/Lang/nn-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/nn-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/oc-js.html b/doc/apidocs/files/OpenLayers/Lang/oc-js.html
index fbc74de..41280be 100644
--- a/doc/apidocs/files/OpenLayers/Lang/oc-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/oc-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/pl-js.html b/doc/apidocs/files/OpenLayers/Lang/pl-js.html
new file mode 100644
index 0000000..b539a88
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Lang/pl-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Lang[“pl”] - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();pretty [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Lang[pl]"></a>OpenLayers.<wbr>Lang[“pl”]</h1><div class=CBody><p>Dictionary for Polish.   Keys for entries are used in calls to <a href="../Lang-js.html#OpenLayers.Lang.translate" class=LFunction id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Lang.translate</a>.   Entry bodies are normal strings or strings formatted fo [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>translate: function(</td><td class="PParameter  prettyprint " nowrap>key,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Looks up a  [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Lang/pt-BR-js.html b/doc/apidocs/files/OpenLayers/Lang/pt-BR-js.html
index a5b176f..c8eefdf 100644
--- a/doc/apidocs/files/OpenLayers/Lang/pt-BR-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/pt-BR-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/pt-js.html b/doc/apidocs/files/OpenLayers/Lang/pt-js.html
index c2bcb26..4ca538d 100644
--- a/doc/apidocs/files/OpenLayers/Lang/pt-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/pt-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/ru-js.html b/doc/apidocs/files/OpenLayers/Lang/ru-js.html
index 2a5a1c1..53bcd95 100644
--- a/doc/apidocs/files/OpenLayers/Lang/ru-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/ru-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/sk-js.html b/doc/apidocs/files/OpenLayers/Lang/sk-js.html
index ab827fc..c927e63 100644
--- a/doc/apidocs/files/OpenLayers/Lang/sk-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/sk-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/sv-SE-js.html b/doc/apidocs/files/OpenLayers/Lang/sv-SE-js.html
index a1d303e..d143789 100644
--- a/doc/apidocs/files/OpenLayers/Lang/sv-SE-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/sv-SE-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/te-js.html b/doc/apidocs/files/OpenLayers/Lang/te-js.html
index 72812f5..128cf6f 100644
--- a/doc/apidocs/files/OpenLayers/Lang/te-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/te-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/vi-js.html b/doc/apidocs/files/OpenLayers/Lang/vi-js.html
index a9a8f97..3f53881 100644
--- a/doc/apidocs/files/OpenLayers/Lang/vi-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/vi-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/zh-CN-js.html b/doc/apidocs/files/OpenLayers/Lang/zh-CN-js.html
index 789be35..177b4c0 100644
--- a/doc/apidocs/files/OpenLayers/Lang/zh-CN-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/zh-CN-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Lang/zh-TW-js.html b/doc/apidocs/files/OpenLayers/Lang/zh-TW-js.html
index aac35b2..d440bcb 100644
--- a/doc/apidocs/files/OpenLayers/Lang/zh-TW-js.html
+++ b/doc/apidocs/files/OpenLayers/Lang/zh-TW-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer-js.html b/doc/apidocs/files/OpenLayers/Layer-js.html
index 68e603a..5241db3 100644
--- a/doc/apidocs/files/OpenLayers/Layer-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer"></a>OpenLayers.<wbr>Layer</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Layer" >OpenLayers.<wbr>Layer</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer"></a>OpenLayers.<wbr>Layer</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Layer" >OpenLayers.<wbr>Layer</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Properties"></a>Properties</h3></div></div>
 
@@ -21,19 +21,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.div"></a>div</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.opacity"></a>opacity</h3><div class=CBody><p>{Float} The layer’s opacity.  Float number between 0.0 and 1.0.  Default is 1.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.alwaysInRange"></a>alwaysInRange</h3><div class=CBody><p>{Boolean} If a layer’s display should not be scale-based, this should be set to true.  This will cause the layer, as an overlay, to always be ‘active’, by always returning true from the calculateInRange() function.</p><p>If not explicitly specified for a layer, its value will be determined on startup in initResolutions() based [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactly what  [...]
-
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.RESOLUTION_PROPERTIES"></a>RESOLUTION_PROPERTIES</h3><div class=CBody><p>{Array} The properties that are used for calculating resolutions information.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of  [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.map"></a>map</h3><div class=CBody><p>{<a href="Map-js.html#OpenLayers.Map" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt1', 'link29')" onMouseOut="HideTip('tt1')">OpenLayers.Map</a>} This variable is set when the layer is added to the map, via the accessor function setMap().</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.map"></a>map</h3><div class=CBody><p>{<a href="Map-js.html#OpenLayers.Map" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt1', 'link27')" onMouseOut="HideTip('tt1')">OpenLayers.Map</a>} This variable is set when the layer is added to the map, via the accessor function setMap().</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} Whether or not the layer is a base layer.  This should be set individually by all subclasses.  Default is false</p></div></div></div>
 
@@ -41,25 +41,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.visibility"></a>visibility</h3><div class=CBody><p>{Boolean} The layer should be displayed in the map.   Default is true.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.attribution"></a>attribution</h3><div class=CBody><p>{String} Attribution string, displayed when an <a href="Control/Attribution-js.html#OpenLayers.Control.Attribution" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt2', 'link30')" onMouseOut="HideTip('tt2')">OpenLayers.Control.Attribution</a> has been added to the map.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.attribution"></a>attribution</h3><div class=CBody><p>{String} Attribution string, displayed when an <a href="Control/Attribution-js.html#OpenLayers.Control.Attribution" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt2', 'link28')" onMouseOut="HideTip('tt2')">OpenLayers.Control.Attribution</a> has been added to the map.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link31 onMouseOver="ShowTip(event, 'tt3', 'link31')" onMouseOut="HideTip('tt3')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt3', 'link29')" onMouseOut="HideTip('tt3')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.gutter"></a>gutter</h3><div class=CBody><p>{Integer} Determines the width (in pixels) of the gutter around image tiles to ignore.   By setting this property to a non-zero value, images will be requested that are wider and taller than the tile size by a value of 2 x gutter.   This allows artifacts of rendering at tile edges to be ignored.   Set a gutter value that is equal to half the size o [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.projection"></a>projection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt4', 'link32')" onMouseOut="HideTip('tt4')">OpenLayers.Projection</a>} or {<a href="BaseTypes-js.html#OpenLayers.String" class=LClass id=link33 onMouseOver="ShowTip(event, 'tt5', 'link33')" onMouseOut="HideTip('tt5')">String</a>} Set in the layer optio [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.projection"></a>projection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt4', 'link30')" onMouseOut="HideTip('tt4')">OpenLayers.Projection</a>} or {<a href="BaseTypes-js.html#OpenLayers.String" class=LClass id=link31 onMouseOver="ShowTip(event, 'tt5', 'link31')" onMouseOut="HideTip('tt5')">String</a>} Specifies the projecti [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.units"></a>units</h3><div class=CBody><p>{String} The layer map units.   Defaults to ‘degrees’.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.units"></a>units</h3><div class=CBody><p>{String} The layer map units.   Defaults to null.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.  Normally taken from the projection.  Only required if both map and layers do not define a projection, or if they define a projection whi [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.scales"></a>scales</h3><div class=CBody><p>{Array}  An array of map scales in descending order.   The values in the array correspond to the map scale denominator.   Note that these values only make sense if the display (monitor) resolution of the client is correctly guessed by whomever is configuring the application.   In addition, the units property must also be set.  Use <a href="#Op [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.scales"></a>scales</h3><div class=CBody><p>{Array}  An array of map scales in descending order.   The values in the array correspond to the map scale denominator.   Note that these values only make sense if the display (monitor) resolution of the client is correctly guessed by whomever is configuring the application.   In addition, the units property must also be set.  Use <a href="#Op [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.resolutions"></a>resolutions</h3><div class=CBody><p>{Array} A list of map resolutions (map units per pixel) in descending order.   If this is not set in the layer constructor, it will be set based on other resolution related properties (maxExtent, maxResolution, maxScale, etc.).</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link36 onMouseOver="ShowTip(event, 'tt6', 'link36')" onMouseOut="HideTip('tt6')">OpenLayers.Bounds</a>}  The center of these bounds will not stray outside of the viewport extent during panning.   In addition, if <a href="#OpenLayers.Layer.displayOutsideMaxExtent" class=LProperty id=l [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The maximum extent for the layer.   Defaults to null.</p><p>The center of these bounds will not stray outside of the viewport extent during panning.   In addition, if <a href="#OpenLayers.Layer.displayOutsideMaxExten [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.minExtent"></a>minExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link38 onMouseOver="ShowTip(event, 'tt6', 'link38')" onMouseOut="HideTip('tt6')">OpenLayers.Bounds</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.minExtent"></a>minExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The minimum extent for the layer.   Defaults to null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Default max is 360 deg / 256 px, which corresponds to zoom level 0 on gmaps.   Specify a different value in the layer options if you are not using a geographic projection and displaying the whole world.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Default max is 360 deg / 256 px, which corresponds to zoom level 0 on gmaps.   Specify a different value in the layer options if you are not using the default <a href="Map-js.html#OpenLayers.Map.tileSize" class=LProperty id=link35 onMouseOver="ShowTip(event, 'tt29', 'link35')" onMouseOut="HideTip('tt29')">OpenLayers.Map.tileSize</a> and [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.minResolution"></a>minResolution</h3><div class=CBody><p>{Float}</p></div></div></div>
 
@@ -71,9 +71,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.displayOutsideMaxExtent"></a>displayOutsideMaxExtent</h3><div class=CBody><p>{Boolean} Request map tiles that are completely outside of the max extent for this layer.  Defaults to false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} #487 for more info.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.transitionEffect"></a>transitionEffect</h3><div class=CBody><p>{String} The transition effect to use when the map is panned or zoomed.</p><h4 class=CHeading>There are currently two supported values</h4><ul><li><b>null</b> No transition effect (the default).</li><li><b>resize</b>  Existing tiles are resized on zoom to provide a visual effect of the zoom having taken place immediately.   As the new til [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Wraps the world at the international dateline, so the map can be panned infinitely in longitudinal direction.  Only use this on the base layer, and only if the layer’s maxExtent equals the world bounds.  #487 for more info.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Constructor"></a>Constructor</h3></div></div>
 
@@ -89,11 +87,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redraw: function()</td></tr></table></blockquote><p>Redraws the layer.   Returns true if the layer was redrawn, false if not.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The layer was redrawn.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Jus [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Jus [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getImageSize"></a>getImageSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getImageSize: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getImageSize"></a>getImageSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getImageSize: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getVisibility"></a>getVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getVisibility: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} The layer should be displayed (if in range).</p></div></div></div>
 
@@ -107,19 +105,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getResolution"></a>getResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolution: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The currently selected resolution of the map, taken from the resolutions array, indexed by current zoom level.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link43 onMouseOver="ShowTip(event, 'tt6', 'link43')" onMouseOut="HideTip('tt6')">OpenLayers.Bounds</a>}  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link40 onMouseOver="ShowTip(event, 'tt20', 'link40')" onMouseOut="HideTip('tt20')">OpenLayers.Bounds</a> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZoomForResolution"></a>getZoomForResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " now [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
 
 </div><!--Content-->
 
@@ -127,15 +125,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt2"><div class=CClass>The attribution control adds attribution from layers to the map display. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowra [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt2"><div class=CClass>The attribution control adds attribution from layers to the map display. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowra [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html b/doc/apidocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html
index 7ab1403..fd7b713 100644
--- a/doc/apidocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
                                    "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export",
                                    {
                                      layers: "0,1,2"
-                                   });</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the ArcGIS server REST service</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An object with key/value pairs representing the opt [...]
+                                   });</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the ArcGIS server REST service</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An object with key/value pairs representing the opt [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.Functions"></a>Functions</h3></div></div>
 
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/ArcGISCache-js.html b/doc/apidocs/files/OpenLayers/Layer/ArcGISCache-js.html
index f3bd134..2b4bd55 100644
--- a/doc/apidocs/files/OpenLayers/Layer/ArcGISCache-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/ArcGISCache-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGISCache.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head> [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGISCache.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/ArcIMS-js.html b/doc/apidocs/files/OpenLayers/Layer/ArcIMS-js.html
index a9d618d..77a48f1 100644
--- a/doc/apidocs/files/OpenLayers/Layer/ArcIMS-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/ArcIMS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.ArcIMS"></a>OpenLayers.<wbr>Layer.<wbr>ArcIMS</h1><div class=CBody><p>Instances of OpenLayers.Layer.ArcIMS are used to display data from ESRI ArcIMS Mapping Services.  Create a new ArcIMS layer with the <a href="#OpenLayers.Layer.ArcIMS.OpenLayers.Layer.ArcIMS" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Lay [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.ArcIMS"></a>OpenLayers.<wbr>Layer.<wbr>ArcIMS</h1><div class=CBody><p>Instances of OpenLayers.Layer.ArcIMS are used to display data from ESRI ArcIMS Mapping Services.  Create a new ArcIMS layer with the <a href="#OpenLayers.Layer.ArcIMS.OpenLayers.Layer.ArcIMS" class=LConstructor id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Lay [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.Constants"></a>Constants</h3></div></div>
 
@@ -19,8 +19,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} Size for tiles.   Default is 512x512.</p></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.featureCoordSys"></a>featureCoordSys</h3><div class=CBody><p>{String} Code for feature coordinate system.   Default is “4326”.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.filterCoordSys"></a>filterCoordSys</h3><div class=CBody><p>{String} Code for filter coordinate system.   Default is “4326”.</p></div></div></div>
@@ -57,15 +55,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CConstructor>Create a new ArcIMS layer object.</div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for layers that use a lattice of tiles. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CConstructor>Create a new ArcIMS layer object.</div></div><div class=CToolTip id="tt2"><div class=CClass>Base class for layers that use a lattice of tiles. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Bing-js.html b/doc/apidocs/files/OpenLayers/Layer/Bing-js.html
index 81d105b..5813aac 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Bing-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Bing-js.html
@@ -11,21 +11,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Bing"></a>OpenLayers.<wbr>Layer.Bing</h1><div class=CBody><p>Bing layer using direct tile access as provided by Bing Maps REST Services.  See <a href="http://msdn.microsoft.com/en-us/library/ff701713.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701713.aspx</a> for more information.  Note: Terms of Service compliant use requires t [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Bing"></a>OpenLayers.<wbr>Layer.Bing</h1><div class=CBody><p>Bing layer using direct tile access as provided by Bing Maps REST Services.  See <a href="http://msdn.microsoft.com/en-us/library/ff701713.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701713.aspx</a> for more information.  Note: Terms of Service compliant use requires t [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.type"></a>type</h3><div class=CBody><p>{String} The layer identifier.   Any non-birdseye imageryType from <a href="http://msdn.microsoft.com/en-us/library/ff701716.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701716.aspx</a> can be used.   Default is “Road”.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.culture"></a>culture</h3><div class=CBody><p>{String} The culture identifier.   See <a href="http://msdn.microsoft.com/en-us/library/ff701709.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701709.aspx</a> for the definition and the possible values.   Default is “en-US”.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.metadataParams"></a>metadataParams</h3><div class=CBody><p>{Object} Optional url parameters for the Get Imagery Metadata request as described here: <a href="http://msdn.microsoft.com/en-us/library/ff701716.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701716.aspx</a></p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a> instances created by this Layer.  Default is</p><blockquote><pre class="prettyprint">{crossOriginKeyword: 'anonymous'}</pre></blockquote></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.OpenLayers.Layer.Bing"></a>OpenLayers.<wbr>Layer.Bing</h3><div class=CBody><p>Create a new Bing layer.</p><h4 class=CHeading>Example</h4><blockquote><pre class="prettyprint">var road = new OpenLayers.Layer.Bing({
     name: "My Bing Aerial Layer",
     type: "Aerial",
     key: "my-api-key-here",
-});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>key</td><td class=CDLDescription>{String} Bing Maps API key for your application.  Get one a [...]
+});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>key</td><td class=CDLDescription>{String} Bing Maps API key for your application.  Get one  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.Functions"></a>Functions</h3></div></div>
 
@@ -37,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Boxes-js.html b/doc/apidocs/files/OpenLayers/Layer/Boxes-js.html
index 3b765a1..a037c4c 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Boxes-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Boxes-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/EventPane-js.html b/doc/apidocs/files/OpenLayers/Layer/EventPane-js.html
index 6f11d7a..34fe66d 100644
--- a/doc/apidocs/files/OpenLayers/Layer/EventPane-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/EventPane-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.EventPane"></a>OpenLayers.<wbr>Layer.<wbr>EventPane</h1><div class=CBody><p>Base class for 3rd party layers.   Create a new event pane layer with the <a href="#OpenLayers.Layer.EventPane.OpenLayers.Layer.EventPane" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.EventPane</a> constructor.</p><h4 class=CHea [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.EventPane"></a>OpenLayers.<wbr>Layer.<wbr>EventPane</h1><div class=CBody><p>Base class for 3rd party layers, providing a DOM element which isolates the 3rd-party layer from mouse events.  Only used by Google layers.</p><p>Automatically instantiated by the Google constructor, and not usually instantiated directly.</p><p>Create a new event pane layer with the <a href="#OpenLay [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.EventPane.Properties"></a>Properties</h3></div></div>
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/FixedZoomLevels-js.html b/doc/apidocs/files/OpenLayers/Layer/FixedZoomLevels-js.html
index 9a7e1b0..56b9712 100644
--- a/doc/apidocs/files/OpenLayers/Layer/FixedZoomLevels-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/FixedZoomLevels-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/GML-js.html b/doc/apidocs/files/OpenLayers/Layer/GML-js.html
deleted file mode 100644
index b1e682c..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/GML-js.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.GML - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><sc [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h1><div class=CBody><p>Create a vector layer by parsing a GML file.  The GML file is passed in as a parameter.  <b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with Protocol.HTTP and Strategy.Fixed.  Provide the protocol with a format parameter to get the parser you want for your data.</ [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Format</a>} The format you want the data to be parsed with.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h3><div class=CBody><p>Load and parse a single file on the web, according to the format provided via the ‘format’ option, defaulting to GML.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CD [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.setVisibility"></a>setVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visibility,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>noEvent</td><td cla [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visibility,</td></tr><tr><td></td><td class="PParameter  prettyprint " [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/GeoRSS-js.html b/doc/apidocs/files/OpenLayers/Layer/GeoRSS-js.html
index c87769b..6b6edc5 100644
--- a/doc/apidocs/files/OpenLayers/Layer/GeoRSS-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/GeoRSS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.GeoRSS"></a>OpenLayers.<wbr>Layer.<wbr>GeoRSS</h1><div class=CBody><p>Add GeoRSS Point features to your map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Markers-js.html#OpenLayers.Layer.Markers" class=LClass >OpenLayers.Layer.Markers</a></li><li><a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a></li></ul><!--START_ND_SUMMARY--><div class=S [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.GeoRSS"></a>OpenLayers.<wbr>Layer.<wbr>GeoRSS</h1><div class=CBody><p>Add GeoRSS Point features to your map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Markers-js.html#OpenLayers.Layer.Markers" class=LClass >OpenLayers.Layer.Markers</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GeoRSS.Properties"></a>Properties</h3></div></div>
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Google-js.html b/doc/apidocs/files/OpenLayers/Layer/Google-js.html
index ca377e4..c62bc42 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Google-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Google-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Google"></a>OpenLayers.<wbr>Layer.<wbr>Google</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="SphericalMercator-js.html#OpenLayers.Layer.SphericalMercator" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">OpenLayers.Layer.SphericalMercator</a></li><li><a href="EventPane-js.html#OpenLayers.Layer.EventPane [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Google"></a>OpenLayers.<wbr>Layer.<wbr>Google</h1><div class=CBody><p>Provides a wrapper for Google’s Maps API Normally the Terms of Use for this API do not allow wrapping, but Google have provided written consent to OpenLayers for this - see email in <a href="http://osgeo-org.1560.n6.nabble.com/Google-Maps-API-Terms-of-Use-changes-tp4910013p4911981.html" class=LURL target= [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.Constants"></a>Constants</h3></div></div>
 
@@ -37,9 +37,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setVisibility"></a>setVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up this layer.</p></div></div></div>
 
@@ -63,13 +63,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.OpenLayers.Layer.Google.v2"></a>OpenLayers.<wbr>Layer.<wbr>Google.v2</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v2.</p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.OpenLayers.Layer.Google.v2"></a>OpenLayers.<wbr>Layer.<wbr>Google.v2</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v2.</p><p>This API has been deprecated by Google.  Developers are encouraged to migrate to v3 of the API; support for this is provided by <a href="Google/v3-js.html#OpenLayers.Layer.Google.v3" class=LConstant id=link30 onMouseOver="ShowTip(e [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.getMapObjectBoundsFromOLBounds"></a>getMapObjectBoundsFromOLBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectBoundsFromOLBounds: function(</td><td class="PParameter  prettyprint " nowrap>olBounds</td><td class="PAfterParameters  p [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.getMapObjectBoundsFromOLBounds"></a>getMapObjectBoundsFromOLBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectBoundsFromOLBounds: function(</td><td class="PParameter  prettyprint " nowrap>olBounds</td><td class="PAfterParameters  p [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom< [...]
 
@@ -91,15 +91,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the visibility flag for the layer and hide/show & redraw accordingly.  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the visibility flag for the layer and hide/show & redraw accordingly.  [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Google/v3-js.html b/doc/apidocs/files/OpenLayers/Layer/Google/v3-js.html
index 3c37ddf..4c3bc58 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Google/v3-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Google/v3-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google/v3.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></scri [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google/v3.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head>< [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,22 +11,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="v3.js"></a>v3.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#v3.js" >v3.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td class=SDescription></td></tr><tr  [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="v3.js"></a>v3.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#v3.js" >v3.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td class=SDescription></td></tr><tr  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.v3"></a>OpenLayers.<wbr>Layer.<wbr>Google.v3</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v3.  Note that this layer configures the google.maps.map object with the “disableDefaultUI” option set to true.  Using UI controls that the Google Maps API provides is not supported by the OpenLayers API.</p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.v3"></a>OpenLayers.<wbr>Layer.<wbr>Google.v3</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v3.</p><p>To use this layer, you must include the GMaps v3 API in your html.</p><p>Because OpenLayers needs to control mouse events, it isolates the GMaps mapObject (the DOM elements provided by Google) using the EventPane.  However, because the Terms of Use requir [...]
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="DEFAULTS"></a>DEFAULTS</h3><div class=CBody><p>{Object} It is not recommended to change the properties set here.  Note that Google.v3 layers only work when sphericalMercator is set to true.</p><blockquote><pre class="prettyprint">{
-    maxExtent: new OpenLayers.Bounds(
-        -128 * 156543.03390625,
-        -128 * 156543.03390625,
-        128 * 156543.03390625,
-        128 * 156543.03390625
-    ),
     sphericalMercator: true,
-    maxResolution: 156543.03390625,
-    units: "m",
     projection: "EPSG:900913"
 }</pre></blockquote></div></div></div>
 
@@ -60,10 +52,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Grid-js.html b/doc/apidocs/files/OpenLayers/Layer/Grid-js.html
index dd26b47..f813a7d 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Grid-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Grid-js.html
@@ -11,15 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Grid"></a>OpenLayers.<wbr>Layer.Grid</h1><div class=CBody><p>Base class for layers that use a lattice of tiles.   Create a new grid layer with the <a href="#OpenLayers.Layer.Grid.OpenLayers.Layer.Grid" class=LConstructor id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Layer.Grid</a> constructor.</p><h4 class=CHeading>Inherits  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Grid"></a>OpenLayers.<wbr>Layer.Grid</h1><div class=CBody><p>Base class for layers that use a lattice of tiles.   Create a new grid layer with the <a href="#OpenLayers.Layer.Grid.OpenLayers.Layer.Grid" class=LConstructor id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Layer.Grid</a> constructor.</p><h4 class=CHeading>Inherits from [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt1', 'link10')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt2', 'link12')" onMouseOut="HideTip('tt2')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this locati [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt2', 'link11')" onMouseOut="HideTip('tt2')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this locati [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../Tile-js.html#OpenLayers.Tile" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt3', 'link14')" onMouseOut="HideTip('tt3')">OpenLayers.Tile</a> instances created by this Layer, if supported by the tile class.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a> instances created by this Layer, if supported by the tile class.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileClass"></a>tileClass</h3><div class=CBody><p>{<a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a>} The tile class to use for this layer.  Defaults is OpenLayers.Tile.Image.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.singleTile"></a>singleTile</h3><div class=CBody><p>{Boolean} Moves the layer into single-tile mode, meaning that one tile will be loaded.  The tile’s size will be determined by the ‘ratio’ property.  When the tile is dragged such that it does not cover the entire viewport, it is reloaded.</p></div></div></div>
 
@@ -27,9 +29,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.buffer"></a>buffer</h3><div class=CBody><p>{Integer} Used only when in gridded mode, this specifies the number of extra rows and colums of tiles on each side which will surround the minimum grid tiles to cover the map.  For very slow loading layers, a larger value may increase performance somewhat when dragging, but will increase bandwidth use significantly.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.transitionEffect"></a>transitionEffect</h3><div class=CBody><p>{String} The transition effect to use when the map is zoomed.  Two posible values:</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>null</td><td class=CDLDescription>No transition effect (the default).</td></tr><tr><td class=CDLEntry>”resize”</td><td class=CDLDescription>Existin [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.numLoadingTiles"></a>numLoadingTiles</h3><div class=CBody><p>{Integer} How many tiles are still loading?</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileLoadingDelay"></a>tileLoadingDelay</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Integer}</td><td class=CDLDescription>Number of milliseconds before we shift and load tiles.  Default is 100.</td></tr></table></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileLoadingDelay"></a>tileLoadingDelay</h3><div class=CBody><p>{Integer} Number of milliseconds before we shift and load tiles when panning.  Ignored if <OpenLayers.Animation.isNative> is true.  Default is 85.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeBackBufferDelay"></a>removeBackBufferDelay</h3><div class=CBody><p>{Number} Delay for removing the backbuffer when all tiles have finished loading.  Can be set to 0 when no css opacity transitions for the olTileImage class are used.  Default is 0 for <a href="#OpenLayers.Layer.Grid.singleTile" class=LProperty id=link13 onMouseOver="ShowTip(event, 'tt11', 'link13')" onMouseOut="HideTip [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.className"></a>className</h3><div class=CBody><p>{String} Name of the class added to the layer div.  If not set in the options passed to the constructor then className defaults to “olLayerGridSingleTile” for single tile layers (see <a href="#OpenLayers.Layer.Grid.singleTile" class=LProperty id=link15 onMouseOver="ShowTip(event, 'tt11', 'link15')" onMouseOut="HideTip('tt11')">singleTi [...]
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+ }</pre></blockquote><p>To animate tile displaying for any grid layer the following CSS rule can be used:</p><blockquote><pre class="prettyprint">.olTileImage {
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+}</pre></blockquote><p>In that case, to avoid flash effects, <a href="#OpenLayers.Layer.Grid.removeBackBufferDelay" class=LProperty id=link16 onMouseOver="ShowTip(event, 'tt13', 'link16')" onMouseOut="HideTip('tt13')">removeBackBufferDelay</a> should not be zero.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.Constructor"></a>Constructor</h3></div></div>
 
@@ -39,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Deconstruct the layer and clear the grid.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTilesBounds"></a>getTilesBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTilesBounds: function()</td></tr></table></blockquote><p>Return the bounds of the tile grid.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1 [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTilesBounds"></a>getTilesBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTilesBounds: function()</td></tr></table></blockquote><p>Return the bounds of the tile grid.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt1 [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.addTile"></a>addTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.addTile"></a>addTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileBounds"></a>getTileBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTileBounds: function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileBounds"></a>getTileBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTileBounds: function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
 </div><!--Content-->
 
@@ -55,15 +73,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CClass>This is a class designed to designate a single tile, however it is explicitly designed to do relatively little. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpad [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Deconstruct the layer and clear the grid.</div></div><div class=CToo [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/HTTPRequest-js.html b/doc/apidocs/files/OpenLayers/Layer/HTTPRequest-js.html
index a61b261..8f9dab0 100644
--- a/doc/apidocs/files/OpenLayers/Layer/HTTPRequest-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/HTTPRequest-js.html
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Image-js.html b/doc/apidocs/files/OpenLayers/Layer/Image-js.html
index 264f3b0..63d55a6 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Image-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Image-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Image"></a>OpenLayers.<wbr>Layer.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Layer.Image are used to display data from a web accessible image as a map layer.   Create a new image layer with the <a href="#OpenLayers.Layer.Image.OpenLayers.Layer.Image" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Image"></a>OpenLayers.<wbr>Layer.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Layer.Image are used to display data from a web accessible image as a map layer.   Create a new image layer with the <a href="#OpenLayers.Layer.Image.OpenLayers.Layer.Image" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.Constructor"></a>Constructor</h3></div></div>
 
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/KaMap-js.html b/doc/apidocs/files/OpenLayers/Layer/KaMap-js.html
index ad0e9df..9d6deaf 100644
--- a/doc/apidocs/files/OpenLayers/Layer/KaMap-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/KaMap-js.html
@@ -11,16 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.KaMap"></a>OpenLayers.<wbr>Layer.<wbr>KaMap</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Grid</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tabl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.KaMap"></a>OpenLayers.<wbr>Layer.<wbr>KaMap</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Grid</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tabl [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} KaMap Layer is always a base layer</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.units"></a>units</h3><div class=CBody><p>{?}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.resolution"></a>resolution</h3><div class=CBody><p>{Float}</p></div></div></div>
-
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.DEFAULT_PARAMS"></a>DEFAULT_PARAMS</h3><div class=CBody><p>{Object} parameters set by default.  The default parameters set the format via the ‘i’ parameter to ‘jpeg’.</p></div></div></div>
@@ -41,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/KaMapCache-js.html b/doc/apidocs/files/OpenLayers/Layer/KaMapCache-js.html
index 4af3eed..28f431e 100644
--- a/doc/apidocs/files/OpenLayers/Layer/KaMapCache-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/KaMapCache-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/MapGuide-js.html b/doc/apidocs/files/OpenLayers/Layer/MapGuide-js.html
index b97afe2..6c8eaa7 100644
--- a/doc/apidocs/files/OpenLayers/Layer/MapGuide-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/MapGuide-js.html
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/MapServer-js.html b/doc/apidocs/files/OpenLayers/Layer/MapServer-js.html
index 05c6bcc..3576b1f 100644
--- a/doc/apidocs/files/OpenLayers/Layer/MapServer-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/MapServer-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/MapServer/Untiled-js.html b/doc/apidocs/files/OpenLayers/Layer/MapServer/Untiled-js.html
deleted file mode 100644
index a55642a..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/MapServer/Untiled-js.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.MapServer.Untiled - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOn [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h1><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.MapServer and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../MapServer-js.html#OpenLayers.Layer.MapServer" class=LClass id=link1 onMouseOv [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>par [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.MapServer are used to display data from a MapServer CGI instance.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/Markers-js.html b/doc/apidocs/files/OpenLayers/Layer/Markers-js.html
index 73988b4..7e5a62f 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Markers-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Markers-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.addMarker"></a>addMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addMarker: function(</td><td class="PParameter  prettyprint " nowrap>marker</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/MultiMap-js.html b/doc/apidocs/files/OpenLayers/Layer/MultiMap-js.html
deleted file mode 100644
index 9efe973..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/MultiMap-js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.MultiMap - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint(); [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.MultiMap"></a>OpenLayers.<wbr>Layer.<wbr>MultiMap</h1><div class=CBody><p>Note that MultiMap does not fully support the sphericalMercator option.  See Ticket #953 for more details.  <b>Deprecated</b>.   Use OpenLayers.Layer.Bing instead.  See #3063</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="EventPane-js.html#OpenLayers.Layer.EventPane" class=LCla [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 1</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 17</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.type"></a>type</h3><div class=CBody><p>{?}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.OpenLayers.Layer.MultiMap"></a>OpenLayers.<wbr>Layer.<wbr>MultiMap</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoo [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class=" [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class= [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParamete [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParamete [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint "  [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote>{String} String with information on why layer is broken, how to get it working.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PB [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/OSM-js.html b/doc/apidocs/files/OpenLayers/Layer/OSM-js.html
new file mode 100644
index 0000000..00afc7d
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Layer/OSM-js.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.OSM - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><sc [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.OSM"></a>OpenLayers.<wbr>Layer.OSM</h1><div class=CBody><p>This layer allows accessing OpenStreetMap tiles.  By default the OpenStreetMap hosted tile.openstreetmap.org Mapnik tileset is used.  If you wish to use a different layer instead, you need to provide a different URL to the constructor.  Here’s an example for using OpenCycleMap:</p><blockquote><pre cla [...]
+  ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"]);</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="XYZ-js.html#OpenLayers.Layer.XYZ" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.XYZ</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.name"></a>name</h3><div class=CBody><p>{String} The layer name.  Defaults to “OpenStreetMap” if the first argument to the constructor is null or undefined.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.url"></a>url</h3><div class=CBody><p>{String} The tileset URL scheme.  Defaults to</p><blockquote><pre>http://[a|b|c].tile.openstreetmap.org/${z}/${x}/${y}.png</pre></blockquote><p>(the official OSM tileset) if the second argument to the constructor is null or undefined.  To use another tileset you can have something like this:</p><blockquote><pre class="prettyprint">new OpenLayers.Layer.OSM [...]
+  ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"]);</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a> instances created by this Layer.  Default is</p><blockquote><pre class="prettyprint">{crossOriginKeyword: 'anonymous'}</pre></blockquote><p>When using OSM tilesets other than the default ones, it may be necessary to s [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.OpenLayers.Layer.OSM"></a>OpenLayers.<wbr>Layer.OSM</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} The layer name.</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} The tileset URL scheme.</td></tr><tr><td class=CDLEntry>options</td><td [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>The XYZ class is designed to make it easier for people who have tiles arranged by a standard XYZ grid.</div></div><div class=CToolTip id="tt2"><div class=CProperty>{Integer} Used only when in gridded mode, this specifies the number of extra rows and colums of tiles on each side which will surround the minimum grid tiles to cover the map. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/PointGrid-js.html b/doc/apidocs/files/OpenLayers/Layer/PointGrid-js.html
index 9472779..0683b08 100644
--- a/doc/apidocs/files/OpenLayers/Layer/PointGrid-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/PointGrid-js.html
@@ -11,43 +11,43 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h1><div class=CBody><p>A point grid layer dynamically generates a regularly spaced grid of point features.   This is a specialty layer for cases where an application needs a regular grid of points.   It can be used, for example, in an editing environment to snap to a grid.</p><p>Create a new vector layer with the <a h [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h1><div class=CBody><p>A point grid layer dynamically generates a regularly spaced grid of point features.   This is a specialty layer for cases where an application needs a regular grid of points.   It can be used, for example, in an editing environment to snap to a grid.</p><p>Create a new vector layer with the <a h [...]
 var points = new OpenLayers.Layer.PointGrid({dx: 10, dy: 10});
 
 // create a grid with different x/y spacing rotated 15 degrees clockwise.
-var points = new OpenLayers.Layer.PointGrid({dx: 5, dy: 10, rotation: 15});</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')">OpenLayers.Layer.Vector</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain">< [...]
+var points = new OpenLayers.Layer.PointGrid({dx: 5, dy: 10, rotation: 15});</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')">OpenLayers.Layer.Vector</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain">< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dx"></a>dx</h3><div class=CBody><p>{Number} Point grid spacing in the x-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link16 onMouseOver="ShowTip(event, 'tt5', 'link16')" onMouseOut="HideTip('tt5')">setSpacing</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dx"></a>dx</h3><div class=CBody><p>{Number} Point grid spacing in the x-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link17 onMouseOver="ShowTip(event, 'tt6', 'link17')" onMouseOut="HideTip('tt6')">setSpacing</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dy"></a>dy</h3><div class=CBody><p>{Number} Point grid spacing in the y-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link17 onMouseOver="ShowTip(event, 'tt5', 'link17')" onMouseOut="HideTip('tt5')">setSpacing</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dy"></a>dy</h3><div class=CBody><p>{Number} Point grid spacing in the y-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link18 onMouseOver="ShowTip(event, 'tt6', 'link18')" onMouseOut="HideTip('tt6')">setSpacing</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.ratio"></a>ratio</h3><div class=CBody><p>{Number} Ratio of the desired grid size to the map viewport size.  Default is 1.5.   Larger ratios mean the grid is recalculated less often while panning.   The <a href="#OpenLayers.Layer.PointGrid.maxFeatures" class=LProperty id=link18 onMouseOver="ShowTip(event, 'tt4', 'link18')" onMouseOut="HideTip('tt4')">maxFeatures</a> setting has pre [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.ratio"></a>ratio</h3><div class=CBody><p>{Number} Ratio of the desired grid size to the map viewport size.  Default is 1.5.   Larger ratios mean the grid is recalculated less often while panning.   The <a href="#OpenLayers.Layer.PointGrid.maxFeatures" class=LProperty id=link19 onMouseOver="ShowTip(event, 'tt5', 'link19')" onMouseOut="HideTip('tt5')">maxFeatures</a> setting has pre [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Number} The maximum number of points to generate in the grid.   Default is 250.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setMaxFeatures" class=LFunction id=link20 onMouseOver="ShowTip(event, 'tt3', 'link20')" onMouseOut="HideTip('tt3')">setMaxFeatures</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Number} The maximum number of points to generate in the grid.   Default is 250.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setMaxFeatures" class=LFunction id=link21 onMouseOver="ShowTip(event, 'tt4', 'link21')" onMouseOut="HideTip('tt4')">setMaxFeatures</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.rotation"></a>rotation</h3><div class=CBody><p>{Number} Grid rotation (in degrees clockwise from the positive x-axis).  Default is 0.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setRotation" class=LFunction id=link21 onMouseOver="ShowTip(event, 'tt11', 'link21')" onMouseOut="HideTip('tt11')">setRotation</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.rotation"></a>rotation</h3><div class=CBody><p>{Number} Grid rotation (in degrees clockwise from the positive x-axis).  Default is 0.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setRotation" class=LFunction id=link22 onMouseOver="ShowTip(event, 'tt12', 'link22')" onMouseOut="HideTip('tt12')">setRotation</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.origin"></a>origin</h3><div class=CBody><p>{OpenLayers.LonLat} Grid origin.   The grid lattice will be aligned with the origin.   If not set at construction, the center of the map’s maximum extent is used.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setOrigin" class=LFunction id=link22 onMouseOver="ShowTip(event, 'tt8', 'link22')" onMouseOut="HideTip('tt [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.origin"></a>origin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt1', 'link23')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} Grid origin.   The grid lattice will be aligned with the origin.   If not set at construction, the center of the map’s maximum extent is used.   Read-only.&n [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h3><div class=CBody><p>Creates a new point grid layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing all configuration properties for the layer.   The <a href="#OpenLayers.L [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h3><div class=CBody><p>Creates a new point grid layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing all configuration properties for the layer.   The <a href="#OpenLayers.L [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRatio"></a>setRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRatio: function(</td><td class="PParameter  prettyprint " nowrap>ratio</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRatio"></a>setRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRatio: function(</td><td class="PParameter  prettyprint " nowrap>ratio</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setMaxFeatures"></a>setMaxFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMaxFeatures: function(</td><td class="PParameter  prettyprint " nowrap>maxFeatures</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setMaxFeatures"></a>setMaxFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMaxFeatures: function(</td><td class="PParameter  prettyprint " nowrap>maxFeatures</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setSpacing"></a>setSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSpacing: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParame [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setSpacing"></a>setSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSpacing: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParame [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setOrigin"></a>setOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOrigin: function(</td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setOrigin"></a>setOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOrigin: function(</td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.getOrigin"></a>getOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getOrigin: function()</td></tr></table></blockquote><p>Get the grid <a href="#OpenLayers.Layer.PointGrid.origin" class=LProperty id=link33 onMouseOver="ShowTip(event, 'tt9', 'link33')" onMouseOut="HideTip('tt9')">origin</a> property.</p><h4 class=CHe [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.getOrigin"></a>getOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getOrigin: function()</td></tr></table></blockquote><p>Get the grid <a href="#OpenLayers.Layer.PointGrid.origin" class=LProperty id=link35 onMouseOver="ShowTip(event, 'tt10', 'link35')" onMouseOut="HideTip('tt10')">origin</a> property.</p><h4 class=C [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRotation"></a>setRotation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRotation: function(</td><td class="PParameter  prettyprint " nowrap>rotation</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRotation"></a>setRotation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRotation: function(</td><td class="PParameter  prettyprint " nowrap>rotation</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
 </div><!--Content-->
 
@@ -55,15 +55,15 @@ var points = new OpenLayers.Layer.PointGrid({dx: 5, dy: 10, rotation: 15});</pre
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRatio: function(</td><td class="PParameter  prettyprint " nowrap>ratio</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the grid ratio property and update the grid. </div></div><div class=CToolTip id=" [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRatio: function(</td><td class="PParameter  prettyprint " nowrap>ratio</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/PointTrack-js.html b/doc/apidocs/files/OpenLayers/Layer/PointTrack-js.html
index 0d50ee9..5bc6197 100644
--- a/doc/apidocs/files/OpenLayers/Layer/PointTrack-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/PointTrack-js.html
@@ -11,7 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointTrack"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack</h1><div class=CBody><p>Vector layer to display ordered point features as a line, creating one LineString feature for each pair of two points.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip(' [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointTrack"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack</h1><div class=CBody><p>Vector layer to display ordered point features as a line, creating one LineString feature for each pair of two points.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip(' [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.dataFrom"></a>dataFrom</h3><div class=CBody><p>{<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE" class=LConstant id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.PointTrack.TARGET_NODE</a>} or {<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE" class=LConstant id=link10 onMouseOver="ShowT [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.styleFrom"></a>styleFrom</h3><div class=CBody><p>{<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE" class=LConstant id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.PointTrack.TARGET_NODE</a>} or {<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE" class=LConstant id=link12 onMouseOver="S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Constructor"></a>Constructor</h3></div></div>
 
@@ -19,13 +25,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.addNodes"></a>addNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addNodes: function(</td><td class="PParameter  prettyprint " nowrap>pointFeatures,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.addNodes"></a>addNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addNodes: function(</td><td class="PParameter  prettyprint " nowrap>pointFeatures,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>SOURCE_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <OpenLayers.Layer.PointTrack.styleFrom></p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>SOURCE_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <a href="#OpenLayers.Layer.PointTrack.styleFrom" class=LProperty id=link14 onMouseOver="ShowTip(event, 'tt4', 'link1 [...]
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>TARGET_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <OpenLayers.Layer.PointTrack.styleFrom></p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>TARGET_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <a href="#OpenLayers.Layer.PointTrack.styleFrom" class=LProperty id=link15 onMouseOver="ShowTip(event, 'tt4', 'link1 [...]
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>dataFrom</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Object} with the following keys</td><td class=CDLDescription><b>deprecated</b></td></tr></table><ul><li>SOURCE_NODE: take data/attributes from the source node of the line</li><li>TARGET_NODE: [...]
 
@@ -35,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addNodes: function(</td><td class="PParameter  prettyprint " nowrap>pointFeatures,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Ad [...]
+<div class=CToolTip id="tt1"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt2"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding= [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/SphericalMercator-js.html b/doc/apidocs/files/OpenLayers/Layer/SphericalMercator-js.html
index 0d217df..f634d5d 100644
--- a/doc/apidocs/files/OpenLayers/Layer/SphericalMercator-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/SphericalMercator-js.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.SphericalMercator"></a>OpenLayers.<wbr>Layer.<wbr>SphericalMercator</h1><div class=CBody><p>A mixin for layers that wraps up the pieces neccesary to have a coordinate conversion for working with commercial APIs which use a spherical mercator projection.   Using this layer as a base layer, additional layers can be used as overlays if they are in the same projection.</p><p>A l [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.SphericalMercator"></a>OpenLayers.<wbr>Layer.<wbr>SphericalMercator</h1><div class=CBody><p>A mixin for layers that wraps up the pieces neccesary to have a coordinate conversion for working with commercial APIs which use a spherical mercator projection.   Using this layer as a base layer, additional layers can be used as overlays if they are in the same projection.</p><p>A l [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.forwardMercator"></a>forwardMercator</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>forwardMercator: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>lat</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.forwardMercator"></a>forwardMercator</h3><div class=CBody><p>Given a lon,lat in EPSG:4326, return a point in Spherical Mercator.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lon</td><td class=CDLDescription>{float}</td></tr><tr><td class=CDLEntry>lat</td><td class=CDLDescription>{float}</td></tr></table><h4 [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.inverseMercator"></a>inverseMercator</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>inverseMercator: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.inverseMercator"></a>inverseMercator</h3><div class=CBody><p>Given a x,y in Spherical Mercator, return a point in EPSG:4326.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>x</td><td class=CDLDescription>{float} A map x in Spherical Mercator.</td></tr><tr><td class=CDLEntry>y</td><td class=CDLDescription>{floa [...]
 
 </div><!--Content-->
 
@@ -25,15 +25,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>forwardMercator: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>lat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Given a l [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/TMS-js.html b/doc/apidocs/files/OpenLayers/Layer/TMS-js.html
index cfd2c2b..10c1899 100644
--- a/doc/apidocs/files/OpenLayers/Layer/TMS-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/TMS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h1><div class=CBody><p>Create a layer for accessing tiles from services that conform with the Tile Map Service Specification (<a href="http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification" class=LURL target=_top>http://wiki.osgeo.org<wbr>/wiki<wbr>/Tile_Map_Service_Specification</a>).</p><h4 class=CHeading>Example</h4><blockquote><pre clas [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h1><div class=CBody><p>Create a layer for accessing tiles from services that conform with the Tile Map Service Specification (<a href="http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification" class=LURL target=_top>http://wiki.osgeo.org<wbr>/wiki<wbr>/Tile_Map_Service_Specification</a>).</p><h4 class=CHeading>Example</h4><blockquote><pre clas [...]
     "My Layer", // name for display in LayerSwitcher
     "http://tilecache.osgeo.org/wms-c/Basic.py/", // service endpoint
     {layername: "basic", type: "png"} // required properties
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} Make this layer a base layer.   Default is true.   Set false to use the layer as an overlay.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this location) [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this location) [...]
     "My Layer",
     "http://tilecache.osgeo.org/wms-c/Basic.py/",
     {
@@ -38,13 +38,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     }
 );</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differs from the server.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.TMS.serverResolutions" class=LProperty id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">serv [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more zoom levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more zoom levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} Title to be displayed in a <a href="../Control/LayerSwitcher-js.html#OpenLayers.Control.LayerSwitcher" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt9',  [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} Title to be displayed in a <a href="../Control/LayerSwitcher-js.html#OpenLayers.Control.LayerSwitcher" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt9',  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.Functions"></a>Functions</h3></div></div>
 
@@ -56,15 +56,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Text-js.html b/doc/apidocs/files/OpenLayers/Layer/Text-js.html
index 6922101..f00edc8 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Text-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Text-js.html
@@ -34,10 +34,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/TileCache-js.html b/doc/apidocs/files/OpenLayers/Layer/TileCache-js.html
index d8eeb07..5f1f424 100644
--- a/doc/apidocs/files/OpenLayers/Layer/TileCache-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/TileCache-js.html
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.format"></a>format</h3><div class=CBody><p>{String} Mime type of the images returned.   Default is image/png.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differs from the server.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.TileCache.serverResolutions" class=LProperty id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip( [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><table  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><table  [...]
 
 </div><!--Content-->
 
@@ -35,15 +35,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CConstructor>Create a new read only T [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CConstructor>Create a new read only T [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/UTFGrid-js.html b/doc/apidocs/files/OpenLayers/Layer/UTFGrid-js.html
new file mode 100644
index 0000000..604d303
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Layer/UTFGrid-js.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.UTFGrid - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();" [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.UTFGrid"></a>OpenLayers.<wbr>Layer.<wbr>UTFGrid</h1><div class=CBody><p>This Layer reads from UTFGrid tiled data sources.   Since UTFGrids are essentially JSON-based ASCII art with attached attributes, they are not visibly rendered.   In order to use them in the map, you must add a <a href="../Control/UTFGrid-js.html#OpenLayers.Control.UTFGrid" class=LClass id=link4 onM [...]
+    url: "/tiles/world_utfgrid/${z}/${x}/${y}.json",
+    utfgridResolution: 4,
+    displayInLayerSwitcher: false
+);
+map.addLayer(world_utfgrid);
+
+var control = new OpenLayers.Control.UTFGrid({
+    layers: [world_utfgrid],
+    handlerMode: 'move',
+    callback: function(dataLookup) {
+        // do something with returned data
+    }
+})</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="XYZ-js.html#OpenLayers.Layer.XYZ" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Layer.XYZ</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Layer.UTFGrid" >OpenLayers.<wbr>Layer.<wbr>UTFGri [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>Default is true, as this is designed to be a base tile source.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.projection"></a>projection</h3><div class=CBody><p>{<a href="../Projection-js.html#OpenLayers.Projection" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Projection</a>} Source projection for the UTFGrids.   Default is “EPSG:900913”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.url"></a>url</h3><div class=CBody><p>{String} URL tempate for UTFGrid tiles.   Include x, y, and z parameters.  E.g.  “/tiles/${z}/${x}/${y}.json”</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.utfgridResolution"></a>utfgridResolution</h3><div class=CBody><p>{Number} Ratio of the pixel width to the width of a UTFGrid data point.   If an entry in the grid represents a 4x4 block of pixels, the utfgridResolution would be 4.   Default is 2 (specified in <a href="../Tile/UTFGrid-js.html#OpenLayers.Tile.UTFGrid" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMou [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.OpenLayers.Layer.UTFGrid"></a>OpenLayers.<wbr>Layer.<wbr>UTFGrid</h3><div class=CBody><p>Create a new UTFGrid layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration propertie [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.getFeatureInfo"></a>getFeatureInfo</h3><div class=CBody><p>Get details about a feature associated with a map location.   The object returned will have id and data properties.   If the given location doesn’t correspond to a feature, null will be returned.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lo [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.getFeatureId"></a>getFeatureId</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureId: function(</td><td class="PParameter  prettyprint " nowrap>location</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/Vector-js.html b/doc/apidocs/files/OpenLayers/Layer/Vector-js.html
index faafbac..c318175 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Vector-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Vector-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h1><div class=CBody><p>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources.  Create a new vector layer with the <a href="#OpenLayers.Layer.Vector.OpenLayers.Layer.Vector" class=LConstructor id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">OpenLayers.L [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h1><div class=CBody><p>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources.  Create a new vector layer with the <a href="#OpenLayers.Layer.Vector.OpenLayers.Layer.Vector" class=LConstructor id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">OpenLayers.L [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The prop [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} The layer is a base layer.   Default is false.   Set this property in the layer options.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.isFixed"></a>isFixed</h3><div class=CBody><p>{Boolean} Whether the layer remains in one place while dragging the map.</p></div></div></div>
@@ -33,16 +31,16 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.geometryType"></a>geometryType</h3><div class=CBody><p>{String} geometryType allows you to limit the types of geometries this layer supports.  This should be set to something like “OpenLayers.Geometry.Point” to limit types.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.ratio"></a>ratio</h3><div class=CBody><p>{Float} This specifies the ratio of the size of the visiblity of the Vector Layer features to the size of the map.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h3><div class=CBody><p>Create a new vector layer</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object  [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h3><div class=CBody><p>Create a new vector layer</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy this layer</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redraw: function()</td></tr></table></blockquote><p>Redraws the layer.   Returns true if the layer was redrawn, false if not.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The layer was redrawn.</p></div></div></div>
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>display</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.addFeatures"></a>addFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addFeatures: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
@@ -61,9 +59,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.getFeatureByFid"></a>getFeatureByFid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureByFid: function(</td><td class="PParameter  prettyprint " nowrap>featureFid</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.getFeaturesByAttribute"></a>getFeaturesByAttribute</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeaturesByAttribute: function(</td><td class="PParameter  prettyprint " nowrap>attrName,</td></tr><tr><td></td><td class="PParameter  prettyprint  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.getFeaturesByAttribute"></a>getFeaturesByAttribute</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeaturesByAttribute: function(</td><td class="PParameter  prettyprint " nowrap>attrName,</td></tr><tr><td></td><td class="PParameter  prettyprint  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.onFeatureInsert"></a>onFeatureInsert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onFeatureInsert: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.onFeatureInsert"></a>onFeatureInsert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onFeatureInsert: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.preFeatureInsert"></a>preFeatureInsert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>preFeatureInsert: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
@@ -75,15 +73,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this layer</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"> [...]
+<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this layer</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"> [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Vector/RootContainer-js.html b/doc/apidocs/files/OpenLayers/Layer/Vector/RootContainer-js.html
index 1a2a9ac..b30f5d6 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Vector/RootContainer-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Vector/RootContainer-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/VirtualEarth-js.html b/doc/apidocs/files/OpenLayers/Layer/VirtualEarth-js.html
deleted file mode 100644
index fc0ba97..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/VirtualEarth-js.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.VirtualEarth - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h1><div class=CBody><p>Instances of OpenLayers.Layer.VirtualEarth are used to display the data from the Bing Maps AJAX Control <img mode="link" target="e.g.  
url target=”http://msdn.microsoft.com/library/bb429619.aspx” name=”http://msdn.microsoft.com/library/bb429619.aspx”>” original=&r [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 1</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 19</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.type"></a>type</h3><div class=CBody><p>{VEMapType}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.VirtualEarth.sphericalMercator" class=LProperty id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">sphericalMercator</a> is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.animationEnabled"></a>animationEnabled</h3><div class=CBody><p>{Boolean} If set to true, the transition between zoom levels will be animated.  Set to false to match the zooming experience of other layer types.  Default is true.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h3><div class=CBody><p>Creates a new instance of a OpenLayers.Layer.VirtualEarth.  If you use an instance of OpenLayers.Layer.VirtualEarth in you map, you should set the <a href="../Map-js.html#OpenLayers.Map" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">Op [...]
-    // other map options
-    restrictedExtent : OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
-} );
-
-var veLayer = new OpenLayers.Layer.VirtualEarth (
-    "Virtual Earth Layer"
-);
-
-map.addLayer( veLayer );</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td cla [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td cl [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParamet [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote>{String} String with information on why layer is broken, how to get it working.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PB [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/WFS-js.html b/doc/apidocs/files/OpenLayers/Layer/WFS-js.html
deleted file mode 100644
index 8bfcb8b..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/WFS-js.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.WFS - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><sc [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h1><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with a Protocol.WFS and one or more Strategies.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideT [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} WFS layer is not a base layer by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.ratio"></a>ratio</h3><div class=CBody><p>{Float} The ratio property determines the size of the serverside query relative to the map viewport size.  By default, we load an area twice as big as the map, to allow for panning without immediately reload.  Setting this to 1 will cause the area of the WFS request to match the map area exactly.  It is recommended to set this to some number at l [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.featureClass"></a>featureClass</h3><div class=CBody><p>{<a href="../Feature-js.html#OpenLayers.Feature" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt1', 'link13')" onMouseOut="HideTip('tt1')">OpenLayers.Feature</a>} If featureClass is defined, an old-style markers based WFS layer is created instead of a new-style vector layer.  If sent, this should be a subclass of OpenLayers.Feature</p> [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt2', 'link14')" onMouseOut="HideTip('tt2')">OpenLayers.Format</a>} The format you want the data to be parsed with.  Must be passed in the constructor.  Should be a class, not an instance.  This option can only be used if no featureClass is passed [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.encodeBBOX"></a>encodeBBOX</h3><div class=CBody><p>{Boolean} Should the BBOX commas be encoded?  The WMS spec says ‘no’, but some services want it that way.  Default false.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Should the WFS layer parse attributes from the retrieved GML?  Defaults to false.  If enabled, parsing is slower, but attributes are available in the attributes property of layer features.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>{Object}</td></tr>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams:function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getFullRequestString"></a>getFullRequestString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFullRequestString:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">commit: function()</td></tr></table></blockquote><p>Write out the data to a WFS server.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitReport"></a>commitReport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitReport: function(</td><td class="PParameter  prettyprint " nowrap>string,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>response</td><td class="PA [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.refresh"></a>refresh</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">refresh: function()</td></tr></table></blockquote><p>Refreshes all the features of the layer</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getDataExtent"></a>getDataExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getDataExtent: function ()</td></tr></table></blockquote><p>Calculates the max extent which includes all of the layer data.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link15 onMouse [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function (</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Features are combinations of geography and attributes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div class=CFunc [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/WMS-js.html b/doc/apidocs/files/OpenLayers/Layer/WMS-js.html
index 22fdbaf..8895154 100644
--- a/doc/apidocs/files/OpenLayers/Layer/WMS-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/WMS-js.html
@@ -53,10 +53,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/WMS/Post-js.html b/doc/apidocs/files/OpenLayers/Layer/WMS/Post-js.html
deleted file mode 100644
index 27f1c2f..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/WMS/Post-js.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.WMS.Post - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();pr [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h1><div class=CBody><p>Instances of OpenLayers.Layer.WMS.Post are used to retrieve data from OGC Web Mapping Services via HTTP-POST (application/x-www-form-urlencoded).  Create a new WMS layer with the <a href="#OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post" class=LConstructor id=link1 onMouseOver="ShowTip(event, 'tt1' [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.unsupportedBrowsers"></a>unsupportedBrowsers</h3><div class=CBody><p>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles from a WMS . Defaults to [“mozilla”, “firefox”, “opera”], because Opera is not able to show transparent images in IFrames and Firefox/Mozilla has some ugly effects of viewport-shaking wh [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h3><div class=CBody><p>Creates a new WMS layer object.</p><h4 class=CHeading>Example</h4><blockquote><pre class="prettyprint">var wms = new OpenLayers.Layer.WMS.Post(
- "NASA Global Mosaic",
- "http://wms.jpl.nasa.gov/wms.cgi",
- {layers: "modis, global_mosaic"});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the WMS (e.g.  <a href="http://wms.jpl.nasa.gov/wms.cgi" class=LURL target=_top>http://wms.jpl.nasa.gov/wms.cgi</a>)</td></tr><tr><td class=CDLEntry [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CConstructor>Creates a new WMS layer object.</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{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. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/WMS/Untiled-js.html b/doc/apidocs/files/OpenLayers/Layer/WMS/Untiled-js.html
deleted file mode 100644
index 8a7619d..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/WMS/Untiled-js.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.WMS.Untiled - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad() [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h1><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.WMS and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'lin [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class= [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/WMTS-js.html b/doc/apidocs/files/OpenLayers/Layer/WMTS-js.html
index e94d6ea..7bede7f 100644
--- a/doc/apidocs/files/OpenLayers/Layer/WMTS-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/WMTS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMTS"></a>OpenLayers.<wbr>Layer.WMTS</h1><div class=CBody><p>Instances of the WMTS class allow viewing of tiles from a service that implements the OGC WMTS specification version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayer [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMTS"></a>OpenLayers.<wbr>Layer.WMTS</h1><div class=CBody><p>Instances of the WMTS class allow viewing of tiles from a service that implements the OGC WMTS specification version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayer [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.Properties"></a>Properties</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.requestEncoding"></a>requestEncoding</h3><div class=CBody><p>{String} Request encoding.   Can be “REST” or “KVP”.   Default is “KVP”.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.url"></a>url</h3><div class=CBody><p>{String} The base URL for the WMTS service.   Must be provided.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.url"></a>url</h3><div class=CBody><p>{String|Array(String)} The base URL or request URL template for the WMTS service.  Must be provided.  Array is only supported for base URLs, not for request URL templates.  URL templates are only supported for REST <a href="#OpenLayers.Layer.WMTS.requestEncoding" class=LProperty id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideT [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.layer"></a>layer</h3><div class=CBody><p>{String} The layer identifier advertised by the WMTS service.   Must be provided.</p></div></div></div>
 
@@ -29,19 +29,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.format"></a>format</h3><div class=CBody><p>{String} The image MIME type.   Default is “image/jpeg”.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} The top-left corner of the tile matrix in map units.   If the tile origin for each matrix in a set is different, the <a href="#OpenLayers.Layer.WMTS.matrixIds" class=LPrope [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} The top-left corner of the tile matrix in map units.   If the tile origin for each matrix in a set is different, the <a href="#OpenLayers.Layer.WMTS.matrixIds" class=LPrope [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileFullExtent"></a>tileFullExtent</h3><div class=CBody><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt2', 'link10')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>}  The full extent of the tile set.   If not supplied, the layer’s <a href="../Layer-js.html#OpenLayers.Layer.maxExtent" class=LProperty id=link11 onMouseOver [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileFullExtent"></a>tileFullExtent</h3><div class=CBody><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt2', 'link11')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>}  The full extent of the tile set.   If not supplied, the layer’s <a href="../Layer-js.html#OpenLayers.Layer.maxExtent" class=LProperty id=link12 onMouseOver [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.formatSuffix"></a>formatSuffix</h3><div class=CBody><p>{String} For REST request encoding, an image format suffix must be included in the request.   If not provided, the suffix will be derived from the <a href="#OpenLayers.Layer.WMTS.format" class=LProperty id=link12 onMouseOver="ShowTip(event, 'tt9', 'link12')" onMouseOut="HideTip('tt9')">format</a> property.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.formatSuffix"></a>formatSuffix</h3><div class=CBody><p>{String} For REST request encoding, an image format suffix must be included in the request.   If not provided, the suffix will be derived from the <a href="#OpenLayers.Layer.WMTS.format" class=LProperty id=link13 onMouseOver="ShowTip(event, 'tt10', 'link13')" onMouseOut="HideTip('tt10')">format</a> property.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.matrixIds"></a>matrixIds</h3><div class=CBody><p>{Array} A list of tile matrix identifiers.   If not provided, the matrix identifiers will be assumed to be integers corresponding to the map zoom level.   If a list of strings is provided, each item should be the matrix identifier that corresponds to the map zoom level.  Additionally, a list of objects can be provided.   Each object [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.matrixIds"></a>matrixIds</h3><div class=CBody><p>{Array} A list of tile matrix identifiers.   If not provided, the matrix identifiers will be assumed to be integers corresponding to the map zoom level.   If a list of strings is provided, each item should be the matrix identifier that corresponds to the map zoom level.  Additionally, a list of objects can be provided.   Each object [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.dimensions"></a>dimensions</h3><div class=CBody><p>{Array} For RESTful request encoding, extra dimensions may be specified.  Items in this list should be property names in the <a href="#OpenLayers.Layer.WMTS.params" class=LProperty id=link17 onMouseOver="ShowTip(event, 'tt5', 'link17')" onMouseOut="HideTip('tt5')">params</a> object.  Values of extra dimensions will be determined from the co [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.dimensions"></a>dimensions</h3><div class=CBody><p>{Array} For RESTful request encoding, extra dimensions may be specified.  Items in this list should be property names in the <a href="#OpenLayers.Layer.WMTS.params" class=LProperty id=link18 onMouseOver="ShowTip(event, 'tt5', 'link18')" onMouseOut="HideTip('tt5')">params</a> object.  Values of extra dimensions will be determined from the co [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.params"></a>params</h3><div class=CBody><p>{Object} Extra parameters to include in tile requests.   For KVP <a href="#OpenLayers.Layer.WMTS.requestEncoding" class=LProperty id=link19 onMouseOver="ShowTip(event, 'tt12', 'link19')" onMouseOut="HideTip('tt12')">requestEncoding</a>, these properties will be encoded in the request query string.   For REST <a href="#OpenLayers.Layer.WMTS.requestE [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.params"></a>params</h3><div class=CBody><p>{Object} Extra parameters to include in tile requests.   For KVP <a href="#OpenLayers.Layer.WMTS.requestEncoding" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt7', 'link20')" onMouseOut="HideTip('tt7')">requestEncoding</a>, these properties will be encoded in the request query string.   For REST <a href="#OpenLayers.Layer.WMTS.requestEnc [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 cac [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 cac [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.WMTS.serverResolutions" class=LProperty id=link24 onMouseOver="ShowTip(event, 'tt14', 'link24')" onMouseOut="HideTip('tt14') [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.Constructor"></a>Constructor</h3></div></div>
 
@@ -51,13 +53,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     layer: "layer_id",
     style: "default",
     matrixSet: "matrix_id"
-});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} The base url for the service.   See the <a href="# [...]
+});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} The base url for the service.   See the <a href="# [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams: function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams: function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
 
 </div><!--Content-->
 
@@ -65,15 +67,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/WorldWind-js.html b/doc/apidocs/files/OpenLayers/Layer/WorldWind-js.html
index db494d8..ed71946 100644
--- a/doc/apidocs/files/OpenLayers/Layer/WorldWind-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/WorldWind-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/XYZ-js.html b/doc/apidocs/files/OpenLayers/Layer/XYZ-js.html
index cf9ad15..5568fcc 100644
--- a/doc/apidocs/files/OpenLayers/Layer/XYZ-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/XYZ-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.XYZ"></a>OpenLayers.<wbr>Layer.XYZ</h1><div class=CBody><p>The XYZ class is designed to make it easier for people who have tiles arranged by a standard XYZ grid.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Grid</a></li></ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.XYZ"></a>OpenLayers.<wbr>Layer.XYZ</h1><div class=CBody><p>The XYZ class is designed to make it easier for people who have tiles arranged by a standard XYZ grid.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Grid</a></li></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more zoom levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differs from the server.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.XYZ.serverResolutions" class=LProperty id=link6 onMouseOver="ShowTip(event, 'tt5', 'link6')" onMouseOut="HideTip('tt5')">serv [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.Constructor"></a>Constructor</h3></div></div>
 
@@ -31,10 +31,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When the [...]
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.OSM"></a>OpenLayers.<wbr>Layer.OSM</h2><div class=CBody><p>A class to access OpenStreetMap tiles.  By default, uses the OpenStreetMap hosted tile.openstreetmap.org ‘Mapnik’ tileset.  If you wish to use tiles at home / osmarender layer instead, you can pass a layer like:</p><blockquote><pre class="prettyprint">new OpenLayers.Layer.OSM("t at h",
-  "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png");</pre></blockquote><p>This layer defaults to Spherical Mercator.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="#OpenLayers.Layer.XYZ" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Layer.XYZ</a></li></ul></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When the [...]
 
 </div><!--Content-->
 
@@ -42,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Layer/Yahoo-js.html b/doc/apidocs/files/OpenLayers/Layer/Yahoo-js.html
deleted file mode 100644
index 8cb1c95..0000000
--- a/doc/apidocs/files/OpenLayers/Layer/Yahoo-js.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.Yahoo - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();">< [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="EventPane-js.html#OpenLayers.Layer.EventPane" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">OpenLayers.Layer.EventPane</a></li><li><a href="FixedZoomLevels-js.html#OpenLayers.Layer.FixedZoomLevels" class=LClass [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 0</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 17</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.type"></a>type</h3><div class=CBody><p>{YahooMapType}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.Yahoo.sphericalMercator" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">sphericalMercator</a> is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Overri [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getOLZoomFromMapObjectZoom"></a>getOLZoomFromMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOLZoomFromMapObjectZoom: function(</td><td class="PParameter  prettyprint " nowrap>moZoom</td><td class="PAfterParameters  prettyprint "now [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoomFromOLZoom"></a>getMapObjectZoomFromOLZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectZoomFromOLZoom: function(</td><td class="PParameter  prettyprint " nowrap>olZoom</td><td class="PAfterParameters  prettyprint "now [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom</ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><td class [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAf [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PA [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  pr [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter   [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " now [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectSizeFromOLSize"></a>getMapObjectSizeFromOLSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectSizeFromOLSize: function(</td><td class="PParameter  prettyprint " nowrap>olSize</td><td class="PAfterParameters  prettyprint "now [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Overridden from EventPane because we need to remove this yahoo event pane which prohibits [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Layer/Zoomify-js.html b/doc/apidocs/files/OpenLayers/Layer/Zoomify-js.html
index 95f6c1c..3e97c4c 100644
--- a/doc/apidocs/files/OpenLayers/Layer/Zoomify-js.html
+++ b/doc/apidocs/files/OpenLayers/Layer/Zoomify-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Map-js.html b/doc/apidocs/files/OpenLayers/Map-js.html
index 939701d..19d8d4c 100644
--- a/doc/apidocs/files/OpenLayers/Map-js.html
+++ b/doc/apidocs/files/OpenLayers/Map-js.html
@@ -11,35 +11,39 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Map"></a>OpenLayers.Map</h1><div class=CBody><p>Instances of OpenLayers.Map are interactive maps embedded in a web page.  Create a new map with the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link67 onMouseOver="ShowTip(event, 'tt62', 'link67')" onMouseOut="HideTip('tt62')">OpenLayers.Map</a> constructor.</p><p>On their own maps do not provide much functionality [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Map"></a>OpenLayers.Map</h1><div class=CBody><p>Instances of OpenLayers.Map are interactive maps embedded in a web page.  Create a new map with the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link67 onMouseOver="ShowTip(event, 'tt65', 'link67')" onMouseOut="HideTip('tt65')">OpenLayers.Map</a> constructor.</p><p>On their own maps do not provide much functionality [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Z_INDEX_BASE"></a>Z_INDEX_BASE</h3><div class=CBody><p>{Object} Base z-indexes for different classes of thing</p></div></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">map.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactly what happ [...]
-
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">map.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the map</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.allOverlays"></a>allOverlays</h3><div class=CBody><p>{Boolean} Allow the map to function with “overlays” only.   Defaults to false.   If true, the lowest layer in the draw order will act as the base layer.   In addition, if set to true, all layers will have isBaseLayer set to false when they are added to the map.</p><h4 class=CHeading>Note</h4><p>If you set map.allOverlays to true [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.allOverlays"></a>allOverlays</h3><div class=CBody><p>{Boolean} Allow the map to function with “overlays” only.   Defaults to false.   If true, the lowest layer in the draw order will act as the base layer.   In addition, if set to true, all layers will have isBaseLayer set to false when they are added to the map.</p><h4 class=CHeading>Note</h4><p>If you set map.allOverlays to true [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.div"></a>div</h3><div class=CBody><p>{DOMElement|String} The element that contains the map (or an id for that element).   If the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link72 onMouseOver="ShowTip(event, 'tt62', 'link72')" onMouseOut="HideTip('tt62')">OpenLayers.Map</a> constructor is called with two arguments, this should be provided as the first argument.  Alternatively, t [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.div"></a>div</h3><div class=CBody><p>{DOMElement|String} The element that contains the map (or an id for that element).   If the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link72 onMouseOver="ShowTip(event, 'tt65', 'link72')" onMouseOut="HideTip('tt65')">OpenLayers.Map</a> constructor is called with two arguments, this should be provided as the first argument.  Alternatively, t [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>)} Ordered list of layers in the map</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.controls"></a>controls</h3><div class=CBody><p>{Array(<a href="Control-js.html#OpenLayers.Control" class=LClass id=link77 onMouseOver="ShowTip(event, 'tt1', 'link77')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a>)} List of controls associated with the map.</p><p>If not provided in the map options at construction, the map will by default be given the following controls if present in the build:</p><ul>< [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.baseLayer"></a>baseLayer</h3><div class=CBody><p>{<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>} The currently selected base layer.   This determines min/max zoom level, projection, etc.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link77 onMouseOver="ShowTip(event, 'tt1', 'link77')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} Set in the map options to override the default tile size for this map.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.options"></a>options</h3><div class=CBody><p>{Object} The options object passed to the class constructor.  Read-only.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link84 onMouseOver="ShowTip(event, 'tt2', 'link84')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>} Set in the map options to override the default tile size for this map.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.projection"></a>projection</h3><div class=CBody><p>{String} Set in the map options to override the default projection string this map - also set maxExtent, maxResolution, and units if appropriate.   Default is “EPSG:4326”.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.projection"></a>projection</h3><div class=CBody><p>{String} Set in the map options to specify the default projection for layers added to this map.  When using a projection other than EPSG:4326 (CRS:84, Geographic) or EPSG:3857 (EPSG:900913, Web Mercator), also set maxExtent, maxResolution or resolutions.   Default is “EPSG:4326”.  Note that the projection of the map is usually det [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.units"></a>units</h3><div class=CBody><p>{String} The map units.   Defaults to ‘degrees’.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.units"></a>units</h3><div class=CBody><p>{String} The map units.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.   Normally taken from the projection.  Only required if both map and layers do not define a projection, or if they define a projection which does not define units</p></di [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.resolutions"></a>resolutions</h3><div class=CBody><p>{Array(Float)} A list of map resolutions (map units per pixel) in descending order.   If this is not set in the layer constructor, it will be set based on other resolution related properties (maxExtent, maxResolution, maxScale, etc.).</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Default max is 360 deg / 256 px, which corresponds to zoom level 0 on gmaps.   Specify a different value in the map options if you are not using a geographic projection and displaying the whole world.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Required if you are not displaying the whole world on a tile with the size specified in <a href="#OpenLayers.Map.tileSize" class=LProperty id=link87 onMouseOver="ShowTip(event, 'tt3', 'link87')" onMouseOut="HideTip('tt3')">tileSize</a>.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minResolution"></a>minResolution</h3><div class=CBody><p>{Float}</p></div></div></div>
 
@@ -47,80 +51,80 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minScale"></a>minScale</h3><div class=CBody><p>{Float}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link78 onMouseOver="ShowTip(event, 'tt2', 'link78')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} The maximum extent for the map.   Defaults to the whole world in decimal degrees (-180, -90, 180, 90).   Specify a different extent in the map options if you are not using a geo [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The maximum extent for the map.   Defaults to the whole world in decimal degrees (-180, -90, 180, 90).   Specify a different extent in the map options if you are not using a geographic projection and displaying the who [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minExtent"></a>minExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link79 onMouseOver="ShowTip(event, 'tt2', 'link79')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minExtent"></a>minExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The minimum extent for the map.   Defaults to null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.restrictedExtent"></a>restrictedExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link80 onMouseOver="ShowTip(event, 'tt2', 'link80')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} Limit map navigation to this extent where possible.  If a non-null restrictedExtent is set, panning will be restricted to the given bounds.   In addition, zooming  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.restrictedExtent"></a>restrictedExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  Limit map navigation to this extent where possible.  If a non-null restrictedExtent is set, panning will be restricted to the given bounds.   In addition, zooming to a resolution that displays more than t [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.numZoomLevels"></a>numZoomLevels</h3><div class=CBody><p>{Integer} Number of zoom levels for the map.   Defaults to 16.   Set a different value in the map options if needed.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.theme"></a>theme</h3><div class=CBody><p>{String} Relative path to a CSS file from which to load theme styles.  Specify null in the map options (e.g.  {theme: null}) if you want to get cascading style declarations - by putting links to stylesheets or style declarations directly in your page.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link81 onMouseOver="ShowTip(event, 'tt3', 'link81')" onMouseOut="HideTip('tt3')">OpenLayers.Projection</a>} Requires proj4js support.Projection used by several controls to display data to user.  If this property is set, it will be set on any control which has a null displ [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link90 onMouseOver="ShowTip(event, 'tt4', 'link90')" onMouseOut="HideTip('tt4')">OpenLayers.Projection</a>} Requires proj4js support for projections other than EPSG:4326 or EPSG:900913/EPSG:3857.  Projection used by several controls to display data to user.  If this  [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.fallThrough"></a>fallThrough</h3><div class=CBody><p>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  (#457) Default is to fall through.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link82 onMouseOver="ShowTip(event, 'tt4', 'link82')" onMouseOut="HideTip('tt4')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for the  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link91 onMouseOver="ShowTip(event, 'tt5', 'link91')" onMouseOut="HideTip('tt5')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for the  [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panMethod"></a>panMethod</h3><div class=CBody><p>{Function} The Easing function to be used for tweening.   Default is OpenLayers.Easing.Expo.easeOut.  Setting this to ‘null’ turns off animated panning.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.OpenLayers.Map"></a>OpenLayers.Map</h3><div class=CBody><p>Constructor for a new OpenLayers.Map instance.   There are two possible ways to call the map constructor.   See the examples below.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>div</td><td class=CDLDescription>{DOMElement|String}  The element or id of an e [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.OpenLayers.Map"></a>OpenLayers.Map</h3><div class=CBody><p>Constructor for a new OpenLayers.Map instance.   There are two possible ways to call the map constructor.   See the examples below.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>div</td><td class=CDLDescription>{DOMElement|String}  The element or id of an e [...]
 var map = new OpenLayers.Map("map1");
 
 // create a map with non-default options in an element with id "map2"
 var options = {
+    projection: "EPSG:3857",
     maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-    maxResolution: 156543,
-    units: 'm',
-    projection: "EPSG:41001"
+    center: new OpenLayers.LonLat(-12356463.476333, 5621521.4854095)
 };
 var map = new OpenLayers.Map("map2", options);
 
-// map with non-default options - same as above but with a single argument
+// map with non-default options - same as above but with a single argument,
+// a restricted extent, and using arrays for bounds and center
 var map = new OpenLayers.Map({
     div: "map_id",
-    maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-    maxResolution: 156543,
-    units: 'm',
-    projection: "EPSG:41001"
+    projection: "EPSG:3857",
+    maxExtent: [-18924313.432222, -15538711.094146, 18924313.432222, 15538711.094146],
+    restrictedExtent: [-13358338.893333, -9608371.5085962, 13358338.893333, 9608371.5085962],
+    center: [-12356463.476333, 5621521.4854095]
 });
 
 // create a map without a reference to a container - call render later
 var map = new OpenLayers.Map({
-    maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-    maxResolution: 156543,
-    units: 'm',
-    projection: "EPSG:41001"
+    projection: "EPSG:3857",
+    maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000)
 });</pre></blockquote></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Functions"></a>Functions</h3></div></div>
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewport"></a>getViewport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getViewport: function()</td></tr></table></blockquote><p>Get the DOMElement representing the view port.</p><h4 class=CHeading>Returns</h4><p>{DOMElement}</p></div></div></div>
+
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.render"></a>render</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>render: function(</td><td class="PParameter  prettyprint " nowrap>div</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Render the map [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy:function()</td></tr></table></blockquote><p>Destroy this map.  Note that if you are using an application which removes a container of the map from the DOM, you need to ensure that you destroy the map <b>before</b> this happens; otherwise, the page unloa [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setOptions"></a>setOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOptions: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getTileSize"></a>getTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileSize: function()</td></tr></table></blockquote><p>Get the tile size for the map</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link85 onMouseOver="ShowTip(event, 'tt1', 'link85')" onMouseOut="Hid [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getTileSize"></a>getTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileSize: function()</td></tr></table></blockquote><p>Get the tile size for the map</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link96 onMouseOver="ShowTip(event, 'tt2', 'link96')" onMouseOut="Hid [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getBy"></a>getBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBy: function(</td><td class="PParameter  prettyprint " nowrap>array,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersBy"></a>getLayersBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParame [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersBy"></a>getLayersBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParame [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByName"></a>getLayersByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByName"></a>getLayersByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByClass"></a>getLayersByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByClass"></a>getLayersByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayer"></a>getLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayer: function(</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get a lay [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayer"></a>getLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayer: function(</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get a lay [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addLayer"></a>addLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addLayer"></a>addLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 clas [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addLayers"></a>addLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayers: function (</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
 
@@ -136,43 +140,43 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setBaseLayer"></a>setBaseLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setBaseLayer: function(</td><td class="PParameter  prettyprint " nowrap>newBaseLayer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControl"></a>addControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControl: function (</td><td class="PParameter  prettyprint " nowrap>control,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters   [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControl"></a>addControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControl: function (</td><td class="PParameter  prettyprint " nowrap>control,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters   [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function (</td><td class="PParameter  prettyprint " nowrap>controls,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>pixels</td><td class="PAfterPara [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function (</td><td class="PParameter  prettyprint " nowrap>controls,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>pixels</td><td class="PAfterPara [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControl"></a>getControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControl: function (</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControl"></a>getControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControl: function (</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removeControl"></a>removeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeControl: function (</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removeControl"></a>removeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeControl: function (</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addPopup"></a>addPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPopup: function(</td><td class="PParameter  prettyprint " nowrap>popup,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>exclusive</td><td class="PAfterParameters  pr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addPopup"></a>addPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPopup: function(</td><td class="PParameter  prettyprint " nowrap>popup,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>exclusive</td><td class="PAfterParameters  pr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removePopup"></a>removePopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removePopup: function(</td><td class="PParameter  prettyprint " nowrap>popup</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removePopup"></a>removePopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removePopup: function(</td><td class="PParameter  prettyprint " nowrap>popup</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link96 onMouseOver="ShowTip(event, 'tt1', 'link96')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} An <a href="B [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link107 onMouseOver="ShowTip(event, 'tt2', 'link107')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>} An <a href= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.updateSize"></a>updateSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateSize: function()</td></tr></table></blockquote><p>This function should be called by any external code which dynamically changes the size of the map div (because mozilla wont let us catch the “onresize” for an element)</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCenter"></a>getCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenter: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link98 onMouseOver="ShowTip(event, 'tt33', 'link98')" onMouseOut="HideTip('tt33')">OpenLayers.LonLat</a>} [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCenter"></a>getCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenter: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link109 onMouseOver="ShowTip(event, 'tt35', 'link109')" onMouseOut="HideTip('tt35')">OpenLayers.LonLat</a [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoom"></a>getZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getZoom: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer}</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.pan"></a>pan</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pan: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy,</td></tr><tr><td></td><td class="PParameter  prettyprint "  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panTo"></a>panTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>panTo: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Allows user to [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panTo"></a>panTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>panTo: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Allows user to [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setCenter"></a>setCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCenter: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom,</td></tr><tr><td></td><td class="PP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setCenter"></a>setCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCenter: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom,</td></tr><tr><td></td><td class="PP [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getProjection"></a>getProjection</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getProjection: function()</td></tr></table></blockquote><p>This method returns a string representing the projection.  In the case of projection support, this will be the srsCode which is loaded -- otherwise it will simply be the string value that wa [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getProjectionObject"></a>getProjectionObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getProjectionObject: function()</td></tr></table></blockquote><p>Returns the projection obect from the baselayer.</p><h4 class=CHeading>Returns</h4><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link101 onMouseOver="Sh [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getProjectionObject"></a>getProjectionObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getProjectionObject: function()</td></tr></table></blockquote><p>Returns the projection obect from the baselayer.</p><h4 class=CHeading>Returns</h4><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link111 onMouseOver="Sh [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getMaxResolution"></a>getMaxResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMaxResolution: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} The Map’s Maximum Resolution</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMaxExtent: function (</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMaxExtent: function (</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getNumZoomLevels"></a>getNumZoomLevels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getNumZoomLevels: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The total number of zoom levels that can be displayed by the current baseLayer.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link103 onMouseOver="ShowTip(event, 'tt2', 'link103')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link113 onMouseOver="ShowTip(event, 'tt46', 'link113')" onMouseOut="HideTip('tt46')">OpenLayers.Bounds</a [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getResolution"></a>getResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolution: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The current resolution of the map.  If no baselayer is set, returns null.</p></div></div></div>
 
@@ -180,11 +184,11 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getScale"></a>getScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getScale: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The current scale denominator of the map.  If no baselayer is set, returns null.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function (</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function (</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForResolution"></a>getZoomForResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>clos [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForResolution"></a>getZoomForResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>clos [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomTo"></a>zoomTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomTo: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Zoom to a spe [...]
 
@@ -192,23 +196,23 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomOut"></a>zoomOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">zoomOut: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToExtent"></a>zoomToExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToExtent: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td class="PAfterPar [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToExtent"></a>zoomToExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToExtent: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td class="PAfterPar [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToMaxExtent"></a>zoomToMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToMaxExtent: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToMaxExtent"></a>zoomToMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToMaxExtent: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToScale"></a>zoomToScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToScale: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td class="PAfterParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromPixel"></a>getLonLatFromPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromPixel: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromPixel"></a>getLonLatFromPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromPixel: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getPixelFromLonLat"></a>getPixelFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPixelFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getPixelFromLonLat"></a>getPixelFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPixelFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLayerPx"></a>getViewPortPxFromLayerPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLayerPx:function(</td><td class="PParameter  prettyprint " nowrap>layerPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLayerPx"></a>getViewPortPxFromLayerPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLayerPx:function(</td><td class="PParameter  prettyprint " nowrap>layerPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromViewPortPx"></a>getLayerPxFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromViewPortPx:function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromViewPortPx"></a>getLayerPxFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromViewPortPx:function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromLonLat"></a>getLayerPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromLonLat"></a>getLayerPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Constants"></a>Constants</h3></div></div>
 
@@ -222,15 +226,15 @@ var map = new OpenLayers.Map({
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cell [...]
+<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CProperty>{OpenLayers.Size} Set in the map options to override the default tile size for this map.</div></div><div class=CToolTip id="tt4"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></di [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Marker-js.html b/doc/apidocs/files/OpenLayers/Marker-js.html
index e0b7afb..5f15f16 100644
--- a/doc/apidocs/files/OpenLayers/Marker-js.html
+++ b/doc/apidocs/files/OpenLayers/Marker-js.html
@@ -36,10 +36,10 @@ markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone())
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([20, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([21, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Marker/Box-js.html b/doc/apidocs/files/OpenLayers/Marker/Box-js.html
index 836a6d0..16946b4 100644
--- a/doc/apidocs/files/OpenLayers/Marker/Box-js.html
+++ b/doc/apidocs/files/OpenLayers/Marker/Box-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([20, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([21, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Popup-js.html b/doc/apidocs/files/OpenLayers/Popup-js.html
index b8cc874..6c6efaa 100644
--- a/doc/apidocs/files/OpenLayers/Popup-js.html
+++ b/doc/apidocs/files/OpenLayers/Popup-js.html
@@ -49,10 +49,10 @@ map.addPopup(popup);</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Popup/Anchored-js.html b/doc/apidocs/files/OpenLayers/Popup/Anchored-js.html
index af183f6..d181884 100644
--- a/doc/apidocs/files/OpenLayers/Popup/Anchored-js.html
+++ b/doc/apidocs/files/OpenLayers/Popup/Anchored-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Popup/AnchoredBubble-js.html b/doc/apidocs/files/OpenLayers/Popup/AnchoredBubble-js.html
index b692453..3722d84 100644
--- a/doc/apidocs/files/OpenLayers/Popup/AnchoredBubble-js.html
+++ b/doc/apidocs/files/OpenLayers/Popup/AnchoredBubble-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.AnchoredBubble"></a>OpenLayers.<wbr>Popup.<wbr>AnchoredBubble</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Anchored-js.html#OpenLayers.Popup.Anchored" class=LClass >OpenLayers.Popup.Anchored</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.AnchoredBubble"></a>OpenLayers.<wbr>Popup.<wbr>AnchoredBubble</h1><div class=CBody><p>This class is <b>deprecated</b>.  Use {<a href="Anchored-js.html#OpenLayers.Popup.Anchored" class=LClass >OpenLayers.Popup.Anchored</a>} and round corners using CSS3’s border-radius property.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Anchored-js.html#OpenLayers.Popup.An [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.AnchoredBubble.Constructor"></a>Constructor</h3></div></div>
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Popup/Framed-js.html b/doc/apidocs/files/OpenLayers/Popup/Framed-js.html
index e004840..325011b 100644
--- a/doc/apidocs/files/OpenLayers/Popup/Framed-js.html
+++ b/doc/apidocs/files/OpenLayers/Popup/Framed-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Popup/FramedCloud-js.html b/doc/apidocs/files/OpenLayers/Popup/FramedCloud-js.html
index 4b9a933..f78387d 100644
--- a/doc/apidocs/files/OpenLayers/Popup/FramedCloud-js.html
+++ b/doc/apidocs/files/OpenLayers/Popup/FramedCloud-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Framed-js.html#OpenLayers.Popup.Framed" class=LClass >OpenLayers.Popup.Framed</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class=" [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Framed-js.html#OpenLayers.Popup.Framed" class=LClass >OpenLayers.Popup.Framed</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class=" [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.Properties"></a>Properties</h3></div></div>
 
@@ -19,23 +19,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.panMapIfOutOfView"></a>panMapIfOutOfView</h3><div class=CBody><p>{Boolean} Framed Cloud does pan into view by default.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.imageSize"></a>imageSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.imageSize"></a>imageSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.isAlphaImage"></a>isAlphaImage</h3><div class=CBody><p>{Boolean} The FramedCloud does not use an alpha image (in honor of the good ie6 folk out there)</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.fixedRelativePosition"></a>fixedRelativePosition</h3><div class=CBody><p>{Boolean} The Framed Cloud popup works in just one fixed position.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.minSize"></a>minSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.minSize"></a>minSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.maxSize"></a>maxSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.maxSize"></a>maxSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescription>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LCl [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescription>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LCl [...]
 
 </div><!--Content-->
 
@@ -43,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt4"><div class=CClass>This clas [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt4"><div class=CClass>The icon represents a graphical icon on the screen. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Projection-js.html b/doc/apidocs/files/OpenLayers/Projection-js.html
index 99e5eda..66646a8 100644
--- a/doc/apidocs/files/OpenLayers/Projection-js.html
+++ b/doc/apidocs/files/OpenLayers/Projection-js.html
@@ -11,27 +11,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h1><div class=CBody><p>Class for coordinate transforms between coordinate systems.  Depends on the proj4js library.  If proj4js is not available, then this is just an empty stub.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h1><div class=CBody><p>Methods for coordinate transforms between coordinate systems.   By default, OpenLayers ships with the ability to transform coordinates between geographic (EPSG:4326) and web or spherical mercator (EPSG:900913 et al.) coordinate reference systems.   See the <a href="#OpenLayers.Projection.transform" class=LFunc [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h3><div class=CBody><p>This class offers several methods for interacting with a wrapped pro4js projection object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>projCode</td><td class=CDLDescription>{String} A string identifying the Well Known Identifier for the pr [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h3><div class=CBody><p>This class offers several methods for interacting with a wrapped pro4js projection object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>projCode</td><td class=CDLDescription>{String} A string identifying the Well Known Identifier for the pr [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.Functions"></a>Functions</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.getCode"></a>getCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCode: function()</td></tr></table></blockquote><p>Get the string SRS code.</p><h4 class=CHeading>Returns</h4><p>{String} The SRS code.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.getUnits"></a>getUnits</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getUnits: function()</td></tr></table></blockquote><p>Get the units string for the projection -- returns null if proj4js is not available.</p><h4 class=CHeading>Returns</h4><p>{String} The units abbreviation.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.defaults"></a>defaults</h3><div class=CBody><p>{Object} Defaults for the SRS codes known to OpenLayers (currently EPSG:4326, CRS:84, urn:ogc:def:crs:EPSG:6.6:4326, EPSG:900913, EPSG:3857, EPSG:102113 and EPSG:102100).  Keys are the SRS code, values are units, maxExtent (the validity extent for the SRS) and yx (true if this SRS is known to have a reverse axis order).</p></div></div></div>
+
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.addTransform"></a>addTransform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.addTransform = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>to,< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.transform = function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>source,</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.transform = function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>source,</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.nullTransform"></a>nullTransform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.nullTransform = function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
-    OpenLayers.Layer.SphericalMercator.projectForward);
-OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:3857",
-    OpenLayers.Layer.SphericalMercator.projectInverse);
-OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:900913",
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.nullTransform"></a>nullTransform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.nullTransform = function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
     OpenLayers.Projection.nullTransform);
 OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:3857",
     OpenLayers.Projection.nullTransform);</pre></blockquote></div></div></div>
@@ -42,10 +40,10 @@ OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:3857&quot
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol-js.html b/doc/apidocs/files/OpenLayers/Protocol-js.html
index b8e4b39..d1c5b59 100644
--- a/doc/apidocs/files/OpenLayers/Protocol-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol-js.html
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/CSW-js.html b/doc/apidocs/files/OpenLayers/Protocol/CSW-js.html
new file mode 100644
index 0000000..8bdb69f
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Protocol/CSW-js.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.CSW - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.CSW"></a>OpenLayers.<wbr>Protocol.CSW</h1><div class=CBody><p>Used to create a versioned CSW protocol.  Default version is 2.0.2.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Protocol.CSW" >OpenLayers.<wbr>Proto [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.OpenLayers.Protocol.CSW.DEFAULTS"></a>OpenLayers.<wbr>Protocol.<wbr>CSW.<wbr>DEFAULTS</h3></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Protocol/CSW/v2_0_2-js.html b/doc/apidocs/files/OpenLayers/Protocol/CSW/v2_0_2-js.html
new file mode 100644
index 0000000..60351ae
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Protocol/CSW/v2_0_2-js.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.CSW.v2_0_2 - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2"></a>OpenLayers.<wbr>Protocol.<wbr>CSW.<wbr>v2_0_2</h1><div class=CBody><p>CS-W (Catalogue services for the Web) version 2.0.2 protocol.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Protocol</a></li></ul><! [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.OpenLayers.Protocol.CSW.v2_0_2"></a>OpenLayers.<wbr>Protocol.<wbr>CSW.<wbr>v2_0_2</h3><div class=CBody><p>A class for CSW version 2.0.2 protocol management.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance. [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CClass>Abstract vector layer protocol class. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Protocol/HTTP-js.html b/doc/apidocs/files/OpenLayers/Protocol/HTTP-js.html
index 2d108d2..d3fa1f6 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/HTTP-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/HTTP-js.html
@@ -11,33 +11,39 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h1><div class=CBody><p>A basic HTTP protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP" class=LConstructor id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Protocol.HTTP</a> constructor.</p><h4 class=CHeading>Inherits f [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h1><div class=CBody><p>A basic HTTP protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP" class=LConstructor id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Protocol.HTTP</a> constructor.</p><h4 class=CHeading>Inherits f [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.readWithPOST"></a>readWithPOST</h3><div class=CBody><p>{Boolean} true if read operations are done with POST requests instead of GET, defaults to false.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.updateWithPOST"></a>updateWithPOST</h3><div class=CBody><p>{Boolean} true if update operations are done with POST requests defaults to false.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.deleteWithPOST"></a>deleteWithPOST</h3><div class=CBody><p>{Boolean} true if delete operations are done with POST requests defaults to false. if true, POST data is set to output of format.write().</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.srsInBBOX"></a>srsInBBOX</h3><div class=CBody><p>{Boolean} Include the SRS identifier in BBOX query string parameter.  Default is false.   If true and the layer has a projection object set, any BBOX filter will be serialized with a fifth item identifying the projection.   E.g. bbox=-1000,-1000,1000,1000,EPSG:900913</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h3><div class=CBody><p>A class for giving layers generic HTTP protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CH [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h3><div class=CBody><p>A class for giving layers generic HTTP protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CH [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.filterToParams"></a>filterToParams</h3><div class=CBody><p>Optional method to translate an <a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt2', 'link12')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a> object into an object that can be serialized as request query string provided.   If a custom method is not provided, the filter will be ser [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.filterToParams"></a>filterToParams</h3><div class=CBody><p>Optional method to translate an <a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt2', 'link12')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a> object into an object that can be serialized as request query string provided.   If a custom method is not provided, the filter will be ser [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Constr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Constr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAft [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAft [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ab [...]
 
 </div><!--Content-->
 
@@ -45,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/SOS-js.html b/doc/apidocs/files/OpenLayers/Protocol/SOS-js.html
index fbb138e..5eae458 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/SOS-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/SOS-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html
index 4e764a0..284d5f3 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.OpenLayers.Protocol.SOS"></a>OpenLayers.<wbr>Protocol.SOS</h3><div class=CBody><p>A class for giving layers an SOS protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.  Valid options properties: [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.OpenLayers.Protocol.SOS"></a>OpenLayers.<wbr>Protocol.SOS</h3><div class=CBody><p>A class for giving layers an SOS protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CHea [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.Functions"></a>Functions</h3></div></div>
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/SQL-js.html b/doc/apidocs/files/OpenLayers/Protocol/SQL-js.html
deleted file mode 100644
index 97f1b9a..0000000
--- a/doc/apidocs/files/OpenLayers/Protocol/SQL-js.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.SQL - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h1><div class=CBody><p>Abstract SQL protocol class.   Not to be instantiated directly.   Use one of the SQL protocol subclasses instead.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')"> [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.databaseName"></a>databaseName</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.tableName"></a>tableName</h3><div class=CBody><p>Name of the database table into which Features should be saved.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h3></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>This should be overridden by specific subclasses</p><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SQL backend</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([22, 24, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>This should be overridden by specific subclasses</di [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Protocol/SQL/Gears-js.html b/doc/apidocs/files/OpenLayers/Protocol/SQL/Gears-js.html
deleted file mode 100644
index 571f895..0000000
--- a/doc/apidocs/files/OpenLayers/Protocol/SQL/Gears-js.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.SQL.Gears - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad( [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h1><div class=CBody><p>This Protocol stores feature in the browser via the Gears Database module <a href="http://code.google.com/apis/gears/api_database.html" class=LURL target=_top>http://code.google.com<wbr>/apis<wbr>/gears<wbr>/api_database.html</a>.</p><p>The main advantage is that all the read, create, update an [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h3></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>Determine whether a browser supports Gears</p><h4 class=CHeading>Returns</h4><p>{Boolean} The browser supports Gears</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>R [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([22, 24, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>Determine whether a browser supports Gears</div></di [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Protocol/Script-js.html b/doc/apidocs/files/OpenLayers/Protocol/Script-js.html
index 97e5ba9..8055f1a 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/Script-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/Script-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.Script"></a>OpenLayers.<wbr>Protocol.<wbr>Script</h1><div class=CBody><p>A basic Script protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.Script.OpenLayers.Protocol.Script" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6')">OpenLayers.Protocol.Script</a> constructor.   A script [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.Script"></a>OpenLayers.<wbr>Protocol.<wbr>Script</h1><div class=CBody><p>A basic Script protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.Script.OpenLayers.Protocol.Script" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6')">OpenLayers.Protocol.Script</a> constructor.   A script [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.Properties"></a>Properties</h3></div></div>
 
@@ -21,13 +21,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callback"></a>callback</h3><div class=CBody><p>{Object} Function to be called when the <a href="#OpenLayers.Protocol.Script.read" class=LFunction id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">read</a> operation completes.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.scope"></a>scope</h3><div class=CBody><p>{Object} Optional ``this`` object for the callback.  Read-only, set through the options passed to the constructor.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackTemplate"></a>callbackTemplate</h3><div class=CBody><p>{String} Template for creating a unique callback function name for the registry.  Should include ${id}.   The ${id} variable will be replaced with a string identifier prefixed with a “c” (e.g. c1, c2).  Default is “OpenLayers.Protocol.Script.registry.${id}”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackKey"></a>callbackKey</h3><div class=CBody><p>{String} The name of the query string parameter that the service recognizes as the callback identifier.   Default is “callback”.  This key is used to generate the URL for the script.   For example setting <a href="#OpenLayers.Protocol.Script.callbackKey" class=LProperty id=link12 onMouseOver="ShowTip(event, 'tt10', ' [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt2', 'link12')" onMouseOut="HideTip('tt2')">OpenLayers.Format</a>} Format for parsing features.   Default is an <a href="../Format/GeoJSON-js.html#OpenLayers.Format.GeoJSON" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt10', 'link13')" onMous [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackPrefix"></a>callbackPrefix</h3><div class=CBody><p>{String} Where a service requires that the callback query string parameter value is prefixed by some string, this value may be set.  For example, setting <a href="#OpenLayers.Protocol.Script.callbackPrefix" class=LProperty id=link13 onMouseOver="ShowTip(event, 'tt11', 'link13')" onMouseOut="HideTip('tt11')">callbackPrefix</a> to &ld [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackKey"></a>callbackKey</h3><div class=CBody><p>{String} The name of the query string parameter that the service recognizes as the callback identifier.   Default is “callback”.  This key is used to generate the URL for the script.   For example setting <a href="#OpenLayers.Protocol.Script.callbackKey" class=LProperty id=link14 onMouseOver="ShowTip(event, 'tt11', ' [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.scope"></a>scope</h3><div class=CBody><p>{Object} Optional ``this`` object for the callback.  Read-only, set through the options passed to the constructor.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackPrefix"></a>callbackPrefix</h3><div class=CBody><p>{String} Where a service requires that the callback query string parameter value is prefixed by some string, this value may be set.  For example, setting <a href="#OpenLayers.Protocol.Script.callbackPrefix" class=LProperty id=link15 onMouseOver="ShowTip(event, 'tt12', 'link15')" onMouseOut="HideTip('tt12')">callbackPrefix</a> to &ld [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt2', 'link14')" onMouseOut="HideTip('tt2')">OpenLayers.Format</a>} Format for parsing features.   Default is an <a href="../Format/GeoJSON-js.html#OpenLayers.Format.GeoJSON" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt12', 'link15')" onMous [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.srsInBBOX"></a>srsInBBOX</h3><div class=CBody><p>{Boolean} Include the SRS identifier in BBOX query string parameter.  Setting this property has no effect if a custom filterToParams method is provided.    Default is false.   If true and the layer has a projection object set, any BBOX filter will be serialized with a fifth item identifying the projection.  E.g. bbox=-1000,-100 [...]
 
@@ -51,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Construct a request for reading new features.</div></div><div class=CToolTip id="tt2">< [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Construct a request for reading new features.</div></div><div class=CToolTip id="tt2">< [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/WFS-js.html b/doc/apidocs/files/OpenLayers/Protocol/WFS-js.html
index 909175d..b1c6bdf 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/WFS-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/WFS-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/WFS/v1-js.html b/doc/apidocs/files/OpenLayers/Protocol/WFS/v1-js.html
index f5fef7e..84620f0 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/WFS/v1-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/WFS/v1-js.html
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html b/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html
index 767eece..a832e92 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html b/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html
index 775b5fe..1f00dc9 100644
--- a/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html
+++ b/doc/apidocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Renderer-js.html b/doc/apidocs/files/OpenLayers/Renderer-js.html
index 790a471..0f083f8 100644
--- a/doc/apidocs/files/OpenLayers/Renderer-js.html
+++ b/doc/apidocs/files/OpenLayers/Renderer-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer"></a>OpenLayers.<wbr>Renderer</h1><div class=CBody><p>This is the base class for all renderers.</p><p>This is based on a merger code written by Paul Spencer and Bertil Chapuis.  It is largely composed of virtual functions that are to be implemented in technology-specific subclasses, but there is some generic code too.</p><p>The functions that <b>are</b> implemented here m [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer"></a>OpenLayers.<wbr>Renderer</h1><div class=CBody><p>This is the base class for all renderers.</p><p>This is based on a merger code written by Paul Spencer and Bertil Chapuis.  It is largely composed of virtual functions that are to be implemented in technology-specific subclasses, but there is some generic code too.</p><p>The functions that <b>are</b> implemented here m [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Constructor"></a>Constructor</h3></div></div>
 
@@ -35,16 +35,18 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     graphicName: "square"
 };</pre></blockquote></div></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.OpenLayers.Renderer.symbol"></a>OpenLayers.<wbr>Renderer.<wbr>symbol</h3><div class=CBody><p>Coordinate arrays for well known (named) symbols.</p></div></div></div>
+
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Renderer/Canvas-js.html b/doc/apidocs/files/OpenLayers/Renderer/Canvas-js.html
index f00c2ae..75d4981 100644
--- a/doc/apidocs/files/OpenLayers/Renderer/Canvas-js.html
+++ b/doc/apidocs/files/OpenLayers/Renderer/Canvas-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Renderer/Elements-js.html b/doc/apidocs/files/OpenLayers/Renderer/Elements-js.html
index 4c57c31..f70fbb0 100644
--- a/doc/apidocs/files/OpenLayers/Renderer/Elements-js.html
+++ b/doc/apidocs/files/OpenLayers/Renderer/Elements-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.ElementsIndexer"></a>OpenLayers.<wbr>ElementsIndexer</h1><div class=CBody><p>This class takes care of figuring out which order elements should be placed in the DOM based on given indexing methods.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a h [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.ElementsIndexer"></a>OpenLayers.<wbr>ElementsIndexer</h1><div class=CBody><p>This class takes care of figuring out which order elements should be placed in the DOM based on given indexing methods.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a h [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.Functions"></a>Functions</h3></div></div>
 
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.exists"></a>exists</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>exists: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.exists"></a>exists</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>exists: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.getZIndex"></a>getZIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZIndex: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
@@ -37,7 +37,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_Y_ORDER"></a>Z_ORDER_Y_ORDER</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER_Y_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " n [...]
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h2><div class=CBody><p>This is another virtual class in that it should never be instantiated by itself as a Renderer.  It exists because there is <b>tons</b> of shared functionality between different vector libraries which use nodes/elements as a base for rendering vectors.</p><p>The highlevel bits of code that are implemented here are the adding  [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h2><div class=CBody><p>This is another virtual class in that it should never be instantiated by itself as a Renderer.  It exists because there is <b>tons</b> of shared functionality between different vector libraries which use nodes/elements as a base for rendering vectors.</p><p>The highlevel bits of code that are implemented here are the adding  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constants"></a>Constants</h3></div></div>
 
@@ -45,13 +45,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.LABEL_ID_SUFFIX"></a>LABEL_ID_SUFFIX</h3><div class=CBody><p>{String}</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.  Supported opti [...]
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.LABEL_OUTLINE_SUFFIX"></a>LABEL_OUTLINE_SUFFIX</h3><div class=CBody><p>{String}</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constants"></a>Constants</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.OpenLayers.Renderer.symbol"></a>OpenLayers.<wbr>Renderer.<wbr>symbol</h3><div class=CBody><p>Coordinate arrays for well known (named) symbols.</p></div></div></div>
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.</td></tr></table><h4 [...]
 
 </div><!--Content-->
 
@@ -59,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initialize: function(</td><td class="PParameter  prettyprint " nowrap>yOrdering</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new indexer with</div></div><div class=CToolTip id="tt2"><div class=CF [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initialize: function(</td><td class="PParameter  prettyprint " nowrap>yOrdering</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new indexer with</div></div><div class=CToolTip id="tt2"><div class=CF [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Renderer/NG-js.html b/doc/apidocs/files/OpenLayers/Renderer/NG-js.html
deleted file mode 100644
index 849f2e0..0000000
--- a/doc/apidocs/files/OpenLayers/Renderer/NG-js.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Renderer.NG - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();">< [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Elements-js.html#OpenLayers.Renderer.Elements" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Renderer.Elements</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class= [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.  To be defined by subclasses.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.  Supported options are:</td></tr></tab [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This is another virtual class in that it should never be instantiated by itself as a Renderer. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Renderer/SVG-js.html b/doc/apidocs/files/OpenLayers/Renderer/SVG-js.html
index c7bf977..4f7d96c 100644
--- a/doc/apidocs/files/OpenLayers/Renderer/SVG-js.html
+++ b/doc/apidocs/files/OpenLayers/Renderer/SVG-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Renderer/SVG2-js.html b/doc/apidocs/files/OpenLayers/Renderer/SVG2-js.html
deleted file mode 100644
index 449c5d4..0000000
--- a/doc/apidocs/files/OpenLayers/Renderer/SVG2-js.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Renderer.SVG2 - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();" [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="NG-js.html#OpenLayers.Renderer.NG" class=LClass >OpenLayers.Renderer.NG</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SE [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SVG renderer</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_ALIGN"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_ALIGN</h3><div class=CBody><p>{Object}</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VSHIFT"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VSHIFT</h3><div class=CBody><p>{Object}</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VFACTOR"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VFACTOR</h3><div class=CBody><p>{Object}</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>{Boolean} Whether or not the browser supports the SVG renderer</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Renderer/VML-js.html b/doc/apidocs/files/OpenLayers/Renderer/VML-js.html
index faca888..7127c5c 100644
--- a/doc/apidocs/files/OpenLayers/Renderer/VML-js.html
+++ b/doc/apidocs/files/OpenLayers/Renderer/VML-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Request-js.html b/doc/apidocs/files/OpenLayers/Request-js.html
index 72bc353..eb9541d 100644
--- a/doc/apidocs/files/OpenLayers/Request-js.html
+++ b/doc/apidocs/files/OpenLayers/Request-js.html
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([26, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([27, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Request/XMLHttpRequest-js.html b/doc/apidocs/files/OpenLayers/Request/XMLHttpRequest-js.html
index 3892ec1..ebe48d8 100644
--- a/doc/apidocs/files/OpenLayers/Request/XMLHttpRequest-js.html
+++ b/doc/apidocs/files/OpenLayers/Request/XMLHttpRequest-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([26, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([27, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Rule-js.html b/doc/apidocs/files/OpenLayers/Rule-js.html
index dfca232..d383b1c 100644
--- a/doc/apidocs/files/OpenLayers/Rule-js.html
+++ b/doc/apidocs/files/OpenLayers/Rule-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/SingleFile-js.html b/doc/apidocs/files/OpenLayers/SingleFile-js.html
index 37d4d0f..ed54d62 100644
--- a/doc/apidocs/files/OpenLayers/SingleFile-js.html
+++ b/doc/apidocs/files/OpenLayers/SingleFile-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/SingleFile.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="Conten [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/SingleFile.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLo [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Spherical-js.html b/doc/apidocs/files/OpenLayers/Spherical-js.html
new file mode 100644
index 0000000..cedd7fd
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Spherical-js.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Spherical - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Spherical"></a>Spherical</h1><div class=CBody><p>The OpenLayers.Spherical namespace includes utility functions for calculations on the basis of a spherical earth (ignoring ellipsoidal effects), which is accurate enough for most purposes.</p><h4 class=CHeading>Relevant links</h4><ul><li><a href="http://www.movable-type.co.uk/scripts/latlong.html" class=LURL target=_top>http://www.movable-type.co.u [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Spherical.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Spherical.computeDistanceBetween"></a>computeDistanceBetween</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Spherical.computeDistanceBetween = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettypr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Spherical.computeHeading"></a>computeHeading</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Spherical.computeHeading = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>to</td><td  [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Spherical.computeDistanceBetween = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>to,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>radius</td><td c [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Strategy-js.html b/doc/apidocs/files/OpenLayers/Strategy-js.html
index 22d0e98..e0a3263 100644
--- a/doc/apidocs/files/OpenLayers/Strategy-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/BBOX-js.html b/doc/apidocs/files/OpenLayers/Strategy/BBOX-js.html
index f0cfa46..e5edc9e 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/BBOX-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/BBOX-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/Cluster-js.html b/doc/apidocs/files/OpenLayers/Strategy/Cluster-js.html
index f454539..c5a2952 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/Cluster-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/Cluster-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/Filter-js.html b/doc/apidocs/files/OpenLayers/Strategy/Filter-js.html
index 86a257d..52a6674 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/Filter-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/Filter-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Filter.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivate the strategy.   Clear the feature cache.</p><h4 class=CHeading>Returns</h4><p>{Boolean} True if the strategy was successfully deactivated or false if the strategy was already i [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Filter.setFilter"></a>setFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Filter.setFilter"></a>setFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
 </div><!--Content-->
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/Fixed-js.html b/doc/apidocs/files/OpenLayers/Strategy/Fixed-js.html
index 0f99efc..cbac50d 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/Fixed-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/Fixed-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/Paging-js.html b/doc/apidocs/files/OpenLayers/Strategy/Paging-js.html
index 517673e..2cc4ec6 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/Paging-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/Paging-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageNum"></a>pageNum</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">pageNum: function()</td></tr></table></blockquote><p>Get the zero based page number.</p><h4 class=CHeading>Returns</h4><p>{Integer} The current page number being displayed.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageLength"></a>pageLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pageLength: function(</td><td class="PParameter  prettyprint " nowrap>newLength</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageLength"></a>pageLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pageLength: function(</td><td class="PParameter  prettyprint " nowrap>newLength</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageNext"></a>pageNext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pageNext: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/Refresh-js.html b/doc/apidocs/files/OpenLayers/Strategy/Refresh-js.html
index 4348bee..b7885f1 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/Refresh-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/Refresh-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Strategy/Save-js.html b/doc/apidocs/files/OpenLayers/Strategy/Save-js.html
index 1851b38..3850246 100644
--- a/doc/apidocs/files/OpenLayers/Strategy/Save-js.html
+++ b/doc/apidocs/files/OpenLayers/Strategy/Save-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Strategy.Save"></a>OpenLayers.<wbr>Strategy.Save</h1><div class=CBody><p>A strategy that commits newly created or modified features.   By default the strategy waits for a call to <a href="#OpenLayers.Strategy.Save.save" class=LFunction id=link4 onMouseOver="ShowTip(event, 'tt3', 'link4')" onMouseOut="HideTip('tt3')">save</a> before persisting changes.   By configuring the str [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">strategy.events.register(type, obj, listener);</pre></blockquote><ul><li><b>start</b> Triggered before saving</li><li><b>success</b> Triggered after a successful transaction</li>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Strategy.Save"></a>OpenLayers.<wbr>Strategy.Save</h1><div class=CBody><p>A strategy that commits newly created or modified features.   By default the strategy waits for a call to <a href="#OpenLayers.Strategy.Save.save" class=LFunction id=link4 onMouseOver="ShowTip(event, 'tt3', 'link4')" onMouseOut="HideTip('tt3')">save</a> before persisting changes.   By configuring the str [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the strategy object.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">strategy.events.register(type, obj, listener);</pre></blockquote><h4 class=C [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.auto"></a>auto</h3><div class=CBody><p>{Boolean | Number} Auto-save.   Default is false.   If true, features will be saved immediately after being added to the layer and with each modification or deletion.   If auto is a number, features will be saved on an interval provided by the value (in seconds).</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.Constructor"></a>Constructor</h3></div></div>
@@ -39,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Style-js.html b/doc/apidocs/files/OpenLayers/Style-js.html
index c248c2f..6c4268a 100644
--- a/doc/apidocs/files/OpenLayers/Style-js.html
+++ b/doc/apidocs/files/OpenLayers/Style-js.html
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.OpenLayers.Style"></a>OpenLayers.<wbr>Style</h3><div class=CBody><p>Creates a UserStyle.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>style</td><td class=CDLDescription>{Object} Optional hash of style properties that will be used as default style for this style object.  This style applies if no rules are specified.&n [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.OpenLayers.Style"></a>OpenLayers.<wbr>Style</h3><div class=CBody><p>Creates a UserStyle.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>style</td><td class=CDLDescription>{Object} Optional hash of style properties that will be used as default style for this style object.  This style applies if no rules are specified.&n [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.Functions"></a>Functions</h3></div></div>
 
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Style2-js.html b/doc/apidocs/files/OpenLayers/Style2-js.html
index 5a65b66..9640ee7 100644
--- a/doc/apidocs/files/OpenLayers/Style2-js.html
+++ b/doc/apidocs/files/OpenLayers/Style2-js.html
@@ -29,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.OpenLayers.Style2"></a>OpenLayers.<wbr>Style2</h3><div class=CBody><p>Creates a style representing a collection of rendering rules.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing properties to be set on the style.   Any documented properties may be set  [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.OpenLayers.Style2"></a>OpenLayers.<wbr>Style2</h3><div class=CBody><p>Creates a style representing a collection of rendering rules.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing properties to be set on the style.   Any documented properties may be set  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.Functions"></a>Functions</h3></div></div>
 
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/StyleMap-js.html b/doc/apidocs/files/OpenLayers/StyleMap-js.html
index 932d3c5..24cb551 100644
--- a/doc/apidocs/files/OpenLayers/StyleMap-js.html
+++ b/doc/apidocs/files/OpenLayers/StyleMap-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Symbolizer-js.html b/doc/apidocs/files/OpenLayers/Symbolizer-js.html
index f9575bc..ec8bc7e 100644
--- a/doc/apidocs/files/OpenLayers/Symbolizer-js.html
+++ b/doc/apidocs/files/OpenLayers/Symbolizer-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Symbolizer/Line-js.html b/doc/apidocs/files/OpenLayers/Symbolizer/Line-js.html
index 10c7e1f..68cd58f 100644
--- a/doc/apidocs/files/OpenLayers/Symbolizer/Line-js.html
+++ b/doc/apidocs/files/OpenLayers/Symbolizer/Line-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Symbolizer/Point-js.html b/doc/apidocs/files/OpenLayers/Symbolizer/Point-js.html
index 6e261e2..e60c699 100644
--- a/doc/apidocs/files/OpenLayers/Symbolizer/Point-js.html
+++ b/doc/apidocs/files/OpenLayers/Symbolizer/Point-js.html
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Symbolizer/Polygon-js.html b/doc/apidocs/files/OpenLayers/Symbolizer/Polygon-js.html
index c3b5836..b4d1ae7 100644
--- a/doc/apidocs/files/OpenLayers/Symbolizer/Polygon-js.html
+++ b/doc/apidocs/files/OpenLayers/Symbolizer/Polygon-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Symbolizer/Raster-js.html b/doc/apidocs/files/OpenLayers/Symbolizer/Raster-js.html
index 142c303..ccf653d 100644
--- a/doc/apidocs/files/OpenLayers/Symbolizer/Raster-js.html
+++ b/doc/apidocs/files/OpenLayers/Symbolizer/Raster-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Symbolizer/Text-js.html b/doc/apidocs/files/OpenLayers/Symbolizer/Text-js.html
index 6ab8581..d0e28e0 100644
--- a/doc/apidocs/files/OpenLayers/Symbolizer/Text-js.html
+++ b/doc/apidocs/files/OpenLayers/Symbolizer/Text-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Tile-js.html b/doc/apidocs/files/OpenLayers/Tile-js.html
index 209b312..83cad9e 100644
--- a/doc/apidocs/files/OpenLayers/Tile-js.html
+++ b/doc/apidocs/files/OpenLayers/Tile-js.html
@@ -11,17 +11,27 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile"></a>OpenLayers.Tile</h1><div class=CBody><p>This is a class designed to designate a single tile, however it is explicitly designed to do relatively little.  Tiles store information about themselves -- such as the URL that they are related to, and their size - but do not add themselves to the layer div automatically, for example.  Create a new tile with the <a href="#Ope [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile"></a>OpenLayers.Tile</h1><div class=CBody><p>This is a class designed to designate a single tile, however it is explicitly designed to do relatively little.  Tiles store information about themselves -- such as the URL that they are related to, and their size - but do not add themselves to the layer div automatically, for example.  Create a new tile with the <a href="#Ope [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Constants"></a>Constants</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Properties"></a>Properties</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the tile.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">tile.events.register(type, obj, listener);</pre></blockquote><h4 class=CHeading>Supported event typ [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Properties"></a>Properties</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for the e [...]
+    tileOptions: {
+        eventListeners: {
+            'loadend': function(evt) {
+                // do something on loadend
+            }
+        }
+    }
+});</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.bounds"></a>bounds</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt2', 'link8')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} null</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the tile.</p></div></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.bounds"></a>bounds</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Bounds</a>} null</p></div></div></div>
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.OpenLayers.Tile"></a>OpenLayers.Tile</h3><div class=CBody><p>Constructor for a new <a href="#OpenLayers.Tile.OpenLayers.Tile" class=LConstructor id=link9 onMouseOver="ShowTip(event, 'tt3', 'link9')" onMouseOut="HideTip('tt3')">OpenLayers.Tile</a> instance.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CD [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Functions"></a>Functions</h3></div></div>
 
@@ -33,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy:function()</td></tr></table></blockquote>Nullify references to prevent circular references and memory leaks.</div></div><div class=CToolTip id="tt3"><div class=CClass>This is a class designed to designate a single tile, how [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>on: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for registering listeners with a common scope. </div></div><div class=C [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Tile/Image-js.html b/doc/apidocs/files/OpenLayers/Tile/Image-js.html
index 8279bb1..1664bde 100644
--- a/doc/apidocs/files/OpenLayers/Tile/Image-js.html
+++ b/doc/apidocs/files/OpenLayers/Tile/Image-js.html
@@ -11,31 +11,44 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.Image"></a>OpenLayers.<wbr>Tile.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.Image" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Tile.Image</a> constructor.</p><h4 class=CH [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.Image"></a>OpenLayers.<wbr>Tile.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.Image.OpenLayers.Tile.Image" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.Image</a>  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.maxGetUrlLength"></a>maxGetUrlLength</h3><div class=CBody><p>{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.</p><h4 class=CHeading>Caution</h4><p>Older versions of Gecko based browsers (e.g.  Firefox < 3.5) and Opera &lt [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.url"></a>url</h3><div class=CBody><p>{String} The URL of the image being requested.  No default.  Filled in by layer.getURL() function.  May be modified by loadstart listeners.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.maxGetUrlLength"></a>maxGetUrlLength</h3><div class=CBody><p>{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.</p><h4 class=CHeading>Caution</h4><p>Older versions of Gecko based browsers (e.g.  Firefox < 3.5) and most Oper [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.crossOriginKeyword"></a>crossOriginKeyword</h3><div class=CBody><p>The value of the crossorigin keyword to use when loading images.  This is only relevant when using <a href="#OpenLayers.Tile.Image.getCanvasContext" class=LFunction id=link5 onMouseOver="ShowTip(event, 'tt3', 'link5')" onMouseOut="HideTip('tt3')">getCanvasContext</a> for tiles from remote origins and should be set to either &lsqu [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.OpenLayers.Tile.Image"></a>OpenLayers.<wbr>Tile.<wbr>Image</h3><div class=CBody><p>Constructor for a new <a href="#OpenLayers.Tile.Image.OpenLayers.Tile.Image" class=LConstructor id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.Image</a> instance.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.getCanvasContext"></a>getCanvasContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCanvasContext: function()</td></tr></table></blockquote><p>Returns a canvas context associated with the tile image (with the image drawn on it).  Returns undefined if the browser does not support canvas, if the tile has no image or i [...]
+if (context) {
+    var data = context.canvas.toDataURL('image/jpeg');
+}</pre></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean}</p></div></div></div>
+
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers. </div></div><div class=CToolTip id="tt3"><div class=CClass>This is a cl [...]
+<div class=CToolTip id="tt1"><div class=CConstructor>Constructor for a new OpenLayers.Tile.Image instance.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 ce [...]
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Tile/Image/IFrame-js.html b/doc/apidocs/files/OpenLayers/Tile/Image/IFrame-js.html
index c79d833..75d5d8c 100644
--- a/doc/apidocs/files/OpenLayers/Tile/Image/IFrame-js.html
+++ b/doc/apidocs/files/OpenLayers/Tile/Image/IFrame-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CConstant"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.Image.IFrame"></a>OpenLayers.<wbr>Tile.<wbr>Image.<wbr>IFrame</h1><div class=CBody><p>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.</p><p>This mixin will be applied to <a href="../Image-js.html#OpenLayers.Tile.Image" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'lin [...]
+<div id=Content><div class="CConstant"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.Image.IFrame"></a>OpenLayers.<wbr>Tile.<wbr>Image.<wbr>IFrame</h1><div class=CBody><p>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.</p><p>This mixin will be applied to <a href="../Image-js.html#OpenLayers.Tile.Image" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'lin [...]
 
 </div><!--Content-->
 
@@ -19,15 +19,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{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. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Tile/UTFGrid-js.html b/doc/apidocs/files/OpenLayers/Tile/UTFGrid-js.html
new file mode 100644
index 0000000..7f80256
--- /dev/null
+++ b/doc/apidocs/files/OpenLayers/Tile/UTFGrid-js.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Tile.UTFGrid - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.UTFGrid"></a>OpenLayers.<wbr>Tile.<wbr>UTFGrid</h1><div class=CBody><p>Instances of OpenLayers.Tile.UTFGrid are used to manage UTFGrids.  This is an unusual tile type in that it doesn’t have a rendered image; only a ‘hit grid’ that can be used to look up feature attributes.</p><p>See the <a href="#OpenLayers.Tile.UTFGrid.OpenLayers.Tile.UTFGrid" class=LConst [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.OpenLayers.Tile.UTFGrid"></a>OpenLayers.<wbr>Tile.<wbr>UTFGrid</h3><div class=CBody><p>Constructor for a new <a href="#OpenLayers.Tile.UTFGrid.OpenLayers.Tile.UTFGrid" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.UTFGrid</a> instance.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDes [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CConstructor>Constructor for a new OpenLayers.Tile.UTFGrid instance.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up.</div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="t [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Tile/WFS-js.html b/doc/apidocs/files/OpenLayers/Tile/WFS-js.html
deleted file mode 100644
index 6e32761..0000000
--- a/doc/apidocs/files/OpenLayers/Tile/WFS-js.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Tile.WFS - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><scr [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.WFS"></a>OpenLayers.<wbr>Tile.WFS</h1><div class=CBody><p>Instances of OpenLayers.Tile.WFS are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.WFS" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Tile.WFS</a> constructor.</p><h4 class=CHeading>Inherits [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Tile.WFS are used to manage the image tiles used by various layers. </div></div><div class=CToolTip id="tt3"><div class=CClass>This is a clas [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/files/OpenLayers/Tween-js.html b/doc/apidocs/files/OpenLayers/Tween-js.html
index 1f50e18..0069b3f 100644
--- a/doc/apidocs/files/OpenLayers/Tween-js.html
+++ b/doc/apidocs/files/OpenLayers/Tween-js.html
@@ -11,11 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tween"></a>OpenLayers.<wbr>Tween</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Tween" >OpenLayers.<wbr>Tween</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.INTERVAL"></a>INTERVAL</h3><div class=CBody><p>{int} Interval in milliseconds between 2 steps</p></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tween"></a>OpenLayers.<wbr>Tween</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Tween" >OpenLayers.<wbr>Tween</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.Properties"></a>Properties</h3></div></div>
 
@@ -53,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/OpenLayers/Util-js.html b/doc/apidocs/files/OpenLayers/Util-js.html
index 184a454..927140a 100644
--- a/doc/apidocs/files/OpenLayers/Util-js.html
+++ b/doc/apidocs/files/OpenLayers/Util-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Util"></a>Util</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Util" >Util</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Util.Functions" >Functions</a></td><td class=SDescription></t [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Util"></a>Util</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Util" >Util</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Util.Functions" >Functions</a></td><td class=SDescription></t [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Util.Functions"></a>Functions</h3></div></div>
 
@@ -27,6 +27,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="Util.IS_GECKO"></a>IS_GECKO</h3><div class=CBody><p>{Boolean} True if the userAgent reports the browser to use the Gecko engine</p></div></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="Util.CANVAS_SUPPORTED"></a>CANVAS_SUPPORTED</h3><div class=CBody><p>{Boolean} True if canvas 2d is supported.</p></div></div></div>
+
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="Util.BROWSER_NAME"></a>BROWSER_NAME</h3><div class=CBody><p>{String} A substring of the navigator.userAgent property.   Depending on the userAgent property, this will be the empty string or one of the following:</p><ul><li>”opera” -- Opera</li><li>”msie”  -- Internet Explorer</li><li>”safari” -- Safari</li><li>”firefox” -- Firefox</li><li>”mozilla” -- Mozill [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Util.Functions"></a>Functions</h3></div></div>
@@ -41,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/apidocs/files/deprecated-js.html b/doc/apidocs/files/deprecated-js.html
new file mode 100644
index 0000000..182f4d7
--- /dev/null
+++ b/doc/apidocs/files/deprecated-js.html
@@ -0,0 +1,439 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/deprecated.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/prettify.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPr [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="deprecated.js"></a>deprecated.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#deprecated.js" >deprecated.js</a></td><td class=SDescription></td></tr><tr class="SGeneric SMarked"><td class=SEntry><a href="#Deprecated" >Deprecated</ [...]
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Deprecated"></a>Deprecated</h3><div class=CBody><p>The deprecated.js script includes all methods, properties, and constructors that are not supported as part of the long-term API.   If you use any of these, you have to explicitly include this script in your application.</p><h4 class=CHeading>For example</h4><blockquote><pre class="prettyprint"><script src="deprecated.js" type="text/javascript"&g [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Class"></a>OpenLayers.<wbr>Class</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Class.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Class.OpenL [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.OpenLayers.create"></a>OpenLayers.<wbr>create</h3><div class=CBody><p><b>Deprecated</b>.   Old method to create an OpenLayers style class.   Use the <a href="#OpenLayers.Class" class=LClass >OpenLayers.Class</a> constructor instead.</p><h4 class=CHeading>Returns</h4><p>An OpenLayers class</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.inherit"></a>inherit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Util"></a>OpenLayers.Util</h2><div class=CBody></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax"></a>OpenLayers.Ajax</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Ajax.OpenLayers.loa [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.OpenLayers.loadURL"></a>OpenLayers.<wbr>loadURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.loadURL = function(</td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>params,</t [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Responders"></a>OpenLayers.<wbr>Ajax.<wbr>Responders</h2><div class=CBody><p>{Object}</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Base.Constructor" >Constructor</a></td><td class=SDescription></td></tr><tr class="SConstructor SIndent1 SMarked"><td class=SEntry><a href="#Ope [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h2><div class=CBody><p><b>Deprecated</b>.   Use <a href="OpenLayers/Request-js.html#OpenLayers.Request" class=LClass id=link70 onMouseOver="ShowTip(event, 'tt67', 'link70')" onMouseOut="HideTip('tt67')">OpenLayers.Request</a> method instead.</p><h4 class=CHeading>Inherit</h4><ul><li><a href="#OpenLayers.Ajax.Base" class=LClass >OpenLayers.Ajax.Base</a></li> [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Response.Constructor" >Constructor</a></td><td class=SDescription></td></tr><tr class="SConstructor SIndent1 SMarked"><td class=SEn [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>request</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Element"></a>OpenLayers.<wbr>Element</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Element.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Eleme [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.hide"></a>hide</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">hide: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Hide element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Show element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getDimensions"></a>getDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getDimensions: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.startsWith"></a>String.<wbr>startsWith</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string starts with another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sStart</td><td class=CDLDescription>{String} The string we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.contains"></a>String.<wbr>contains</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string contains another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>str</td><td class=CDLDescription>{String} The string that we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{Bool [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.trim"></a>String.trim</h3><div class=CBody><p><b>Deprecated</b>.  Removes leading and trailing whitespace characters from a string.</p><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{String} A trimmed version of the string</td><td class=CDLDescription>all leading and trailing spaces removed</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.camelize"></a>String.<wbr>camelize</h3><div class=CBody><p><b>Deprecated</b>.  Camel-case a hyphenated string.  Ex.  “chicken-head” becomes “chickenHead”, and “-chicken-head” becomes “ChickenHead”.</p><h4 class=CHeading>Returns</h4><p>{String} The string, camelized</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Function.bind"></a>Function.bind</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object.  Method to easily create closures with ‘this’ altered.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} the this parameter</td></tr></table><h4 class=CHea [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Function.bindAsEventListener"></a>Function.<wbr>bindAsEventListener</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object, and configure it to receive the event object as first parameter when called.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} A referenc [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Tile"></a>OpenLayers.Tile</h2><div class=CBody></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h2><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation" class=LClass id=link75 onMouseOver="ShowTip(event, 'tt68', 'link75')" onMouseOut="HideTip('tt68')">OpenLayers.Control.Navigation</a> instead!!! [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h3></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h2><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="OpenLayers/Control/NavToolbar-js.html#OpenLayers.Control.NavToolbar" class=LClass id=link78 onMouseOver="ShowTip(event, 'tt70', 'link78')" onMouseOut="HideTip('tt70')">OpenLayers.Control.NavToolbar</a> instead!!!</ [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.direction"></a>direction</h3><div class=CBody><p>{String} ‘vertical’ or ‘horizontal’</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>position</td><td class=CDLDescription>{<a href="OpenLayers/BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link79 onMouseOver="ShowTip(event, 'tt71', 'link7 [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.Grid"></a>OpenLayers.<wbr>Layer.Grid</h2><div class=CBody></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Format.XML"></a>OpenLayers.<wbr>Format.XML</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Format.XML.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLay [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.concatChildValues"></a>concatChildValues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>concatChildValues: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>def</td><td  [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h2><div class=CBody><p>Instances of OpenLayers.Layer.WMS.Post are used to retrieve data from OGC Web Mapping Services via HTTP-POST (application/x-www-form-urlencoded).  Create a new WMS layer with the <a href="#OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post" class=LConstructor id=link82 onMouseOver="ShowTip(event, 'tt73', 'link82')" onMouseOut="Hi [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.unsupportedBrowsers"></a>unsupportedBrowsers</h3><div class=CBody><p>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles from a WMS . Defaults to [“mozilla”, “firefox”, “opera”], because Opera is not able to show transparent images in IFrames and Firefox/Mozilla has some ugly effects of viewport-shaking wh [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h3><div class=CBody><p>Creates a new WMS layer object.</p><h4 class=CHeading>Example</h4><blockquote><pre class="prettyprint">var wms = new OpenLayers.Layer.WMS.Post(
+ "NASA Global Mosaic",
+ "http://wms.jpl.nasa.gov/wms.cgi",
+ {layers: "modis, global_mosaic"});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the WMS (e.g.  <a href="http://wms.jpl.nasa.gov/wms.cgi" class=LURL target=_top>http://wms.jpl.nasa.gov/wms.cgi</a>)</td></tr><tr><td class=CDLEntry [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h2><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.WMS and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link86 onMouseOver="ShowTip(event, 'tt74', 'link86')" onMous [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class= [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h2><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.MapServer and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/MapServer-js.html#OpenLayers.Layer.MapServer" class=LClass id=link87 onMouseOver="ShowTip(ev [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>par [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Tile.WFS"></a>OpenLayers.<wbr>Tile.WFS</h2><div class=CBody><p>Instances of OpenLayers.Tile.WFS are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.WFS" class=LClass id=link89 onMouseOver="ShowTip(event, 'tt77', 'link89')" onMouseOut="HideTip('tt77')">OpenLayers.Tile.WFS</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h2><div class=CBody><p>WFS handling class, for use as a featureClass on the WFS layer for handling ‘point’ WFS types.  Good for subclassing when creating a custom WFS like XML application.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Feature-js.html#OpenLayers.Feature" class=LClass id=link90 onMouseOver="ShowTip(event, 'tt10', 'l [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h3><div class=CBody><p>Create a WFS feature.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="OpenLayers/Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>xmlNode</td><t [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h2><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with a Protocol.WFS and one or more Strategies.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link102 onMouseOver="ShowTip(event, 'tt78', 'link102')" onMouseOut="HideTip('tt78') [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} WFS layer is not a base layer by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.ratio"></a>ratio</h3><div class=CBody><p>{Float} The ratio property determines the size of the serverside query relative to the map viewport size.  By default, we load an area twice as big as the map, to allow for panning without immediately reload.  Setting this to 1 will cause the area of the WFS request to match the map area exactly.  It is recommended to set this to some number at l [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.featureClass"></a>featureClass</h3><div class=CBody><p>{<a href="OpenLayers/Feature-js.html#OpenLayers.Feature" class=LClass id=link103 onMouseOver="ShowTip(event, 'tt10', 'link103')" onMouseOut="HideTip('tt10')">OpenLayers.Feature</a>} If featureClass is defined, an old-style markers based WFS layer is created instead of a new-style vector layer.  If sent, this should be a subclass of OpenLayers [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.format"></a>format</h3><div class=CBody><p>{<a href="OpenLayers/Format-js.html#OpenLayers.Format" class=LClass id=link104 onMouseOver="ShowTip(event, 'tt11', 'link104')" onMouseOut="HideTip('tt11')">OpenLayers.Format</a>} The format you want the data to be parsed with.  Must be passed in the constructor.  Should be a class, not an instance.  This option can only be used if no featureCla [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.encodeBBOX"></a>encodeBBOX</h3><div class=CBody><p>{Boolean} Should the BBOX commas be encoded?  The WMS spec says ‘no’, but some services want it that way.  Default false.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Should the WFS layer parse attributes from the retrieved GML?  Defaults to false.  If enabled, parsing is slower, but attributes are available in the attributes property of layer features.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>{Object}</td></tr>< [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams:function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getFullRequestString"></a>getFullRequestString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFullRequestString:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">commit: function()</td></tr></table></blockquote><p>Write out the data to a WFS server.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitReport"></a>commitReport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitReport: function(</td><td class="PParameter  prettyprint " nowrap>string,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>response</td><td class="PA [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.refresh"></a>refresh</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">refresh: function()</td></tr></table></blockquote><p>Refreshes all the features of the layer</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getDataExtent"></a>getDataExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getDataExtent: function ()</td></tr></table></blockquote><p>Calculates the max extent which includes all of the layer data.</p><h4 class=CHeading>Returns</h4><p>{<a href="OpenLayers/BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link10 [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function (</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h2><div class=CBody><p><b>Deprecated</b>.  Use <a href="OpenLayers/Layer/Bing-js.html#OpenLayers.Layer.Bing" class=LClass id=link119 onMouseOver="ShowTip(event, 'tt80', 'link119')" onMouseOut="HideTip('tt80')">OpenLayers.Layer.Bing</a> instead.</p><p>Instances of OpenLayers.Layer.VirtualEarth are used to display the data from the Bing Maps AJAX  [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 1</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 19</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.type"></a>type</h3><div class=CBody><p>{VEMapType}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.VirtualEarth.sphericalMercator" class=LProperty id=link123 onMouseOver="ShowTip(event, 'tt84', 'link123')" onMouseOut="HideTip('tt84')">sphericalMercator</a> is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.animationEnabled"></a>animationEnabled</h3><div class=CBody><p>{Boolean} If set to true, the transition between zoom levels will be animated.  Set to false to match the zooming experience of other layer types.  Default is true.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h3><div class=CBody><p>Creates a new instance of a OpenLayers.Layer.VirtualEarth.  If you use an instance of OpenLayers.Layer.VirtualEarth in you map, you should set the <a href="OpenLayers/Map-js.html#OpenLayers.Map" class=LClass id=link124 onMouseOver="ShowTip(event, 'tt85', 'link124')" onMouseOut="HideTip(' [...]
+    // other map options
+    restrictedExtent : OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
+} );
+
+var veLayer = new OpenLayers.Layer.VirtualEarth (
+    "Virtual Earth Layer"
+);
+
+map.addLayer( veLayer );</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td cla [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td cl [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParamet [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h2><div class=CBody><p>Abstract SQL protocol class.   Not to be instantiated directly.   Use one of the SQL protocol subclasses instead.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Protocol-js.html#OpenLayers.Protocol" class=LClass id=link127 onMouseOver="ShowTip(event, 'tt86', 'link127')" onMouseOut="HideTip('tt86')">OpenLayers.Prot [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.databaseName"></a>databaseName</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.tableName"></a>tableName</h3><div class=CBody><p>Name of the database table into which Features should be saved.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h3></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>This should be overridden by specific subclasses</p><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SQL backend</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h2><div class=CBody><p>This Protocol stores feature in the browser via the Gears Database module <a href="http://code.google.com/apis/gears/api_database.html" class=LURL target=_top>http://code.google.com<wbr>/apis<wbr>/gears<wbr>/api_database.html</a>.</p><p>The main advantage is that all the read, create, update and delete operations can be do [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h3></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>Determine whether a browser supports Gears</p><h4 class=CHeading>Returns</h4><p>{Boolean} The browser supports Gears</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>R [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h2><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/EventPane-js.html#OpenLayers.Layer.EventPane" class=LClass id=link172 onMouseOver="ShowTip(event, 'tt82', 'link172')" onMouseOut="HideTip('tt82')">OpenLayers.Layer.EventPane</a></li><li><a href="OpenLayers/Layer/FixedZoomLevels-js.html#OpenLayers.Layer.FixedZoomLevels" class [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 0</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 17</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.type"></a>type</h3><div class=CBody><p>{YahooMapType}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.Yahoo.sphericalMercator" class=LProperty id=link174 onMouseOver="ShowTip(event, 'tt89', 'link174')" onMouseOut="HideTip('tt89')">sphericalMercator</a> is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Overri [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getOLZoomFromMapObjectZoom"></a>getOLZoomFromMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOLZoomFromMapObjectZoom: function(</td><td class="PParameter  prettyprint " nowrap>moZoom</td><td class="PAfterParameters  prettyprint "now [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoomFromOLZoom"></a>getMapObjectZoomFromOLZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectZoomFromOLZoom: function(</td><td class="PParameter  prettyprint " nowrap>olZoom</td><td class="PAfterParameters  prettyprint "now [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom</ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><td class [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAf [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PA [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  pr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter   [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " now [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectSizeFromOLSize"></a>getMapObjectSizeFromOLSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectSizeFromOLSize: function(</td><td class="PParameter  prettyprint " nowrap>olSize</td><td class="PAfterParameters  prettyprint "now [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h2><div class=CBody><p>Create a vector layer by parsing a GML file.  The GML file is passed in as a parameter.  <b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with Protocol.HTTP and Strategy.Fixed.  Provide the protocol with a format parameter to get the parser you want for your data.</p><h4 class=CHeading>Inherits [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.format"></a>format</h3><div class=CBody><p>{<a href="OpenLayers/Format-js.html#OpenLayers.Format" class=LClass id=link180 onMouseOver="ShowTip(event, 'tt11', 'link180')" onMouseOut="HideTip('tt11')">OpenLayers.Format</a>} The format you want the data to be parsed with.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h3><div class=CBody><p>Load and parse a single file on the web, according to the format provided via the ‘format’ option, defaulting to GML.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CD [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.setVisibility"></a>setVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visibility,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>noEvent</td><td cla [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h2><div class=CBody><p>This class is <b>not supported</b>, and probably isn’t what you’re looking for.  Instead, most users probably want something like:</p><blockquote><pre class="prettyprint">var poly = new OpenLayers.Bounds(0,0,10,10).toGeometry();</pre></blockquote><p>This will create a rectangular Polygon geometry.</p><h4 class= [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>points</td><td class=CDLDescription>{Array(<a href="OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link184 onMouseOver="ShowTip(event, 'tt92', [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The length of the geometry</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The area of the geometry</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h2><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Renderer/Elements-js.html#OpenLayers.Renderer.Elements" class=LClass id=link185 onMouseOver="ShowTip(event, 'tt93', 'link185')" onMouseOut="HideTip('tt93')">OpenLayers.Renderer.Elements</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBo [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.  To be defined by subclasses.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.  Supported options are:</td></tr></tab [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h2><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="#OpenLayers.Renderer.NG" class=LClass >OpenLayers.Renderer.NG</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Renderer.SVG [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SVG renderer</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_ALIGN"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_ALIGN</h3><div class=CBody><p>{Object}</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VSHIFT"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VSHIFT</h3><div class=CBody><p>{Object}</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VFACTOR"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VFACTOR</h3><div class=CBody><p>{Object}</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=MEnt [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="tt2"><div class= [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/index/Classes.html b/doc/apidocs/index/Classes.html
index 0979cf2..6d285c2 100644
--- a/doc/apidocs/index/Classes.html
+++ b/doc/apidocs/index/Classes.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="#O">O</a> · P · Q · R · S · T · <a href="Classes2.html#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class= [...]
+<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="#O">O</a> · P · Q · R · <a href="Classes2.html#S">S</a> · T · <a href="Classes2.html#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing= [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>The OpenLayers object provides a namespace for all things OpenLayers</div></div><div class=CToolTip id="tt2"><div class=CClass><b>Deprecated</b>. </div></div><div class=CToolTip id="tt3"><div class=CClass>{Object}</div></div><div class=CToolTip id="tt4"><div class=CClass>Contains convenience functions for array manipulation.</div></div><div class=CToolTip id="tt5"><div class=CClass>Instances of this class represent bounding boxes. </div></di [...]
+<div class=CToolTip id="tt1"><div class=CClass>The OpenLayers object provides a namespace for all things OpenLayers</div></div><div class=CToolTip id="tt2"><div class=CClass><b>Deprecated</b>. </div></div><div class=CToolTip id="tt3"><div class=CClass>{Object}</div></div><div class=CToolTip id="tt4"><div class=CClass>A collection of utility functions for executing methods that repaint a portion of the browser window. </div></div><div class=CToolTip id="tt5"><div class=CClass>Contains con [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Classes2.html b/doc/apidocs/index/Classes2.html
index 39295a7..8f01d79 100644
--- a/doc/apidocs/index/Classes2.html
+++ b/doc/apidocs/index/Classes2.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="Classes.html#O">O</a> · P · Q · R · S · T · <a href="#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=I [...]
+<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="Classes.html#O">O</a> · P · Q · R · <a href="#S">S</a> · T · <a href="#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing=0 cellpadding= [...]
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt299"><div class=CClass>The OpenLayers.Spherical namespace includes utility functions for calculations on the basis of a spherical earth (ignoring ellipsoidal effects), which is accurate enough for most purposes.</div></div><!--END_ND_TOOLTIPS-->
+
+
 <!--START_ND_TOOLTIPS-->
 <!--END_ND_TOOLTIPS-->
 
@@ -21,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Constants.html b/doc/apidocs/index/Constants.html
index 0c7dfa8..206dda1 100644
--- a/doc/apidocs/index/Constants.html
+++ b/doc/apidocs/index/Constants.html
@@ -11,77 +11,73 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constant Index</div><div class=INavigationBar>$#! · 0-9 · A · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · G · H · <a href="#I">I</a> · J · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · N · <a href="#O">O</a> · P · Q · <a href="#R">R</a> · [...]
+<div id=Index><div class=IPageTitle>Constant Index</div><div class=INavigationBar>$#! · 0-9 · A · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · E · <a href="#F">F</a> · G · H · <a href="#I">I</a> · J · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · N · <a href="#O">O</a> · P · Q · <a href="#R">R</a> · <a href="#S">S</ [...]
 <!--START_ND_TOOLTIPS-->
 <div class=CToolTip id="tt1"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt2"><div class=CConstant>{Array(String)} supported events</div></div><div class=CToolTip id="tt3"><div class=CConstant>{String} A substring of the navigator.userAgent property. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt4"><div class=CConstant>{Integer} 5. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt4"><div class=CConstant>{Boolean} True if canvas 2d is supported.</div></div><div class=CToolTip id="tt5"><div class=CConstant>{Integer} 5. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt5"><div class=CConstant>{Object} Default configuration for all requests.</div></div><div class=CToolTip id="tt6"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt7"><div class=CConstant>{Object} Default layers properties.</div></div><div class=CToolTip id="tt8"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs</div></div><div class=CToolTip id="tt9"><div class=CConstant> [...]
+<div class=CToolTip id="tt6"><div class=CConstant>{Object} Default configuration for all requests.</div></div><div class=CToolTip id="tt7"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt8"><div class=CConstant>{Object} Default layers properties.</div></div><div class=CToolTip id="tt9"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs</div></div><div class=CToolTip id="tt10"><div class=CConstant [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt22"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt23"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt24"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt25"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt26"><div c [...]
+<div class=CToolTip id="tt23"><div class=CConstant>{Object} Hashtable of parameter key/value pairs which describe the folder structure for tiles as configured in the mapguide serverconfig.ini section [TileServiceProperties]</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt32"><div class=CConstant>{Object} Hashtable of parameter key/value pairs which describe the folder structure for tiles as configured in the mapguide serverconfig.ini section [TileServiceProperties]</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt24"><div class=CConstant>Mixin for tiles that use form-encoded POST requests to get images from remote services. </div></div><div class=CToolTip id="tt25"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt26"><div class=CConstant>{Object} Constant inches per unit -- borrowed from MapServer mapscale.c derivation of nautical miles from http://en.wikipedia.org/wiki/Nautical_mile Includes the full set  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt33"><div class=CConstant>Mixin for tiles that use form-encoded POST requests to get images from remote services. </div></div><div class=CToolTip id="tt34"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt35"><div class=CConstant>{Object} Constant inches per unit -- borrowed from MapServer mapscale.c derivation of nautical miles from http://en.wikipedia.org/wiki/Nautical_mile Includes the full set  [...]
+<div class=CToolTip id="tt28"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt29"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt30"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt31"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt32"><div class=CConstant>keydown, keypress, keyup</div></div><div class=CToolTip id="tt33"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt34"><div class=CConstant>{int}</div></d [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt38"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt39"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt40"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt41"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt42"><div class=CConstant>keydown, keypress, keyup</div></div><div class=CToolTip id="tt43"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt44"><div class=CConstant>{int}</div></d [...]
+<div class=CToolTip id="tt39"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt40"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt41"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt42"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt43"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt44"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt45"><div class=CConstant>{Object}</div>< [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt48"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt49"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt50"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt51"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt52"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt53"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt54"><div class=CConstant>{Object}</div>< [...]
+<div class=CToolTip id="tt52"><div class=CConstant>{Integer} Firefox has a limitation where values larger or smaller than about 15000 in an SVG document lock the browser up. </div></div><div class=CToolTip id="tt53"><div class=CConstant>{Integer} 21</div></div><div class=CToolTip id="tt54"><div class=CConstant>{Integer} 19</div></div><div class=CToolTip id="tt55"><div class=CConstant>{Integer} 17</div></div><div class=CToolTip id="tt56"><div class=CConstant>{Integer} 0</div></div><div cl [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt60"><div class=CConstant>{Integer} Firefox has a limitation where values larger or smaller than about 15000 in an SVG document lock the browser up. </div></div><div class=CToolTip id="tt61"><div class=CConstant>{Integer} 21</div></div><div class=CToolTip id="tt62"><div class=CConstant>{Integer} 17</div></div><div class=CToolTip id="tt63"><div class=CConstant>{Integer} 19</div></div><div class=CToolTip id="tt64"><div class=CConstant>{Integer} 17</div></div><div c [...]
+<div class=CToolTip id="tt63"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt73"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt64"><div class=CConstant>{Integer} Constant used to make the control work in reshape mode</div></div><div class=CToolTip id="tt65"><div class=CConstant>{Integer} Constant used to make the control work in resize mode</div></div><div class=CToolTip id="tt66"><div class=CConstant>{Array} The properties that are used for calculating resolutions information.</div></div><div class=CToolTip id="tt67"><div class=CConstant>{Array(Float)} Hardcode these resolutions so tha [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt74"><div class=CConstant>{Integer} Constant used to make the control work in reshape mode</div></div><div class=CToolTip id="tt75"><div class=CConstant>{Integer} Constant used to make the control work in resize mode</div></div><div class=CToolTip id="tt76"><div class=CConstant>{Array} The properties that are used for calculating resolutions information.</div></div><div class=CToolTip id="tt77"><div class=CConstant>{Array(Float)} Hardcode these resolutions so tha [...]
+<div class=CToolTip id="tt71"><div class=CConstant>Enumeration for service types</div></div><div class=CToolTip id="tt72"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><div class=CToolTip id="tt73"><div class=CConstant>TODO: remove this in 3.0 when we stop supporting build profiles that include OpenLayers.js</div></div><div class=CToolTip id="tt74"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt82"><div class=CConstant>Enumeration for service types</div></div><div class=CToolTip id="tt83"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><div class=CToolTip id="tt84"><div class=CConstant>TODO: remove this in 3.0 when we stop supporting build profiles that include OpenLayers.js</div></div><div class=CToolTip id="tt85"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and  [...]
+<div class=CToolTip id="tt78"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt79"><div class=CConstant>{Integer} 256 Default tile height (unless otherwise specified)</div></div><div class=CToolTip id="tt80"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for tiled layer</div></div><div class=CToolTip id="tt81"><div class=CConstant>{Integer} 256 Default  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt89"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt90"><div class=CConstant>{Integer} 256 Default tile height (unless otherwise specified)</div></div><div class=CToolTip id="tt91"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for tiled layer</div></div><div class=CToolTip id="tt92"><div class=CConstant>{Integer} 256 Default  [...]
+<div class=CToolTip id="tt82"><div class=CConstant>{Float} Used to hash URL param strings for multi-WMS server selection. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt93"><div class=CConstant>{Float} Used to hash URL param strings for multi-WMS server selection. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt83"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v2.</div></div><div class=CToolTip id="tt84"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v3.</div></div><div class=CToolTip id="tt85"><div class=CConstant>{String} 1.0.0</div></div><div class=CToolTip id="tt86"><div class=CConstant>{String} 1.1.0</div></div><div class=CToolTip id="tt87"><div class=CConstant>{String} 0.3.1</div></div><div  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt94"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v2.</div></div><div class=CToolTip id="tt95"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v3. </div></div><div class=CToolTip id="tt96"><div class=CConstant>{String} 1.0.0</div></div><div class=CToolTip id="tt97"><div class=CConstant>{String} 1.1.0</div></div><div class=CToolTip id="tt98"><div class=CConstant>{String} 0.3.1</div></div><div [...]
+<div class=CToolTip id="tt97"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt108"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt98"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt109"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt110"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt99"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><!--END_ND_TOOLTIPS-->
 
 </div><!--Index-->
 
@@ -89,10 +85,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Constructor.html b/doc/apidocs/index/Constructor.html
index 2cf24dd..ded056b 100644
--- a/doc/apidocs/index/Constructor.html
+++ b/doc/apidocs/index/Constructor.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · <a href="#J">J</a> · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · <a href="#N">N</a [...]
+<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · <a href="#J">J</a> · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · <a href="#N">N</a [...]
 <!--START_ND_TOOLTIPS-->
 <div class=CToolTip id="tt1"><div class=CConstructor>Create a new ArcGIS93Rest layer object.</div></div><div class=CToolTip id="tt2"><div class=CConstructor>Creates a new instance of this class</div></div><div class=CToolTip id="tt3"><div class=CConstructor>Create a new ArcIMS layer object.</div></div><div class=CToolTip id="tt4"><div class=CConstructor>Create a new parser/writer for ArcXML. </div></div><div class=CToolTip id="tt5"><div class=CConstructor>Create a new parser for Atom.</d [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt6"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt7"><div class=CConstructor>Create a new BBOX strategy.</div></div><div class=CToolTip id="tt8"><div class=CConstructor>Create a new Bing layer.</div></div><div class=CToolTip id="tt9"><div class=CConstructor>Construct a new bounds object.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt6"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt7"><div class=CConstructor>Create a new BBOX strategy.</div></div><div class=CToolTip id="tt8"><div class=CConstructor>Create a new Bing layer.</div></div><div class=CToolTip id="tt9"><div class=CConstructor>Construct a new bounds object. </div></div><div class=CToolTip id="tt10"><div class=CConstructor>Construct a buttonclick event type. </div></di [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CConstructor>Base class used to construct all other classes. </div></div><div class=CToolTip id="tt11"><div class=CConstructor>Create a new click handler.</div></div><div class=CToolTip id="tt12"><div class=CConstructor>Create a new clustering strategy.</div></div><div class=CToolTip id="tt13"><div class=CConstructor>Creates a Geometry Collection -- a list of geoms.</div></div><div class=CToolTip id="tt14"><div class=CConstructor>Creates a compari [...]
+<div class=CToolTip id="tt11"><div class=CConstructor>Create a new click handler.</div></div><div class=CToolTip id="tt12"><div class=CConstructor>Create a new clustering strategy.</div></div><div class=CToolTip id="tt13"><div class=CConstructor>Creates a Geometry Collection -- a list of geoms.</div></div><div class=CToolTip id="tt14"><div class=CConstructor>Creates a comparison rule.</div></div><div class=CToolTip id="tt15"><div class=CConstructor>Create a new parser for Context documen [...]
 
 
 <!--START_ND_TOOLTIPS-->
@@ -45,31 +45,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt45"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt46"><div class=CConstructor>Create a new image layer</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt45"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt46"><div class=CConstructor>Create a new image layer</div></div><div class=CToolTip id="tt47"><div class=CConstructor>Constructor for a new OpenLayers.Tile.Image instance.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt47"><div class=CConstructor>Create a new parser for JSON.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt48"><div class=CConstructor>Create a new parser for JSON.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt48"><div class=CConstructor>Returns a new keyboard handler.</div></div><div class=CToolTip id="tt49"><div class=CConstructor>Create a new parser for KML.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt49"><div class=CConstructor>Returns a new keyboard handler.</div></div><div class=CToolTip id="tt50"><div class=CConstructor>Create a new parser for KML.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt50"><div class=CConstructor>Create a symbolizer for rendering lines.</div></div><div class=CToolTip id="tt51"><div class=CConstructor>Linear rings are constructed with an array of points. </div></div><div class=CToolTip id="tt52"><div class=CConstructor>Create a new LineString geometry</div></div><div class=CToolTip id="tt53"><div class=CConstructor>Creates a logical filter (And, Or, Not).</div></div><div class=CToolTip id="tt54"><div class=CConstructor>Create a [...]
+<div class=CToolTip id="tt51"><div class=CConstructor>Create a symbolizer for rendering lines.</div></div><div class=CToolTip id="tt52"><div class=CConstructor>Linear rings are constructed with an array of points. </div></div><div class=CToolTip id="tt53"><div class=CConstructor>Create a new LineString geometry</div></div><div class=CToolTip id="tt54"><div class=CConstructor>Creates a logical filter (And, Or, Not).</div></div><div class=CToolTip id="tt55"><div class=CConstructor>Create a [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt55"><div class=CConstructor>Constructor for a new OpenLayers.Map instance. </div></div><div class=CToolTip id="tt56"><div class=CConstructor>Create a new Mapguide layer, either tiled or untiled.</div></div><div class=CToolTip id="tt57"><div class=CConstructor>Create a new MapServer layer object</div></div><div class=CToolTip id="tt58"><div class=CConstructor>Create a Markers layer.</div></div><div class=CToolTip id="tt59"><div class=CConstructor>Create a new mod [...]
+<div class=CToolTip id="tt56"><div class=CConstructor>Constructor for a new OpenLayers.Map instance. </div></div><div class=CToolTip id="tt57"><div class=CConstructor>Create a new Mapguide layer, either tiled or untiled.</div></div><div class=CToolTip id="tt58"><div class=CConstructor>Create a new MapServer layer object</div></div><div class=CToolTip id="tt59"><div class=CConstructor>Create a Markers layer.</div></div><div class=CToolTip id="tt60"><div class=CConstructor>Create a new mod [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt63"><div class=CConstructor>Create a new navigation control</div></div><div class=CToolTip id="tt64"><div class=CConstructor>Add our two mousedefaults controls.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt64"><div class=CConstructor>Create a new navigation control</div></div><div class=CToolTip id="tt65"><div class=CConstructor>Add our two mousedefaults controls.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt65"><div class=CConstructor>Create a new parser for OGC exception reports.</div></div><div class=CToolTip id="tt66"><div class=CConstructor>Create a new parser for OSM.</div></div><div class=CToolTip id="tt67"><div class=CConstructor>Create a new overview map</div></div><div class=CToolTip id="tt68"><div class=CConstructor>Create a new parser for OWSCommon.</div></div><div class=CToolTip id="tt69"><div class=CConstructor>Create a new parser for OWS Context docum [...]
+<div class=CToolTip id="tt66"><div class=CConstructor>Create a new parser for OGC exception reports.</div></div><div class=CToolTip id="tt67"><div class=CConstructor>Base class used to construct all other classes. </div></div><div class=CToolTip id="tt68"><div class=CConstructor>Create a new parser for OSM.</div></div><div class=CToolTip id="tt69"><div class=CConstructor>Create a new overview map</div></div><div class=CToolTip id="tt70"><div class=CConstructor>Create a new parser for OWS [...]
 
 </div><!--Index-->
 
@@ -77,10 +77,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Constructor2.html b/doc/apidocs/index/Constructor2.html
index cafa4c3..3a3ba00 100644
--- a/doc/apidocs/index/Constructor2.html
+++ b/doc/apidocs/index/Constructor2.html
@@ -11,29 +11,29 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
+<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt70"><div class=CConstructor>Create a new paging strategy.</div></div><div class=CToolTip id="tt71"><div class=CConstructor>Control which handles the panning (in any of the cardinal directions) of the map by a set px distance.</div></div><div class=CToolTip id="tt72"><div class=CConstructor>Create a new control panel.</div></div><div class=CToolTip id="tt73"><div class=CConstructor>Add the four directional pan buttons.</div></div><div class=CToolTip id="tt74"><di [...]
+<div class=CToolTip id="tt72"><div class=CConstructor>Create a new paging strategy.</div></div><div class=CToolTip id="tt73"><div class=CConstructor>Control which handles the panning (in any of the cardinal directions) of the map by a set px distance.</div></div><div class=CToolTip id="tt74"><div class=CConstructor>Create a new control panel.</div></div><div class=CToolTip id="tt75"><div class=CConstructor>Add the four directional pan buttons.</div></div><div class=CToolTip id="tt76"><di [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt90"><div class=CConstructor>Create a symbolizer for rendering rasters.</div></div><div class=CToolTip id="tt91"><div class=CConstructor>Create a new Refresh strategy.</div></div><div class=CToolTip id="tt92"><div class=CConstructor>Create a new regular polygon handler.</div></div><div class=CToolTip id="tt93"><div class=CConstructor>Create a new root container for multiple vector layer. </div></div><div class=CToolTip id="tt94"><div class=CConstructor>Creates a  [...]
+<div class=CToolTip id="tt92"><div class=CConstructor>Create a symbolizer for rendering rasters.</div></div><div class=CToolTip id="tt93"><div class=CConstructor>Create a new Refresh strategy.</div></div><div class=CToolTip id="tt94"><div class=CConstructor>Create a new regular polygon handler.</div></div><div class=CToolTip id="tt95"><div class=CConstructor>Create a new root container for multiple vector layer. </div></div><div class=CToolTip id="tt96"><div class=CConstructor>Creates a  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt95"><div class=CConstructor>Create a new Save strategy.</div></div><div class=CToolTip id="tt96"><div class=CConstructor>Create a new scale line control.</div></div><div class=CToolTip id="tt97"><div class=CConstructor>A class for giving layers generic Script protocol.</div></div><div class=CToolTip id="tt98"><div class=CConstructor>Create a new control for selecting features.</div></div><div class=CToolTip id="tt99"><div class=CConstructor>Create an instance of [...]
+<div class=CToolTip id="tt97"><div class=CConstructor>Create a new Save strategy.</div></div><div class=CToolTip id="tt98"><div class=CConstructor>Create a new scale line control.</div></div><div class=CToolTip id="tt99"><div class=CConstructor>A class for giving layers generic Script protocol.</div></div><div class=CToolTip id="tt100"><div class=CConstructor>Create a new control for selecting features.</div></div><div class=CToolTip id="tt101"><div class=CConstructor>Create an instance  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt110"><div class=CConstructor>Create a new parser for TSV Text.</div></div><div class=CToolTip id="tt111"><div class=CConstructor>Create a text layer.</div></div><div class=CToolTip id="tt112"><div class=CConstructor>Create a symbolizer for rendering text labels.</div></div><div class=CToolTip id="tt113"><div class=CConstructor>Create a new read only TileCache layer.</div></div><div class=CToolTip id="tt114"><div class=CConstructor>Create a new navigation control [...]
+<div class=CToolTip id="tt112"><div class=CConstructor>Create a new parser for TSV Text.</div></div><div class=CToolTip id="tt113"><div class=CConstructor>Create a text layer.</div></div><div class=CToolTip id="tt114"><div class=CConstructor>Create a symbolizer for rendering text labels.</div></div><div class=CToolTip id="tt115"><div class=CConstructor>Constructor for a new OpenLayers.Tile instance.</div></div><div class=CToolTip id="tt116"><div class=CConstructor>Create a new read only  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt120"><div class=CConstructor>Create a new UTFGrid layer.</div></div><div class=CToolTip id="tt121"><div class=CConstructor>Constructor for a new OpenLayers.Tile.UTFGrid instance.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt117"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt118"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt119"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt120"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id=" [...]
+<div class=CToolTip id="tt122"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt123"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt124"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt125"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id=" [...]
 
 </div><!--Index-->
 
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Constructor3.html b/doc/apidocs/index/Constructor3.html
index 015622f..e61d151 100644
--- a/doc/apidocs/index/Constructor3.html
+++ b/doc/apidocs/index/Constructor3.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
+<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt152"><div class=CConstructor>Create a WFS feature.</div></div><div class=CToolTip id="tt153"><div class=CConstructor>Create a WFS-T formatter. </div></div><div class=CToolTip id="tt154"><div class=CConstructor>A class for giving layers WFS protocol.</div></div><div class=CToolTip id="tt155"><div class=CConstructor>Create a new parser for WFS capabilities.</div></div><div class=CToolTip id="tt156"><div class=CConstructor>Create a new parser for WFS DescribeFeatur [...]
+<div class=CToolTip id="tt159"><div class=CConstructor>Create a WFS feature.</div></div><div class=CToolTip id="tt160"><div class=CConstructor>Create a WFS-T formatter. </div></div><div class=CToolTip id="tt161"><div class=CConstructor>A class for giving layers WFS protocol.</div></div><div class=CToolTip id="tt162"><div class=CConstructor>Create a new parser for WFS capabilities.</div></div><div class=CToolTip id="tt163"><div class=CConstructor>Create a new parser for WFS DescribeFeatur [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt167"><div class=CConstructor>Create a new parser for XLS.</div></div><div class=CToolTip id="tt168"><div class=CConstructor>Construct an XML parser. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt174"><div class=CConstructor>Create a new parser for XLS.</div></div><div class=CToolTip id="tt175"><div class=CConstructor>Construct an XML parser. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt169"><div class=CConstructor>Add the three zooming controls.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt176"><div class=CConstructor>Add the three zooming controls.</div></div><!--END_ND_TOOLTIPS-->
 
 </div><!--Index-->
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Files.html b/doc/apidocs/index/Files.html
index 1aecb54..cf97e2a 100644
--- a/doc/apidocs/index/Files.html
+++ b/doc/apidocs/index/Files.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · B · <a href="#C">C</a> · D · E · F · G · H · I · J · K · L · M · N · <a href="#O">O</a> · P · Q · R · <a href="#S">S</a> · T · U · <a href="#V">V</a> · W · X · Y · Z</div><table border=0 cells [...]
+<div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · B · <a href="#C">C</a> · <a href="#D">D</a> · E · F · G · H · I · J · K · L · M · N · <a href="#O">O</a> · P · Q · R · <a href="#S">S</a> · T · U · <a href="#V">V</a> · W · X · Y · Z</div><tab [...]
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
 <!--START_ND_TOOLTIPS-->
 <!--END_ND_TOOLTIPS-->
 
@@ -37,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions.html b/doc/apidocs/index/Functions.html
index cd3b9c8..053f27b 100644
--- a/doc/apidocs/index/Functions.html
+++ b/doc/apidocs/index/Functions.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K · <a hr [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K · <a hr [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request, the response object passed to this method must come from th [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request, the response object passed to this method must come from th [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt45"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>bind: function(</td><td class="PParameter  prettyprint " nowrap>func,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Bind a function [...]
+<div class=CToolTip id="tt45"><div class=CFunction><b>Deprecated</b>. </div></div><div class=CToolTip id="tt46"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>bind: function(</td><td class="PParameter  prettyprint " nowrap>func,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  pre [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions2.html b/doc/apidocs/index/Functions2.html
index 16b8c2c..3525474 100644
--- a/doc/apidocs/index/Functions2.html
+++ b/doc/apidocs/index/Functions2.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K & [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K & [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt50"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bounds for the geometry.</div></div><div class=CToolTip id="tt51"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bo [...]
+<div class=CToolTip id="tt50"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bounds for the geometry.</div></div><div class=CToolTip id="tt51"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bo [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions3.html b/doc/apidocs/index/Functions3.html
index de8e127..8b032bf 100644
--- a/doc/apidocs/index/Functions3.html
+++ b/doc/apidocs/index/Functions3.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K & [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K & [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt113"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function ()</td></tr></table></blockquote>Deactivates a control and it’s associated handler if any. </div></div><div class=CToolTip id="tt114"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote>D [...]
+<div class=CToolTip id="tt119"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function ()</td></tr></table></blockquote>Deactivates a control and it’s associated handler if any. </div></div><div class=CToolTip id="tt120"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote>D [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions4.html b/doc/apidocs/index/Functions4.html
index eb15abb..a0a9ffe 100644
--- a/doc/apidocs/index/Functions4.html
+++ b/doc/apidocs/index/Functions4.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K · <a href [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K · <a href [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt210"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Determine whether another geometry is equivalent to this one. </div></div><div cla [...]
+<div class=CToolTip id="tt217"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Determine whether another geometry is equivalent to this one. </div></div><div cla [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt224"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">False : function()</td></tr></table></blockquote>A simple function to that just does “return false”. </div></div><div class=CToolTip id="tt225"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  p [...]
+<div class=CToolTip id="tt231"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">False : function()</td></tr></table></blockquote>A simple function to that just does “return false”. </div></div><div class=CToolTip id="tt232"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  p [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions5.html b/doc/apidocs/index/Functions5.html
index 8344501..cff5689 100644
--- a/doc/apidocs/index/Functions5.html
+++ b/doc/apidocs/index/Functions5.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K & [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · J · K & [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt236"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>GET: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Send an HTTP GET request. </div></div><div class=CToolTip id="tt237"><div class=CFuncti [...]
+<div class=CToolTip id="tt243"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>GET: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Send an HTTP GET request. </div></div><div class=CToolTip id="tt244"><div class=CFuncti [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions6.html b/doc/apidocs/index/Functions6.html
index d0d800d..c4b3a99 100644
--- a/doc/apidocs/index/Functions6.html
+++ b/doc/apidocs/index/Functions6.html
@@ -11,37 +11,37 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · J · K · <a href [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · J · K · <a href [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt400"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>hasAttributeNS: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prett [...]
+<div class=CToolTip id="tt399"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>hasAttributeNS: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prett [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt403"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt404"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">info: function()</td></tr></table></blockquote>Writes a message to the console with the visual “info” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt405"><div class [...]
+<div class=CToolTip id="tt402"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt403"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">info: function()</td></tr></table></blockquote>Writes a message to the console with the visual “info” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt404"><div class [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt425"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>limitSigDigs: function(</td><td class="PParameter  prettyprint " nowrap>num,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>sig</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Limit the  [...]
+<div class=CToolTip id="tt424"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>limitSigDigs: function(</td><td class="PParameter  prettyprint " nowrap>num,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>sig</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Limit the  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt431"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams:function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Catch changeParams and uppercase the new params to be merged in before cal [...]
+<div class=CToolTip id="tt429"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams:function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Catch changeParams and uppercase the new params to be merged in before cal [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt439"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">nextTrigger: function()</td></tr></table></blockquote>Restore the next state. </div></div><div class=CToolTip id="tt440"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Proje [...]
+<div class=CToolTip id="tt437"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">nextTrigger: function()</td></tr></table></blockquote>Restore the next state. </div></div><div class=CToolTip id="tt438"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Proje [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt442"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parameters px - {OpenLayers.Pixel}</div></div><div class=CToolTip id="tt443"><div class=C [...]
+<div class=CToolTip id="tt440"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parameters px - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an object with a [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt449"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">pageCount: function()</td></tr></table></blockquote>Get the total count of pages given the current cache of features.</div></div><div class=CToolTip id="tt450"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameter [...]
+<div class=CToolTip id="tt447"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">pageCount: function()</td></tr></table></blockquote>Get the total count of pages given the current cache of features.</div></div><div class=CToolTip id="tt448"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameter [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt462"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>raiseLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>delta</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Change  [...]
+<div class=CToolTip id="tt460"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>raiseLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>delta</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Change  [...]
 
 </div><!--Index-->
 
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions7.html b/doc/apidocs/index/Functions7.html
index edf9a84..086fb0f 100644
--- a/doc/apidocs/index/Functions7.html
+++ b/doc/apidocs/index/Functions7.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt536"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>save: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Tell the layer protocol to commit unsaved features. </div></div><div class=CToolTip  [...]
+<div class=CToolTip id="tt533"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>save: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Tell the layer protocol to commit unsaved features. </div></div><div class=CToolTip  [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Functions8.html b/doc/apidocs/index/Functions8.html
index 489d544..99533dd 100644
--- a/doc/apidocs/index/Functions8.html
+++ b/doc/apidocs/index/Functions8.html
@@ -11,25 +11,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions.html#B">B</a> · <a href="Functions2.html#C">C</a> · <a href="Functions3.html#D">D</a> · <a href="Functions4.html#E">E</a> · <a href="Functions4.html#F">F</a> · <a href="Functions5.html#G">G</a> · <a href="Functions6.html#H">H</a> · <a href="Functions6.html#I">I</a> · [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt604"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">time: function()</td></tr></table></blockquote>Creates a new timer under the given name. </div></div><div class=CToolTip id="tt605"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">timeEnd: function()</td></tr></table></blockquote>Stops a timer created by a call t [...]
+<div class=CToolTip id="tt601"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">time: function()</td></tr></table></blockquote>Creates a new timer under the given name. </div></div><div class=CToolTip id="tt602"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">timeEnd: function()</td></tr></table></blockquote>Stops a timer created by a call t [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt625"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cla [...]
+<div class=CToolTip id="tt623"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cla [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt635"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>escapeChar</td><td class="PAfterPar [...]
+<div class=CToolTip id="tt634"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>escapeChar</td><td class="PAfterPar [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt638"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt639"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><tabl [...]
+<div class=CToolTip id="tt637"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt638"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><tabl [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt658"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER_DRAWING_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>newNode,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nextNode</td><td class="PAfte [...]
+<div class=CToolTip id="tt657"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER_DRAWING_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>newNode,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nextNode</td><td class="PAfte [...]
 
 </div><!--Index-->
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General.html b/doc/apidocs/index/General.html
index 26f9127..7a499ca 100644
--- a/doc/apidocs/index/General.html
+++ b/doc/apidocs/index/General.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &midd [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request, the response object passed to this method must come from th [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request, the response object passed to this method must come from th [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General10.html b/doc/apidocs/index/General10.html
index ce7f105..6b82507 100644
--- a/doc/apidocs/index/General10.html
+++ b/doc/apidocs/index/General10.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt830"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt831"><div class=CConstructor>Constructor for a new OpenLayers.Map instance. </div></div><div class=CToolTip id="tt832"><div class=CConstructor>Create a new Mapguide layer, either tiled or untiled.</div></div><div class=CToolTip id="tt833"><div class=CProperty>{Object} An object containing any [...]
+<div class=CToolTip id="tt868"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt869"><div class=CConstructor>Constructor for a new OpenLayers.Map instance. </div></div><div class=CToolTip id="tt870"><div class=CConstructor>Create a new Mapguide layer, either tiled or untiled.</div></div><div class=CToolTip id="tt871"><div class=CProperty>{Object} An object containing any [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt905"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt906"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt907"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt908"><div class=CProperty>{String} name of this rule</div></div><div class=CToolTip id="tt909"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt910"><div class=CProperty>{String} Style identifier.< [...]
+<div class=CToolTip id="tt941"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt942"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt943"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt944"><div class=CProperty>{String} The layer name. </div></div><div class=CToolTip id="tt945"><div class=CProperty>{String} name of this rule</div></div><div class=CToolTip id="tt946"><div class=CProperty>{String}</ [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General11.html b/doc/apidocs/index/General11.html
index 408efc7..2c4acd5 100644
--- a/doc/apidocs/index/General11.html
+++ b/doc/apidocs/index/General11.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt926"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parameters px - {OpenLayers.Pixel}</div></div><div class=CToolTip id="tt927"><div class=C [...]
+<div class=CToolTip id="tt963"><div class=CProperty>{DOMelement|String} The DOM element to handle keys for. </div></div><div class=CToolTip id="tt964"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General12.html b/doc/apidocs/index/General12.html
index 21724c0..1520cbc 100644
--- a/doc/apidocs/index/General12.html
+++ b/doc/apidocs/index/General12.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1240"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">pageCount: function()</td></tr></table></blockquote>Get the total count of pages given the current cache of features.</div></div><div class=CToolTip id="tt1241"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParamet [...]
+<div class=CToolTip id="tt1295"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">pageCount: function()</td></tr></table></blockquote>Get the total count of pages given the current cache of features.</div></div><div class=CToolTip id="tt1296"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParamet [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General13.html b/doc/apidocs/index/General13.html
index 53944a6..43f0b9c 100644
--- a/doc/apidocs/index/General13.html
+++ b/doc/apidocs/index/General13.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1305"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt1306"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1362"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt1363"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><!--END_ND_TOOLTIPS-->
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General14.html b/doc/apidocs/index/General14.html
index 6aaadb2..14f02b2 100644
--- a/doc/apidocs/index/General14.html
+++ b/doc/apidocs/index/General14.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1307"><div class=CProperty>{Float} Optional radius in map units of the regular polygon. </div></div><div class=CToolTip id="tt1308"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>raiseLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
+<div class=CToolTip id="tt1364"><div class=CProperty>{Float} Optional radius in map units of the regular polygon. </div></div><div class=CToolTip id="tt1365"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>raiseLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General15.html b/doc/apidocs/index/General15.html
index cc7b761..302de83 100644
--- a/doc/apidocs/index/General15.html
+++ b/doc/apidocs/index/General15.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1421"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>save: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Tell the layer protocol to commit unsaved features. </div></div><div class=CToolTip [...]
+<div class=CToolTip id="tt1478"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>save: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Tell the layer protocol to commit unsaved features. </div></div><div class=CToolTip [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General16.html b/doc/apidocs/index/General16.html
index 37dff39..22c4b93 100644
--- a/doc/apidocs/index/General16.html
+++ b/doc/apidocs/index/General16.html
@@ -11,13 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1578"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt1579"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt1580"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1644"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cl [...]
+<div class=CToolTip id="tt1638"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt1639"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt1640"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div [...]
 
 </div><!--Index-->
 
@@ -25,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General17.html b/doc/apidocs/index/General17.html
index 0349105..120228c 100644
--- a/doc/apidocs/index/General17.html
+++ b/doc/apidocs/index/General17.html
@@ -11,9 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1670"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt1671"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt1672"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt1673"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip  [...]
+<div class=CToolTip id="tt1709"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cl [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1742"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt1743"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt1744"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt1745"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip  [...]
 
 </div><!--Index-->
 
@@ -21,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General18.html b/doc/apidocs/index/General18.html
index 7a91e47..46a20eb 100644
--- a/doc/apidocs/index/General18.html
+++ b/doc/apidocs/index/General18.html
@@ -11,21 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1729"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt1730"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt1731"><div class=CProperty>{Boole [...]
+<div class=CToolTip id="tt1803"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt1804"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt1805"><div class=CProperty>{Boole [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1771"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1772"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt1773"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt1774"><div class=CConstructor>Create a new parser for XLS.</div></div><div class=CToolTip id="tt1775"><div class=CConstructor>Construct an XML parser. </div></div><div class=CToolTip id="tt1776"><div class=CProperty>{Boolean} Orde [...]
+<div class=CToolTip id="tt1846"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1847"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt1848"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt1849"><div class=CConstructor>Create a new parser for XLS.</div></div><div class=CToolTip id="tt1850"><div class=CConstructor>Construct an XML parser. </div></div><div class=CToolTip id="tt1851"><div class=CProperty>{Boolean} Orde [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1783"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1784"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt1785"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt1786"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1858"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1859"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt1860"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt1861"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1787"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><div class=CToolTip id="tt1788"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER_DRAWING_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prett [...]
+<div class=CToolTip id="tt1862"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><div class=CToolTip id="tt1863"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER_DRAWING_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prett [...]
 
 </div><!--Index-->
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General2.html b/doc/apidocs/index/General2.html
index 083548a..3a5b3d8 100644
--- a/doc/apidocs/index/General2.html
+++ b/doc/apidocs/index/General2.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt76"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt77"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt78"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt79"><div class=CProperty>{OpenLayers.Layer} The currently selected base layer. </div></div><div class=CToolTip id="tt80"><div class=CConstructor>Create a new BBOX strategy.</div></div><div class=CToolTip id=" [...]
+<div class=CToolTip id="tt79"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt80"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt81"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt82"><div class=CProperty>{OpenLayers.Layer} The currently selected base layer. </div></div><div class=CToolTip id="tt83"><div class=CConstructor>Create a new BBOX strategy.</div></div><div class=CToolTip id=" [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General3.html b/doc/apidocs/index/General3.html
index c0d38ca..f473f08 100644
--- a/doc/apidocs/index/General3.html
+++ b/doc/apidocs/index/General3.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt98"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bounds for the geometry.</div></div><div class=CToolTip id="tt99"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bo [...]
+<div class=CToolTip id="tt102"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bounds for the geometry.</div></div><div class=CToolTip id="tt103"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the  [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General4.html b/doc/apidocs/index/General4.html
index a779eb9..baece83 100644
--- a/doc/apidocs/index/General4.html
+++ b/doc/apidocs/index/General4.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt189"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt190"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt191"><div class=CProperty>{Number} Maximum distance in pixels between clicks for a sequence of events to be considered a double click. </div></div><div class=CToolTip id="tt192"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 clas [...]
+<div class=CToolTip id="tt209"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt210"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt211"><div class=CProperty>{OpenLayers.Layer.PointTrack.TARGET_NODE} or {OpenLayers.Layer.PointTrack.SOURCE_NODE} optional. </div></div><div class=CToolTip id="tt212"><div class=CProperty>{Number} Maximum distance in pixels between clicks for a sequence of eve [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General5.html b/doc/apidocs/index/General5.html
index 04180be..ddd7850 100644
--- a/doc/apidocs/index/General5.html
+++ b/doc/apidocs/index/General5.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt359"><div class=CProperty>{<OpenLayers.Easing>(Function)} Easing equation used for the animation Defaultly set to OpenLayers.Easing.Expo.easeOut</div></div><div class=CToolTip id="tt360"><div class=CProperty>{Boolean} Allow splits given intersection of edges only. </div></div><div class=CToolTip id="tt361"><div class=CConstructor>Create an editing toolbar for a given layer.</div></div><div class=CToolTip id="tt362"><div class=CProperty>{String} Set this to [...]
+<div class=CToolTip id="tt385"><div class=CProperty>{<OpenLayers.Easing>(Function)} Easing equation used for the animation Defaultly set to OpenLayers.Easing.Expo.easeOut</div></div><div class=CToolTip id="tt386"><div class=CProperty>{Boolean} Allow splits given intersection of edges only. </div></div><div class=CToolTip id="tt387"><div class=CConstructor>Create an editing toolbar for a given layer.</div></div><div class=CToolTip id="tt388"><div class=CProperty>{String} Set this to [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General6.html b/doc/apidocs/index/General6.html
index c979d84..8d9b405 100644
--- a/doc/apidocs/index/General6.html
+++ b/doc/apidocs/index/General6.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt416"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt417"><div class=CProperty>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  </div></div><div class=CToolTip id="tt418"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">False : function()</td></tr></table></blockquote>A simple function to [...]
+<div class=CToolTip id="tt449"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt450"><div class=CProperty>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  </div></div><div class=CToolTip id="tt451"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">False : function()</td></tr></table></blockquote>A simple function to [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General7.html b/doc/apidocs/index/General7.html
index 84abf66..d2d82a0 100644
--- a/doc/apidocs/index/General7.html
+++ b/doc/apidocs/index/General7.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J">J</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt483"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt484"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt485"><div class=CConstructor>Create a new parser for GeoJSON.</div></div><div class=CToolTip id="tt486"><div class=CConstructor>Create a new control to deal with browser geolocation API</div></div><div class=CToolTip id="tt487"><div class=CProperty>{Object} Options  [...]
+<div class=CToolTip id="tt517"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt518"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt519"><div class=CConstructor>Create a new parser for GeoJSON.</div></div><div class=CToolTip id="tt520"><div class=CConstructor>Create a new control to deal with browser geolocation API</div></div><div class=CToolTip id="tt521"><div class=CProperty>{Object} Options  [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General8.html b/doc/apidocs/index/General8.html
index 342c960..e4beb49 100644
--- a/doc/apidocs/index/General8.html
+++ b/doc/apidocs/index/General8.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · <a href="#J">J</a> · <a href="General9.html# [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · <a href="#J">J</a> · <a href="General9.html# [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt680"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt681"><div class=CConstructor>Construct a handler.</div></div><div class=CToolTip id="tt682"><div class=CProperty>{Boolean} Whether or not to handle right clicks. </div></div><div class=CToolTip id="tt683"><div class=CProperty>{Object} Used to set non-default properties on the control’s handler</div></div><div class=CToolTip id="tt684"><div class=CProperty>{Object} Additional opt [...]
+<div class=CToolTip id="tt707"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt708"><div class=CConstructor>Construct a handler.</div></div><div class=CToolTip id="tt709"><div class=CProperty>{Boolean} Whether or not to handle right clicks. </div></div><div class=CToolTip id="tt710"><div class=CProperty>Defaults to ‘click’. </div></div><div class=CToolTip id="tt711"><div class=CProperty>{Object} Used to set non-default properties on the control&rsquo [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt702"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt703"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt704"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt705"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt706"><div class=CConstant>Mixin for tiles that use form-encoded POST requests to get images fro [...]
+<div class=CToolTip id="tt730"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt731"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt732"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt733"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt734"><div class=CConstant>Mixin for tiles that use form-encoded POST requests to get images fro [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt762"><div class=CConstructor>Create a new parser for JSON.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt794"><div class=CConstructor>Create a new parser for JSON.</div></div><!--END_ND_TOOLTIPS-->
 
 </div><!--Index-->
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/General9.html b/doc/apidocs/index/General9.html
index 58d391e..2836884 100644
--- a/doc/apidocs/index/General9.html
+++ b/doc/apidocs/index/General9.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General8.html#I">I</a> · <a href="General8.html#J" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt763"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt764"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt765"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it alw [...]
+<div class=CToolTip id="tt795"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt796"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt797"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it alw [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt781"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt782"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt783"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt784"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt785"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt786"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt787"><div  [...]
+<div class=CToolTip id="tt816"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt817"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt818"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt819"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt820"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt821"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt822"><div  [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties.html b/doc/apidocs/index/Properties.html
index b5662a3..dc4efc3 100644
--- a/doc/apidocs/index/Properties.html
+++ b/doc/apidocs/index/Properties.html
@@ -11,21 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties2.html#F">F</a> · <a href="Properties2.html#G">G</a> · <a href="Properties2.html#H">H</a> · <a href="Properties3.html#I">I</a> · J · <a href="Properties3.html#K">K</a> &middo [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="Properties4.html#I">I</a> · J · <a href="Properties4.html [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} The control is active (read-only). </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Allow the map to function with “overlays” only. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean} If is true the OpenLayers.Control.TYPE_TOOL controls can be deactivated by clicking the icon that represents them. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{Boolean} If a l [...]
+<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} The control is active (read-only). </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Allow the map to function with “overlays” only. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean} If is true the OpenLayers.Control.TYPE_TOOL controls can be deactivated by clicking the icon that represents them. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{Boolean} If a l [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt27"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt28"><div class=CProperty>{OpenLayers.Layer} The currently selected base layer. </div></div><div class=CToolTip id="tt29"><div class=CProperty>{Object} Values to start the animation with</div></div><div class=CToolTip id="tt30"><div class=CProperty>{Boolean} If true, map center will be set on location update.</div></div><div class=CToolTip id="tt31"><div class=CProperty>{OpenLayers.Bounds} nul [...]
+<div class=CToolTip id="tt30"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt31"><div class=CProperty>{OpenLayers.Layer} The currently selected base layer. </div></div><div class=CToolTip id="tt32"><div class=CProperty>{Object} Values to start the animation with</div></div><div class=CToolTip id="tt33"><div class=CProperty>{Boolean} If true, map center will be set on location update.</div></div><div class=CToolTip id="tt34"><div class=CProperty>{OpenLayers.Bounds} nul [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt37"><div class=CProperty>{Object} Function to be called when the read operation completes.</div></div><div class=CToolTip id="tt38"><div class=CProperty>{String} The name of the query string parameter that the service recognizes as the callback identifier. </div></div><div class=CToolTip id="tt39"><div class=CProperty>{String} Where a service requires that the callback query string parameter value is prefixed by some string, this value may be set. </div></div><d [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt57"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt58"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt59"><div class=CProperty>{Number} Maximum distance in pixels between clicks for a sequence of events to be considered a double click. </div></div><div class=CToolTip id="tt60"><div class=CProperty>{String} Default language to use when a specific language can&rs [...]
+<div class=CToolTip id="tt40"><div class=CProperty>{Object} Function to be called when the read operation completes.</div></div><div class=CToolTip id="tt41"><div class=CProperty>{String} The name of the query string parameter that the service recognizes as the callback identifier. </div></div><div class=CToolTip id="tt42"><div class=CProperty>{String} Where a service requires that the callback query string parameter value is prefixed by some string, this value may be set. </div></div><d [...]
 
 </div><!--Index-->
 
@@ -33,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties2.html b/doc/apidocs/index/Properties2.html
index 0ee57ef..04c76fb 100644
--- a/doc/apidocs/index/Properties2.html
+++ b/doc/apidocs/index/Properties2.html
@@ -11,21 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties.html#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="Properties3.html#I">I</a> · J · <a href="Properties3.html#K">K</a> · < [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="Properties4.html#I">I</a> · J · <a href="Pro [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt111"><div class=CProperty>{<OpenLayers.Easing>(Function)} Easing equation used for the animation Defaultly set to OpenLayers.Easing.Expo.easeOut</div></div><div class=CToolTip id="tt112"><div class=CProperty>{Boolean} Allow splits given intersection of edges only. </div></div><div class=CToolTip id="tt113"><div class=CProperty>{String} Set this to some value to set when the mouse is outside the map.</div></div><div class=CToolTip id="tt114"><div class=CPro [...]
+<div class=CToolTip id="tt70"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt71"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt72"><div class=CProperty>{OpenLayers.Layer.PointTrack.TARGET_NODE} or {OpenLayers.Layer.PointTrack.SOURCE_NODE} optional. </div></div><div class=CToolTip id="tt73"><div class=CProperty>{Number} Maximum distance in pixels between clicks for a sequence of events  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt141"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt142"><div class=CProperty>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  </div></div><div class=CToolTip id="tt143"><div class=CProperty>{OpenLayers.Feature.Vector} Feature currently available for transformation. </div></div><div class=CToolTip id="tt144"><div class=CProperty>{Function} Called after each fe [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt186"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt187"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt188"><div class=CProperty>{Object} Options to pass to the navigator’s geolocation API. </div></div><div class=CToolTip id="tt189"><div class=CProperty>{OpenLayers.Geometry}</div></div><div class=CToolTip id="tt190"><div class=CProperty>{String} Name of geometr [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt208"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt209"><div class=CProperty>{Boolean} Whether or not to handle right clicks. </div></div><div class=CToolTip id="tt210"><div class=CProperty>{Object} Used to set non-default properties on the control’s handler</div></div><div class=CToolTip id="tt211"><div class=CProperty>{Object} Additional options for the handlers used by this control. </div></div><div class=CToolTip id="tt212"> [...]
+<div class=CToolTip id="tt128"><div class=CProperty>{<OpenLayers.Easing>(Function)} Easing equation used for the animation Defaultly set to OpenLayers.Easing.Expo.easeOut</div></div><div class=CToolTip id="tt129"><div class=CProperty>{Boolean} Allow splits given intersection of edges only. </div></div><div class=CToolTip id="tt130"><div class=CProperty>{String} Set this to some value to set when the mouse is outside the map.</div></div><div class=CToolTip id="tt131"><div class=CPro [...]
 
 </div><!--Index-->
 
@@ -33,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties3.html b/doc/apidocs/index/Properties3.html
index 8b6ae83..7deefec 100644
--- a/doc/apidocs/index/Properties3.html
+++ b/doc/apidocs/index/Properties3.html
@@ -11,21 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties2.html#F">F</a> · <a href="Properties2.html#G">G</a> · <a href="Properties2.html#H">H</a> · <a href="#I">I</a> · J &middo [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="Properties4.html#I">I</a> · J · <a href="Properties4.html#K" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt224"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt225"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt226"><div class=CProperty>{Boolean} Ignore dimensions higher than 2 when reading geometry coordinates.</div></div><div class=CToolTip id="tt227"><div class=CProperty>{OpenLayers.Size}</div></div><div class=CToolTip id="tt228"><div class=CProperty>{Boolean} Activates the immediate measurement so that the &ldquo [...]
+<div class=CToolTip id="tt175"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt176"><div class=CProperty>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  </div></div><div class=CToolTip id="tt177"><div class=CProperty>{OpenLayers.Feature.Vector} Feature currently available for transformation. </div></div><div class=CToolTip id="tt178"><div class=CProperty>{Function} Called after each fe [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt255"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt256"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt257"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it alw [...]
+<div class=CToolTip id="tt221"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt222"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt223"><div class=CProperty>{Object} Options to pass to the navigator’s geolocation API. </div></div><div class=CToolTip id="tt224"><div class=CProperty>{OpenLayers.Geometry}</div></div><div class=CToolTip id="tt225"><div class=CProperty>{String} Name of geometr [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt261"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt262"><div class=CProperty>{String} the format of the labels, default = ‘dm’. </div></div><div class=CToolTip id="tt263"><div class=CProperty>{Boolean} Should the graticule lines be labelled?. </div></div><div class=CToolTip id="tt264"><div class=CProperty>{symbolizer} the symbolizer used to render labels</div></div><div class=CToolTip id="tt265"><div class [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt287"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt288"><div class=CProperty>{Object} An object containing any non-default properties to be sent to the overview map’s map constructor. </div></div><div class=CToolTip id="tt289"><div class=CProperty>{Array(OpenLayers.Marker)} internal marker list</div></div><div class=CToolTip id="tt290"> [...]
+<div class=CToolTip id="tt244"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt245"><div class=CProperty>{Boolean} Whether or not to handle right clicks. </div></div><div class=CToolTip id="tt246"><div class=CProperty>Defaults to ‘click’. </div></div><div class=CToolTip id="tt247"><div class=CProperty>{Object} Used to set non-default properties on the control’s handler</div></div><div class=CToolTip id="tt248"><div class=CProperty>{Object} Addi [...]
 
 </div><!--Index-->
 
@@ -33,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties4.html b/doc/apidocs/index/Properties4.html
index cefdcd6..4a5787c 100644
--- a/doc/apidocs/index/Properties4.html
+++ b/doc/apidocs/index/Properties4.html
@@ -11,25 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties2.html#F">F</a> · <a href="Properties2.html#G">G</a> · <a href="Properties2.html#H">H</a> · <a href="Properties3.html#I">I</a> & [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="#I">I</a> · J &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt333"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt334"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt335"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt336"><div class=CProperty>{String} name of this rule</div></div><div class=CToolTip id="tt337"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt338"><div class=CProperty>{String} Style identifier.< [...]
+<div class=CToolTip id="tt261"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt262"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt263"><div class=CProperty>{Boolean} Ignore dimensions higher than 2 when reading geometry coordinates.</div></div><div class=CToolTip id="tt264"><div class=CProperty>{String} The image format used for caching. </div></div><div class=CToolTip id="tt265"><div class=CProperty>{OpenLayers.Size}</div></div><div cla [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt349"><div class=CProperty>{Function} Define this function if you want to know when a feature is done dragging. </div></div><div class=CToolTip id="tt350"><div class=CProperty>{Function} Define this function if you want to know about each move of a feature. </div></div><div class=CToolTip id="tt351"><div class=CProperty>{Function} Define this function if you want to know when the mouse goes over a feature and thereby makes this feature a candidate for dragging.</ [...]
+<div class=CToolTip id="tt296"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt297"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt298"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it alw [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt365"><div class=CProperty>{Boolean} Set this property to false not to display the pan icons. </div></div><div class=CToolTip id="tt366"><div class=CProperty>{Boolean} When drawn, pan map such that the entire popup is visible in the current viewport (if necessary). </div></div><div class=CToolTip id="tt367"><div class=CProperty>{Boolean} Framed Cloud does pan into view by default.</div></div><div class=CToolTip id="tt368"><div class=CProperty>{Function} The Easin [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt397"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt398"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt399"><div class=CProperty>{Float} Optional radius in map units of the regular polygon. </div></div><div class=CToolTip id="tt400"><div class=CProperty>{Float} The ratio of the feature relative to the ratio the time the feature was set. </div></div><div class=CToolTip id="tt401"><div class=CProperty>{Float} Used only when in single-tile mode, this specifies the ratio of the size of the single tile to the size of the map.</div></div><div class=CToolTip id="tt402"> [...]
+<div class=CToolTip id="tt304"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt305"><div class=CProperty>{String} the format of the labels, default = ‘dm’. </div></div><div class=CToolTip id="tt306"><div class=CProperty>{Boolean} Should the graticule lines be labelled?. </div></div><div class=CToolTip id="tt307"><div class=CProperty>{symbolizer} the symbolizer used to render labels</div></div><div class=CToolTip id="tt308"><div class [...]
 
 </div><!--Index-->
 
@@ -37,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties5.html b/doc/apidocs/index/Properties5.html
index 4a19b8b..23a83d0 100644
--- a/doc/apidocs/index/Properties5.html
+++ b/doc/apidocs/index/Properties5.html
@@ -11,13 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties2.html#F">F</a> · <a href="Properties2.html#G">G</a> · <a href="Properties2.html#H">H</a> · <a href="Properties3.html#I">I</a> & [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="Properties4.html#I">I</a>  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt426"><div class=CProperty>{Boolean} If set to true, the active state of this panel’s controls will be stored on panel deactivation, and restored on reactivation. </div></div><div class=CToolTip id="tt427"><div class=CProperty>{Float} The scale of the feature, relative to the scale the time the feature was set. </div></div><div class=CToolTip id="tt428"><div class=CProperty>{Array}  An array of map scales in descending order. </div></div><div class=CToolTip [...]
+<div class=CToolTip id="tt333"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt334"><div class=CProperty>{Object} An object containing any non-default properties to be sent to the overview map’s map constructor. </div></div><div class=CToolTip id="tt335"><div class=CProperty>{Array(OpenLayers.Marker)} internal marker list</div></div><div class=CToolTip id="tt336"> [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt493"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt494"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div class=CToolTip id="tt495"><div class=CProperty>{Integer} The maximum size of the grid in pixels on the map</div></div><div class=CToolTip id="tt496"><div class=CPr [...]
+<div class=CToolTip id="tt379"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt380"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt381"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt382"><div class=CProperty>{String} The layer name. </div></div><div class=CToolTip id="tt383"><div class=CProperty>{String} name of this rule</div></div><div class=CToolTip id="tt384"><div class=CProperty>{String}</ [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt396"><div class=CProperty>{DOMelement|String} The DOM element to handle keys for. </div></div><div class=CToolTip id="tt397"><div class=CProperty>{Function} Define this function if you want to know when a feature is done dragging. </div></div><div class=CToolTip id="tt398"><div class=CProperty>{Function} Define this function if you want to know about each move of a feature. </div></div><div class=CToolTip id="tt399"><div class=CProperty>{Function} Define this fu [...]
 
 </div><!--Index-->
 
@@ -25,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties6.html b/doc/apidocs/index/Properties6.html
index 9968a4e..9b65b13 100644
--- a/doc/apidocs/index/Properties6.html
+++ b/doc/apidocs/index/Properties6.html
@@ -11,29 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties2.html#F">F</a> · <a href="Properties2.html#G">G</a> · <a href="Properties2.html#H">H</a> · <a href="Properties3.html#I">I</a> & [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="Properties4.html#I">I</a>  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt527"><div class=CProperty>{String} The layer map units. </div></div><div class=CToolTip id="tt528"><div class=CProperty>{?}</div></div><div class=CToolTip id="tt529"><div class=CProperty>{String} The map units. </div></div><div class=CToolTip id="tt530"><div class=CProperty>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles from a WMS . </div></div><div class=CToolTip id="tt531"><div class=CProperty>{Numbe [...]
+<div class=CToolTip id="tt415"><div class=CProperty>{Boolean} Set this property to false not to display the pan icons. </div></div><div class=CToolTip id="tt416"><div class=CProperty>{Boolean} When drawn, pan map such that the entire popup is visible in the current viewport (if necessary). </div></div><div class=CToolTip id="tt417"><div class=CProperty>{Boolean} Framed Cloud does pan into view by default.</div></div><div class=CToolTip id="tt418"><div class=CProperty>{Function} The Easin [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt542"><div class=CProperty>{Number} or {String} comparison value for binary comparisons. </div></div><div class=CToolTip id="tt543"><div class=CProperty>{OpenLayers.Bounds || OpenLayers.Geometry} The bounds or geometry to be used by the filter. </div></div><div class=CToolTip id="tt544"><div class=CProperty>{String} Specify a version string if one is known.</div></div><div class=CToolTip id="tt545"><div class=CProperty>{String} The renderIntent to use for vertice [...]
+<div class=CToolTip id="tt449"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt450"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt549"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt550"><div class=CProperty>{Boolean} If true, position will be update regularly.</div></div><div class=CToolTip id="tt551"><div class=CProperty>{Object} Cache to use for storing parsed results from OpenLayers.Format.WFSDescribeFeatureType.read. </div></div><div class=CToolTip id="tt552"><div class=CProperty>{Boolean} #487 for more info.</div></div><div class=CToolTip id="tt553"><div cla [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt556"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt557"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt558"><div class=CProperty>{Boolean} Order of the GML coordinate: true:(x,y) or false:(y,x) For GeoRSS the default is (y,x), therefore: false</div></div><div class=CToolTip id="tt559"><div class=CProperty>{Boolean} Order of the GML coordinate: true:(x,y) or false:(y,x) For GeoRSS the default is (y,x), ther [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt565"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt566"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt567"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt568"><div class=CProperty>{Number} The zIndex determines the rendering order for a symbolizer. </div></div><div class=CToolTip id="tt569"><div class=CProperty>{Boolean} Whether the user can draw a box to zoom</div></div><div class=CToolTip id="tt570"><div class=CProperty>{Integer} OpenLayers.Handler key code of the key, which has to be pressed, while drawing the zoom box with the mouse on the screen. </div></div><div class=CToolTip id="tt571"><div class=CPropert [...]
+<div class=CToolTip id="tt451"><div class=CProperty>{Float} Optional radius in map units of the regular polygon. </div></div><div class=CToolTip id="tt452"><div class=CProperty>{Float} The ratio of the feature relative to the ratio the time the feature was set. </div></div><div class=CToolTip id="tt453"><div class=CProperty>{Float} Used only when in single-tile mode, this specifies the ratio of the size of the single tile to the size of the map.</div></div><div class=CToolTip id="tt454"> [...]
 
 </div><!--Index-->
 
@@ -41,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/apidocs/index/Properties7.html b/doc/apidocs/index/Properties7.html
new file mode 100644
index 0000000..c2f9eac
--- /dev/null
+++ b/doc/apidocs/index/Properties7.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Property Index - OpenLayers</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="Properties4.html#I">I</a>  [...]
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt480"><div class=CProperty>{Boolean} If set to true, the active state of this panel’s controls will be stored on panel deactivation, and restored on reactivation. </div></div><div class=CToolTip id="tt481"><div class=CProperty>{Float} The scale of the feature, relative to the scale the time the feature was set. </div></div><div class=CToolTip id="tt482"><div class=CProperty>{Array}  An array of map scales in descending order. </div></div><div class=CToolTip [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt549"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt550"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div class=CToolTip id="tt551"><div class=CProperty>{Integer} The maximum size of the grid in pixels on the map</div></div><div class=CToolTip id="tt552"><div class=CPr [...]
+
+</div><!--Index-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([33], 34);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/index/Properties8.html b/doc/apidocs/index/Properties8.html
new file mode 100644
index 0000000..f1349d4
--- /dev/null
+++ b/doc/apidocs/index/Properties8.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Property Index - OpenLayers</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties.html#C">C</a> · <a href="Properties2.html#D">D</a> · <a href="Properties2.html#E">E</a> · <a href="Properties3.html#F">F</a> · <a href="Properties3.html#G">G</a> · <a href="Properties3.html#H">H</a> · <a href="Properties4.html#I">I</a>  [...]
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt586"><div class=CProperty>{String} The layer map units. </div></div><div class=CToolTip id="tt587"><div class=CProperty>{String} The map units. </div></div><div class=CToolTip id="tt588"><div class=CProperty>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles from a WMS . </div></div><div class=CToolTip id="tt589"><div class=CProperty>{Boolean} true if update operations are done with POST requests defaults  [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt605"><div class=CProperty>{Number} or {String} comparison value for binary comparisons. </div></div><div class=CToolTip id="tt606"><div class=CProperty>{OpenLayers.Bounds || OpenLayers.Geometry} The bounds or geometry to be used by the filter. </div></div><div class=CToolTip id="tt607"><div class=CProperty>{String} Specify a version string if one is known.</div></div><div class=CToolTip id="tt608"><div class=CProperty>{String} The renderIntent to use for vertice [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt612"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt613"><div class=CProperty>{Boolean} If true, position will be update regularly.</div></div><div class=CToolTip id="tt614"><div class=CProperty>{Object} Cache to use for storing parsed results from OpenLayers.Format.WFSDescribeFeatureType.read. </div></div><div class=CToolTip id="tt615"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt616"><div class=CProperty>{Boolean [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt620"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt621"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt622"><div class=CProperty>{Boolean} Order of the GML coordinate: true:(x,y) or false:(y,x) For GeoRSS the default is (y,x), therefore: false</div></div><div class=CToolTip id="tt623"><div class=CProperty>{Boolean} Order of the GML coordinate: true:(x,y) or false:(y,x) For GeoRSS the default is (y,x), ther [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt629"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt630"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt631"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt632"><div class=CProperty>{Number} The zIndex determines the rendering order for a symbolizer. </div></div><div class=CToolTip id="tt633"><div class=CProperty>{Boolean} Whether the user can draw a box to zoom</div></div><div class=CToolTip id="tt634"><div class=CProperty>{Integer} OpenLayers.Handler key code of the key, which has to be pressed, while drawing the zoom box with the mouse on the screen. </div></div><div class=CToolTip id="tt635"><div class=CPropert [...]
+
+</div><!--Index-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([33], 34);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/javascript/searchdata.js b/doc/apidocs/javascript/searchdata.js
index 2681b4d..80385d9 100644
--- a/doc/apidocs/javascript/searchdata.js
+++ b/doc/apidocs/javascript/searchdata.js
@@ -95,7 +95,7 @@ var indexSectionsWithContent = {
       "A": true,
       "B": false,
       "C": true,
-      "D": false,
+      "D": true,
       "E": false,
       "F": false,
       "G": false,
@@ -126,7 +126,7 @@ var indexSectionsWithContent = {
       "B": true,
       "C": true,
       "D": true,
-      "E": true,
+      "E": false,
       "F": true,
       "G": false,
       "H": false,
@@ -170,7 +170,7 @@ var indexSectionsWithContent = {
       "P": false,
       "Q": false,
       "R": false,
-      "S": false,
+      "S": true,
       "T": false,
       "U": true,
       "V": false,
diff --git a/doc/apidocs/search/ClassesO.html b/doc/apidocs/search/ClassesO.html
index 9be5e71..15027b1 100644
--- a/doc/apidocs/search/ClassesO.html
+++ b/doc/apidocs/search/ClassesO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OpenLayers><div class=IEntry><a href="../files/OpenLayers-js.html#OpenLayers" target=_parent class=ISymbol>OpenLayers</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax><div class=IEntry><a href="../files/OpenLayers/Ajax-js.html#OpenLayers.Ajax" target=_parent class=ISymbol>OpenLayers.Ajax</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax_p [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OpenLayers><div class=IEntry><a href="../files/OpenLayers-js.html#OpenLayers" target=_parent class=ISymbol>OpenLayers</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Ajax" target=_parent class=ISymbol>OpenLayers.Ajax</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax_perBas [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ClassesS.html b/doc/apidocs/search/ClassesS.html
new file mode 100644
index 0000000..01acf6a
--- /dev/null
+++ b/doc/apidocs/search/ClassesS.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Spherical><div class=IEntry><a href="../files/OpenLayers/Spherical-js.html#Spherical" target=_parent class=ISymbol>Spherical</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/search/ConstantsC.html b/doc/apidocs/search/ConstantsC.html
index 9cd097d..ec54ff0 100644
--- a/doc/apidocs/search/ConstantsC.html
+++ b/doc/apidocs/search/ConstantsC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CORNER_undSIZE><div class=IEntry><a href="../files/OpenLayers/Popup/AnchoredBubble-js.html#OpenLayers.Popup.AnchoredBubble.CORNER_SIZE" target=_parent class=ISymbol>CORNER_SIZE</a>, <span class=IParent>OpenLayers.<wbr>Popup.<wbr>AnchoredBubble</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matc [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CANVAS_undSUPPORTED><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.CANVAS_SUPPORTED" target=_parent class=ISymbol>CANVAS_SUPPORTED</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_CORNER_undSIZE><div class=IEntry><a href="../files/OpenLayers/Popup/AnchoredBubble-js.html#OpenLayers.Popup.AnchoredBubble.CORNER_SIZE" ta [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsD.html b/doc/apidocs/search/ConstantsD.html
index 6a40c20..f720b82 100644
--- a/doc/apidocs/search/ConstantsD.html
+++ b/doc/apidocs/search/ConstantsD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dataFrom><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" target=_parent class=ISymbol>dataFrom</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>OpenLayers.<wbr>Layer.<wbr>PointTrack</span></div></div><div class=SRResult id=SR_DEFAULT_undCONFIG><div cla [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dataFrom><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" target=_parent class=ISymbol>dataFrom</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>OpenLayers.<wbr>Layer.<wbr>PointTrack</span></div></div><div class=SRResult id=SR_DEFAULT_undCONFIG><div cla [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsE.html b/doc/apidocs/search/ConstantsE.html
deleted file mode 100644
index 813ed30..0000000
--- a/doc/apidocs/search/ConstantsE.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_EVENT_undTYPES><div class=IEntry><a href="javascript:searchResults.Toggle('SR_EVENT_undTYPES')" class=ISymbol>EVENT_TYPES</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.EVENT_TYPES" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Control/DrawFeature-js.html#OpenLayers.Control.DrawFe [...]
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/search/ConstantsI.html b/doc/apidocs/search/ConstantsI.html
index b7d5f10..85e665e 100644
--- a/doc/apidocs/search/ConstantsI.html
+++ b/doc/apidocs/search/ConstantsI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_IFrame><div class=IEntry><a href="../files/OpenLayers/Tile/Image/IFrame-js.html#OpenLayers.Tile.Image.IFrame" target=_parent class=ISymbol>IFrame</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>Image</span></div></div><div class=SRResult id=SR_IMAGE_undEXTENSIONS><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js.html#OpenLayers.Layer.KaMap [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_IFrame><div class=IEntry><a href="../files/OpenLayers/Tile/Image/IFrame-js.html#OpenLayers.Tile.Image.IFrame" target=_parent class=ISymbol>IFrame</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>Image</span></div></div><div class=SRResult id=SR_IMAGE_undEXTENSIONS><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js.html#OpenLayers.Layer.KaMap [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsK.html b/doc/apidocs/search/ConstantsK.html
index 429a385..4af0fb4 100644
--- a/doc/apidocs/search/ConstantsK.html
+++ b/doc/apidocs/search/ConstantsK.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KEY_undBACKSPACE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_BACKSPACE" target=_parent class=ISymbol>KEY_BACKSPACE</a>, <span class=IParent>OpenLayers.<wbr>Event</span></div></div><div class=SRResult id=SR_KEY_undDELETE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_DELETE" target=_par [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KEY_undBACKSPACE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_BACKSPACE" target=_parent class=ISymbol>KEY_BACKSPACE</a>, <span class=IParent>OpenLayers.<wbr>Event</span></div></div><div class=SRResult id=SR_KEY_undDELETE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_DELETE" target=_par [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsL.html b/doc/apidocs/search/ConstantsL.html
index 31eb0b3..08283ba 100644
--- a/doc/apidocs/search/ConstantsL.html
+++ b/doc/apidocs/search/ConstantsL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABEL_ALIGN</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/Canvas-js.html#OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas.LABEL_ALIGN" target=_parent class=IParent>OpenLayers.<wbr>Renderer.<wbr>Canvas.<wbr>OpenLayers.<wbr>Renderer [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABEL_ALIGN</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/Canvas-js.html#OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas.LABEL_ALIGN" target=_parent class=IParent>OpenLayers.<wbr>Renderer.<wbr>Canvas.<wbr>OpenLayers.<wbr>Renderer [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsM.html b/doc/apidocs/search/ConstantsM.html
index 020948c..f595631 100644
--- a/doc/apidocs/search/ConstantsM.html
+++ b/doc/apidocs/search/ConstantsM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_MAX_undPIXEL><div class=IEntry><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.MAX_PIXEL" target=_parent class=ISymbol>MAX_PIXEL</a>, <span class=IParent>OpenLayers.<wbr>Renderer.SVG</span></div></div><div class=SRResult id=SR_MAX_undZOOM_undLEVEL><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MAX_undZOOM_undLEVEL')"  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_MAX_undPIXEL><div class=IEntry><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.MAX_PIXEL" target=_parent class=ISymbol>MAX_PIXEL</a>, <span class=IParent>OpenLayers.<wbr>Renderer.SVG</span></div></div><div class=SRResult id=SR_MAX_undZOOM_undLEVEL><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MAX_undZOOM_undLEVEL')"  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsR.html b/doc/apidocs/search/ConstantsR.html
index 1e12290..ce6a86a 100644
--- a/doc/apidocs/search/ConstantsR.html
+++ b/doc/apidocs/search/ConstantsR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_RESHAPE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#OpenLayers.Control.ModifyFeature.RESHAPE" target=_parent class=ISymbol>RESHAPE</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>ModifyFeature</span></div></div><div class=SRResult id=SR_RESIZE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#O [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_RESHAPE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#OpenLayers.Control.ModifyFeature.RESHAPE" target=_parent class=ISymbol>RESHAPE</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>ModifyFeature</span></div></div><div class=SRResult id=SR_RESIZE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#O [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstantsS.html b/doc/apidocs/search/ConstantsS.html
index 9470712..9ffbedc 100644
--- a/doc/apidocs/search/ConstantsS.html
+++ b/doc/apidocs/search/ConstantsS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_serviceTypes><div class=IEntry><a href="../files/OpenLayers/Format/Context-js.html#OpenLayers.Format.Context.OpenLayers.Format.Context.serviceTypes" target=_parent class=ISymbol>serviceTypes</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>Context.<wbr>OpenLayers.<wbr>Format.<wbr>Context</span></div></div><div class=SRResult id=SR_SINGLE_undTILE_undPARAMS [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_serviceTypes><div class=IEntry><a href="../files/OpenLayers/Format/Context-js.html#OpenLayers.Format.Context.OpenLayers.Format.Context.serviceTypes" target=_parent class=ISymbol>serviceTypes</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>Context.<wbr>OpenLayers.<wbr>Format.<wbr>Context</span></div></div><div class=SRResult id=SR_SINGLE_undTILE_undPARAMS [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorB.html b/doc/apidocs/search/ConstructorB.html
index 6a52d73..8bb7fd2 100644
--- a/doc/apidocs/search/ConstructorB.html
+++ b/doc/apidocs/search/ConstructorB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Base><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Base')" class=ISymbol>Base</a><div class=ISubIndex><a href="../files/OpenLayers/Ajax-js.html#OpenLayers.Ajax.Base.OpenLayers.Ajax.Base" target=_parent class=IParent>OpenLayers.<wbr>Ajax.<wbr>Base.<wbr>OpenLayers.Ajax</a><a href="../files/OpenLayers/Format/GML/Base-js.html#OpenLayers.Format.GM [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Base><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Base')" class=ISymbol>Base</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Ajax.Base.OpenLayers.Ajax.Base" target=_parent class=IParent>OpenLayers.<wbr>Ajax.<wbr>Base.<wbr>OpenLayers.Ajax</a><a href="../files/OpenLayers/Format/GML/Base-js.html#OpenLayers.Format.GML.Bas [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorC.html b/doc/apidocs/search/ConstructorC.html
index a5f54dc..2c39af6 100644
--- a/doc/apidocs/search/ConstructorC.html
+++ b/doc/apidocs/search/ConstructorC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Canvas><div class=IEntry><a href="../files/OpenLayers/Renderer/Canvas-js.html#OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas" target=_parent class=ISymbol>Canvas</a>, <span class=IParent>OpenLayers.<wbr>Renderer.<wbr>Canvas.<wbr>OpenLayers.<wbr>Renderer</span></div></div><div class=SRResult id=SR_Class><div class=IEntry><a href="../files/OpenLayers/Bas [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CacheRead><div class=IEntry><a href="../files/OpenLayers/Control/CacheRead-js.html#OpenLayers.Control.CacheRead.OpenLayers.Control.CacheRead" target=_parent class=ISymbol>CacheRead</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>CacheRead.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_CacheWrite><div class=IEntry><a href="../fi [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorG.html b/doc/apidocs/search/ConstructorG.html
index 63825f3..2b01242 100644
--- a/doc/apidocs/search/ConstructorG.html
+++ b/doc/apidocs/search/ConstructorG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_GeoJSON><div class=IEntry><a href=".. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_GeoJSON><div class=IEntry><a href="../files/OpenLayers/F [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorI.html b/doc/apidocs/search/ConstructorI.html
index 61c751d..67c1e34 100644
--- a/doc/apidocs/search/ConstructorI.html
+++ b/doc/apidocs/search/ConstructorI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Icon><div class=IEntry><a href="../files/OpenLayers/Icon-js.html#OpenLayers.Icon.OpenLayers.Icon" target=_parent class=ISymbol>Icon</a>, <span class=IParent>OpenLayers.<wbr>Icon.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_Image><div class=IEntry><a href="../files/OpenLayers/Layer/Image-js.html#OpenLayers.Layer.Image.OpenLayers.Layer.Image" tar [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Icon><div class=IEntry><a href="../files/OpenLayers/Icon-js.html#OpenLayers.Icon.OpenLayers.Icon" target=_parent class=ISymbol>Icon</a>, <span class=IParent>OpenLayers.<wbr>Icon.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_Image><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Image')" class=ISymbol>Image</a><div class=ISubIndex>< [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorM.html b/doc/apidocs/search/ConstructorM.html
index 5920cde..81ef9b1 100644
--- a/doc/apidocs/search/ConstructorM.html
+++ b/doc/apidocs/search/ConstructorM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Map><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.OpenLayers.Map" target=_parent class=ISymbol>Map</a>, <span class=IParent>OpenLayers.<wbr>Map.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_MapGuide><div class=IEntry><a href="../files/OpenLayers/Layer/MapGuide-js.html#OpenLayers.Layer.MapGuide.OpenLayers.Layer.MapGuid [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Map><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.OpenLayers.Map" target=_parent class=ISymbol>Map</a>, <span class=IParent>OpenLayers.<wbr>Map.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_MapGuide><div class=IEntry><a href="../files/OpenLayers/Layer/MapGuide-js.html#OpenLayers.Layer.MapGuide.OpenLayers.Layer.MapGuid [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorN.html b/doc/apidocs/search/ConstructorN.html
index 0409548..1e93f85 100644
--- a/doc/apidocs/search/ConstructorN.html
+++ b/doc/apidocs/search/ConstructorN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Navigation><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.OpenLayers.Control.Navigation" target=_parent class=ISymbol>Navigation</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Navigation.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_NavigationHistory><div class=IEntry>< [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Navigation><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.OpenLayers.Control.Navigation" target=_parent class=ISymbol>Navigation</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Navigation.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_NavigationHistory><div class=IEntry>< [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorO.html b/doc/apidocs/search/ConstructorO.html
index d0686ca..aaf416d 100644
--- a/doc/apidocs/search/ConstructorO.html
+++ b/doc/apidocs/search/ConstructorO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OGCExceptionReport><div class=IEntry><a href="../files/OpenLayers/Format/OGCExceptionReport-js.html#OpenLayers.Format.OGCExceptionReport.OpenLayers.Format.OGCExceptionReport" target=_parent class=ISymbol>OGCExceptionReport</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport.<wbr>OpenLayers.<wbr>Format</span></div></div><div class=SRResult  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OGCExceptionReport><div class=IEntry><a href="../files/OpenLayers/Format/OGCExceptionReport-js.html#OpenLayers.Format.OGCExceptionReport.OpenLayers.Format.OGCExceptionReport" target=_parent class=ISymbol>OGCExceptionReport</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport.<wbr>OpenLayers.<wbr>Format</span></div></div><div class=SRResult  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorP.html b/doc/apidocs/search/ConstructorP.html
index 726d6f0..b87785f 100644
--- a/doc/apidocs/search/ConstructorP.html
+++ b/doc/apidocs/search/ConstructorP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Paging><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.OpenLayers.Strategy.Paging" target=_parent class=ISymbol>Paging</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Pan><div class=IEntry><a href="../files/OpenLayers/Contr [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Paging><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.OpenLayers.Strategy.Paging" target=_parent class=ISymbol>Paging</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Pan><div class=IEntry><a href="../files/OpenLayers/Contr [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorR.html b/doc/apidocs/search/ConstructorR.html
index f9e7c38..f209db9 100644
--- a/doc/apidocs/search/ConstructorR.html
+++ b/doc/apidocs/search/ConstructorR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Raster><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Raster-js.html#OpenLayers.Symbolizer.Raster.OpenLayers.Symbolizer.Raster" target=_parent class=ISymbol>Raster</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.<wbr>Raster.<wbr>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_Rectangle><div class=IEntry><a href="../files/ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Raster><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Raster-js.html#OpenLayers.Symbolizer.Raster.OpenLayers.Symbolizer.Raster" target=_parent class=ISymbol>Raster</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.<wbr>Raster.<wbr>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_Rectangle><div class=IEntry><a href="../files/ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorS.html b/doc/apidocs/search/ConstructorS.html
index 17fa78e..a266ee9 100644
--- a/doc/apidocs/search/ConstructorS.html
+++ b/doc/apidocs/search/ConstructorS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.OpenLayers.Strategy.Save" target=_parent class=ISymbol>Save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Save.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Scale><div class=IEntry><a href="../files/OpenLayers/Control/Scale-j [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.OpenLayers.Strategy.Save" target=_parent class=ISymbol>Save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Save.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Scale><div class=IEntry><a href="../files/OpenLayers/Control/Scale-j [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorT.html b/doc/apidocs/search/ConstructorT.html
index f7409d6..af4af3d 100644
--- a/doc/apidocs/search/ConstructorT.html
+++ b/doc/apidocs/search/ConstructorT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Text><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Text')" class=ISymbol>Text</a><div class=ISubIndex><a href="../files/OpenLayers/Format/Text-js.html#OpenLayers.Format.Text.OpenLayers.Format.Text" target=_parent class=IParent>OpenLayers.<wbr>Format.<wbr>Text.<wbr>OpenLayers.<wbr>Format</a><a href="../files/OpenLayers/Layer/Text-js.html#OpenL [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Text><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Text')" class=ISymbol>Text</a><div class=ISubIndex><a href="../files/OpenLayers/Format/Text-js.html#OpenLayers.Format.Text.OpenLayers.Format.Text" target=_parent class=IParent>OpenLayers.<wbr>Format.<wbr>Text.<wbr>OpenLayers.<wbr>Format</a><a href="../files/OpenLayers/Layer/Text-js.html#OpenL [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorU.html b/doc/apidocs/search/ConstructorU.html
index c218c54..1f44cd3 100644
--- a/doc/apidocs/search/ConstructorU.html
+++ b/doc/apidocs/search/ConstructorU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Untiled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Untiled')" class=ISymbol>Untiled</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/MapServer/Untiled-js.html#OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled.<wbr>OpenLayers.<wbr>L [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Untiled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Untiled')" class=ISymbol>Untiled</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled.<wbr>OpenLayers.<wbr>Layer.<wbr>MapServer</a>< [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorV.html b/doc/apidocs/search/ConstructorV.html
index d179af9..25c2b0c 100644
--- a/doc/apidocs/search/ConstructorV.html
+++ b/doc/apidocs/search/ConstructorV.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorW.html b/doc/apidocs/search/ConstructorW.html
index eb697d9..307f525 100644
--- a/doc/apidocs/search/ConstructorW.html
+++ b/doc/apidocs/search/ConstructorW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WCSGetCoverage><div class=IEntry><a href="../files/OpenLayers/Format/WCSGetCoverage-js.html#OpenLayers.Format.WCSGetCoverage_version_1.1.0.OpenLayers.Format.WCSGetCoverage" target=_parent class=ISymbol>WCSGetCoverage</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.<wbr>1.0.<wbr>OpenLayers.<wbr>Format</span></div></div><div class= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WCSGetCoverage><div class=IEntry><a href="../files/OpenLayers/Format/WCSGetCoverage-js.html#OpenLayers.Format.WCSGetCoverage_version_1.1.0.OpenLayers.Format.WCSGetCoverage" target=_parent class=ISymbol>WCSGetCoverage</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.<wbr>1.0.<wbr>OpenLayers.<wbr>Format</span></div></div><div class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/ConstructorY.html b/doc/apidocs/search/ConstructorY.html
index 2ced573..ebb1ba3 100644
--- a/doc/apidocs/search/ConstructorY.html
+++ b/doc/apidocs/search/ConstructorY.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Yahoo><div class=IEntry><a href="../files/OpenLayers/Layer/Yahoo-js.html#OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo" target=_parent class=ISymbol>Yahoo</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>Yahoo.<wbr>OpenLayers.<wbr>Layer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches< [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Yahoo><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo" target=_parent class=ISymbol>Yahoo</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>Yahoo.<wbr>OpenLayers.<wbr>Layer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FilesA.html b/doc/apidocs/search/FilesA.html
index 7a1c64b..8fc8110 100644
--- a/doc/apidocs/search/FilesA.html
+++ b/doc/apidocs/search/FilesA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Ajax_perjs><div class=IEntry><a href="../files/OpenLayers/Ajax-js.html#Ajax.js" target=_parent class=ISymbol>Ajax.js</a></div></div><div class=SRResult id=SR_ArcGISCache_perjs><div class=IEntry><a href="../files/OpenLayers/Layer/ArcGISCache-js.html#ArcGISCache.js" target=_parent class=ISymbol>ArcGISCache.js</a></div></div></table><div class=SRStatus id=Search [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ArcGISCache_perjs><div class=IEntry><a href="../files/OpenLayers/Layer/ArcGISCache-js.html#ArcGISCache.js" target=_parent class=ISymbol>ArcGISCache.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FilesD.html b/doc/apidocs/search/FilesD.html
new file mode 100644
index 0000000..c25e0b4
--- /dev/null
+++ b/doc/apidocs/search/FilesD.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_deprecated_perjs><div class=IEntry><a href="../files/deprecated-js.html#deprecated.js" target=_parent class=ISymbol>deprecated.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/apidocs/search/FunctionsB.html b/doc/apidocs/search/FunctionsB.html
index 5393b42..0ebc89a 100644
--- a/doc/apidocs/search/FunctionsB.html
+++ b/doc/apidocs/search/FunctionsB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_bind><div class=IEntry><a href="javascript:searchResults.Toggle('SR_bind')" class=ISymbol>bind</a><div class=ISubIndex><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Function.bind" target=_parent class=IParent>OpenLayers.<wbr>Function</a><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Function.Function.bind" target=_parent class=IParent>O [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_bind><div class=IEntry><a href="javascript:searchResults.Toggle('SR_bind')" class=ISymbol>bind</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Element.Function.bind" target=_parent class=IParent>OpenLayers.<wbr>Element.<wbr>Function</a><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Function.bind" target=_parent class=IParent [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsC.html b/doc/apidocs/search/FunctionsC.html
index be97577..fad3ed5 100644
--- a/doc/apidocs/search/FunctionsC.html
+++ b/doc/apidocs/search/FunctionsC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_calculateBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_calculateBounds')" class=ISymbol>calculateBounds</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry-js.html#OpenLayers.Geometry.calculateBounds" target=_parent class=IParent>OpenLayers.<wbr>Geometry</a><a href="../files/OpenLayers/Geometry/Collection-js.html#OpenLayers.G [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_calculateBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_calculateBounds')" class=ISymbol>calculateBounds</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry-js.html#OpenLayers.Geometry.calculateBounds" target=_parent class=IParent>OpenLayers.<wbr>Geometry</a><a href="../files/OpenLayers/Geometry/Collection-js.html#OpenLayers.G [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsD.html b/doc/apidocs/search/FunctionsD.html
index 39a19da..b792677 100644
--- a/doc/apidocs/search/FunctionsD.html
+++ b/doc/apidocs/search/FunctionsD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_deactivate><div class=IEntry><a href="javascript:searchResults.Toggle('SR_deactivate')" class=ISymbol>deactivate</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.deactivate" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Control/DragFeature-js.html#OpenLayers.Control.DragFeature.deac [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_deactivate><div class=IEntry><a href="javascript:searchResults.Toggle('SR_deactivate')" class=ISymbol>deactivate</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.deactivate" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Control/DragFeature-js.html#OpenLayers.Control.DragFeature.deac [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsG.html b/doc/apidocs/search/FunctionsG.html
index 163cb1c..3d7f6f7 100644
--- a/doc/apidocs/search/FunctionsG.html
+++ b/doc/apidocs/search/FunctionsG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_GET><div class=IEntry><a href="../files/OpenLayers/Request-js.html#OpenLayers.Request.GET" target=_parent class=ISymbol>GET</a>, <span class=IParent>OpenLayers.<wbr>Request</span></div></div><div class=SRResult id=SR_getArea><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getArea')" class=ISymbol>getArea</a><div class=ISubIndex><a href="../file [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_GET><div class=IEntry><a href="../files/OpenLayers/Request-js.html#OpenLayers.Request.GET" target=_parent class=ISymbol>GET</a>, <span class=IParent>OpenLayers.<wbr>Request</span></div></div><div class=SRResult id=SR_getArea><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getArea')" class=ISymbol>getArea</a><div class=ISubIndex><a href="../file [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsH.html b/doc/apidocs/search/FunctionsH.html
index 4404713..f7dcdd6 100644
--- a/doc/apidocs/search/FunctionsH.html
+++ b/doc/apidocs/search/FunctionsH.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hasAttributeNS><div class=IEntry><a href="../files/OpenLayers/Format/XML-js.html#OpenLayers.Format.XML.hasAttributeNS" target=_parent class=ISymbol>hasAttributeNS</a>, <span class=IParent>OpenLayers.<wbr>Format.XML</span></div></div><div class=SRResult id=SR_HEAD><div class=IEntry><a href="../files/OpenLayers/Request-js.html#OpenLayers.Request.HEAD" target=_p [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hasAttributeNS><div class=IEntry><a href="../files/OpenLayers/Format/XML-js.html#OpenLayers.Format.XML.hasAttributeNS" target=_parent class=ISymbol>hasAttributeNS</a>, <span class=IParent>OpenLayers.<wbr>Format.XML</span></div></div><div class=SRResult id=SR_HEAD><div class=IEntry><a href="../files/OpenLayers/Request-js.html#OpenLayers.Request.HEAD" target=_p [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsI.html b/doc/apidocs/search/FunctionsI.html
index 846a628..365b443 100644
--- a/doc/apidocs/search/FunctionsI.html
+++ b/doc/apidocs/search/FunctionsI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_info><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.info" target=_parent class=ISymbol>i [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_info><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.info" target=_parent class=ISymbol>i [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsL.html b/doc/apidocs/search/FunctionsL.html
index 67f5050..1606fe3 100644
--- a/doc/apidocs/search/FunctionsL.html
+++ b/doc/apidocs/search/FunctionsL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_limitSigDigs><div class=IEntry><a href="javascript:searchResults.Toggle('SR_limitSigDigs')" class=ISymbol>limitSigDigs</a><div class=ISubIndex><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Number.limitSigDigs" target=_parent class=IParent>OpenLayers.<wbr>Number</a><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Number.Number.limitSigDigs [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_limitSigDigs><div class=IEntry><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Number.limitSigDigs" target=_parent class=ISymbol>limitSigDigs</a>, <span class=IParent>OpenLayers.<wbr>Number</span></div></div><div class=SRResult id=SR_loadURL><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Ajax.OpenLayers.loadURL" target=_parent cla [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsM.html b/doc/apidocs/search/FunctionsM.html
index 8a44087..ca382a1 100644
--- a/doc/apidocs/search/FunctionsM.html
+++ b/doc/apidocs/search/FunctionsM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_mergeNewParams><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mergeNewParams')" class=ISymbol>mergeNewParams</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/ArcGIS93Rest-js.html#OpenLayers.Layer.ArcGIS93Rest.mergeNewParams" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>ArcGIS93Rest</a><a href="../files/OpenLayers/Layer/HTT [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_mergeNewParams><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mergeNewParams')" class=ISymbol>mergeNewParams</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/ArcGIS93Rest-js.html#OpenLayers.Layer.ArcGIS93Rest.mergeNewParams" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>ArcGIS93Rest</a><a href="../files/OpenLayers/Layer/HTT [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsR.html b/doc/apidocs/search/FunctionsR.html
index dfedf4f..7f24b4a 100644
--- a/doc/apidocs/search/FunctionsR.html
+++ b/doc/apidocs/search/FunctionsR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_raiseLayer><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.raiseLayer" target=_parent class=ISymbol>raiseLayer</a>, <span class=IParent>OpenLayers.Map</span></div></div><div class=SRResult id=SR_read><div class=IEntry><a href="javascript:searchResults.Toggle('SR_read')" class=ISymbol>read</a><div class=ISubIndex><a href="../files/Ope [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_raiseLayer><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.raiseLayer" target=_parent class=ISymbol>raiseLayer</a>, <span class=IParent>OpenLayers.Map</span></div></div><div class=SRResult id=SR_read><div class=IEntry><a href="javascript:searchResults.Toggle('SR_read')" class=ISymbol>read</a><div class=ISubIndex><a href="../files/Ope [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsS.html b/doc/apidocs/search/FunctionsS.html
index cc5264e..5230fb0 100644
--- a/doc/apidocs/search/FunctionsS.html
+++ b/doc/apidocs/search/FunctionsS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_parent class=ISymbol>save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.Save</span></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Bounds-js.html#OpenLayers.Bounds.scale" target=_parent class [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_parent class=ISymbol>save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.Save</span></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Bounds-js.html#OpenLayers.Bounds.scale" target=_parent class [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsT.html b/doc/apidocs/search/FunctionsT.html
index 172a59c..a2b55ef 100644
--- a/doc/apidocs/search/FunctionsT.html
+++ b/doc/apidocs/search/FunctionsT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_time><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.time" target=_parent class=ISymbol>time</a>, <span class=IParent>OpenLayers.<wbr>Console</span></div></div><div class=SRResult id=SR_timeEnd><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.timeEnd" target=_parent class=ISymbol>timeEnd</a>,  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_time><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.time" target=_parent class=ISymbol>time</a>, <span class=IParent>OpenLayers.<wbr>Console</span></div></div><div class=SRResult id=SR_timeEnd><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.timeEnd" target=_parent class=ISymbol>timeEnd</a>,  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsU.html b/doc/apidocs/search/FunctionsU.html
index 4d4c25c..2ce92f9 100644
--- a/doc/apidocs/search/FunctionsU.html
+++ b/doc/apidocs/search/FunctionsU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="../files/OpenLayers/Control/DrawFeature-js.html#OpenLayers.Control.DrawFeature.undo" target=_parent class=ISymbol>undo [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="../files/OpenLayers/Control/DrawFeature-js.html#OpenLayers.Control.DrawFeature.undo" target=_parent class=ISymbol>undo [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/FunctionsW.html b/doc/apidocs/search/FunctionsW.html
index bdb853a..ad4a31f 100644
--- a/doc/apidocs/search/FunctionsW.html
+++ b/doc/apidocs/search/FunctionsW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>OpenLayers.<wbr>Console</span></div></div><div class=SRResult id=SR_wrapDateLine><div class=IEntry><a href="javascript:searchResults.Toggle('SR_wrapDateLine')" class=ISymbol>wrapDateLine</a><div class=ISubInde [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>OpenLayers.<wbr>Console</span></div></div><div class=SRResult id=SR_wrapDateLine><div class=IEntry><a href="../files/OpenLayers/BaseTypes/LonLat-js.html#OpenLayers.LonLat.wrapDateLine" target=_parent class=ISy [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralA.html b/doc/apidocs/search/GeneralA.html
index 0b1c008..4f8ca91 100644
--- a/doc/apidocs/search/GeneralA.html
+++ b/doc/apidocs/search/GeneralA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_abort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_abort')" class=ISymbol>abort</a><div class=ISubIndex><a href="../files/OpenLayers/Protocol/HTTP-js.html#OpenLayers.Protocol.HTTP.abort" target=_parent class=IParent>OpenLayers.<wbr>Protocol.HTTP</a><a href="../files/OpenLayers/Protocol/Script-js.html#OpenLayers.Protocol.Script.abort" target= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_abort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_abort')" class=ISymbol>abort</a><div class=ISubIndex><a href="../files/OpenLayers/Protocol/HTTP-js.html#OpenLayers.Protocol.HTTP.abort" target=_parent class=IParent>OpenLayers.<wbr>Protocol.HTTP</a><a href="../files/OpenLayers/Protocol/Script-js.html#OpenLayers.Protocol.Script.abort" target= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralB.html b/doc/apidocs/search/GeneralB.html
index e5aeb68..3fd975c 100644
--- a/doc/apidocs/search/GeneralB.html
+++ b/doc/apidocs/search/GeneralB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_BACKGROUND_undID_undSUFFIX><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.Renderer.Elements.BACKGROUND_ID_SUFFIX" target=_parent class=ISymbol>BACKGROUND_ID_SUFFIX</a>, <span class=IParent>OpenLayers.<wbr>Renderer.<wbr>Elements</span></div></div><div class=SRResult id=SR_base><div class=IEntry><a href="../files/OpenLayers/ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_BACKGROUND_undID_undSUFFIX><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.Renderer.Elements.BACKGROUND_ID_SUFFIX" target=_parent class=ISymbol>BACKGROUND_ID_SUFFIX</a>, <span class=IParent>OpenLayers.<wbr>Renderer.<wbr>Elements</span></div></div><div class=SRResult id=SR_base><div class=IEntry><a href="../files/OpenLayers/ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralC.html b/doc/apidocs/search/GeneralC.html
index 016baa9..93ee4ff 100644
--- a/doc/apidocs/search/GeneralC.html
+++ b/doc/apidocs/search/GeneralC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_calculateBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_calculateBounds')" class=ISymbol>calculateBounds</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry-js.html#OpenLayers.Geometry.calculateBounds" target=_parent class=IParent>OpenLayers.<wbr>Geometry</a><a href="../files/OpenLayers/Geometry/Collection-js.html#OpenLayers.G [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CacheRead><div class=IEntry><a href="../files/OpenLayers/Control/CacheRead-js.html#OpenLayers.Control.CacheRead.OpenLayers.Control.CacheRead" target=_parent class=ISymbol>CacheRead</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>CacheRead.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_CacheWrite><div class=IEntry><a href="../fi [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralD.html b/doc/apidocs/search/GeneralD.html
index 144708a..b3c5a83 100644
--- a/doc/apidocs/search/GeneralD.html
+++ b/doc/apidocs/search/GeneralD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.data" target=_parent class=ISymbol>data</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_databaseName><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL-js.html#OpenLayers.Protocol.SQL.databaseName" target=_parent class=ISym [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.data" target=_parent class=ISymbol>data</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_databaseName><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.databaseName" target=_parent class=ISymbol>databaseN [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralE.html b/doc/apidocs/search/GeneralE.html
index 796058d..c91d7f0 100644
--- a/doc/apidocs/search/GeneralE.html
+++ b/doc/apidocs/search/GeneralE.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easing><div class=IEntry><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Tween.easing" target=_parent class=ISymbol>easing</a>, <span class=IParent>OpenLayers.<wbr>Tween</span></div></div><div class=SRResult id=SR_edge><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.edge" target=_parent class=ISymbol>edge</a [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easing><div class=IEntry><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Tween.easing" target=_parent class=ISymbol>easing</a>, <span class=IParent>OpenLayers.<wbr>Tween</span></div></div><div class=SRResult id=SR_edge><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.edge" target=_parent class=ISymbol>edge</a [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralF.html b/doc/apidocs/search/GeneralF.html
index f366486..b9d043e 100644
--- a/doc/apidocs/search/GeneralF.html
+++ b/doc/apidocs/search/GeneralF.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=ISymbol>fallThrough</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.fallThrough" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.fallThrough" target=_parent class=I [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=ISymbol>fallThrough</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.fallThrough" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.fallThrough" target=_parent class=I [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralG.html b/doc/apidocs/search/GeneralG.html
index f41cef6..7ad45e0 100644
--- a/doc/apidocs/search/GeneralG.html
+++ b/doc/apidocs/search/GeneralG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_geodesic><div class=IEntry><a href="j [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_geodesic><div class=IEntry><a href="javascript:searchRes [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralH.html b/doc/apidocs/search/GeneralH.html
index b284702..2bb1ac9 100644
--- a/doc/apidocs/search/GeneralH.html
+++ b/doc/apidocs/search/GeneralH.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_Handler><div class=IEntry><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.OpenLayers.Handler" target=_parent class=ISymbol>Handler</a>, <s [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_Handler><div class=IEntry><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.OpenLayers.Handler" target=_parent class=ISymbol>Handler</a>, <s [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralI.html b/doc/apidocs/search/GeneralI.html
index a734893..d80a156 100644
--- a/doc/apidocs/search/GeneralI.html
+++ b/doc/apidocs/search/GeneralI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_icon><div class=IEntry><a href="../files/OpenLayers/Layer/GeoRSS-js.html#OpenLayers.Layer.GeoRSS.icon" target=_parent class [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_icon><div class=IEntry><a href="../files/OpenLayers/Layer/GeoRSS-js.html#OpenLayers.Layer.GeoRSS.icon" target=_parent class [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralK.html b/doc/apidocs/search/GeneralK.html
index 58baf90..7e42254 100644
--- a/doc/apidocs/search/GeneralK.html
+++ b/doc/apidocs/search/GeneralK.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KaMap><div class=IEntry><a href="../files/OpenLayers/Layer/KaMap-js.html#OpenLayers.Layer.KaMap.OpenLayers.Layer.KaMap" target=_parent class=ISymbol>KaMap</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>KaMap.<wbr>OpenLayers.<wbr>Layer</span></div></div><div class=SRResult id=SR_KaMapCache><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KaMap><div class=IEntry><a href="../files/OpenLayers/Layer/KaMap-js.html#OpenLayers.Layer.KaMap.OpenLayers.Layer.KaMap" target=_parent class=ISymbol>KaMap</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>KaMap.<wbr>OpenLayers.<wbr>Layer</span></div></div><div class=SRResult id=SR_KaMapCache><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralL.html b/doc/apidocs/search/GeneralL.html
index d438a8b..c4bf9e3 100644
--- a/doc/apidocs/search/GeneralL.html
+++ b/doc/apidocs/search/GeneralL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABE [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABE [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralM.html b/doc/apidocs/search/GeneralM.html
index adfc9e4..5756368 100644
--- a/doc/apidocs/search/GeneralM.html
+++ b/doc/apidocs/search/GeneralM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_map><div class=IEntry><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.map" target=_parent class=ISymbol>map</a>, <span class=IParent>OpenLayers.<wbr>Layer</span></div></div><div class=SRResult id=SR2_Map><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.OpenLayers.Map" target=_parent class=ISymbol>Map</a>, <span class=IPare [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_map><div class=IEntry><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.map" target=_parent class=ISymbol>map</a>, <span class=IParent>OpenLayers.<wbr>Layer</span></div></div><div class=SRResult id=SR2_Map><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.OpenLayers.Map" target=_parent class=ISymbol>Map</a>, <span class=IPare [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralN.html b/doc/apidocs/search/GeneralN.html
index 6b52d76..f10fc3f 100644
--- a/doc/apidocs/search/GeneralN.html
+++ b/doc/apidocs/search/GeneralN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.name" target=_parent class= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.name" target=_parent class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralO.html b/doc/apidocs/search/GeneralO.html
index 8279c5c..3f1e65b 100644
--- a/doc/apidocs/search/GeneralO.html
+++ b/doc/apidocs/search/GeneralO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Pixel-js.html#OpenLayers.Pixel.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>OpenLayers.<wbr>Pixel</span></div></div><div class=SRResult id=SR_OGCExceptionReport><div class=IEntry><a href="../files/OpenLayers/Format/OGCExceptionReport-js.html#OpenLayers.Format.OGCExceptionR [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_observeElement><div class=IEntry><a href="../files/OpenLayers/Control/KeyboardDefaults-js.html#OpenLayers.Control.KeyboardDefaults.observeElement" target=_parent class=ISymbol>observeElement</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/OpenLayers/B [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralP.html b/doc/apidocs/search/GeneralP.html
index 95fdcd3..abbfa66 100644
--- a/doc/apidocs/search/GeneralP.html
+++ b/doc/apidocs/search/GeneralP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pageCount><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.pageCount" target=_parent class=ISymbol>pageCount</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging</span></div></div><div class=SRResult id=SR_pageLength><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Stra [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pageCount><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.pageCount" target=_parent class=ISymbol>pageCount</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging</span></div></div><div class=SRResult id=SR_pageLength><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Stra [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralR.html b/doc/apidocs/search/GeneralR.html
index 4801137..7c38c60 100644
--- a/doc/apidocs/search/GeneralR.html
+++ b/doc/apidocs/search/GeneralR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</span></div></div><div class=SRResult id=SR_raiseLayer><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</span></div></div><div class=SRResult id=SR_raiseLayer><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map. [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralS.html b/doc/apidocs/search/GeneralS.html
index a1463a8..48b0238 100644
--- a/doc/apidocs/search/GeneralS.html
+++ b/doc/apidocs/search/GeneralS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_parent class=ISymbol>save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.Save</span></div></div><div class=SRResult id=SR2_Save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.OpenLayers.Strategy.Sav [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_parent class=ISymbol>save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.Save</span></div></div><div class=SRResult id=SR2_Save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.OpenLayers.Strategy.Sav [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralT.html b/doc/apidocs/search/GeneralT.html
index b62d487..0bd9b93 100644
--- a/doc/apidocs/search/GeneralT.html
+++ b/doc/apidocs/search/GeneralT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_TARGET_undNODE><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTr [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_TARGET_undNODE><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTrack.OpenLayer [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralU.html b/doc/apidocs/search/GeneralU.html
index fe9fda2..6eeb151 100644
--- a/doc/apidocs/search/GeneralU.html
+++ b/doc/apidocs/search/GeneralU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="../files/OpenLayers/Control/DrawFeature-js.html#OpenLayers.Control.DrawFeature.undo" target=_parent class=ISymbol>undo [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="../files/OpenLayers/Control/DrawFeature-js.html#OpenLayers.Control.DrawFeature.undo" target=_parent class=ISymbol>undo [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralV.html b/doc/apidocs/search/GeneralV.html
index eca788f..ffe173c 100644
--- a/doc/apidocs/search/GeneralV.html
+++ b/doc/apidocs/search/GeneralV.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralW.html b/doc/apidocs/search/GeneralW.html
index fad884f..18d7214 100644
--- a/doc/apidocs/search/GeneralW.html
+++ b/doc/apidocs/search/GeneralW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>Op [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>Op [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralY.html b/doc/apidocs/search/GeneralY.html
index 3088f2f..1d95073 100644
--- a/doc/apidocs/search/GeneralY.html
+++ b/doc/apidocs/search/GeneralY.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.y" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/OpenLayers/BaseTypes/Pixel-js.html#OpenLayers.Pixel.y" target=_parent class=IParent> [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.y" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/OpenLayers/BaseTypes/Pixel-js.html#OpenLayers.Pixel.y" target=_parent class=IParent> [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/GeneralZ.html b/doc/apidocs/search/GeneralZ.html
index 9a5aa43..def2bc3 100644
--- a/doc/apidocs/search/GeneralZ.html
+++ b/doc/apidocs/search/GeneralZ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Z_undINDEX_undBASE><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.Z_INDEX_BASE" target=_parent class=ISymbol>Z_INDEX_BASE</a>, <span class=IParent>OpenLayers.Map</span></div></div><div class=SRResult id=SR_Z_undORDER_undDRAWING_undORDER><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndex [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Z_undINDEX_undBASE><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.Z_INDEX_BASE" target=_parent class=ISymbol>Z_INDEX_BASE</a>, <span class=IParent>OpenLayers.Map</span></div></div><div class=SRResult id=SR_Z_undORDER_undDRAWING_undORDER><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndex [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesA.html b/doc/apidocs/search/PropertiesA.html
index bbdaa72..c44a622 100644
--- a/doc/apidocs/search/PropertiesA.html
+++ b/doc/apidocs/search/PropertiesA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_active><div class=IEntry><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.active" target=_parent class=ISymbol>active</a>, <span class=IParent>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_allOverlays><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.allOverlays" target=_parent class=ISymbol>allOver [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_active><div class=IEntry><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.active" target=_parent class=ISymbol>active</a>, <span class=IParent>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_allOverlays><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.allOverlays" target=_parent class=ISymbol>allOver [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesC.html b/doc/apidocs/search/PropertiesC.html
index 2c94bfc..12b8df6 100644
--- a/doc/apidocs/search/PropertiesC.html
+++ b/doc/apidocs/search/PropertiesC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_callback><div class=IEntry><a href="../files/OpenLayers/Protocol/Script-js.html#OpenLayers.Protocol.Script.callback" target=_parent class=ISymbol>callback</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>Script</span></div></div><div class=SRResult id=SR_callbackKey><div class=IEntry><a href="../files/OpenLayers/Protocol/Script-js.html#OpenLayers.Protoc [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_callback><div class=IEntry><a href="../files/OpenLayers/Protocol/Script-js.html#OpenLayers.Protocol.Script.callback" target=_parent class=ISymbol>callback</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>Script</span></div></div><div class=SRResult id=SR_callbackKey><div class=IEntry><a href="../files/OpenLayers/Protocol/Script-js.html#OpenLayers.Protoc [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesD.html b/doc/apidocs/search/PropertiesD.html
index 7d2906c..d09fab9 100644
--- a/doc/apidocs/search/PropertiesD.html
+++ b/doc/apidocs/search/PropertiesD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.data" target=_parent class=ISymbol>data</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_databaseName><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL-js.html#OpenLayers.Protocol.SQL.databaseName" target=_parent class=ISym [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.data" target=_parent class=ISymbol>data</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_databaseName><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.databaseName" target=_parent class=ISymbol>databaseN [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesE.html b/doc/apidocs/search/PropertiesE.html
index 503705e..2d11d8e 100644
--- a/doc/apidocs/search/PropertiesE.html
+++ b/doc/apidocs/search/PropertiesE.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easing><div class=IEntry><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Tween.easing" target=_parent class=ISymbol>easing</a>, <span class=IParent>OpenLayers.<wbr>Tween</span></div></div><div class=SRResult id=SR_edge><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.edge" target=_parent class=ISymbol>edge</a [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easing><div class=IEntry><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Tween.easing" target=_parent class=ISymbol>easing</a>, <span class=IParent>OpenLayers.<wbr>Tween</span></div></div><div class=SRResult id=SR_edge><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.edge" target=_parent class=ISymbol>edge</a [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesF.html b/doc/apidocs/search/PropertiesF.html
index d77e838..39c8a8e 100644
--- a/doc/apidocs/search/PropertiesF.html
+++ b/doc/apidocs/search/PropertiesF.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=ISymbol>fallThrough</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.fallThrough" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.fallThrough" target=_parent class=I [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=ISymbol>fallThrough</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.fallThrough" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.fallThrough" target=_parent class=I [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesG.html b/doc/apidocs/search/PropertiesG.html
index 7d33962..79210ea 100644
--- a/doc/apidocs/search/PropertiesG.html
+++ b/doc/apidocs/search/PropertiesG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geodesic><div class=IEntry><a href="javascript:searchResults.Toggle('SR_geodesic')" class=ISymbol>geodesic</a><div class=ISubIndex><a href="../files/OpenLayers/Control/Scale-js.html#OpenLayers.Control.Scale.geodesic" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>Scale</a><a href="../files/OpenLayers/Control/ScaleLine-js.html#OpenLayers.Control.Sca [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geodesic><div class=IEntry><a href="javascript:searchResults.Toggle('SR_geodesic')" class=ISymbol>geodesic</a><div class=ISubIndex><a href="../files/OpenLayers/Control/Scale-js.html#OpenLayers.Control.Scale.geodesic" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>Scale</a><a href="../files/OpenLayers/Control/ScaleLine-js.html#OpenLayers.Control.Sca [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesH.html b/doc/apidocs/search/PropertiesH.html
index 09731ef..63095a2 100644
--- a/doc/apidocs/search/PropertiesH.html
+++ b/doc/apidocs/search/PropertiesH.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_handleRightClicks><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.handleRightClicks" target=_paren [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_handleRightClicks><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.handleRightClicks" target=_paren [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesI.html b/doc/apidocs/search/PropertiesI.html
index 3237e7b..a506f9f 100644
--- a/doc/apidocs/search/PropertiesI.html
+++ b/doc/apidocs/search/PropertiesI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_icon><div class=IEntry><a href="../files/OpenLayers/Layer/GeoRSS-js.html#OpenLayers.Layer.GeoRSS.icon" target=_parent class=ISymbol>icon</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>GeoRSS</span></div></div><div class=SRResult id=SR_id><div class=IEntry><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.id" target=_parent class=ISymbol>id</a>, [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_icon><div class=IEntry><a href="../files/OpenLayers/Layer/GeoRSS-js.html#OpenLayers.Layer.GeoRSS.icon" target=_parent class=ISymbol>icon</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>GeoRSS</span></div></div><div class=SRResult id=SR_id><div class=IEntry><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.id" target=_parent class=ISymbol>id</a>, [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesK.html b/doc/apidocs/search/PropertiesK.html
index ba26de8..c002003 100644
--- a/doc/apidocs/search/PropertiesK.html
+++ b/doc/apidocs/search/PropertiesK.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keepData><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.keepData" target=_parent class=ISymbol>keepData</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_keepInMap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_keepInMap')" class=ISymbol>keepInMap</a><div class=ISubInde [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keepData><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.keepData" target=_parent class=ISymbol>keepData</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_keepInMap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_keepInMap')" class=ISymbol>keepInMap</a><div class=ISubInde [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesL.html b/doc/apidocs/search/PropertiesL.html
index fac72c8..0199b54 100644
--- a/doc/apidocs/search/PropertiesL.html
+++ b/doc/apidocs/search/PropertiesL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_labelFormat><div class=IEntry><a href="../files/OpenLayers/Control/Graticule-js.html#OpenLayers.Control.Graticule. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_labelFormat><div class=IEntry><a href="../files/OpenLayers/Control/Graticule-js.html#OpenLayers.Control.Graticule. [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesN.html b/doc/apidocs/search/PropertiesN.html
index 31e1ac1..d21bf0b 100644
--- a/doc/apidocs/search/PropertiesN.html
+++ b/doc/apidocs/search/PropertiesN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.name" target=_parent class= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.name" target=_parent class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesO.html b/doc/apidocs/search/PropertiesO.html
index 4dcb1e6..1beacaf 100644
--- a/doc/apidocs/search/PropertiesO.html
+++ b/doc/apidocs/search/PropertiesO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_onComplete><div class=IEntry><a href="../files/OpenLayers/Control/DragFeature-js.html#OpenLayers.Control.DragFeature.onComplete" target=_parent class=ISymbol>onComplete</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>DragFeature</span></div></div><div class=SRResult id=SR_onDrag><div class=IEntry><a href="../files/OpenLayers/Control/DragFeature-js.html# [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_observeElement><div class=IEntry><a href="../files/OpenLayers/Control/KeyboardDefaults-js.html#OpenLayers.Control.KeyboardDefaults.observeElement" target=_parent class=ISymbol>observeElement</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</span></div></div><div class=SRResult id=SR_onComplete><div class=IEntry><a href="../files/OpenLaye [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesP.html b/doc/apidocs/search/PropertiesP.html
index c2b403b..955dfdf 100644
--- a/doc/apidocs/search/PropertiesP.html
+++ b/doc/apidocs/search/PropertiesP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_panIcons><div class=IEntry><a href="../files/OpenLayers/Control/PanZoomBar-js.html#OpenLayers.Control.PanZoomBar.panIcons" target=_parent class=ISymbol>panIcons</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>PanZoomBar</span></div></div><div class=SRResult id=SR_panMapIfOutOfView><div class=IEntry><a href="javascript:searchResults.Toggle('SR_panMapIfOu [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_panIcons><div class=IEntry><a href="../files/OpenLayers/Control/PanZoomBar-js.html#OpenLayers.Control.PanZoomBar.panIcons" target=_parent class=ISymbol>panIcons</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>PanZoomBar</span></div></div><div class=SRResult id=SR_panMapIfOutOfView><div class=IEntry><a href="javascript:searchResults.Toggle('SR_panMapIfOu [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesR.html b/doc/apidocs/search/PropertiesR.html
index 6d13e73..2b8a243 100644
--- a/doc/apidocs/search/PropertiesR.html
+++ b/doc/apidocs/search/PropertiesR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</span></div></div><div class=SRResult id=SR_ratio><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ratio')" class=I [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</span></div></div><div class=SRResult id=SR_ratio><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ratio')" class=I [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesS.html b/doc/apidocs/search/PropertiesS.html
index d5015ff..edac106 100644
--- a/doc/apidocs/search/PropertiesS.html
+++ b/doc/apidocs/search/PropertiesS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_saveState><div class=IEntry><a href="../files/OpenLayers/Control/Panel-js.html#OpenLayers.Control.Panel.saveState" target=_parent class=ISymbol>saveState</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Panel</span></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="../files/OpenLayers/Control/TransformFeature-js.html#OpenLayers.Contro [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_saveState><div class=IEntry><a href="../files/OpenLayers/Control/Panel-js.html#OpenLayers.Control.Panel.saveState" target=_parent class=ISymbol>saveState</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Panel</span></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="../files/OpenLayers/Control/TransformFeature-js.html#OpenLayers.Contro [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesT.html b/doc/apidocs/search/PropertiesT.html
index dbe0874..5a03deb 100644
--- a/doc/apidocs/search/PropertiesT.html
+++ b/doc/apidocs/search/PropertiesT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_targetFilter><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.targ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_targetFilter><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.targetFilter" tar [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesU.html b/doc/apidocs/search/PropertiesU.html
index 40f360e..b9a2ce6 100644
--- a/doc/apidocs/search/PropertiesU.html
+++ b/doc/apidocs/search/PropertiesU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_units><div class=IEntry><a href="javascript:searchResults.Toggle('SR_units')" class=ISymbol>units</a><div class=ISubIndex><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.units" target=_parent class=IParent>OpenLayers.<wbr>Layer</a><a href="../files/OpenLayers/Layer/KaMap-js.html#OpenLayers.Layer.KaMap.units" target=_parent class=IParent>OpenLayers [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_units><div class=IEntry><a href="javascript:searchResults.Toggle('SR_units')" class=ISymbol>units</a><div class=ISubIndex><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.units" target=_parent class=IParent>OpenLayers.<wbr>Layer</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.units" target=_parent class=IParent>OpenLayers.Map</a></div></ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesW.html b/doc/apidocs/search/PropertiesW.html
index 53cb037..cf7c327 100644
--- a/doc/apidocs/search/PropertiesW.html
+++ b/doc/apidocs/search/PropertiesW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_watch><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.watch" target=_parent class=ISymbol>watch</a>, [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_watch><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.watch" target=_parent class=ISymbol>watch</a>, [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/apidocs/search/PropertiesZ.html b/doc/apidocs/search/PropertiesZ.html
index fc81e9f..74cc13f 100644
--- a/doc/apidocs/search/PropertiesZ.html
+++ b/doc/apidocs/search/PropertiesZ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zIndex><div class=IEntry><a href="../files/OpenLayers/Symbolizer-js.html#OpenLayers.Symbolizer.zIndex" target=_parent class=ISymbol>zIndex</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_zoomBoxEnabled><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.zoomBox [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zIndex><div class=IEntry><a href="../files/OpenLayers/Symbolizer-js.html#OpenLayers.Symbolizer.zIndex" target=_parent class=ISymbol>zIndex</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_zoomBoxEnabled><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.zoomBox [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/customization b/doc/customization
deleted file mode 100644
index f4b5b98..0000000
--- a/doc/customization
+++ /dev/null
@@ -1,49 +0,0 @@
-Customizing OpenLayers
-======================
-
-OpenLayers is designed to fit many needs -- fitting in alongside all kinds of
-various applications which are currently in use. 
-
-Currently, OpenLayers supports a 'theme' option when creating a map. This 
-theme option allows you to specify the location of a CSS theme which should
-be included.
-
-A default theme is available as an example in the theme/ directory: the setup
-is:
-
- * theme/
- * theme/default/
- * theme/default/style.css
- * theme/default/img/
-
-Currently, the OpenLayers code does not support class names, and therefore,
-it is not possible to control many aspects of OpenLayers code with CSS 
-classes. However, with this framework in place, we expect to invest time 
-to make existing features and new features use the CSS theming framework
-where apropriate. 
-
-
-Class Naming
-============
-Elements should have class names which are descriptive of the Javascript
-class from which they come. For example, the main layer switcher element
-in the OpenLayers.Control.LayerSwitcher would be classed:
-
-  olControlLayerSwitcher
-
-This would allow users to add to their style.css class in their theme,
-changing, for example: 
-
-::
-  
-  .olControlLayerSwitcher input {
-    width:10px;
-  }
-
-Sub elements of a particular control can add to the class name:
-
-::
-
-  .olControlLayerSwitcherBaseLabel {
-      color: red;
-  }
diff --git a/doc/devdocs/files/OpenLayers-js.html b/doc/devdocs/files/OpenLayers-js.html
index 6cf8d4d..4b2b88f 100644
--- a/doc/devdocs/files/OpenLayers-js.html
+++ b/doc/devdocs/files/OpenLayers-js.html
@@ -11,12 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers"></a>OpenLayers</h1><div class=CBody><p>The OpenLayers object provides a namespace for all things OpenLayers</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers" >OpenLayers</a></td><td class=SDescription>The OpenLayers object provi [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers"></a>OpenLayers</h1><div class=CBody><p>The OpenLayers object provides a namespace for all things OpenLayers</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers" >OpenLayers</a></td><td class=SDescription>The OpenLayers object provi [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers._getScriptLocation"></a>_getScriptLocation</h3><div class=CBody><p>Return the path to this script.  This is also implemented in OpenLayers/SingleFile.js</p><h4 class=CHeading>Returns</h4><p>{String} Path to this script</p></div></div></div>
 
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ImgPath"></a>ImgPath</h3><div class=CBody><p>{String} Set this to the path where control images are stored, a path given here must end with a slash.  If set to ‘’ (which is the default) OpenLayers will use its script location + “img/”.</p><p>You will need to set this property when you have a singlefile build of OpenLayers that either is not named “OpenLayers.js” or if yo [...]
+<script type="text/javascript">
+   // tell OpenLayers where the control images are
+   // remember the trailing slash
+   OpenLayers.ImgPath = "/resources/external/images/ol/";
+</script></pre></blockquote><p>Please remember that when your OpenLayers script is not named “OpenLayers.js” you will have to make sure that the default theme is loaded into the page by including an appropriate <link>-tag, e.g.:</p><blockquote><pre class="prettyprint"><link rel="stylesheet" href="/path/to/default/style.css"  type="text/css"></pre></blockquote></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.VERSION_NUMBER"></a>VERSION_NUMBER</h3></div></div>
@@ -27,10 +36,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile id=MSelected>OpenLayers</div></div><div class=MEntry><div class=MFile><a href="OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Ba [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile id=MSelected>OpenLayers</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile> [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Ajax-js.html b/doc/devdocs/files/OpenLayers/Ajax-js.html
deleted file mode 100644
index f93a813..0000000
--- a/doc/devdocs/files/OpenLayers/Ajax-js.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Ajax.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Ajax.js"></a>Ajax.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Ajax.js" >Ajax.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.nullHandler"></a>OpenLayers.<wbr>nullHandler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.nullHandler = function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.loadURL"></a>OpenLayers.<wbr>loadURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.loadURL = function(</td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>params,</td></tr><tr><td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.parseXMLString"></a>OpenLayers.<wbr>parseXMLString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.parseXMLString = function(</td><td class="PParameter  prettyprint " nowrap>text</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax"></a>OpenLayers.Ajax</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Ajax.emptyFunction" [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.emptyFunction"></a>emptyFunction</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">emptyFunction: function ()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.getTransport"></a>getTransport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTransport: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} Transport mechanism for whichever browser we’re in, or false if none available.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.activeRequestCount"></a>activeRequestCount</h3><div class=CBody><p>{Integer}</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Responders"></a>OpenLayers.<wbr>Ajax.<wbr>Responders</h2><div class=CBody><p>{Object}</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Responders.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarke [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.responders"></a>responders</h3><div class=CBody><p>{Array}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.register"></a>register</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>register: function(</td><td class="PParameter  prettyprint " nowrap>responderToAdd</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.unregister"></a>unregister</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unregister: function(</td><td class="PParameter  prettyprint " nowrap>responderToRemove</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.dispatch"></a>dispatch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dispatch: function(</td><td class="PParameter  prettyprint " nowrap>callback,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>request,</td></tr><tr><td></td [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.onCreate"></a>onCreate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onCreate: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.onComplete"></a>onComplete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onComplete: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Base.Constructor" >Constructor</a></td><td class=SDescription></td></tr><tr class="SConstructor SIndent1 SMarked"><td class=SEntry><a href="#Ope [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h2><div class=CBody><p><b>Deprecated</b>.   Use <a href="Request-js.html#OpenLayers.Request" class=LClass id=link41 onMouseOver="ShowTip(event, 'tt24', 'link41')" onMouseOut="HideTip('tt24')">OpenLayers.Request</a> method instead.</p><h4 class=CHeading>Inherit</h4><ul><li><a href="#OpenLayers.Ajax.Base" class=LClass >OpenLayers.Ajax.Base</a></li></ul><!--ST [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request._complete"></a>_complete</h3><div class=CBody><p>{Boolean}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.onStateChange"></a>onStateChange</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onStateChange: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.setRequestHeaders"></a>setRequestHeaders</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setRequestHeaders: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.success"></a>success</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">success: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} -</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.getStatus"></a>getStatus</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getStatus: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Integer}</td><td class=CDLDescription>Status</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.respondToReadyState"></a>respondToReadyState</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>respondToReadyState: function(</td><td class="PParameter  prettyprint " nowrap>readyState</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.getHeader"></a>getHeader</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getHeader: function(</td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.dispatchException"></a>dispatchException</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dispatchException: function(</td><td class="PParameter  prettyprint " nowrap>exception</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Events"></a>Events</h3><div class=CBody><p>{Array(String)}</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Response.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.status"></a>status</h3><div class=CBody><p>{Integer}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.statusText"></a>statusText</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>request</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getStatus"></a>getStatus</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getStatustext"></a>getStatustext</h3><div class=CBody><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{String}</td><td class=CDLDescription>statusText</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getHeader"></a>getHeader</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getResponseHeader"></a>getResponseHeader</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResponseHeader: function(</td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getElementsByTagNameNS"></a>getElementsByTagNameNS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Ajax.getElementsByTagNameNS = function(</td><td class="PParameter  prettyprint " nowrap>parentnode,</td></tr><tr><td></td><td class="PPar [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.serializeXMLToString"></a>serializeXMLToString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Ajax.serializeXMLToString = function(</td><td class="PParameter  prettyprint " nowrap>xmldom</td><td class="PAfterParameters  prettyprint "no [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile id=MSelected>Ajax</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Base [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.nullHandler = function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>@param {} request</div></div><div class=CToolTip id="tt2"><div class [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Animation-js.html b/doc/devdocs/files/OpenLayers/Animation-js.html
new file mode 100644
index 0000000..59c4bad
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Animation-js.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Animation - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script languag [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Animation"></a>OpenLayers.<wbr>Animation</h1><div class=CBody><p>A collection of utility functions for executing methods that repaint a portion of the browser window.   These methods take advantage of the browser’s scheduled repaints where requestAnimationFrame is available.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Animation.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Animation.isNative"></a>isNative</h3><div class=CBody><p>{Boolean} true if a native requestAnimationFrame function is available</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Animation.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Animation.requestFrame"></a>requestFrame</h3><div class=CBody><p>Schedule a function to be called at the next available animation frame.  Uses the native method where available.   Where requestAnimationFrame is not available, setTimeout will be called with a 16ms delay.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>callba [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Animation.start"></a>start</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>function start(</td><td class="PParameter  prettyprint " nowrap>callback,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>duration,</td></tr><tr><td></td><td class="PPa [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Animation.stop"></a>stop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>function stop(</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Terminates an an [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>function start(</td><td class="PParameter  prettyprint " nowrap>callback,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>duration,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prett [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes-js.html b/doc/devdocs/files/OpenLayers/BaseTypes-js.html
index 8f89c60..f479ec1 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers_Base_Types"></a>OpenLayers Base Types</h1><div class=CBody><p>OpenLayers custom string, number and function functions are described here.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers_Base_Types" >OpenLayers Base Types</a></td> [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers_Base_Types"></a>OpenLayers Base Types</h1><div class=CBody><p>OpenLayers custom string, number and function functions are described here.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers_Base_Types" >OpenLayers Base Types</a></td> [...]
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.String"></a>OpenLayers.<wbr>String</h2><div class=CBody><p>Contains convenience functions for string manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.String.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SI [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.String"></a>OpenLayers.<wbr>String</h2><div class=CBody><p>Contains convenience functions for string manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.String.Functions_and_Properties" >Functions and Properties</a></td><td class=SDescription></t [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.Functions"></a>Functions</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.startsWith"></a>startsWith</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>startsWith: function(</td><td class="PParameter  prettyprint " nowrap>str,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>sub</td><td class="PAfterParameters  p [...]
 
@@ -27,30 +27,18 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.format"></a>format</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>format: function(</td><td class="PParameter  prettyprint " nowrap>template,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PPa [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.Properties"></a>Properties</h3></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.tokenRegEx"></a>tokenRegEx</h3><div class=CBody><p>Used to find tokens in a string.  Examples: ${a}, ${a.b.c}, ${a-b}, ${5}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.numberRegEx"></a>numberRegEx</h3><div class=CBody><p>Used to test strings as numbers.</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.Functions"></a>Functions</h3></div></div>
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.isNumeric"></a>isNumeric</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isNumeric: function(</td><td class="PParameter  prettyprint " nowrap>value</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 OpenLayers.String.isNumeric("12 dozen") // false
 OpenLayers.String.isNumeric("4") // true
 OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} String contains only a number.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.numericIf"></a>numericIf</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>numericIf: function(</td><td class="PParameter  prettyprint " nowrap>value</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.startsWith"></a>String.<wbr>startsWith</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string starts with another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sStart</td><td class=CDLDescription>{String} The string we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.contains"></a>String.<wbr>contains</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string contains another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>str</td><td class=CDLDescription>{String} The string that we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{Boole [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.trim"></a>String.trim</h3><div class=CBody><p><b>Deprecated</b>.  Removes leading and trailing whitespace characters from a string.</p><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{String} A trimmed version of the string</td><td class=CDLDescription>all leading and trailing spaces removed</td></tr></table></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.numericIf"></a>numericIf</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>numericIf: function(</td><td class="PParameter  prettyprint " nowrap>value</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.String.String.camelize"></a>String.<wbr>camelize</h3><div class=CBody><p><b>Deprecated</b>.  Camel-case a hyphenated string.  Ex.  “chicken-head” becomes “chickenHead”, and “-chicken-head” becomes “ChickenHead”.</p><h4 class=CHeading>Returns</h4><p>{String} The string, camelized</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Number"></a>OpenLayers.<wbr>Number</h2><div class=CBody><p>Contains convenience functions for manipulating numbers.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Number.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Number"></a>OpenLayers.<wbr>Number</h2><div class=CBody><p>Contains convenience functions for manipulating numbers.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Number.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Number.Properties"></a>Properties</h3></div></div>
 
@@ -64,9 +52,7 @@ OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 clas
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Number.format"></a>format</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>format: function(</td><td class="PParameter  prettyprint " nowrap>num,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dec,</td></tr><tr><td></td><td class="PParameter   [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Number.Number.limitSigDigs"></a>Number.<wbr>limitSigDigs</h3><div class=CBody><p><b>Deprecated</b>.  Limit the number of significant digits on an integer.  Does <b>not</b> work with floats!</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sig</td><td class=CDLDescription>{Integer}</td></tr></table><h4 class=CHeading>Returns< [...]
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Function"></a>OpenLayers.<wbr>Function</h2><div class=CBody><p>Contains convenience functions for function manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Function.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFun [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Function"></a>OpenLayers.<wbr>Function</h2><div class=CBody><p>Contains convenience functions for function manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Function.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFun [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Functions"></a>Functions</h3></div></div>
 
@@ -80,10 +66,6 @@ OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 clas
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Void"></a>Void</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">Void: function()</td></tr></table></blockquote><p>A reusable function that returns ``undefined``.</p><h4 class=CHeading>Returns</h4><p>{undefined}</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Function.bind"></a>Function.bind</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object.  Method to easily create closures with ‘this’ altered.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} the this parameter</td></tr></table><h4 class=CHe [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Function.Function.bindAsEventListener"></a>Function.<wbr>bindAsEventListener</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object, and configure it to receive the event object as first parameter when called.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} A referen [...]
-
 <div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Array"></a>OpenLayers.<wbr>Array</h2><div class=CBody><p>Contains convenience functions for array manipulation.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Array.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SInden [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Array.Functions"></a>Functions</h3></div></div>
@@ -96,10 +78,10 @@ OpenLayers.String.isNumeric(" 4 ") // false</pre></blockquote><h4 clas
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/Bounds-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/Bounds-js.html
index 112e664..4609462 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/Bounds-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/Bounds-js.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Bounds"></a>OpenLayers.<wbr>Bounds</h1><div class=CBody><p>Instances of this class represent bounding boxes.   Data stored as left, bottom, right, top floats.  All values are initialized to null, however, you should make sure you set them before using the bounds for anything.</p><h4 class=CHeading>Possible use case</h4><blockquote><pre class="prettyprint">bounds = new OpenLay [...]
 bounds.extend(new OpenLayers.LonLat(4,5));
 bounds.extend(new OpenLayers.LonLat(5,6));
-bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Bounds" >OpenLayers.<wbr>Bounds</a></td><td class=SDescription>Instances of this class represent bounding boxes. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Bounds.Properties" >Properties</a></td><td c [...]
+bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Bounds" >OpenLayers.<wbr>Bounds</a></td><td class=SDescription>Instances of this class represent bounding boxes. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Bounds.Properties" >Properties</a></td><td c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.Properties"></a>Properties</h3></div></div>
 
@@ -26,17 +26,17 @@ bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><di
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.top"></a>top</h3><div class=CBody><p>{Number} Maximum vertical coordinate.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.centerLonLat"></a>centerLonLat</h3><div class=CBody><p>{<a href="LonLat-js.html#OpenLayers.LonLat" class=LClass id=link31 onMouseOver="ShowTip(event, 'tt1', 'link31')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} A cached center location.   This should not be accessed directly.   Use <a href="#OpenLayers.Bounds.getCenterLonLat" class=LFunction id=link32 onMouseOver="ShowTip(event, 'tt14', [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.centerLonLat"></a>centerLonLat</h3><div class=CBody><p>{<a href="LonLat-js.html#OpenLayers.LonLat" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt1', 'link30')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} A cached center location.   This should not be accessed directly.   Use <a href="#OpenLayers.Bounds.getCenterLonLat" class=LFunction id=link31 onMouseOver="ShowTip(event, 'tt14', [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.OpenLayers.Bounds"></a>OpenLayers.<wbr>Bounds</h3><div class=CBody><p>Construct a new bounds object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>left</td><td class=CDLDescription>{Number} The left bounds of the box.   Note that for width calculations, this is assumed to be less than the right value.</td></tr><tr><t [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.OpenLayers.Bounds"></a>OpenLayers.<wbr>Bounds</h3><div class=CBody><p>Construct a new bounds object.  Coordinates can either be passed as four arguments, or as a single argument.</p><h4 class=CHeading>Parameters (four arguments)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>left</td><td class=CDLDescription>{Number} The left bounds of the box.  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Create a cloned instance of this bounds.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Bounds.OpenLayers.Bounds" class=LConstructor id=link33 onMouseOver="ShowTip(event, 'tt30', 'link33')" onMouseOut="Hid [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Create a cloned instance of this bounds.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Bounds.OpenLayers.Bounds" class=LConstructor id=link32 onMouseOver="ShowTip(event, 'tt29', 'link32')" onMouseOut="Hid [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Test a tw [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Test a tw [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toString"></a>toString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String representation of bounds object.</p></div></div></div>
 
@@ -44,45 +44,43 @@ bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><di
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toBBOX"></a>toBBOX</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>toBBOX:function(</td><td class="PParameter  prettyprint " nowrap>decimal,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toGeometry"></a>toGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toGeometry: function()</td></tr></table></blockquote><p>Create a new polygon geometry based on this bounds.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link35 onMouseOver="ShowTip(e [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.toGeometry"></a>toGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toGeometry: function()</td></tr></table></blockquote><p>Create a new polygon geometry based on this bounds.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link34 onMouseOver="ShowTip(e [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getWidth"></a>getWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWidth:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The width of the bounds</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getHeight"></a>getHeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getHeight:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The height of the bounds (top minus bottom).</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Size-js.html#OpenLayers.Size" class=LClass id=link36 onMouseOver="ShowTip(event, 'tt11', 'link36')" onMouseOut="HideTip('tt11')">OpenLayers.Size</a>} The size of the box. [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Size-js.html#OpenLayers.Size" class=LClass id=link35 onMouseOver="ShowTip(event, 'tt11', 'link35')" onMouseOut="HideTip('tt11')">OpenLayers.Size</a>} The size of the box. [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterPixel"></a>getCenterPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterPixel:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Pixel-js.html#OpenLayers.Pixel" class=LClass id=link37 onMouseOver="ShowTip(event, 'tt13', 'link37')" onMouseOut="HideTip('tt13')">OpenLayers.Pixel</ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterPixel"></a>getCenterPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterPixel:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="Pixel-js.html#OpenLayers.Pixel" class=LClass id=link36 onMouseOver="ShowTip(event, 'tt13', 'link36')" onMouseOut="HideTip('tt13')">OpenLayers.Pixel</ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterLonLat"></a>getCenterLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterLonLat:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="LonLat-js.html#OpenLayers.LonLat" class=LClass id=link38 onMouseOver="ShowTip(event, 'tt1', 'link38')" onMouseOut="HideTip('tt1')">OpenLayers.LonL [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.getCenterLonLat"></a>getCenterLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenterLonLat:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="LonLat-js.html#OpenLayers.LonLat" class=LClass id=link37 onMouseOver="ShowTip(event, 'tt1', 'link37')" onMouseOut="HideTip('tt1')">OpenLayers.LonL [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.scale"></a>scale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>scale: function(</td><td class="PParameter  prettyprint " nowrap>ratio,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.scale"></a>scale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>scale: function(</td><td class="PParameter  prettyprint " nowrap>ratio,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.extend"></a>extend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extend:function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Extend th [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsLonLat"></a>containsLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsLonLat:function(</td><td class="PParameter  prettyprint " nowrap>ll,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsLonLat"></a>containsLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsLonLat: function(</td><td class="PParameter  prettyprint " nowrap>ll,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAft [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsPixel"></a>containsPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsPixel:function(</td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsPixel"></a>containsPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsPixel:function(</td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td class="PAfter [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.contains"></a>contains</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>contains:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.intersectsBounds"></a>intersectsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>intersectsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>inclusive</td><td  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.intersectsBounds"></a>intersectsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>intersectsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsBounds"></a>containsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>partial,</td></tr><tr><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.containsBounds"></a>containsBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>containsBounds:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>partial,</td></tr><tr><t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.determineQuadrant"></a>determineQuadrant</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>determineQuadrant: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfterParameters   [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfterParameters   [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>wrapDateLine: function(</td><td class="PParameter  prettyprint " nowrap>maxExtent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromString"></a>fromString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromString = function(</td><td class="PParameter  prettyprint " nowrap>str,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromString"></a>fromString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromString = function(</td><td class="PParameter  prettyprint " nowrap>str,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromArray"></a>fromArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromArray = function(</td><td class="PParameter  prettyprint " nowrap>bbox,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromArray"></a>fromArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromArray = function(</td><td class="PParameter  prettyprint " nowrap>bbox,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>reverseAxisOrder</td> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromSize"></a>fromSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromSize = function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.fromSize"></a>fromSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.fromSize = function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Bounds.oppositeQuadrant"></a>oppositeQuadrant</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Bounds.oppositeQuadrant = function(</td><td class="PParameter  prettyprint " nowrap>quadrant</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
 
@@ -92,15 +90,15 @@ bounds.toBBOX(); // returns 4,5,5,6</pre></blockquote><!--START_ND_SUMMARY--><di
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>Create a cloned instance of this bounds.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>Create a cloned instance of this bounds.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/Class-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/Class-js.html
index 2ce5726..336bce7 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/Class-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/Class-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Class.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><b [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Class.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class=" [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,22 +11,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Class.js"></a>Class.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Class.js" >Class.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constructor" >Constructor</a></td><td class=SDescriptio [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Class.js"></a>Class.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Class.js" >Class.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constructor" >Constructor</a></td><td class=SDescriptio [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class"></a>OpenLayers.<wbr>Class</h3><div class=CBody><p>Base class used to construct all other classes.  Includes support for multiple inheritance.</p><p>This constructor is new in OpenLayers 2.5.   At OpenLayers 3.0, the old syntax for creating classes and dealing with inheritance will be removed.</p><h4 class=CHeading>To create a new OpenLayers-style class, use the following syntax</h4><blockquo [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="isPrototype"></a>isPrototype</h3><div class=CBody><p><b>Deprecated</b>.   This is no longer needed and will be removed at 3.0.</p></div></div></div>
-
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.create"></a>OpenLayers.<wbr>create</h3><div class=CBody><p><b>Deprecated</b>.   Old method to create an OpenLayers style class.   Use the <a href="#OpenLayers.Class" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Class</a> constructor instead.</p><h4 class=CHeading>Returns</h4><p>An OpenLayers class</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="inherit"></a>inherit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p><b>Deprec [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.inherit"></a>OpenLayers.<wbr>inherit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.inherit = function(</td><td class="PParameter  prettyprint " nowrap>C,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParam [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="extend"></a>extend</h3><div class=CBody><p>Copy all properties of a source object to a destination object.   Modifies the passed in destination object.   Any properties on the source object that are set to undefined will not be (re)set on the destination object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>destination</td><td class [...]
@@ -37,15 +29,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="tt2"><div class= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.inherit = function(</td><td class="PParameter  prettyprint " nowrap>C,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></d [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/Date-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/Date-js.html
index 336bd63..068402c 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/Date-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/Date-js.html
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/Element-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/Element-js.html
index 0ed5b0c..21ee0fb 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/Element-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/Element-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Element"></a>OpenLayers.<wbr>Element</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Element" >OpenLayers.<wbr>Element</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a hr [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Element"></a>OpenLayers.<wbr>Element</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Element" >OpenLayers.<wbr>Element</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a hr [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Functions"></a>Functions</h3></div></div>
 
@@ -19,16 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.toggle"></a>toggle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toggle: function()</td></tr></table></blockquote><p>Toggle the visibility of element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{D [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.hide"></a>hide</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">hide: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Hide element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Show element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.remove"></a>remove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>remove: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Remove [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getHeight"></a>getHeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getHeight: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getDimensions"></a>getDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getDimensions: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.hasClass"></a>hasClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>hasClass: function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  p [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.addClass"></a>addClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addClass: function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  p [...]
@@ -45,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>visible: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table bor [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>visible: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table bor [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/LonLat-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/LonLat-js.html
index 7b59722..c390f22 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/LonLat-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/LonLat-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h1><div class=CBody><p>This class represents a longitude and latitude pair</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.LonLat" >OpenLayers.<wbr>LonLat</a></td><td class=SDescription>This c [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h1><div class=CBody><p>This class represents a longitude and latitude pair</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.LonLat" >OpenLayers.<wbr>LonLat</a></td><td class=SDescription>This c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h3><div class=CBody><p>Create a new map location.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lon</td><td class=CDLDescription>{Number} The x-axis coordinate in map units.   If your map is in a geographic projection, this will be the Longitude.   Otherwise, it wil [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.OpenLayers.LonLat"></a>OpenLayers.<wbr>LonLat</h3><div class=CBody><p>Create a new map location.  Coordinates can be passed either as two arguments, or as a single argument.</p><h4 class=CHeading>Parameters (two arguments)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lon</td><td class=CDLDescription>{Number} The x-axis coordinate in map units.&nbsp [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.LonLat.Functions"></a>Functions</h3></div></div>
 
@@ -49,15 +49,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote>Return a readable string version of the lonlat</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toShortString:function()</td></tr></table></blockquote>{String} Shortened String [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote>Return a readable string version of the lonlat</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toShortString:function()</td></tr></table></blockquote>{String} Shortened String [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/Pixel-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/Pixel-js.html
index a6cc970..4a37fc8 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/Pixel-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/Pixel-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Pixel"></a>OpenLayers.<wbr>Pixel</h1><div class=CBody><p>This class represents a screen coordinate, in x and y coordinates</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Pixel" >OpenLayers.<wbr>Pixel</a></td><td class=SDescript [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Pixel"></a>OpenLayers.<wbr>Pixel</h1><div class=CBody><p>This class represents a screen coordinate, in x and y coordinates</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Pixel" >OpenLayers.<wbr>Pixel</a></td><td class=SDescript [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.Properties"></a>Properties</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.toString"></a>toString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote><p>Cast this object into a string</p><h4 class=CHeading>Returns</h4><p>{String} The string representation of Pixel. ex: “x=200.4,y=242.2”</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Return a clone of this pixel object</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Pixel.OpenLayers.Pixel" class=LConstructor id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7') [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Return a clone of this pixel object</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Pixel.OpenLayers.Pixel" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7') [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine whet [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine whet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Re [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Re [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.add"></a>add</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>add:function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Parameters px  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Pixel.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>offset:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Parameters px  [...]
 
 </div><!--Content-->
 
@@ -43,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote>Cast this object into a string</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>Return a clone of this pixel object</div></div><d [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString:function()</td></tr></table></blockquote>Cast this object into a string</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote>Return a clone of this pixel object</div></div><d [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/BaseTypes/Size-js.html b/doc/devdocs/files/OpenLayers/BaseTypes/Size-js.html
index 216a824..aeab1d0 100644
--- a/doc/devdocs/files/OpenLayers/BaseTypes/Size-js.html
+++ b/doc/devdocs/files/OpenLayers/BaseTypes/Size-js.html
@@ -29,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Size.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone:function()</td></tr></table></blockquote><p>Create a clone of this size object</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Size.OpenLayers.Size" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">Op [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Size.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>sz</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine where [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Size.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals:function(</td><td class="PParameter  prettyprint " nowrap>sz</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine where [...]
 
 </div><!--Content-->
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([1, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([1, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Console-js.html b/doc/devdocs/files/OpenLayers/Console-js.html
index d5316c7..0503546 100644
--- a/doc/devdocs/files/OpenLayers/Console-js.html
+++ b/doc/devdocs/files/OpenLayers/Console-js.html
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control-js.html b/doc/devdocs/files/OpenLayers/Control-js.html
index b0ad001..c55212f 100644
--- a/doc/devdocs/files/OpenLayers/Control-js.html
+++ b/doc/devdocs/files/OpenLayers/Control-js.html
@@ -14,7 +14,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control"></a>OpenLayers.<wbr>Control</h1><div class=CBody><p>Controls affect the display or behavior of the map.  They allow everything from panning and zooming to displaying a scale indicator.  Controls by default are added to the map they are contained within however it is possible to add a control to an external div by passing the div in the options parameter.</p><h4 class [...]
 
 map.addControl(new OpenLayers.Control.PanZoomBar());
-map.addControl(new OpenLayers.Control.MouseToolbar());
 map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
 map.addControl(new OpenLayers.Control.Permalink());
 map.addControl(new OpenLayers.Control.Permalink('permalink'));
@@ -35,7 +34,7 @@ OpenLayers.Util.extend(control, {
         OpenLayers.Console.userError(bounds);
     }
 });
-map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Control" >OpenLayers.<wbr>Control</a></td><td class=SDescription>Controls affect the display or behavior of the map. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Control.Properties" >Properties</a></td><td class=S [...]
+map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Control" >OpenLayers.<wbr>Control</a></td><td class=SDescription>Controls affect the display or behavior of the map. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#OpenLayers.Control.Properties" >Properties</a></td><td class=S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Properties"></a>Properties</h3></div></div>
 
@@ -47,7 +46,7 @@ map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Sum
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.type"></a>type</h3><div class=CBody><p>{Number} Controls can have a ‘type’.  The type determines the type of interactions which are possible with them when they are placed in an <a href="Control/Panel-js.html#OpenLayers.Control.Panel" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">OpenLayers.Control.Panel</a>.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.allowSelection"></a>allowSelection</h3><div class=CBody><p>{Boolean} By deafault, controls do not allow selection, because it may interfere with map dragging.  If this is true, OpenLayers will not prevent selection of the control.  Default is false.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.allowSelection"></a>allowSelection</h3><div class=CBody><p>{Boolean} By default, controls do not allow selection, because it may interfere with map dragging.  If this is true, OpenLayers will not prevent selection of the control.  Default is false.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.displayClass"></a>displayClass</h3><div class=CBody><p>{string}  This property is used for CSS related to the drawing of the Control.</p></div></div></div>
 
@@ -61,11 +60,7 @@ map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Sum
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link15 onMouseOver="ShowTip(event, 'tt3', 'link15')" onMouseOut="HideTip('tt3')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for  [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactly w [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners wil [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Constructor"></a>Constructor</h3></div></div>
 
@@ -99,10 +94,10 @@ map.addControl(control);</pre></blockquote><!--START_ND_SUMMARY--><div class=Sum
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ArgParser-js.html b/doc/devdocs/files/OpenLayers/Control/ArgParser-js.html
index 94069b9..d2e24e2 100644
--- a/doc/devdocs/files/OpenLayers/Control/ArgParser-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ArgParser-js.html
@@ -11,11 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ArgParser"></a>OpenLayers.<wbr>Control.<wbr>ArgParser</h1><div class=CBody><p>The ArgParser control adds location bar querystring parsing functionality to an OpenLayers Map.  When added to a Map control, on a page load/refresh, the Map will automatically take the href string and parse it for lon, lat, zoom, and layers information.</p><h4 class=CHeading>Inherits from</h4><u [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ArgParser"></a>OpenLayers.<wbr>Control.<wbr>ArgParser</h1><div class=CBody><p>The ArgParser control adds location bar query string parsing functionality to an OpenLayers Map.  When added to a Map control, on a page load/refresh, the Map will automatically take the href string and parse it for lon, lat, zoom, and layers information.</p><h4 class=CHeading>Inherits from</h4>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="../Projection-js.html#OpenLayers.Projection" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.Projection</a>} Requires proj4js support.  Projection used when reading the coordinates from the URL.  This will</p><p>reproject the map coordinates from the UR [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.center"></a>center</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.zoom"></a>zoom</h3><div class=CBody><p>{int}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.layers"></a>layers</h3><div class=CBody><p>{String} Each character represents the state of the corresponding layer on the map.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="../Projection-js.html#OpenLayers.Projection" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt2', 'link9')" onMouseOut="HideTip('tt2')">OpenLayers.Projection</a>} Requires proj4js support.  Projection used when reading the coordinates from the URL.  This will reproject the map coordinates from the URL into [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.Constructor"></a>Constructor</h3></div></div>
 
@@ -25,7 +31,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.getParameters"></a>getParameters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getParameters: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ArgParser.setCenter"></a>setCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setCenter: function()</td></tr></table></blockquote><p>As soon as a baseLayer has been loaded, we center and zoom ...and remove the handler.</p></div></div></div>
 
@@ -37,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getParameters: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getParameters: function(</td><t [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Attribution-js.html b/doc/devdocs/files/OpenLayers/Control/Attribution-js.html
index 5900f8c..1bfa795 100644
--- a/doc/devdocs/files/OpenLayers/Control/Attribution-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Attribution-js.html
@@ -11,12 +11,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Attribution"></a>OpenLayers.<wbr>Control.<wbr>Attribution</h1><div class=CBody><p>The attribution control adds attribution from layers to the map display.  It uses ‘attribution’ property of each layer.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4') [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Attribution"></a>OpenLayers.<wbr>Control.<wbr>Attribution</h1><div class=CBody><p>The attribution control adds attribution from layers to the map display.  It uses ‘attribution’ property of each layer.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4') [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.seperator"></a>seperator</h3><div class=CBody><p>{String} String used to seperate layers.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.template"></a>template</h3><div class=CBody><p>{String} Template for the attribution.  This has to include the substring “${layers}”, which will be replaced by the layer specific attributions, separated by <separator>.  The default is “${layers}”.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Attribution.OpenLayers.Control.Attribution"></a>OpenLayers.<wbr>Control.<wbr>Attribution</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Options for control.</td></tr></table></div></div></div>
@@ -35,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Button-js.html b/doc/devdocs/files/OpenLayers/Control/Button-js.html
index d0f0c53..c24f0d4 100644
--- a/doc/devdocs/files/OpenLayers/Control/Button-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Button-js.html
@@ -30,10 +30,10 @@ panel.addControls([button]);</pre></blockquote><p>Will create a button with CSS
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/CacheRead-js.html b/doc/devdocs/files/OpenLayers/Control/CacheRead-js.html
new file mode 100644
index 0000000..9315814
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Control/CacheRead-js.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.CacheRead - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.CacheRead"></a>OpenLayers.<wbr>Control.<wbr>CacheRead</h1><div class=CBody><p>A control for using image tiles cached with <a href="CacheWrite-js.html#OpenLayers.Control.CacheWrite" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Control.CacheWrite</a> from the browser’s local storage.</p><h4 class=CHeading>Inherits [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.fetchEvent"></a>fetchEvent</h3><div class=CBody><p>{String} The layer event to listen to for replacing remote resource tile URLs with cached data URIs.  Supported values are “tileerror” (try remote first, fall back to cached) and “tileloadstart” (try cache first, fall back to remote).  Default is “tileloadstart”.</p><p>Note that “tileerror&rd [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt2', 'link13')" onMouseOut="HideTip('tt2')">OpenLayers.Layer.Grid</a>)}.  Optional.  If provided, only these layers will receive tiles from the cache.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.OpenLayers.Control.CacheRead"></a>OpenLayers.<wbr>Control.<wbr>CacheRead</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Object with API properties for this control</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.addLayer"></a>addLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayer: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.removeLayer"></a>removeLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeLayer: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.fetch"></a>fetch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>fetch: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Lis [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheRead.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>The destroy method is used to perform any clean up before the control is dereferenced.   Typically this is where event listeners are removed to prevent memory leaks.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>A control for caching image tiles in the browser’s local storage. </div></div><div class=CToolTip id="tt2"><div class=CClass>Base class for layers that use a lattice of tiles. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Control/CacheWrite-js.html b/doc/devdocs/files/OpenLayers/Control/CacheWrite-js.html
new file mode 100644
index 0000000..1cb1aad
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Control/CacheWrite-js.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.CacheWrite - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.CacheWrite"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite</h1><div class=CBody><p>A control for caching image tiles in the browser’s local storage.  The <a href="CacheRead-js.html#OpenLayers.Control.CacheRead" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Control.CacheRead</a> control is used to fetch and use  [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><p>To register events in the constructor, configure <a href="#OpenLayers.Control.CacheWrite.eventListeners" class=LProperty id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="Hi [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} Object with event listeners, keyed by event name.  An optional scope property defines the scope that listeners will be executed in.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt1', 'link13')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Grid</a>)}.  Optional.  If provided, caching will be enabled for these layers only, otherwise for all cacheable layers.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.imageFormat"></a>imageFormat</h3><div class=CBody><p>{String} The image format used for caching.  The default is “image/png”.  Supported formats depend on the user agent.  If an unsupported <a href="#OpenLayers.Control.CacheWrite.imageFormat" class=LProperty id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">imageFormat</a> is prov [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.quotaRegEx"></a>quotaRegEx</h3><div class=CBody><p>{RegExp}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.OpenLayers.Control.CacheWrite"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Object with API properties for this control.</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.addLayer"></a>addLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayer: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.removeLayer"></a>removeLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeLayer: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.makeSameOrigin"></a>makeSameOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>makeSameOrigin: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.cache"></a>cache</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>cache: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ad [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>The destroy method is used to perform any clean up before the control is dereferenced.   Typically this is where event listeners are removed to prevent memory leaks.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.OpenLayers.Control.CacheWrite.clearCache"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite.<wbr>clearCache</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Control.CacheWrite.clearCache = function()</td></tr></table></blockquote><p>Clears all tiles cached with <a href="#OpenLayers.Control.CacheWrite.OpenLayers.Con [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.CacheWrite.OpenLayers.Control.CacheWrite.urlMap"></a>OpenLayers.<wbr>Control.<wbr>CacheWrite.<wbr>urlMap</h3><div class=CBody><p>{Object} Mapping of same origin urls to cache url keys.  Entries will be deleted as soon as a tile was cached.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Base class for layers that use a lattice of tiles. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Control/DragFeature-js.html b/doc/devdocs/files/OpenLayers/Control/DragFeature-js.html
index 6c2f7e1..dde5c5e 100644
--- a/doc/devdocs/files/OpenLayers/Control/DragFeature-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/DragFeature-js.html
@@ -77,10 +77,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/DragPan-js.html b/doc/devdocs/files/OpenLayers/Control/DragPan-js.html
index a75dcdb..f940354 100644
--- a/doc/devdocs/files/OpenLayers/Control/DragPan-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/DragPan-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.DragPan"></a>OpenLayers.<wbr>Control.<wbr>DragPan</h1><div class=CBody><p>The DragPan control pans the map with a drag of the mouse.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt5', 'link7')" onMouseOut="HideTip('tt5')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY-->< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.DragPan"></a>OpenLayers.<wbr>Control.<wbr>DragPan</h1><div class=CBody><p>The DragPan control pans the map with a drag of the mouse.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt5', 'link7')" onMouseOut="HideTip('tt5')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY-->< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.Properties"></a>Properties</h3></div></div>
 
@@ -23,9 +23,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.documentDrag"></a>documentDrag</h3><div class=CBody><p>{Boolean} If set to true, mouse dragging will continue even if the mouse cursor leaves the map viewport.  Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.kinetic"></a>kinetic</h3><div class=CBody><p>{OpenLayers.Kinetic} The OpenLayers.Kinetic object.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.kinetic"></a>kinetic</h3><div class=CBody><p>{<a href="../Kinetic-js.html#OpenLayers.Kinetic" class=LConstructor >OpenLayers.Kinetic</a>} The OpenLayers.Kinetic object.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.enableKinetic"></a>enableKinetic</h3><div class=CBody><p>{Boolean} Set this option to enable “kinetic dragging”.  Can be set to true or to an object.  If set to an object this object will be passed to the {<a href="../Kinetic-js.html#OpenLayers.Kinetic" class=LConstructor >OpenLayers.Kinetic</a>} constructor.  Defaults to false.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.enableKinetic"></a>enableKinetic</h3><div class=CBody><p>{Boolean} Set this option to enable “kinetic dragging”.  Can be set to true or to an object.  If set to an object this object will be passed to the {<a href="../Kinetic-js.html#OpenLayers.Kinetic" class=LConstructor >OpenLayers.Kinetic</a>} constructor.  Defaults to false.  If you set this property, you shou [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DragPan.kineticInterval"></a>kineticInterval</h3><div class=CBody><p>{Integer} Interval in milliseconds between 2 steps in the “kinetic scrolling”.  Applies only if enableKinetic is set.  Defaults to 10 milliseconds.</p></div></div></div>
 
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/DrawFeature-js.html b/doc/devdocs/files/OpenLayers/Control/DrawFeature-js.html
index 51c85f3..bd69085 100644
--- a/doc/devdocs/files/OpenLayers/Control/DrawFeature-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/DrawFeature-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h1><div class=CBody><p>The DrawFeature control draws point, line or polygon features on a vector layer when active.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">OpenLayers [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h1><div class=CBody><p>The DrawFeature control draws point, line or polygon features on a vector layer when active.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">OpenLayers [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Properties"></a>Properties</h3></div></div>
 
@@ -19,11 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.callbacks"></a>callbacks</h3><div class=CBody><p>{Object} The functions that are sent to the handler for callback</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>featureadded</td><td class=CDLDescription>Triggered when a feature is added</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Properties"></a>Properties</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote>< [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.multi"></a>multi</h3><div class=CBody><p>{Boolean} Cast features to multi-part geometries before passing to the layer.   Default is false.</p></div></div></div>
 
@@ -33,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt1', 'link14')" onMous [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.OpenLayers.Control.DrawFeature"></a>OpenLayers.<wbr>Control.<wbr>DrawFeature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt1', 'link15')" onMous [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.Functions"></a>Functions</h3></div></div>
 
@@ -49,7 +45,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.undo"></a>undo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">undo: function()</td></tr></table></blockquote><p>Remove the most recently added point in the current sketch geometry.</p><h4 class=CHeading>Returns</h4><p>{Boolean} An edit was undone.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.redo"></a>redo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redo: function()</td></tr></table></blockquote><p>Reinsert the most recently removed point resulting from an <a href="#OpenLayers.Control.DrawFeature.undo" class=LFunction id=link16 onMouseOver="ShowTip(event, 'tt7', 'link16')" onMouseOut="HideTip('tt7')"> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.redo"></a>redo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redo: function()</td></tr></table></blockquote><p>Reinsert the most recently removed point resulting from an <a href="#OpenLayers.Control.DrawFeature.undo" class=LFunction id=link17 onMouseOver="ShowTip(event, 'tt7', 'link17')" onMouseOut="HideTip('tt7')"> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.DrawFeature.finishSketch"></a>finishSketch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">finishSketch: function()</td></tr></table></blockquote><p>Finishes the sketch without including the currently drawn point.  This method can be called to terminate drawing programmatically instead of waiting for the user to end the sket [...]
 
@@ -61,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParamet [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParamet [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/EditingToolbar-js.html b/doc/devdocs/files/OpenLayers/Control/EditingToolbar-js.html
index 1686de8..fc66825 100644
--- a/doc/devdocs/files/OpenLayers/Control/EditingToolbar-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/EditingToolbar-js.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.EditingToolbar"></a>OpenLayers.<wbr>Control.<wbr>EditingToolbar</h1><div class=CBody><p>The EditingToolbar is a panel of 4 controls to draw polygons, lines, points, or to navigate the map by panning.  By default it appears in the upper right corner of the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Panel-js.html#OpenLayers.Control.Panel" class=LClass id=l [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.EditingToolbar"></a>OpenLayers.<wbr>Control.<wbr>EditingToolbar</h1><div class=CBody><p>The EditingToolbar is a panel of 4 controls to draw polygons, lines, points, or to navigate the map by panning.  By default it appears in the upper right corner of the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Panel-js.html#OpenLayers.Control.Panel" class=LClass id=l [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EditingToolbar.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EditingToolbar.citeCompliant"></a>citeCompliant</h3><div class=CBody><p>{Boolean} If set to true, coordinates of features drawn in a map extent crossing the date line won’t exceed the world bounds.  Default is false.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.EditingToolbar.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Geolocate-js.html b/doc/devdocs/files/OpenLayers/Control/Geolocate-js.html
index c78b49f..423d461 100644
--- a/doc/devdocs/files/OpenLayers/Control/Geolocate-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Geolocate-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Geolocate"></a>OpenLayers.<wbr>Control.<wbr>Geolocate</h1><div class=CBody><p>The Geolocate control wraps w3c geolocation API into control that can be bound to a map, and generate events on location update</p><p>To use this control requires to load the proj4js library if the projection of the map is not EPSG:4326 or EPSG:900913.</p><h4 class=CHeading>Inherits from</h4><ul><li>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><ul><li><b>locationupdated</b> Triggered when browser return a new position</li><li><b>locationfailed</b> Triggered when geolocation has failed</li><li><b>locationuncapable</b> Triggered when control is activated on a browser which doesn’t support geolocation</li></ul></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Geolocate"></a>OpenLayers.<wbr>Control.<wbr>Geolocate</h1><div class=CBody><p>The Geolocate control wraps w3c geolocation API into control that can be bound to a map, and generate events on location update</p><p>To use this control requires to load the proj4js library if the projection of the map is not EPSG:4326 or EPSG:900913.</p><h4 class=CHeading>Inherits from</h4><ul><li>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.geolocation"></a>geolocation</h3><div class=CBody><p>{Object} The geolocation engine, as a property to be possibly mocked.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Geolocate.bind"></a>bind</h3><div class=CBody><p>{Boolean} If true, map center will be set on location update.</p></div></div></div>
@@ -51,15 +49,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function ()</td></tr></table></blockquote>Activates the control.</div></div><div class=CToolTip id="tt3"><div class= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function ()</td></tr></table></blockquote>Activates the control.</div></div><div class=CToolTip id="tt3"><div class= [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/GetFeature-js.html b/doc/devdocs/files/OpenLayers/Control/GetFeature-js.html
index b5adf48..8b02616 100644
--- a/doc/devdocs/files/OpenLayers/Control/GetFeature-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/GetFeature-js.html
@@ -11,53 +11,51 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h1><div class=CBody><p>Gets vector features for locations underneath the mouse cursor.  Can be configured to act on click, hover or dragged boxes.  Uses an <a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt1', 'link26')" onMouseOut="HideTip('tt1')">OpenLayers [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h1><div class=CBody><p>Gets vector features for locations underneath the mouse cursor.  Can be configured to act on click, hover or dragged boxes.  Uses an <a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt1', 'link28')" onMouseOut="HideTip('tt1')">OpenLayers [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.protocol"></a>protocol</h3><div class=CBody><p>{<a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt1', 'link28')" onMouseOut="HideTip('tt1')">OpenLayers.Protocol</a>} Required.  The protocol used for fetching features.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.protocol"></a>protocol</h3><div class=CBody><p>{<a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt1', 'link30')" onMouseOut="HideTip('tt1')">OpenLayers.Protocol</a>} Required.  The protocol used for fetching features.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.multipleKey"></a>multipleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.GetFeature.multiple" class=LProperty id=link29 onMouseOver="ShowTip(event, 'tt2', 'link29')" onMouseOut="HideTip('tt2')">multiple</a> property to true.   Default is null.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.multipleKey"></a>multipleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.GetFeature.multiple" class=LProperty id=link31 onMouseOver="ShowTip(event, 'tt2', 'link31')" onMouseOut="HideTip('tt2')">multiple</a> property to true.   Default is null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.toggleKey"></a>toggleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.GetFeature.toggle" class=LProperty id=link30 onMouseOver="ShowTip(event, 'tt3', 'link30')" onMouseOut="HideTip('tt3')">toggle</a> property to true.   Default is null.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.toggleKey"></a>toggleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.GetFeature.toggle" class=LProperty id=link32 onMouseOver="ShowTip(event, 'tt3', 'link32')" onMouseOut="HideTip('tt3')">toggle</a> property to true.   Default is null.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.modifiers"></a>modifiers</h3><div class=CBody><p>{Object} The event modifiers to use, according to the current event being handled by this control’s handlers</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.multiple"></a>multiple</h3><div class=CBody><p>{Boolean} Allow selection of multiple geometries.   Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.click"></a>click</h3><div class=CBody><p>{Boolean} Use a click handler for selecting/unselecting features.  If both <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link31 onMouseOver="ShowTip(event, 'tt27', 'link31')" onMouseOut="HideTip('tt27')">click</a> and <a href="#OpenLayers.Control.GetFeature.box" class=LProperty id=link32 onMouseOver="ShowTip(event, 'tt13', 'lin [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.click"></a>click</h3><div class=CBody><p>{Boolean} Use a click handler for selecting/unselecting features.  If both <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link33 onMouseOver="ShowTip(event, 'tt28', 'link33')" onMouseOut="HideTip('tt28')">click</a> and <a href="#OpenLayers.Control.GetFeature.box" class=LProperty id=link34 onMouseOver="ShowTip(event, 'tt13', 'lin [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.single"></a>single</h3><div class=CBody><p>{Boolean} Tells whether select by click should select a single feature.  If set to false, all matching features are selected.  If set to true, only the best matching feature is selected.  This option has an effect only of the <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link33 onMouseOver="ShowTip(event, 'tt27', 'l [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.single"></a>single</h3><div class=CBody><p>{Boolean} Tells whether select by click should select a single feature.  If set to false, all matching features are selected.  If set to true, only the best matching feature is selected.  This option has an effect only of the <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link35 onMouseOver="ShowTip(event, 'tt28', 'l [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.clickout"></a>clickout</h3><div class=CBody><p>{Boolean} Unselect features when clicking outside any feature.  Applies only if <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link34 onMouseOver="ShowTip(event, 'tt27', 'link34')" onMouseOut="HideTip('tt27')">click</a> is true.   Default is true.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.clickout"></a>clickout</h3><div class=CBody><p>{Boolean} Unselect features when clicking outside any feature.  Applies only if <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link36 onMouseOver="ShowTip(event, 'tt28', 'link36')" onMouseOut="HideTip('tt28')">click</a> is true.   Default is true.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.toggle"></a>toggle</h3><div class=CBody><p>{Boolean} Unselect a selected feature on click.   Applies only if <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link35 onMouseOver="ShowTip(event, 'tt27', 'link35')" onMouseOut="HideTip('tt27')">click</a> is true.   Default is false.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.toggle"></a>toggle</h3><div class=CBody><p>{Boolean} Unselect a selected feature on click.   Applies only if <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link37 onMouseOver="ShowTip(event, 'tt28', 'link37')" onMouseOut="HideTip('tt28')">click</a> is true.   Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.clickTolerance"></a>clickTolerance</h3><div class=CBody><p>{Integer} Tolerance for the filter query in pixels.  This has the same effect as the tolerance parameter on WMS GetFeatureInfo requests.   Will be ignored for box selections.   Applies only if <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link36 onMouseOver="ShowTip(event, 'tt27', 'link36')" onMouseO [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.clickTolerance"></a>clickTolerance</h3><div class=CBody><p>{Integer} Tolerance for the filter query in pixels.  This has the same effect as the tolerance parameter on WMS GetFeatureInfo requests.   Will be ignored for box selections.   Applies only if <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link38 onMouseOver="ShowTip(event, 'tt28', 'link38')" onMouseO [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.hover"></a>hover</h3><div class=CBody><p>{Boolean} Send feature requests on mouse moves.   Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.box"></a>box</h3><div class=CBody><p>{Boolean} Allow feature selection by drawing a box.  If set to true set <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link38 onMouseOver="ShowTip(event, 'tt27', 'link38')" onMouseOut="HideTip('tt27')">click</a> to false to disable the click handler and rely on the box handler only, even for “zero extent” boxes.  Se [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.box"></a>box</h3><div class=CBody><p>{Boolean} Allow feature selection by drawing a box.  If set to true set <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link40 onMouseOver="ShowTip(event, 'tt28', 'link40')" onMouseOut="HideTip('tt28')">click</a> to false to disable the click handler and rely on the box handler only, even for “zero extent” boxes.  Se [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Integer} Maximum number of features to return from a query in single mode if supported by the <a href="#OpenLayers.Control.GetFeature.protocol" class=LProperty id=link40 onMouseOver="ShowTip(event, 'tt4', 'link40')" onMouseOut="HideTip('tt4')">protocol</a>.  This set of features is then used to determine the best match client-side.&nb [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Integer} Maximum number of features to return from a query in single mode if supported by the <a href="#OpenLayers.Control.GetFeature.protocol" class=LProperty id=link42 onMouseOver="ShowTip(event, 'tt4', 'link42')" onMouseOut="HideTip('tt4')">protocol</a>.  This set of features is then used to determine the best match client-side.&nb [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.features"></a>features</h3><div class=CBody><p>{Object} Hash of {<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link41 onMouseOver="ShowTip(event, 'tt5', 'link41')" onMouseOut="HideTip('tt5')">OpenLayers.Feature.Vector</a>}, keyed by fid, holding the currently selected features</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.features"></a>features</h3><div class=CBody><p>{Object} Hash of {<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link43 onMouseOver="ShowTip(event, 'tt5', 'link43')" onMouseOut="HideTip('tt5')">OpenLayers.Feature.Vector</a>}, keyed by fid, holding the currently selected features</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Additional options for the handlers used by this control.  This is a hash with the keys “click”, “box” and “hover”.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.handlers"></a>handlers</h3><div class=CBody><p>{Object} Object with references to multiple <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link42 onMouseOver="ShowTip(event, 'tt6', 'link42')" onMouseOut="HideTip('tt6')">OpenLayers.Handler</a> instances.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.handlers"></a>handlers</h3><div class=CBody><p>{Object} Object with references to multiple <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link44 onMouseOver="ShowTip(event, 'tt6', 'link44')" onMouseOut="HideTip('tt6')">OpenLayers.Handler</a> instances.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.hoverResponse"></a>hoverResponse</h3><div class=CBody><p>{<a href="../Protocol-js.html#OpenLayers.Protocol.Response" class=LClass id=link43 onMouseOver="ShowTip(event, 'tt7', 'link43')" onMouseOut="HideTip('tt7')">OpenLayers.Protocol.Response</a>} The response object associated with the currently running hover request (if any).</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.hoverResponse"></a>hoverResponse</h3><div class=CBody><p>{<a href="../Protocol-js.html#OpenLayers.Protocol.Response" class=LClass id=link45 onMouseOver="ShowTip(event, 'tt7', 'link45')" onMouseOut="HideTip('tt7')">OpenLayers.Protocol.Response</a>} The response object associated with the currently running hover request (if any).</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.filterType"></a>filterType</h3><div class=CBody><p>{<a href="../BaseTypes-js.html#OpenLayers.String" class=LClass id=link44 onMouseOver="ShowTip(event, 'tt8', 'link44')" onMouseOut="HideTip('tt8')">String</a>} The type of filter to use when sending off a request.  Possible values: OpenLayers.Filter.Spatial.<BBOX|INTERSECTS|WITHIN|CONTAINS> Defaults to: OpenLayers.Filter.Spatial.BBO [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.filterType"></a>filterType</h3><div class=CBody><p>{<a href="../BaseTypes-js.html#OpenLayers.String" class=LClass id=link46 onMouseOver="ShowTip(event, 'tt8', 'link46')" onMouseOut="HideTip('tt8')">String</a>} The type of filter to use when sending off a request.  Possible values: OpenLayers.Filter.Spatial.<BBOX|INTERSECTS|WITHIN|CONTAINS> Defaults to: OpenLayers.Filter.Spatial.BBO [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>beforefeatureselected</td><td class=CDLDescription>Triggered when <a href="#OpenLayers.Control.GetFeature.click" class=LProperty id=link45 onMouseOver="ShowTip(event, 'tt27', 'link45')" onMouseOut="HideTip('tt2 [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h3><div class=CBody><p>Create a new control for fetching remote features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} A configuration object which at least has to contain a <a href="#Open [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.OpenLayers.Control.GetFeature"></a>OpenLayers.<wbr>Control.<wbr>GetFeature</h3><div class=CBody><p>Create a new control for fetching remote features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} A configuration object which at least has to contain a <a href="#Open [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.Functions"></a>Functions</h3></div></div>
 
@@ -65,29 +63,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function ()</td></tr></table></blockquote><p>Deactivates the control.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The control was effectively deactivated.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectClick"></a>selectClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectClick"></a>selectClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectBox"></a>selectBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectBox: function(</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectBox"></a>selectBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectBox: function(</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectHover"></a>selectHover</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectHover: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.cancelHover"></a>cancelHover</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancelHover: function()</td></tr></table></blockquote><p>Callback from the handlers.hover set up when <a href="#OpenLayers.Control.GetFeature.hover" class=LProperty id=link57 onMouseOver="ShowTip(event, 'tt15', 'link57')" onMouseOut="HideTip(' [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.cancelHover"></a>cancelHover</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancelHover: function()</td></tr></table></blockquote><p>Callback from the handlers.hover set up when <a href="#OpenLayers.Control.GetFeature.hover" class=LProperty id=link60 onMouseOver="ShowTip(event, 'tt15', 'link60')" onMouseOut="HideTip(' [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPar [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPar [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectBestFeature"></a>selectBestFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectBestFeature: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.selectBestFeature"></a>selectBestFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectBestFeature: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.setModifiers"></a>setModifiers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setModifiers: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.setModifiers"></a>setModifiers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setModifiers: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.select"></a>select</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>select: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.select"></a>select</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>select: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.hoverSelect"></a>hoverSelect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>hoverSelect: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.hoverSelect"></a>hoverSelect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>hoverSelect: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.unselect"></a>unselect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unselect: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.unselect"></a>unselect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unselect: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.unselectAll"></a>unselectAll</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">unselectAll: function()</td></tr></table></blockquote><p>Unselect all selected features.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.pixelToBounds"></a>pixelToBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pixelToBounds: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.GetFeature.pixelToBounds"></a>pixelToBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pixelToBounds: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
 </div><!--Content-->
 
@@ -95,15 +95,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Abstract vector layer protocol class. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Allow selection of multiple geometries. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean} Unselect a selected feature on click. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Protocol} Required. </div></div><div class=CToolTip id="tt5"><div class=CClass>Vector features use the OpenLaye [...]
+<div class=CToolTip id="tt1"><div class=CClass>Abstract vector layer protocol class. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Allow selection of multiple geometries. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean} Unselect a selected feature on click. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Protocol} Required. </div></div><div class=CToolTip id="tt5"><div class=CClass>Vector features use the OpenLaye [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Graticule-js.html b/doc/devdocs/files/OpenLayers/Control/Graticule-js.html
index cef8afd..734eb35 100644
--- a/doc/devdocs/files/OpenLayers/Control/Graticule-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Graticule-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Graticule"></a>OpenLayers.<wbr>Control.<wbr>Graticule</h1><div class=CBody><p>The Graticule displays a grid of latitude/longitude lines reprojected on the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Control</a></li></ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Graticule"></a>OpenLayers.<wbr>Control.<wbr>Graticule</h1><div class=CBody><p>The Graticule displays a grid of latitude/longitude lines reprojected on the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Control</a></li></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.Properties"></a>Properties</h3></div></div>
 
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.targetSize"></a>targetSize</h3><div class=CBody><p>{Integer} The maximum size of the grid in pixels on the map</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.layerName"></a>layerName</h3><div class=CBody><p>{String} The name to be displayed in the layer switcher, default is set by {<a href="../Lang-js.html#OpenLayers.Lang" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.Lang</a>}.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.layerName"></a>layerName</h3><div class=CBody><p>{String} The name to be displayed in the layer switcher, default is set by {<a href="../Lang-js.html#OpenLayers.Lang" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Lang</a>}.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.labelled"></a>labelled</h3><div class=CBody><p>{Boolean} Should the graticule lines be labelled?. default=true</p></div></div></div>
 
@@ -37,7 +37,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.labelSymbolizer"></a>labelSymbolizer</h3><div class=CBody><p>{symbolizer} the symbolizer used to render labels</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.gratLayer"></a>gratLayer</h3><div class=CBody><p>{OpenLayers.Layer.Vector} vector layer used to draw the graticule on</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.gratLayer"></a>gratLayer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt2', 'link10')" onMouseOut="HideTip('tt2')">OpenLayers.Layer.Vector</a>} vector layer used to draw the graticule on</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Graticule.Constructor"></a>Constructor</h3></div></div>
 
@@ -61,15 +61,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Internationalization namespace. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table>< [...]
+<div class=CToolTip id="tt1"><div class=CClass>Internationalization namespace. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/KeyboardDefaults-js.html b/doc/devdocs/files/OpenLayers/Control/KeyboardDefaults-js.html
index fb667f1..a2cad36 100644
--- a/doc/devdocs/files/OpenLayers/Control/KeyboardDefaults-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/KeyboardDefaults-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults"></a>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</h1><div class=CBody><p>The KeyboardDefaults control adds panning and zooming functions, controlled with the keyboard.  By default arrow keys pan, +/- keys zoom & Page Up/Page Down/Home/End scroll by three quarters of a page.</p><p>This control has no visible appearance.</p><h4 class=CHeading>Inherits  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults"></a>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</h1><div class=CBody><p>The KeyboardDefaults control adds panning and zooming functions, controlled with the keyboard.  By default arrow keys pan, +/- keys zoom & Page Up/Page Down/Home/End scroll by three quarters of a page.</p><p>This control has no visible appearance.</p><h4 class=CHeading>Inherits  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.Properties"></a>Properties</h3></div></div>
 
@@ -19,6 +19,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.slideFactor"></a>slideFactor</h3><div class=CBody><p>Pixels to slide by.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.observeElement"></a>observeElement</h3><div class=CBody><p>{DOMelement|String} The DOM element to handle keys for.  You can use the map div here, to have the navigation keys work when the map div has the focus.  If undefined the document is used.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.OpenLayers.Control.KeyboardDefaults"></a>OpenLayers.<wbr>Control.<wbr>KeyboardDefaults</h3></div></div>
@@ -27,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><p>Create handler.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.defaultKeyPress"></a>defaultKeyPress</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultKeyPress: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.KeyboardDefaults.defaultKeyPress"></a>defaultKeyPress</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultKeyPress: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
 </div><!--Content-->
 
@@ -35,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/LayerSwitcher-js.html b/doc/devdocs/files/OpenLayers/Control/LayerSwitcher-js.html
index 5cf0832..3cbfa46 100644
--- a/doc/devdocs/files/OpenLayers/Control/LayerSwitcher-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/LayerSwitcher-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.LayerSwitcher"></a>OpenLayers.<wbr>Control.<wbr>LayerSwitcher</h1><div class=CBody><p>The LayerSwitcher control displays a table of contents for the map.  This allows the user interface to switch between BaseLasyers and to show or hide Overlays.  By default the switcher is shown minimized on the right edge of the map, the user may expand it by clicking on the handle.< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.LayerSwitcher"></a>OpenLayers.<wbr>Control.<wbr>LayerSwitcher</h1><div class=CBody><p>The LayerSwitcher control displays a table of contents for the map.  This allows the user interface to switch between BaseLasyers and to show or hide Overlays.  By default the switcher is shown minimized on the right edge of the map, the user may expand it by clicking on the handle.< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.roundedCorner"></a>roundedCorner</h3><div class=CBody><p>{Boolean} If true the Rico library is used for rounding the corners of the layer switcher div, defaults to true.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.roundedCorner"></a>roundedCorner</h3><div class=CBody><p>{Boolean} If true the Rico library is used for rounding the corners of the layer switcher div, defaults to false.  <b>Deprecated</b>.  Use CSS3’s border-radius instead.  If this option is set to true the Rico/Corner.js script must be loaded in the page, and therefore listed in the build profile.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.roundedCornerColor"></a>roundedCornerColor</h3><div class=CBody><p>{String} The color of the rounded corners, only applies if roundedCorner is true, defaults to “darkblue”.</p></div></div></div>
 
@@ -25,13 +25,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.baseLayersDiv"></a>baseLayersDiv</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.baseLayers"></a>baseLayers</h3><div class=CBody><p>{Array(<a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>)}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.baseLayers"></a>baseLayers</h3><div class=CBody><p>{Array(Object)}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.dataLbl"></a>dataLbl</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.dataLayersDiv"></a>dataLayersDiv</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.dataLayers"></a>dataLayers</h3><div class=CBody><p>{Array(<a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>)}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.dataLayers"></a>dataLayers</h3><div class=CBody><p>{Array(Object)}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.minimizeDiv"></a>minimizeDiv</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
@@ -47,18 +47,18 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} A reference to the DIV DOMElement containing the switcher tabs.</p></div></div></div>
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.onButtonClick"></a>onButtonClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onButtonClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.clearLayersArray"></a>clearLayersArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clearLayersArray: function(</td><td class="PParameter  prettyprint " nowrap>layersType</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.checkRedraw"></a>checkRedraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">checkRedraw: function()</td></tr></table></blockquote><p>Checks if the layer state has changed since the last redraw() call.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The layer state changed since the last redraw() call.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redraw: function()</td></tr></table></blockquote><p>Goes through and takes the current state of the Map and rebuilds the control to display that state.  Groups base layers into a radio-button group and lists each data layer with a checkbox.</p>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.onLayerClick"></a>onLayerClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onLayerClick: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.updateMap"></a>updateMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateMap: function()</td></tr></table></blockquote><p>Cycles through the loaded data and base layer input arrays and makes the necessary calls to the Map object such that that the map’s visual state corresponds to what the user has selec [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.maximizeControl"></a>maximizeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>maximizeControl: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
@@ -69,27 +69,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.loadContents"></a>loadContents</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadContents: function()</td></tr></table></blockquote><p>Set up the labels and divs for the control</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.ignoreEvent"></a>ignoreEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>ignoreEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.mouseDown"></a>mouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mouseDown: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.LayerSwitcher.mouseUp"></a>mouseUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mouseUp: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
-
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  pre [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  pre [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Measure-js.html b/doc/devdocs/files/OpenLayers/Control/Measure-js.html
index a09452e..76f1cfd 100644
--- a/doc/devdocs/files/OpenLayers/Control/Measure-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Measure-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h1><div class=CBody><p>Allows for drawing of features for measurements.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div cl [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on e [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h1><div class=CBody><p>Allows for drawing of features for measurements.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div cl [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 c [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Used to set non-default properties on the control’s handler</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.callbacks"></a>callbacks</h3><div class=CBody><p>{Object} The functions that are sent to the handler for callback</p></div></div></div>
@@ -39,35 +37,35 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt17', 'link21')" onMouseOut="HideTip('tt17 [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.OpenLayers.Control.Measure"></a>OpenLayers.<wbr>Control.<wbr>Measure</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt18', 'link21')" onMouseOut="HideTip('tt18 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.cancel"></a>cancel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote><p>Stop the control from measuring.   If <a href="#OpenLayers.Control.Measure.persist" class=LProperty id=link22 onMouseOver="ShowTip(event, 'tt18', 'link22')" onMouseOut="HideTip('tt18')">persist</a> i [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.cancel"></a>cancel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote><p>Stop the control from measuring.   If <a href="#OpenLayers.Control.Measure.persist" class=LProperty id=link22 onMouseOver="ShowTip(event, 'tt19', 'link22')" onMouseOut="HideTip('tt19')">persist</a> i [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.setImmediate"></a>setImmediate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setImmediate: function(</td><td class="PParameter  prettyprint " nowrap>immediate</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.updateHandler"></a>updateHandler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateHandler: function(</td><td class="PParameter  prettyprint " nowrap>handler,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measureComplete"></a>measureComplete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measureComplete: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measureComplete"></a>measureComplete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measureComplete: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measurePartial"></a>measurePartial</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measurePartial: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measurePartial"></a>measurePartial</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measurePartial: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measureImmediate"></a>measureImmediate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measureImmediate : function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>feature, [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measureImmediate"></a>measureImmediate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measureImmediate : function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>feature, [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.cancelDelay"></a>cancelDelay</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancelDelay: function()</td></tr></table></blockquote><p>Cancels the delay measurement that measurePartial began.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measure"></a>measure</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measure: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>eventType</td><td class="PAfterPa [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.measure"></a>measure</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>measure: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>eventType</td><td class="PAfterPa [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getBestArea"></a>getBestArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBestArea: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getBestArea"></a>getBestArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBestArea: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getArea: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>units</td><td class="PAfterParame [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getArea: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>units</td><td class="PAfterParame [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getBestLength"></a>getBestLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBestLength: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getBestLength"></a>getBestLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBestLength: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLength: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>units</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Measure.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLength: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>units</td><td class="PAfter [...]
 
 </div><!--Content-->
 
@@ -75,15 +73,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote>Stop the control from measuring. </div></div><div class=CToolTip id="tt3"> [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">cancel: function()</td></tr></table></blockquote>Stop the control from measuring. </div></div><div class=CToolTip id="tt3"> [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ModifyFeature-js.html b/doc/devdocs/files/OpenLayers/Control/ModifyFeature-js.html
index 8cd174f..f86552a 100644
--- a/doc/devdocs/files/OpenLayers/Control/ModifyFeature-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ModifyFeature-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ModifyFeature"></a>OpenLayers.<wbr>Control.<wbr>ModifyFeature</h1><div class=CBody><p>Control to modify features.   When activated, a click renders the vertices of a feature - these vertices can then be dragged.   By default, the delete key will delete the vertex under the mouse.   New features are added by dragging “virtual vertices” between vertices [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ModifyFeature"></a>OpenLayers.<wbr>Control.<wbr>ModifyFeature</h1><div class=CBody><p>Control to modify features.   When activated, a click renders the vertices of a feature - these vertices can then be dragged.   By default, the delete key will delete the vertex under the mouse.   New features are added by dragging “virtual vertices” between vertices [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.Properties"></a>Properties</h3></div></div>
 
@@ -46,6 +46,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.mode"></a>mode</h3><div class=CBody><p>{Integer} Bitfields specifying the modification mode.  Defaults to OpenLayers.Control.ModifyFeature.RESHAPE.  To set the mode to a combination of options, use the | operator.  For example, to allow the control to both resize and rotate features, use the following syntax</p><blockquote><pre class="prettyprint">control.mode = OpenLayers.C [...]
                OpenLayers.Control.ModifyFeature.ROTATE;</pre></blockquote></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.createVertices"></a>createVertices</h3><div class=CBody><p>{Boolean} Create new vertices by dragging the virtual vertices in the middle of each edge.  Default is true.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.modified"></a>modified</h3><div class=CBody><p>{Boolean} The currently selected feature has been modified.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.radiusHandle"></a>radiusHandle</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link36 onMouseOver="ShowTip(event, 'tt2', 'link36')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>} A handle for rotating/resizing a feature.</p></div></div></div>
@@ -86,7 +88,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.resetVertices"></a>resetVertices</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">resetVertices: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.handleKeypress"></a>handleKeypress</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleKeypress: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.handleKeypress"></a>handleKeypress</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleKeypress: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ModifyFeature.collectVertices"></a>collectVertices</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">collectVertices: function()</td></tr></table></blockquote><p>Collect the vertices from the modifiable feature’s geometry and push them on to the control’s vertices array.</p></div></div></div>
 
@@ -112,10 +114,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/MouseDefaults-js.html b/doc/devdocs/files/OpenLayers/Control/MouseDefaults-js.html
deleted file mode 100644
index d696fea..0000000
--- a/doc/devdocs/files/OpenLayers/Control/MouseDefaults-js.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.MouseDefaults - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyP [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h1><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="Navigation-js.html#OpenLayers.Control.Navigation" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">OpenLayers.Control.Navigation</a>  [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.performedDrag"></a>performedDrag</h3><div class=CBody><p>{Boolean}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.wheelObserver"></a>wheelObserver</h3><div class=CBody><p>{Function}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h3></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.registerWheelEvents"></a>registerWheelEvents</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">registerWheelEvents: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultClick"></a>defaultClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultDblClick"></a>defaultDblClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultDblClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseDown"></a>defaultMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseDown: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseMove"></a>defaultMouseMove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseMove: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseUp"></a>defaultMouseUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseUp: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseOut"></a>defaultMouseOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseOut: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultWheelUp"></a>defaultWheelUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultWheelUp: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultWheelDown"></a>defaultWheelDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultWheelDown: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.zoomBoxEnd"></a>zoomBoxEnd</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBoxEnd: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.removeZoomBox"></a>removeZoomBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">removeZoomBox: function()</td></tr></table></blockquote><p>Remove the zoombox from the screen and nullify our reference to it.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.onWheelEvent"></a>onWheelEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onWheelEvent: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><tabl [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Control/MousePosition-js.html b/doc/devdocs/files/OpenLayers/Control/MousePosition-js.html
index e8b2918..541b442 100644
--- a/doc/devdocs/files/OpenLayers/Control/MousePosition-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/MousePosition-js.html
@@ -61,15 +61,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt2"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div c [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt2"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/MouseToolbar-js.html b/doc/devdocs/files/OpenLayers/Control/MouseToolbar-js.html
deleted file mode 100644
index 9acecbb..0000000
--- a/doc/devdocs/files/OpenLayers/Control/MouseToolbar-js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.MouseToolbar - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPr [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h1><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="NavToolbar-js.html#OpenLayers.Control.NavToolbar" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">OpenLayers.Control.NavToolbar</a> in [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.mode"></a>mode</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttons"></a>buttons</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.direction"></a>direction</h3><div class=CBody><p>{String} ‘vertical’ or ‘horizontal’</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttonClicked"></a>buttonClicked</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>position</td><td class=CDLDescription>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onM [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar._addButton"></a>_addButton</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttonDown"></a>buttonDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buttonDown: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttonUp"></a>buttonUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buttonUp: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultDblClick"></a>defaultDblClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultDblClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseDown"></a>defaultMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseDown: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.switchModeTo"></a>switchModeTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>switchModeTo: function(</td><td class="PParameter  prettyprint " nowrap>mode</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.leaveMode"></a>leaveMode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">leaveMode: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseMove"></a>defaultMouseMove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseMove: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseUp"></a>defaultMouseUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseUp: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseOut"></a>defaultMouseOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseOut: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultClick"></a>defaultClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><tabl [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Control/NavToolbar-js.html b/doc/devdocs/files/OpenLayers/Control/NavToolbar-js.html
index 2e37a37..a618635 100644
--- a/doc/devdocs/files/OpenLayers/Control/NavToolbar-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/NavToolbar-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Navigation-js.html b/doc/devdocs/files/OpenLayers/Control/Navigation-js.html
index 51223bf..c45a6d5 100644
--- a/doc/devdocs/files/OpenLayers/Control/Navigation-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Navigation-js.html
@@ -35,7 +35,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.handleRightClicks"></a>handleRightClicks</h3><div class=CBody><p>{Boolean} Whether or not to handle right clicks.  Default is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.zoomBoxKeyMask"></a>zoomBoxKeyMask</h3><div class=CBody><p>{Integer} <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt4', 'link25')" onMouseOut="HideTip('tt4')">OpenLayers.Handler</a> key code of the key, which has to be pressed, while drawing the zoom box with the mouse on the screen.  You should probably set handleRightClicks to true [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.zoomBoxKeyMask"></a>zoomBoxKeyMask</h3><div class=CBody><p>{Integer} <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt4', 'link25')" onMouseOut="HideTip('tt4')">OpenLayers.Handler</a> key code of the key, which has to be pressed, while drawing the zoom box with the mouse on the screen.  You should probably set handleRightClicks to true [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Navigation.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
 
@@ -79,10 +79,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/NavigationHistory-js.html b/doc/devdocs/files/OpenLayers/Control/NavigationHistory-js.html
index 3b9f909..382b810 100644
--- a/doc/devdocs/files/OpenLayers/Control/NavigationHistory-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/NavigationHistory-js.html
@@ -81,10 +81,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/OverviewMap-js.html b/doc/devdocs/files/OpenLayers/Control/OverviewMap-js.html
index 73e5da1..9b7d490 100644
--- a/doc/devdocs/files/OpenLayers/Control/OverviewMap-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/OverviewMap-js.html
@@ -11,21 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h1><div class=CBody><p>The OverMap control creates a small overview map, useful to display the extent of a zoomed map and your main map and provide additional navigation options to the User.   By default the overview map is drawn in the lower right corner of the main map.  Create a new overview map with the <a [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h1><div class=CBody><p>The OverMap control creates a small overview map, useful to display the extent of a zoomed map and your main map and provide additional navigation options to the User.   By default the overview map is drawn in the lower right corner of the main map.  Create a new overview map with the <a [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.element"></a>element</h3><div class=CBody><p>{DOMElement} The DOM element that contains the overview map</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.ovmap"></a>ovmap</h3><div class=CBody><p>{<a href="../Map-js.html#OpenLayers.Map" class=LClass id=link24 onMouseOver="ShowTip(event, 'tt1', 'link24')" onMouseOut="HideTip('tt1')">OpenLayers.Map</a>} A reference to the overview map itself.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.ovmap"></a>ovmap</h3><div class=CBody><p>{<a href="../Map-js.html#OpenLayers.Map" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt1', 'link25')" onMouseOut="HideTip('tt1')">OpenLayers.Map</a>} A reference to the overview map itself.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.size"></a>size</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt2', 'link25')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>} The overvew map size in pixels.   Note that this is the size of the map itself - the element that contains the map (default class name olControlOverviewMapElement) may have paddin [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.size"></a>size</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt2', 'link26')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>} The overvew map size in pixels.   Note that this is the size of the map itself - the element that contains the map (default class name olControlOverviewMapElement) may have paddin [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>)} Ordered list of layers in the overview map.  If none are sent at construction, the base layer for the main map is used.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.minRectSize"></a>minRectSize</h3><div class=CBody><p>{Integer} The minimum width or height (in pixels) of the extent rectangle on the overview map.   When the extent rectangle reaches this size, it will be replaced depending on the value of the <a href="#OpenLayers.Control.OverviewMap.minRectDisplayClass" class=LProperty id=link26 onMouseOver="ShowTip(event, 'tt24', 'link26')" onMouseOu [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.minRectSize"></a>minRectSize</h3><div class=CBody><p>{Integer} The minimum width or height (in pixels) of the extent rectangle on the overview map.   When the extent rectangle reaches this size, it will be replaced depending on the value of the <a href="#OpenLayers.Control.OverviewMap.minRectDisplayClass" class=LProperty id=link27 onMouseOver="ShowTip(event, 'tt25', 'link27')" onMouseOu [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.minRectDisplayClass"></a>minRectDisplayClass</h3><div class=CBody><p>{String} Replacement style class name for the extent rectangle when <a href="#OpenLayers.Control.OverviewMap.minRectSize" class=LProperty id=link27 onMouseOver="ShowTip(event, 'tt3', 'link27')" onMouseOut="HideTip('tt3')">minRectSize</a> is reached.   This string will be suffixed on to the displayClass.   Default  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.minRectDisplayClass"></a>minRectDisplayClass</h3><div class=CBody><p>{String} Replacement style class name for the extent rectangle when <a href="#OpenLayers.Control.OverviewMap.minRectSize" class=LProperty id=link28 onMouseOver="ShowTip(event, 'tt3', 'link28')" onMouseOut="HideTip('tt3')">minRectSize</a> is reached.   This string will be suffixed on to the displayClass.   Default  [...]
     overflow: hidden;
     cursor: move;
     background-image: url("img/overview_replacement.gif");
@@ -49,7 +49,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h3><div class=CBody><p>Create a new overview map</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} Properties of this object will be set on the overview map object.   Note, to set option [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.OpenLayers.Control.OverviewMap"></a>OpenLayers.<wbr>Control.<wbr>OverviewMap</h3><div class=CBody><p>Create a new overview map</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Properties of this object will be set on the overview map object.   Note, to set optio [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.Functions"></a>Functions</h3></div></div>
 
@@ -59,13 +59,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.baseLayerDraw"></a>baseLayerDraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">baseLayerDraw: function()</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Draw the base layer</td><td class=CDLDescription>called if unable to complete in the initial [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.rectDrag"></a>rectDrag</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>rectDrag: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.rectDrag"></a>rectDrag</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>rectDrag: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.mapDivClick"></a>mapDivClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mapDivClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.mapDivClick"></a>mapDivClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mapDivClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.maximizeControl"></a>maximizeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>maximizeControl: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.onButtonClick"></a>onButtonClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onButtonClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.minimizeControl"></a>minimizeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>minimizeControl: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.maximizeControl"></a>maximizeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>maximizeControl: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.minimizeControl"></a>minimizeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>minimizeControl: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.showToggle"></a>showToggle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>showToggle: function(</td><td class="PParameter  prettyprint " nowrap>minimize</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
@@ -79,15 +81,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.updateMapToRect"></a>updateMapToRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateMapToRect: function()</td></tr></table></blockquote><p>Updates the map extent to match the extent rectangle position and size</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.setRectPxBounds"></a>setRectPxBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRectPxBounds: function(</td><td class="PParameter  prettyprint " nowrap>pxBounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.setRectPxBounds"></a>setRectPxBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRectPxBounds: function(</td><td class="PParameter  prettyprint " nowrap>pxBounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getRectBoundsFromMapBounds"></a>getRectBoundsFromMapBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getRectBoundsFromMapBounds: function(</td><td class="PParameter  prettyprint " nowrap>lonLatBounds</td><td class="PAfterParameters  pr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getRectBoundsFromMapBounds"></a>getRectBoundsFromMapBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getRectBoundsFromMapBounds: function(</td><td class="PParameter  prettyprint " nowrap>lonLatBounds</td><td class="PAfterParameters  pr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getMapBoundsFromRectBounds"></a>getMapBoundsFromRectBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapBoundsFromRectBounds: function(</td><td class="PParameter  prettyprint " nowrap>pxBounds</td><td class="PAfterParameters  pretty [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getMapBoundsFromRectBounds"></a>getMapBoundsFromRectBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapBoundsFromRectBounds: function(</td><td class="PParameter  prettyprint " nowrap>pxBounds</td><td class="PAfterParameters  pretty [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getLonLatFromOverviewPx"></a>getLonLatFromOverviewPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromOverviewPx: function(</td><td class="PParameter  prettyprint " nowrap>overviewMapPx</td><td class="PAfterParameters  prettyprin [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getLonLatFromOverviewPx"></a>getLonLatFromOverviewPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromOverviewPx: function(</td><td class="PParameter  prettyprint " nowrap>overviewMapPx</td><td class="PAfterParameters  prettyprin [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getOverviewPxFromLonLat"></a>getOverviewPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOverviewPxFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.OverviewMap.getOverviewPxFromLonLat"></a>getOverviewPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOverviewPxFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowr [...]
 
 </div><!--Content-->
 
@@ -95,15 +97,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CProperty>{Integer} The minimum width or height (in pixels) of the extent rectangle on the overview map. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CProperty>{Integer} The minimum width or height (in pixels) of the extent rectangle on the overview map. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Pan-js.html b/doc/devdocs/files/OpenLayers/Control/Pan-js.html
index 75438d7..5b56d33 100644
--- a/doc/devdocs/files/OpenLayers/Control/Pan-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Pan-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/PanPanel-js.html b/doc/devdocs/files/OpenLayers/Control/PanPanel-js.html
index b7c5d45..2cd7dd6 100644
--- a/doc/devdocs/files/OpenLayers/Control/PanPanel-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/PanPanel-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/PanZoom-js.html b/doc/devdocs/files/OpenLayers/Control/PanZoom-js.html
index 754ff15..01deb84 100644
--- a/doc/devdocs/files/OpenLayers/Control/PanZoom-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/PanZoom-js.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.PanZoom"></a>OpenLayers.<wbr>Control.<wbr>PanZoom</h1><div class=CBody><p>The PanZoom is a visible control, composed of a <a href="PanPanel-js.html#OpenLayers.Control.PanPanel" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Control.PanPanel</a> and a <a href="ZoomPanel-js.html#OpenLayers.Control.ZoomPanel" class=LClas [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.PanZoom"></a>OpenLayers.<wbr>Control.<wbr>PanZoom</h1><div class=CBody><p>The PanZoom is a visible control, composed of a <a href="PanPanel-js.html#OpenLayers.Control.PanPanel" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">OpenLayers.Control.PanPanel</a> and a <a href="ZoomPanel-js.html#OpenLayers.Control.ZoomPanel" class=LClas [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.slideFactor"></a>slideFactor</h3><div class=CBody><p>{Integer} Number of pixels by which we’ll pan the map in any direction on clicking the arrow buttons.   If you want to pan by some ratio of the map dimensions, use <a href="#OpenLayers.Control.PanZoom.slideRatio" class=LProperty id=link14 onMouseOver="ShowTip(event, 'tt12', 'link14')" onMouseOut="HideTip('tt12')">slideRatio</a> inst [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.slideFactor"></a>slideFactor</h3><div class=CBody><p>{Integer} Number of pixels by which we’ll pan the map in any direction on clicking the arrow buttons.   If you want to pan by some ratio of the map dimensions, use <a href="#OpenLayers.Control.PanZoom.slideRatio" class=LProperty id=link15 onMouseOver="ShowTip(event, 'tt13', 'link15')" onMouseOut="HideTip('tt13')">slideRatio</a> inst [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.slideRatio"></a>slideRatio</h3><div class=CBody><p>{Number} The fraction of map width/height by which we’ll pan the map on clicking the arrow buttons.   Default is null.   If set, will override <a href="#OpenLayers.Control.PanZoom.slideFactor" class=LProperty id=link15 onMouseOver="ShowTip(event, 'tt13', 'link15')" onMouseOut="HideTip('tt13')">slideFactor</a>.  E.g. if slide [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.slideRatio"></a>slideRatio</h3><div class=CBody><p>{Number} The fraction of map width/height by which we’ll pan the map on clicking the arrow buttons.   Default is null.   If set, will override <a href="#OpenLayers.Control.PanZoom.slideFactor" class=LProperty id=link16 onMouseOver="ShowTip(event, 'tt14', 'link16')" onMouseOut="HideTip('tt14')">slideFactor</a>.  E.g. if slide [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.buttons"></a>buttons</h3><div class=CBody><p>{Array(DOMElement)} Array of Button Divs</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.position"></a>position</h3><div class=CBody><p>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt3', 'link16')" onMouseOut="HideTip('tt3')">OpenLayers.Pixel</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.position"></a>position</h3><div class=CBody><p>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt3', 'link17')" onMouseOut="HideTip('tt3')">OpenLayers.Pixel</a>}</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.Constructor"></a>Constructor</h3></div></div>
 
@@ -31,17 +31,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>draw: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CH [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom._addButton"></a>_addButton</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td><td  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>draw: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CH [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom._addButton"></a>_addButton</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td><td  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom._removeButton"></a>_removeButton</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_removeButton: function(</td><td class="PParameter  prettyprint " nowrap>btn</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.removeButtons"></a>removeButtons</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">removeButtons: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.doubleClick"></a>doubleClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>doubleClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.onButtonClick"></a>onButtonClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onButtonClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.buttonDown"></a>buttonDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buttonDown: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.getSlideFactor"></a>getSlideFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSlideFactor: function(</td><td class="PParameter  prettyprint " nowrap>dim</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoom.Constants"></a>Constants</h3></div></div>
 
@@ -55,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>The PanPanel is visible control for panning the map North, South, East or West in small steps. </div></div><div class=CToolTip id="tt2"><div class=CClass>The ZoomPanel control is a compact collecton of 3 zoom controls: a OpenLayers.Control.ZoomIn, a OpenLayers.Control.ZoomToMaxExtent, and a OpenLayers.Control.ZoomOut. </div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates< [...]
+<div class=CToolTip id="tt1"><div class=CClass>The PanPanel is visible control for panning the map North, South, East or West in small steps. </div></div><div class=CToolTip id="tt2"><div class=CClass>The ZoomPanel control is a compact collecton of 3 zoom controls: a OpenLayers.Control.ZoomIn, a OpenLayers.Control.ZoomToMaxExtent, and a OpenLayers.Control.ZoomOut. </div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates< [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/PanZoomBar-js.html b/doc/devdocs/files/OpenLayers/Control/PanZoomBar-js.html
index c976d05..09a00dd 100644
--- a/doc/devdocs/files/OpenLayers/Control/PanZoomBar-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/PanZoomBar-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.PanZoomBar"></a>OpenLayers.<wbr>Control.<wbr>PanZoomBar</h1><div class=CBody><p>The PanZoomBar is a visible control composed of a <a href="PanPanel-js.html#OpenLayers.Control.PanPanel" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Control.PanPanel</a> and a <OpenLayers.Control.ZoomBar>.  By default it is d [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.PanZoomBar"></a>OpenLayers.<wbr>Control.<wbr>PanZoomBar</h1><div class=CBody><p>The PanZoomBar is a visible control composed of a <a href="PanPanel-js.html#OpenLayers.Control.PanPanel" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Control.PanPanel</a> and a <OpenLayers.Control.ZoomBar>.  By default it is d [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.Properties"></a>Properties</h3></div></div>
 
@@ -25,8 +25,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.zoombarDiv"></a>zoombarDiv</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.divEvents"></a>divEvents</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.zoomWorldIcon"></a>zoomWorldIcon</h3><div class=CBody><p>{Boolean}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.panIcons"></a>panIcons</h3><div class=CBody><p>{Boolean} Set this property to false not to display the pan icons.  If false the zoom world icon is placed under the zoom bar.  Defaults to true.</p></div></div></div>
@@ -53,13 +51,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>draw: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar._addZoomBar"></a>_addZoomBar</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addZoomBar:function(</td><td class="PParameter  prettyprint " nowrap>centered</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar._addZoomBar"></a>_addZoomBar</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addZoomBar:function(</td><td class="PParameter  prettyprint " nowrap>centered</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar._removeZoomBar"></a>_removeZoomBar</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">_removeZoomBar: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.passEventToSlider"></a>passEventToSlider</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>passEventToSlider:function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.onButtonClick"></a>onButtonClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onButtonClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.divClick"></a>divClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>divClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.passEventToSlider"></a>passEventToSlider</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>passEventToSlider:function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PanZoomBar.zoomBarDown"></a>zoomBarDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBarDown:function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
@@ -75,15 +73,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>The PanPanel is visible control for panning the map North, South, East or West in small steps. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div> [...]
+<div class=CToolTip id="tt1"><div class=CClass>The PanPanel is visible control for panning the map North, South, East or West in small steps. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div> [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Panel-js.html b/doc/devdocs/files/OpenLayers/Control/Panel-js.html
index abc667f..7cdd6c8 100644
--- a/doc/devdocs/files/OpenLayers/Control/Panel-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Panel-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Panel"></a>OpenLayers.<wbr>Control.<wbr>Panel</h1><div class=CBody><p>The Panel control is a container for other controls.  With it toolbars may be composed.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt1', 'link18')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a></ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Panel"></a>OpenLayers.<wbr>Control.<wbr>Panel</h1><div class=CBody><p>The Panel control is a container for other controls.  With it toolbars may be composed.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt1', 'link18')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.Properties"></a>Properties</h3></div></div>
 
@@ -47,21 +47,33 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function(</td><td class="PParameter  prettyprint " nowrap>controls</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.addControlsToMap"></a>addControlsToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControlsToMap: function (</td><td class="PParameter  prettyprint " nowrap>controls</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.createControlMarkup"></a>createControlMarkup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createControlMarkup: function(</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
+    defaultControl: control,
+    // ovverride createControlMarkup to create actual buttons
+    // including texts wrapped into span elements.
+    createControlMarkup: function(control) {
+        var button = document.createElement('button'),
+            span = document.createElement('span');
+        if (control.text) {
+            span.innerHTML = control.text;
+        }
+        return button;
+    }
+ });</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt1', 'link29')" onMouseOut="HideTip('tt1')">OpenLayers.Control</a>} The control to create the HTML markup for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{DOMElement} The markup.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.addControlsToMap"></a>addControlsToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControlsToMap: function (</td><td class="PParameter  prettyprint " nowrap>controls</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.iconOn"></a>iconOn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">iconOn: function()</td></tr></table></blockquote><p>Internal use, for use only with “controls[i].events.on/un”.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.iconOff"></a>iconOff</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">iconOff: function()</td></tr></table></blockquote><p>Internal use, for use only with “controls[i].events.on/un”.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.onClick"></a>onClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onClick: function (</td><td class="PParameter  prettyprint " nowrap>ctrl,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  p [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.onButtonClick"></a>onButtonClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onButtonClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.onDoubleClick"></a>onDoubleClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onDoubleClick: function(</td><td class="PParameter  prettyprint " nowrap>ctrl,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PA [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByName"></a>getControlsByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByName"></a>getControlsByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Panel.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
 
 </div><!--Content-->
 
@@ -69,15 +81,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: funct [...]
+<div class=CToolTip id="tt1"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: funct [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Permalink-js.html b/doc/devdocs/files/OpenLayers/Control/Permalink-js.html
index 8e31870..4c1cfb8 100644
--- a/doc/devdocs/files/OpenLayers/Control/Permalink-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Permalink-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Permalink"></a>OpenLayers.<wbr>Control.<wbr>Permalink</h1><div class=CBody><p>The Permalink control is hyperlink that will return the user to the current map view.  By default it is drawn in the lower right corner of the map.  The href is updated as the map is zoomed, panned and whilst layers are switched.  ` Inherits from:</p><ul><li><a href="../Control-js.html# [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Permalink"></a>OpenLayers.<wbr>Control.<wbr>Permalink</h1><div class=CBody><p>The Permalink control is hyperlink that will return the user to the current map view.  By default it is drawn in the lower right corner of the map.  The href is updated as the map is zoomed, panned and whilst layers are switched.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Co [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Permalink.Properties"></a>Properties</h3></div></div>
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing [...]
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspaci [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/PinchZoom-js.html b/doc/devdocs/files/OpenLayers/Control/PinchZoom-js.html
index de34e5b..933e080 100644
--- a/doc/devdocs/files/OpenLayers/Control/PinchZoom-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/PinchZoom-js.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.PinchZoom"></a>OpenLayers.<wbr>Control.<wbr>PinchZoom</h1><div class=CBody><h4 class=CHeading>Inherits</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorde [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.PinchZoom"></a>OpenLayers.<wbr>Control.<wbr>PinchZoom</h1><div class=CBody><h4 class=CHeading>Inherits</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorde [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.type"></a>type</h3><div class=CBody><p>{OpenLayers.Control.TYPES}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.containerOrigin"></a>containerOrigin</h3><div class=CBody><p>{Object} Cached object representing the layer container origin (in pixels).</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.containerCenter"></a>containerCenter</h3><div class=CBody><p>{Object} Cached object representing the layer container center (in pixels).</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.pinchOrigin"></a>pinchOrigin</h3><div class=CBody><p>{Object} Cached object representing the pinch start (in pixels).</p></div></div></div>
 
@@ -35,7 +35,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivate this control.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The control was successfully deactivated.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.updateContainerOrigin"></a>updateContainerOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateContainerOrigin: function()</td></tr></table></blockquote><p>Must be called each time the layer container origin changes.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.updateContainerCenter"></a>updateContainerCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateContainerCenter: function()</td></tr></table></blockquote><p>Must be called each time the layer container moves.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.PinchZoom.pinchStart"></a>pinchStart</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pinchStart: function(</td><td class="PParameter  prettyprint " nowrap>evt,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>pinchData</td><td class="PA [...]
 
@@ -51,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activate this control. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote>Deactivate this control.</div></div><div class=CT [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activate this control. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote>Deactivate this control.</div></div><div class=CT [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/SLDSelect-js.html b/doc/devdocs/files/OpenLayers/Control/SLDSelect-js.html
index 1122e1a..7548f7a 100644
--- a/doc/devdocs/files/OpenLayers/Control/SLDSelect-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/SLDSelect-js.html
@@ -11,17 +11,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h1><div class=CBody><p>Perform selections on WMS layers using Styled Layer Descriptor (SLD)</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">OpenLayers.Control</a></li></ul><!--ST [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h1><div class=CBody><p>Perform selections on WMS layers using Styled Layer Descriptor (SLD)</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">OpenLayers.Control</a></li></ul><!--ST [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.clearOnDeactivate"></a>clearOnDeactivate</h3><div class=CBody><p>{Boolean} Should the selection be cleared when the control is deactivated.  Default value is false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.WMS</a>)} The WMS layers this control will work on.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.WMS</a>)} The WMS layers this control will work on.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.callbacks"></a>callbacks</h3><div class=CBody><p>{Object} The functions that are sent to the handler for callback</p></div></div></div>
 
@@ -31,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Used to set non-default properties on the control’s handler</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.sketchStyle"></a>sketchStyle</h3><div class=CBody><p>{<OpenLayers.Style>|Object} Style or symbolizer to use for the sketch handler.  The recommended way of styling the sketch layer, however, is to configure an <a href="../StyleMap-js.html#OpenLayers.StyleMap" class=LClass >OpenLayers.StyleMap</a> in the layerOptions of the <a href="#OpenLayers.Control.SLDSelect.handlerOptions" class [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.sketchStyle"></a>sketchStyle</h3><div class=CBody><p>{<OpenLayers.Style>|Object} Style or symbolizer to use for the sketch handler.  The recommended way of styling the sketch layer, however, is to configure an <a href="../StyleMap-js.html#OpenLayers.StyleMap" class=LClass >OpenLayers.StyleMap</a> in the layerOptions of the <a href="#OpenLayers.Control.SLDSelect.handlerOptions" class [...]
     handlerOptions: {
         layerOptions: {
             styleMap: new OpenLayers.StyleMap({
@@ -41,37 +39,37 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     }
 });</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.wfsCache"></a>wfsCache</h3><div class=CBody><p>{Object} Cache to use for storing parsed results from <OpenLayers.Format.WFSDescribeFeatureType.read>.  If not provided, these will be cached on the prototype.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.wfsCache"></a>wfsCache</h3><div class=CBody><p>{Object} Cache to use for storing parsed results from <a href="../Format/WFSDescribeFeatureType-js.html#OpenLayers.Format.WFSDescribeFeatureType.read" class=LFunction id=link19 onMouseOver="ShowTip(event, 'tt2', 'link19')" onMouseOut="HideTip('tt2')">OpenLayers.Format.WFSDescribeFeatureType.read</a>.  If not provided, these will be cached on  [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layerCache"></a>layerCache</h3><div class=CBody><p>{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.  If not provided, layers will be cached on the prototype.  Note that if <a href="#OpenLayers.Control.SLDSelect.clearOnDeactivate" class=LProperty id=link18 onMouseOve [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.layerCache"></a>layerCache</h3><div class=CBody><p>{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.  If not provided, layers will be cached on the prototype.  Note that if <a href="#OpenLayers.Control.SLDSelect.clearOnDeactivate" class=LProperty id=link20 onMouseOve [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h3><div class=CBody><p>Create a new control for selecting features in WMS layers using Styled Layer Descriptor (SLD).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../BaseTypes/Class-js.html# [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.OpenLayers.Control.SLDSelect"></a>OpenLayers.<wbr>Control.<wbr>SLDSelect</h3><div class=CBody><p>Create a new control for selecting features in WMS layers using Styled Layer Descriptor (SLD).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>handler</td><td class=CDLDescription>{<a href="../../deprecated-js.html#Op [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Take care of things that are not handled in superclass.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.coupleLayerVisiblity"></a>coupleLayerVisiblity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>coupleLayerVisiblity: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.coupleLayerVisiblity"></a>coupleLayerVisiblity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>coupleLayerVisiblity: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.createSelectionLayer"></a>createSelectionLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createSelectionLayer: function(</td><td class="PParameter  prettyprint " nowrap>source</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.createSelectionLayer"></a>createSelectionLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createSelectionLayer: function(</td><td class="PParameter  prettyprint " nowrap>source</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.createSLD"></a>createSLD</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createSLD: function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>filters,</td></tr><tr><td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.createSLD"></a>createSLD</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createSLD: function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>filters,</td></tr><tr><td></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.parseDescribeLayer"></a>parseDescribeLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseDescribeLayer: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.getGeometryAttributes"></a>getGeometryAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeometryAttributes: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.getGeometryAttributes"></a>getGeometryAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeometryAttributes: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Activate the control.  Activating the control will perform a SLD WMS DescribeLayer request followed by a WFS DescribeFeatureType request so that the proper symbolizers can be chosen based on  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivate the control.  If clearOnDeactivate is true, remove the selection layer(s).</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.setLayers"></a>setLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayers: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.setLayers"></a>setLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayers: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.createFilter"></a>createFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFilter: function(</td><td class="PParameter  prettyprint " nowrap>geometryAttribute,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.createFilter"></a>createFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFilter: function(</td><td class="PParameter  prettyprint " nowrap>geometryAttribute,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.select"></a>select</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>select: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.select"></a>select</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>select: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SLDSelect.applySelection"></a>applySelection</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">applySelection: function()</td></tr></table></blockquote><p>Checks if all required wfs data is cached, and applies the selection</p></div></div></div>
 
@@ -81,15 +79,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Take care of things that are not handled in superclass.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table borde [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Scale-js.html b/doc/devdocs/files/OpenLayers/Control/Scale-js.html
index 8e45663..6d615c6 100644
--- a/doc/devdocs/files/OpenLayers/Control/Scale-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Scale-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Scale"></a>OpenLayers.<wbr>Control.<wbr>Scale</h1><div class=CBody><p>The Scale control displays the current map scale as a ratio (e.g.  Scale = 1:1M).  By default it is displayed in the lower right corner of the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Scale"></a>OpenLayers.<wbr>Control.<wbr>Scale</h1><div class=CBody><p>The Scale control displays the current map scale as a ratio (e.g.  Scale = 1:1M).  By default it is displayed in the lower right corner of the map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Scale.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Scale.element"></a>element</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Scale.geodesic"></a>geodesic</h3><div class=CBody><p>{Boolean} Use geodesic measurement.  Default is false.  The recommended setting for maps in EPSG:4326 is false, and true EPSG:900913.  If set to true, the scale will be calculated based on the horizontal size of the pixel in the center of the map viewport.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Scale.Constructor"></a>Constructor</h3></div></div>
@@ -33,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ScaleLine-js.html b/doc/devdocs/files/OpenLayers/Control/ScaleLine-js.html
index 47e9ee9..8a83afe 100644
--- a/doc/devdocs/files/OpenLayers/Control/ScaleLine-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ScaleLine-js.html
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/SelectFeature-js.html b/doc/devdocs/files/OpenLayers/Control/SelectFeature-js.html
index 6bdaa52..12a8806 100644
--- a/doc/devdocs/files/OpenLayers/Control/SelectFeature-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/SelectFeature-js.html
@@ -11,17 +11,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h1><div class=CBody><p>The SelectFeature control selects vector features from a given layer on click or hover.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt26', 'link29')" onMouseOut="HideTip('tt26')">OpenLayers. [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><ul><li><b>beforefeaturehighlighted</b> Triggered before a feature is highlighted</li><li><b>featurehighlighted</b> Triggered when a feature is highlighted</li><li><b>featureunhighlighted</b> Triggered when a feature is unhighlighted</li></ul></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h1><div class=CBody><p>The SelectFeature control selects vector features from a given layer on click or hover.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt26', 'link29')" onMouseOut="HideTip('tt26')">OpenLayers. [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.multipleKey"></a>multipleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.SelectFeature.multiple" class=LProperty id=link30 onMouseOver="ShowTip(event, 'tt1', 'link30')" onMouseOut="HideTip('tt1')">multiple</a> property to true.   Default is null.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.multipleKey"></a>multipleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.SelectFeature.multiple" class=LProperty id=link31 onMouseOver="ShowTip(event, 'tt1', 'link31')" onMouseOut="HideTip('tt1')">multiple</a> property to true.   Default is null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.toggleKey"></a>toggleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.SelectFeature.toggle" class=LProperty id=link31 onMouseOver="ShowTip(event, 'tt2', 'link31')" onMouseOut="HideTip('tt2')">toggle</a> property to true.   Default is null.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.toggleKey"></a>toggleKey</h3><div class=CBody><p>{String} An event modifier (‘altKey’ or ‘shiftKey’) that temporarily sets the <a href="#OpenLayers.Control.SelectFeature.toggle" class=LProperty id=link32 onMouseOver="ShowTip(event, 'tt2', 'link32')" onMouseOut="HideTip('tt2')">toggle</a> property to true.   Default is null.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.multiple"></a>multiple</h3><div class=CBody><p>{Boolean} Allow selection of multiple geometries.   Default is false.</p></div></div></div>
 
@@ -45,9 +43,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.geometryTypes"></a>geometryTypes</h3><div class=CBody><p>{Array(String)} To restrict selecting to a limited set of geometry types, send a list of strings corresponding to the geometry class names.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt3', 'link32')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Vector</a>} The vector layer with a common renderer root for all layers this control is configured with (if an array of layers was passed to the constructor), or the vector layer [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link33 onMouseOver="ShowTip(event, 'tt3', 'link33')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Vector</a>} The vector layer with a common renderer root for all layers this control is configured with (if an array of layers was passed to the constructor), or the vector layer [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link33 onMouseOver="ShowTip(event, 'tt3', 'link33')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Vector</a>)} The layers this control will work on, or null if the control was configured with a single layer</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link34 onMouseOver="ShowTip(event, 'tt3', 'link34')" onMouseOut="HideTip('tt3')">OpenLayers.Layer.Vector</a>)} The layers this control will work on, or null if the control was configured with a single layer</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.callbacks"></a>callbacks</h3><div class=CBody><p>{Object} The functions that are sent to the handlers.feature for callback</p></div></div></div>
 
@@ -55,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.renderIntent"></a>renderIntent</h3><div class=CBody><p>{String} key used to retrieve the select style from the layer’s style map.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.handlers"></a>handlers</h3><div class=CBody><p>{Object} Object with references to multiple <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link34 onMouseOver="ShowTip(event, 'tt4', 'link34')" onMouseOut="HideTip('tt4')">OpenLayers.Handler</a> instances.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.handlers"></a>handlers</h3><div class=CBody><p>{Object} Object with references to multiple <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link35 onMouseOver="ShowTip(event, 'tt4', 'link35')" onMouseOut="HideTip('tt4')">OpenLayers.Handler</a> instances.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h3><div class=CBody><p>Create a new control for selecting features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layers</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=l [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.OpenLayers.Control.SelectFeature"></a>OpenLayers.<wbr>Control.<wbr>SelectFeature</h3><div class=CBody><p>Create a new control for selecting features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layers</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=l [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.initLayer"></a>initLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.initLayer"></a>initLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
 
@@ -73,31 +71,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.unselectAll"></a>unselectAll</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unselectAll: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.clickFeature"></a>clickFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clickFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.clickFeature"></a>clickFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clickFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.multipleSelect"></a>multipleSelect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">multipleSelect: function()</td></tr></table></blockquote><p>Allow for multiple selected features based on <a href="#OpenLayers.Control.SelectFeature.multiple" class=LProperty id=link38 onMouseOver="ShowTip(event, 'tt1', 'link38')" onM [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.multipleSelect"></a>multipleSelect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">multipleSelect: function()</td></tr></table></blockquote><p>Allow for multiple selected features based on <a href="#OpenLayers.Control.SelectFeature.multiple" class=LProperty id=link39 onMouseOver="ShowTip(event, 'tt1', 'link39')" onM [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.toggleSelect"></a>toggleSelect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toggleSelect: function()</td></tr></table></blockquote><p>Event should toggle the selected state of a feature based on <a href="#OpenLayers.Control.SelectFeature.toggle" class=LProperty id=link40 onMouseOver="ShowTip(event, 'tt2', 'link40 [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.toggleSelect"></a>toggleSelect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toggleSelect: function()</td></tr></table></blockquote><p>Event should toggle the selected state of a feature based on <a href="#OpenLayers.Control.SelectFeature.toggle" class=LProperty id=link41 onMouseOver="ShowTip(event, 'tt2', 'link41 [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.clickoutFeature"></a>clickoutFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clickoutFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.overFeature"></a>overFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>overFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.overFeature"></a>overFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>overFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.outFeature"></a>outFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>outFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.outFeature"></a>outFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>outFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.highlight"></a>highlight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>highlight: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.highlight"></a>highlight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>highlight: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.unhighlight"></a>unhighlight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unhighlight: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.unhighlight"></a>unhighlight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unhighlight: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.select"></a>select</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>select: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.select"></a>select</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>select: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.unselect"></a>unselect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unselect: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.unselect"></a>unselect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unselect: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.selectBox"></a>selectBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectBox: function(</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.selectBox"></a>selectBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>selectBox: function(</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.SelectFeature.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
 </div><!--Content-->
 
@@ -105,15 +103,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} Allow selection of multiple geometries. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Unselect a selected feature on click. </div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt4"><div class=CClass>Base class to construct a higher-level handler for event sequences. < [...]
+<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} Allow selection of multiple geometries. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Boolean} Unselect a selected feature on click. </div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt4"><div class=CClass>Base class to construct a higher-level handler for event sequences. < [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Snapping-js.html b/doc/devdocs/files/OpenLayers/Control/Snapping-js.html
index 135afeb..290bd12 100644
--- a/doc/devdocs/files/OpenLayers/Control/Snapping-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Snapping-js.html
@@ -11,11 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h1><div class=CBody><p>Acts as a snapping agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY- [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h1><div class=CBody><p>Acts as a snapping agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY- [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Constants"></a>Constants</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Properties"></a>Properties</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4  [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.DEFAULTS"></a>DEFAULTS</h3><div class=CBody><p>Default target properties.</p></div></div></div>
 
@@ -37,19 +39,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h3><div class=CBody><p>Creates a new snapping control.  A control is constructed with an editable layer and a set of configuration objects for target layers.  While the control is active, dragging vertices while drawing new features or modifying existing features on the editable layer will engage snapping to fe [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.OpenLayers.Control.Snapping"></a>OpenLayers.<wbr>Control.<wbr>Snapping</h3><div class=CBody><p>Creates a new snapping control.  A control is constructed with an editable layer and a set of configuration objects for target layers.  While the control is active, dragging vertices while drawing new features or modifying existing features on the editable layer will engage snapping to fe [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.setTargets"></a>setTargets</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTargets: function(</td><td class="PParameter  prettyprint " nowrap>targets</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.addTargetLayer"></a>addTargetLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTargetLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.addTargetLayer"></a>addTargetLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTargetLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.addTarget"></a>addTarget</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTarget: function(</td><td class="PParameter  prettyprint " nowrap>target</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.removeTargetLayer"></a>removeTargetLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTargetLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.removeTargetLayer"></a>removeTargetLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTargetLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.removeTarget"></a>removeTarget</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTarget: function(</td><td class="PParameter  prettyprint " nowrap>target</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
@@ -61,11 +63,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.onVertexModified"></a>onVertexModified</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onVertexModified: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.considerSnapping"></a>considerSnapping</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>considerSnapping: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>loc</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.considerSnapping"></a>considerSnapping</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>considerSnapping: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>loc</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.testTarget"></a>testTarget</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>testTarget: function(</td><td class="PParameter  prettyprint " nowrap>target,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>loc</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.testTarget"></a>testTarget</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>testTarget: function(</td><td class="PParameter  prettyprint " nowrap>target,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>loc</td><td class="PAfter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.getGeoTolerance"></a>getGeoTolerance</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeoTolerance: function(</td><td class="PParameter  prettyprint " nowrap>tolerance,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolut [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.getGeoTolerance"></a>getGeoTolerance</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeoTolerance: function(</td><td class="PParameter  prettyprint " nowrap>tolerance,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolut [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Snapping.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the control.</p></div></div></div>
 
@@ -75,15 +77,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt3"><div class=CClass>Point geometry class.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt3"><div class=CClass>Point geometry class.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Split-js.html b/doc/devdocs/files/OpenLayers/Control/Split-js.html
index ce77205..b3b1701 100644
--- a/doc/devdocs/files/OpenLayers/Control/Split-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/Split-js.html
@@ -11,41 +11,39 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h1><div class=CBody><p>Acts as a split feature agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY-- [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exa [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h1><div class=CBody><p>Acts as a split feature agent while editing vector features.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt14', 'link16')" onMouseOut="HideTip('tt14')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY-- [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>} The target layer with features to be split.  Set at construction or after construction with <setLayer>.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockquote><h4 cla [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt1', 'link18')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>} The target layer with features to be split.  Set at construction or after construction with <setLayer>.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.source"></a>source</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>} Optional source layer.   Any newly created or modified features from this layer will be used to split features on the target layer.   If not provided, a temporary [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.source"></a>source</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt1', 'link19')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>} Optional source layer.   Any newly created or modified features from this layer will be used to split features on the target layer.   If not provided, a temporary [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.sourceOptions"></a>sourceOptions</h3><div class=CBody><p>{Options} If a temporary sketch layer is created, these layer options will be applied.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.tolerance"></a>tolerance</h3><div class=CBody><p>{Number} Distance between the calculated intersection and a vertex on the source geometry below which the existing vertex will be used for the split.   Default is null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.edge"></a>edge</h3><div class=CBody><p>{Boolean} Allow splits given intersection of edges only.   Default is true.   If false, a vertex on the source must be within the <a href="#OpenLayers.Control.Split.tolerance" class=LProperty id=link18 onMouseOver="ShowTip(event, 'tt14', 'link18')" onMouseOut="HideTip('tt14')">tolerance</a> distance of the calculated intersection for a split to occu [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.edge"></a>edge</h3><div class=CBody><p>{Boolean} Allow splits given intersection of edges only.   Default is true.   If false, a vertex on the source must be within the <a href="#OpenLayers.Control.Split.tolerance" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt16', 'link20')" onMouseOut="HideTip('tt16')">tolerance</a> distance of the calculated intersection for a split to occu [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.deferDelete"></a>deferDelete</h3><div class=CBody><p>{Boolean} Instead of removing features from the layer, set feature states of split features to DELETE.   This assumes a save strategy or other component is in charge of removing features from the layer.   Default is false.   If false, split features will be immediately deleted from the layer.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.mutual"></a>mutual</h3><div class=CBody><p>{Boolean} If source and target layers are the same, split source features and target features where they intersect.   Default is true.   If false, only target features will be split.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.targetFilter"></a>targetFilter</h3><div class=CBody><p>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.targetFilter"></a>targetFilter</h3><div class=CBody><p>{<a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt2', 'link21')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a>} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.sourceFilter"></a>sourceFilter</h3><div class=CBody><p>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.sourceFilter"></a>sourceFilter</h3><div class=CBody><p>{<a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt2', 'link22')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a>} Optional filter that will be evaluated to determine if a feature from the source layer is eligible for splitting.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.handler"></a>handler</h3><div class=CBody><p>{<a href="../Handler/Path-js.html#OpenLayers.Handler.Path" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt2', 'link19')" onMouseOut="HideTip('tt2')">OpenLayers.Handler.Path</a>} The temporary sketch handler created if no source layer is provided.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.handler"></a>handler</h3><div class=CBody><p>{<a href="../Handler/Path-js.html#OpenLayers.Handler.Path" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt3', 'link23')" onMouseOut="HideTip('tt3')">OpenLayers.Handler.Path</a>} The temporary sketch handler created if no source layer is provided.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h3><div class=CBody><p>Creates a new split control.  A control is constructed with a target layer and an optional source layer.  While the control is active, creating new features or modifying existing features on the source layer will result in splitting any eligible features on the target layer.   If no source la [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.OpenLayers.Control.Split"></a>OpenLayers.<wbr>Control.<wbr>Split</h3><div class=CBody><p>Creates a new split control.  A control is constructed with a target layer and an optional source layer.  While the control is active, creating new features or modifying existing features on the source layer will result in splitting any eligible features on the target layer.   If no source la [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.setSource"></a>setSource</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.setSource"></a>setSource</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Activate the control.   Activating the control registers listeners for editing related events so that during feature creation and modification, features in the target will be considered for split [...]
 
@@ -55,13 +53,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.afterFeatureModified"></a>afterFeatureModified</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>afterFeatureModified: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.removeByGeometry"></a>removeByGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeByGeometry: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.removeByGeometry"></a>removeByGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeByGeometry: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.isEligible"></a>isEligible</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isEligible: function(</td><td class="PParameter  prettyprint " nowrap>target</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.isEligible"></a>isEligible</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isEligible: function(</td><td class="PParameter  prettyprint " nowrap>target</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.considerSplit"></a>considerSplit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>considerSplit: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.considerSplit"></a>considerSplit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>considerSplit: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.geomsToFeatures"></a>geomsToFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>geomsToFeatures: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geoms</td><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.geomsToFeatures"></a>geomsToFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>geomsToFeatures: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geoms</td><t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Split.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the control.</p></div></div></div>
 
@@ -71,15 +69,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>Handler to draw a path on the map. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSource: fun [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CClass>Handler to draw a path on the map. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 c [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/TouchNavigation-js.html b/doc/devdocs/files/OpenLayers/Control/TouchNavigation-js.html
index 9efd191..a522bb0 100644
--- a/doc/devdocs/files/OpenLayers/Control/TouchNavigation-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/TouchNavigation-js.html
@@ -53,10 +53,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/TransformFeature-js.html b/doc/devdocs/files/OpenLayers/Control/TransformFeature-js.html
index af68153..cc6431e 100644
--- a/doc/devdocs/files/OpenLayers/Control/TransformFeature-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/TransformFeature-js.html
@@ -11,23 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h1><div class=CBody><p>Control to transform features with a standard transformation box.</p><h4 class=CHeading>Inherits From</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt15', 'link18')" onMouseOut="HideTip('tt15')">OpenLayers.Control</a></li> [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types</h4><ul><li><b>beforesetfeature</b> Triggered before a feature is set for tranformation.  The feature will not be set if a listener returns false.  Listeners receive a <b>feature</b> property, with the feature that will be set for transformation.  Listeners are allowed to set the co [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h1><div class=CBody><p>Control to transform features with a standard transformation box.</p><h4 class=CHeading>Inherits From</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt15', 'link18')" onMouseOut="HideTip('tt15')">OpenLayers.Control</a></li> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockqu [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.geometryTypes"></a>geometryTypes</h3><div class=CBody><p>{Array(String)} To restrict transformation to a limited set of geometry types, send a list of strings corresponding to the geometry class names.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt1', 'link22')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt1', 'link23')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.Vector</a>}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.preserveAspectRatio"></a>preserveAspectRatio</h3><div class=CBody><p>{Boolean} set to true to not change the feature’s aspect ratio.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotate"></a>rotate</h3><div class=CBody><p>{Boolean} set to false if rotation should be disabled.  Default is true.  To be passed with the constructor or set when the control is not active.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.feature"></a>feature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt2', 'link23')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>} Feature currently available for transformation.  Read-only, use <a href="#OpenLayers.Control.TransformFeature.setFeature" class=LFunction id=link24  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.feature"></a>feature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link24 onMouseOver="ShowTip(event, 'tt2', 'link24')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>} Feature currently available for transformation.  Read-only, use <a href="#OpenLayers.Control.TransformFeature.setFeature" class=LFunction id=link25  [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.renderIntent"></a>renderIntent</h3><div class=CBody><p>{String|Object} Render intent for the transformation box and handles.  A symbolizer object can also be provided here.</p></div></div></div>
 
@@ -38,9 +36,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     cursor: "pointer"
 }</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.box"></a>box</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt2', 'link25')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>} The transformation box rectangle.  Read-only.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.box"></a>box</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt2', 'link26')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>} The transformation box rectangle.  Read-only.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.center"></a>center</h3><div class=CBody><p>{<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt3', 'link26')" onMouseOut="HideTip('tt3')">OpenLayers.Geometry.Point</a>} The center of the feature bounds.  Read-only.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.center"></a>center</h3><div class=CBody><p>{<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt3', 'link27')" onMouseOut="HideTip('tt3')">OpenLayers.Geometry.Point</a>} The center of the feature bounds.  Read-only.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.scale"></a>scale</h3><div class=CBody><p>{Float} The scale of the feature, relative to the scale the time the feature was set.  Read-only, except for <b>beforesetfeature</b> listeners.</p></div></div></div>
 
@@ -48,15 +46,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotation"></a>rotation</h3><div class=CBody><p>{Integer} the current rotation angle of the box.  Read-only, except for <b>beforesetfeature</b> listeners.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.handles"></a>handles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt2', 'link27')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>)} The 8 handles currently available for scaling/resizing.  Numbered counterclockwise, starting from the southwest corner.  Read-only.</p>< [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.handles"></a>handles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt2', 'link28')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>)} The 8 handles currently available for scaling/resizing.  Numbered counterclockwise, starting from the southwest corner.  Read-only.</p>< [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotationHandles"></a>rotationHandles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt2', 'link29')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>)} The 4 rotation handles currently available for rotating.  Numbered counterclockwise, starting from the southwest corner.&nbsp [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.rotationHandles"></a>rotationHandles</h3><div class=CBody><p>{Array(<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt2', 'link28')" onMouseOut="HideTip('tt2')">OpenLayers.Feature.Vector</a>)} The 4 rotation handles currently available for rotating.  Numbered counterclockwise, starting from the southwest corner.&nbsp [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.dragControl"></a>dragControl</h3><div class=CBody><p>{<a href="DragFeature-js.html#OpenLayers.Control.DragFeature" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt4', 'link30')" onMouseOut="HideTip('tt4')">OpenLayers.Control.DragFeature</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.dragControl"></a>dragControl</h3><div class=CBody><p>{<a href="DragFeature-js.html#OpenLayers.Control.DragFeature" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt4', 'link29')" onMouseOut="HideTip('tt4')">OpenLayers.Control.DragFeature</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.irregular"></a>irregular</h3><div class=CBody><p>{Boolean} Make scaling/resizing work irregularly.  If true then dragging a handle causes the feature to resize in the direction of movement.  If false then the feature resizes symetrically about it’s center.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h3><div class=CBody><p>Create a new transform feature control.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass i [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.OpenLayers.Control.TransformFeature"></a>OpenLayers.<wbr>Control.<wbr>TransformFeature</h3><div class=CBody><p>Create a new transform feature control.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass i [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.Functions"></a>Functions</h3></div></div>
 
@@ -64,9 +64,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Deactivates the control.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.setFeature"></a>setFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>initialParams</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.setFeature"></a>setFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>initialParams</t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.TransformFeature.unsetFeature"></a>unsetFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">unsetFeature: function()</td></tr></table></blockquote><p>Remove the transformation box off any feature.  If the control is active, it will be deactivated first.</p></div></div></div>
 
@@ -86,15 +86,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt3"><div class=CClass>Point geometry class.</div></div><div class=CToolTip id="tt4"><div class=CClass>The DragFeature control moves a feature with a drag of the mouse. </div></d [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources. </div></div><div class=CToolTip id="tt2"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt3"><div class=CClass>Point geometry class.</div></div><div class=CToolTip id="tt4"><div class=CClass>The DragFeature control moves a feature with a drag of the mouse. </div></d [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/UTFGrid-js.html b/doc/devdocs/files/OpenLayers/Control/UTFGrid-js.html
new file mode 100644
index 0000000..ea2f9fc
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Control/UTFGrid-js.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.UTFGrid - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint() [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.UTFGrid"></a>OpenLayers.<wbr>Control.<wbr>UTFGrid</h1><div class=CBody><p>This Control provides behavior associated with UTFGrid Layers.  These ‘hit grids’ provide underlying feature attributes without calling the server (again).  This control allows Mousemove, Hovering and Click events to trigger callbacks that use the attributes in whatever way you need. [...]
+    'UTFGrid Layer',
+    "http://tiles/world_utfgrid/${z}/${x}/${y}.json"
+);
+map.addLayer(world_utfgrid);
+
+var control = new OpenLayers.Control.UTFGrid({
+    layers: [world_utfgrid],
+    handlerMode: 'move',
+    callback: function(infoLookup) {
+        // do something with returned data
+
+    }
+})</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Control.UTFGrid" >OpenLayers.<wbr>Control.<wbr [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.autoActivate"></a>autoActivate</h3><div class=CBody><p>{Boolean} Activate the control when it is added to a map.   Default is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Layers"></a>Layers</h3><div class=CBody><p>List of layers to consider.  Must be Layer.UTFGrids `null` is the default indicating all UTFGrid Layers are queried.  {Array} <a href="../Layer/UTFGrid-js.html#OpenLayers.Layer.UTFGrid" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Layer.UTFGrid</a></p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.defaultHandlerOptions"></a>defaultHandlerOptions</h3><div class=CBody><p>The default opts passed to the handler constructors</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.handlerMode"></a>handlerMode</h3><div class=CBody><p>Defaults to ‘click’.  Can be ‘hover’ or ‘move’.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.setHandler"></a>setHandler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setHandler: function(</td><td class="PParameter  prettyprint " nowrap>hm</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.resetHandler"></a>resetHandler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">resetHandler: function()</td></tr></table></blockquote><p>Deactivates the old hanlder and creates a new <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt3', 'link10')" onMouseOut="HideTip('tt [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.OpenLayers.Control.UTFGrid"></a><OpenLayers.<wbr>Control.<wbr>UTFGrid></h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.handleEvent"></a>handleEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.callback"></a>callback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>callback: function(</td><td class="PParameter  prettyprint " nowrap>infoLookup</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.reset"></a>reset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>reset: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Calls [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.UTFGrid.findLayers"></a>findLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">findLayers: function()</td></tr></table></blockquote><p>Internal method to get the layers, independent of whether we are inspecting the map or using a client-provided array</p><p>The default value of this.layers is null; this causes the findLayers  [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setHandler: function(</td><td class="PParameter  prettyprint " nowrap>hm</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>sets this.handlerMode and calls resetHandler()</div></div><div class=CToolTip id="tt2" [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html b/doc/devdocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html
index 7f20161..1ba9940 100644
--- a/doc/devdocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>The WMSGetFeatureInfo control uses a WMS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configurati [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>The WMSGetFeatureInfo control uses a WMS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configurati [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
 
@@ -21,11 +21,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Integer} Maximum number of features to return from a WMS query.  This sets the feature_count parameter on WMS GetFeatureInfo requests.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.clickCallback"></a>clickCallback</h3><div class=CBody><p>{String} The click callback to register in the {<a href="../Handler/Click-js.html#OpenLayers.Handler.Click" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt1', 'link22')" onMouseOut="HideTip('tt1')">OpenLayers.Handler.Click</a>} object created when the hover option is set to false.  Default is “click”.</p>< [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.clickCallback"></a>clickCallback</h3><div class=CBody><p>{String} The click callback to register in the {<a href="../Handler/Click-js.html#OpenLayers.Handler.Click" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Handler.Click</a>} object created when the hover option is set to false.  Default is “click”.</p>< [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.output"></a>output</h3><div class=CBody><p>{String} Either “features” or “object”.  When triggering a getfeatureinfo request should we pass on an array of features or an object with with a “features” property and other properties (such as the url of the WMS).  Default is “features”.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt2', 'link23')" onMouseOut="HideTip('tt2')">OpenLayers.Layer.WMS</a>)} The layers to query for feature info.  If omitted, all map WMS layers with a url that matches this <a href="#OpenLayers.Control.WMSGetFeatureInfo.url" class= [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt2', 'link21')" onMouseOut="HideTip('tt2')">OpenLayers.Layer.WMS</a>)} The layers to query for feature info.  If omitted, all map WMS layers with a url that matches this <a href="#OpenLayers.Control.WMSGetFeatureInfo.url" class= [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.queryVisible"></a>queryVisible</h3><div class=CBody><p>{Boolean} If true, filter out hidden layers when searching the map for layers to query.   Default is false.</p></div></div></div>
 
@@ -33,28 +33,26 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.layerUrls"></a>layerUrls</h3><div class=CBody><p>{Array(String)} Optional list of urls for layers that should be queried.  This can be used when the layer url differs from the url used for making GetFeatureInfo requests (in the case of a layer using cached tiles).</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.infoFormat"></a>infoFormat</h3><div class=CBody><p>{String} The mimetype to request from the server.  If you are using drillDown mode and have multiple servers that do not share a common infoFormat, you can override the control’s infoFormat by providing an INFO_FORMAT parameter in your <a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link26 onMouseOver="Sh [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.infoFormat"></a>infoFormat</h3><div class=CBody><p>{String} The mimetype to request from the server.  If you are using drillDown mode and have multiple servers that do not share a common infoFormat, you can override the control’s infoFormat by providing an INFO_FORMAT parameter in your <a href="../Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link24 onMouseOver="Sh [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.vendorParams"></a>vendorParams</h3><div class=CBody><p>{Object} Additional parameters that will be added to the request, for WMS implementations that support them.  This could e.g. look like</p><blockquote><pre class="prettyprint">{
     radius: 5
 }</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt3', 'link27')" onMouseOut="HideTip('tt3')">OpenLayers.Format</a>} A format for parsing GetFeatureInfo responses.  Default is <a href="../Format/WMSGetFeatureInfo-js.html#OpenLayers.Format.WMSGetFeatureInfo" class=LClass id=link28 onMouseOv [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt3', 'link25')" onMouseOut="HideTip('tt3')">OpenLayers.Format</a>} A format for parsing GetFeatureInfo responses.  Default is <a href="../Format/WMSGetFeatureInfo-js.html#OpenLayers.Format.WMSGetFeatureInfo" class=LClass id=link26 onMouseOv [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Optional properties to set on the format (if one is not provided in the <a href="#OpenLayers.Control.WMSGetFeatureInfo.format" class=LProperty id=link29 onMouseOver="ShowTip(event, 'tt4', 'link29')" onMouseOut="HideTip('tt4')">format</a> property.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Optional properties to set on the format (if one is not provided in the <a href="#OpenLayers.Control.WMSGetFeatureInfo.format" class=LProperty id=link27 onMouseOver="ShowTip(event, 'tt4', 'link27')" onMouseOut="HideTip('tt4')">format</a> property.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.handlerOptions"></a>handlerOptions</h3><div class=CBody><p>{Object} Additional options for the handlers used by this control, e.g.</p><blockquote><pre class="prettyprint">{
     "click": {delay: 100},
     "hover": {delay: 300}
 }</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.handler"></a>handler</h3><div class=CBody><p>{Object} Reference to the <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt5', 'link30')" onMouseOut="HideTip('tt5')">OpenLayers.Handler</a> for this control</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.handler"></a>handler</h3><div class=CBody><p>{Object} Reference to the <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt5', 'link28')" onMouseOut="HideTip('tt5')">OpenLayers.Handler</a> for this control</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.hoverRequest"></a>hoverRequest</h3><div class=CBody><p>{<a href="../Request-js.html#OpenLayers.Request" class=LClass id=link31 onMouseOver="ShowTip(event, 'tt6', 'link31')" onMouseOut="HideTip('tt6')">OpenLayers.Request</a>} contains the currently running hover request (if any).</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.hoverRequest"></a>hoverRequest</h3><div class=CBody><p>{<a href="../Request-js.html#OpenLayers.Request" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt6', 'link29')" onMouseOut="HideTip('tt6')">OpenLayers.Request</a>} contains the currently running hover request (if any).</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types (in addition to those from <a href="../Control-js.html#OpenLayers.Control" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt21', 'link32')" onMouseOut="HideTip('tt21')">OpenLayers.Control</a>)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>befor [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></blockq [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Constructor"></a>Constructor</h3></div></div>
 
@@ -62,11 +60,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function ()</td></tr></table></blockquote><p>Activates the control.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The control was effectively activated.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function ()</td></tr></table></blockquote><p>Deactivates the control.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The control was effectively deactivated.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.getInfoForClick"></a>getInfoForClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getInfoForClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.getInfoForClick"></a>getInfoForClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getInfoForClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.getInfoForHover"></a>getInfoForHover</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getInfoForHover: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
@@ -74,17 +68,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.findLayers"></a>findLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">findLayers: function()</td></tr></table></blockquote><p>Internal method to get the layers, independent of whether we are inspecting the map or using a client-provided array</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.urlMatches"></a>urlMatches</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>urlMatches: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.urlMatches"></a>urlMatches</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>urlMatches: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.buildWMSOptions"></a>buildWMSOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildWMSOptions: function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>laye [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.buildWMSOptions"></a>buildWMSOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildWMSOptions: function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>laye [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.getStyleNames"></a>getStyleNames</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getStyleNames: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.getStyleNames"></a>getStyleNames</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getStyleNames: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>clickPosition,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>clickPosition,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.triggerGetFeatureInfo"></a>triggerGetFeatureInfo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>triggerGetFeatureInfo: function(</td><td class="PParameter  prettyprint " nowrap>request,</td></tr><tr><td></td><td class="PParameter  pre [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.triggerGetFeatureInfo"></a>triggerGetFeatureInfo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>triggerGetFeatureInfo: function(</td><td class="PParameter  prettyprint " nowrap>request,</td></tr><tr><td></td><td class="PParameter  pre [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.handleResponse"></a>handleResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleResponse: function(</td><td class="PParameter  prettyprint " nowrap>xy,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>request, [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMSGetFeatureInfo.handleResponse"></a>handleResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleResponse: function(</td><td class="PParameter  prettyprint " nowrap>xy,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>request, [...]
 
 </div><!--Content-->
 
@@ -92,15 +86,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Format} A format for parsing GetFeatureInfo responses. </div></div><div cla [...]
+<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services. </div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Format} A format for parsing GetFeatureInfo responses. </div></div><div cla [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html b/doc/devdocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html
index 46f6de6..6cdd8d3 100644
--- a/doc/devdocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/WMTSGetFeatureInfo-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMTSGetFeatureInfo</h1><div class=CBody><p>The WMTSGetFeatureInfo control uses a WMTS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configu [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo"></a>OpenLayers.<wbr>Control.<wbr>WMTSGetFeatureInfo</h1><div class=CBody><p>The WMTSGetFeatureInfo control uses a WMTS query to get information about a point on the map.   The information may be in a display-friendly format such as HTML, or a machine-friendly format such as GML, depending on the server’s capabilities and the client’s configu [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
 
@@ -48,11 +48,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.hoverRequest"></a>hoverRequest</h3><div class=CBody><p>{<a href="../Request-js.html#OpenLayers.Request" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt6', 'link21')" onMouseOut="HideTip('tt6')">OpenLayers.Request</a>} contains the currently running hover request (if any).</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><h4 class=CHeading>Supported event types (in addition to those from <a href="../Control-js.html#OpenLayers.Control" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt14', 'link22')" onMouseOut="HideTip('tt14')">OpenLayers.Control</a>)</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>befo [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for listeners and triggering control specific events.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">control.events.register(type, obj, listener);</pre></block [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.pending"></a>pending</h3><div class=CBody><p>{Number}  The number of pending requests.</p></div></div></div>
 
@@ -62,7 +58,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.getInfoForClick"></a>getInfoForClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getInfoForClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.getInfoForClick"></a>getInfoForClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getInfoForClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.getInfoForHover"></a>getInfoForHover</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getInfoForHover: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
 
@@ -70,11 +66,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.findLayers"></a>findLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">findLayers: function()</td></tr></table></blockquote><p>Internal method to get the layers, independent of whether we are inspecting the map or using a client-provided array</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.buildRequestOptions"></a>buildRequestOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildRequestOptions: function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.buildRequestOptions"></a>buildRequestOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildRequestOptions: function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>xy,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfte [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>xy,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfte [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.handleResponse"></a>handleResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleResponse: function(</td><td class="PParameter  prettyprint " nowrap>xy,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>request [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.WMTSGetFeatureInfo.handleResponse"></a>handleResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleResponse: function(</td><td class="PParameter  prettyprint " nowrap>xy,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>request [...]
 
 </div><!--Content-->
 
@@ -82,15 +78,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of the WMTS class allow viewing of tiles from a service that implements the OGC WMTS specification version 1.0.0.</div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Format} A format for parsing GetFeatureInf [...]
+<div class=CToolTip id="tt1"><div class=CClass>A handler for mouse clicks. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of the WMTS class allow viewing of tiles from a service that implements the OGC WMTS specification version 1.0.0.</div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CProperty>{OpenLayers.Format} A format for parsing GetFeatureInf [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/Zoom-js.html b/doc/devdocs/files/OpenLayers/Control/Zoom-js.html
new file mode 100644
index 0000000..ad7f930
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Control/Zoom-js.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Control.Zoom - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.Zoom"></a>OpenLayers.<wbr>Control.Zoom</h1><div class=CBody><p>The Zoom control is a pair of +/- links for zooming in and out.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Control</a></li></ul><!--START_ND_SUMMARY--><div cl [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomInText"></a>zoomInText</h3><div class=CBody><p>{String} Text for zoom-in link.   Default is “+”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomInId"></a>zoomInId</h3><div class=CBody><p>{String} Instead of having the control create a zoom in link, you can provide the identifier for an anchor element already added to the document.  By default, an element with id “olZoomInLink” will be searched for and used if it exists.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomOutText"></a>zoomOutText</h3><div class=CBody><p>{String} Text for zoom-out link.   Default is “-”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.zoomOutId"></a>zoomOutId</h3><div class=CBody><p>{String} Instead of having the control create a zoom out link, you can provide the identifier for an anchor element already added to the document.  By default, an element with id “olZoomOutLink” will be searched for and used if it exists.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} A reference to the DOMElement containing the zoom links.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.getOrCreateLinks"></a>getOrCreateLinks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOrCreateLinks: function(</td><td class="PParameter  prettyprint " nowrap>el</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.onZoomClick"></a>onZoomClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onZoomClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.Zoom.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote>{DOMElement} A reference to the DOMElement containing the zoom links.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  pr [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Control/ZoomBox-js.html b/doc/devdocs/files/OpenLayers/Control/ZoomBox-js.html
index 2b13cc5..f124425 100644
--- a/doc/devdocs/files/OpenLayers/Control/ZoomBox-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ZoomBox-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ZoomBox"></a>OpenLayers.<wbr>Control.<wbr>ZoomBox</h1><div class=CBody><p>The ZoomBox control enables zooming directly to a given extent, by drawing a box on the map.  The box is drawn by holding down shift, whilst dragging the mouse.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link3 onMouseOver="ShowTip(e [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Control.ZoomBox"></a>OpenLayers.<wbr>Control.<wbr>ZoomBox</h1><div class=CBody><p>The ZoomBox control enables zooming directly to a given extent, by drawing a box on the map.  The box is drawn by holding down shift, whilst dragging the mouse.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Control-js.html#OpenLayers.Control" class=LClass id=link3 onMouseOver="ShowTip(e [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.Properties"></a>Properties</h3></div></div>
 
@@ -19,13 +19,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.out"></a>out</h3><div class=CBody><p>{Boolean} Should the control be used for zooming out?</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.keyMask"></a>keyMask</h3><div class=CBody><p>{Integer} Zoom only occurs if the keyMask matches the combination of keys down.  Use bitwise operators and one or more of the <a href="../Handler-js.html#OpenLayers.Handler" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Handler</a> constants to construct a keyMask.  Leave null if no [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.alwaysZoom"></a>alwaysZoom</h3><div class=CBody><p>{Boolean} Always zoom in/out, when box drawed</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.zoomBox"></a>zoomBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBox: function (</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.ZoomBox.zoomBox"></a>zoomBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBox: function (</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 </div><!--Content-->
 
@@ -33,15 +35,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBox: function (</td><td class="PParameter  pret [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBox: function (</td><td class="PParameter  pret [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ZoomIn-js.html b/doc/devdocs/files/OpenLayers/Control/ZoomIn-js.html
index 5b61a6a..72dfed3 100644
--- a/doc/devdocs/files/OpenLayers/Control/ZoomIn-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ZoomIn-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ZoomOut-js.html b/doc/devdocs/files/OpenLayers/Control/ZoomOut-js.html
index bca427d..051bbc7 100644
--- a/doc/devdocs/files/OpenLayers/Control/ZoomOut-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ZoomOut-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ZoomPanel-js.html b/doc/devdocs/files/OpenLayers/Control/ZoomPanel-js.html
index 989911f..de50591 100644
--- a/doc/devdocs/files/OpenLayers/Control/ZoomPanel-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ZoomPanel-js.html
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html b/doc/devdocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html
index 9cec414..cd951e4 100644
--- a/doc/devdocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html
+++ b/doc/devdocs/files/OpenLayers/Control/ZoomToMaxExtent-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([2, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([2, 3, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Events-js.html b/doc/devdocs/files/OpenLayers/Events-js.html
index 156064c..ef4f4d0 100644
--- a/doc/devdocs/files/OpenLayers/Events-js.html
+++ b/doc/devdocs/files/OpenLayers/Events-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Event"></a>OpenLayers.<wbr>Event</h1><div class=CBody><p>Utility functions for event handling.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Event" >OpenLayers.<wbr>Event</a></td><td class=SDescription>Utility functions for ev [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Event"></a>OpenLayers.<wbr>Event</h1><div class=CBody><p>Utility functions for event handling.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Event" >OpenLayers.<wbr>Event</a></td><td class=SDescription>Utility functions for ev [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.Properties"></a>Properties</h3></div></div>
 
@@ -19,6 +19,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.Constants"></a>Constants</h3></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_SPACE"></a>KEY_SPACE</h3><div class=CBody><p>{int}</p></div></div></div>
+
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_BACKSPACE"></a>KEY_BACKSPACE</h3><div class=CBody><p>{int}</p></div></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.KEY_TAB"></a>KEY_TAB</h3><div class=CBody><p>{int}</p></div></div></div>
@@ -49,7 +51,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.isRightClick"></a>isRightClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isRightClick: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.stop"></a>stop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>stop: function(</td><td class="PParameter  prettyprint " nowrap>event,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>allowDefault</td><td class="PAfterParameters  prettypri [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.stop"></a>stop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>stop: function(</td><td class="PParameter  prettyprint " nowrap>event,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>allowDefault</td><td class="PAfterParameters  prettypri [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.findElement"></a>findElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>findElement: function(</td><td class="PParameter  prettyprint " nowrap>event,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>tagName</td><td class="PAfterParam [...]
 
@@ -63,7 +65,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Event.unloadCache"></a>unloadCache</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">unloadCache: function()</td></tr></table></blockquote><p>Cycle through all the element entries in the events cache and call stopObservingElement on each.</p></div></div></div>
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Events"></a>OpenLayers.<wbr>Events</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Events.Constants" >Constants</a></td><td class=SDescription></td></tr><tr class="SConstant SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Events.B [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Events"></a>OpenLayers.<wbr>Events</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Events.Constants" >Constants</a></td><td class=SDescription></td></tr><tr class="SConstant SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Events.B [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Constants"></a>Constants</h3></div></div>
 
@@ -77,31 +79,63 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.element"></a>element</h3><div class=CBody><p>{DOMElement}  the DOM element receiving browser events</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.eventTypes"></a>eventTypes</h3><div class=CBody><p>{Array(String)}  list of support application events</p></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.eventHandler"></a>eventHandler</h3><div class=CBody><p>{Function}  bound event handler attached to elements</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.fallThrough"></a>fallThrough</h3><div class=CBody><p>{Boolean}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.includeXY"></a>includeXY</h3><div class=CBody><p>{Boolean} Should the .xy property automatically be created for browser mouse events?  In general, this should be false.  If it is true, then mouse events will automatically generate a ‘.xy’ property on the event object that is passed.  (Prior to OpenLayers 2.7, this was true by default.)  Otherwise, you can call the getMouse [...]
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.extensions"></a>extensions</h3><div class=CBody><p>{Object} Event extensions registered with this instance.  Keys are event types, values are {OpenLayers.Events.*} extension instances or {Boolean} for events that an instantiated extension provides in addition to the one it was created for.</p><p>Extensions create an event in addition to browser events, which usually fires when a sequence of browser  [...]
+    initialize: function(target) {
+        this.target = target;
+        this.target.register("click", this, this.doStuff, {extension: true});
+        // only required if extension provides more than one event type
+        this.target.extensions["foostart"] = true;
+        this.target.extensions["fooend"] = true;
+    },
+    destroy: function() {
+        var target = this.target;
+        target.unregister("click", this, this.doStuff);
+        delete this.target;
+        // only required if extension provides more than one event type
+        delete target.extensions["foostart"];
+        delete target.extensions["fooend"];
+    },
+    doStuff: function(evt) {
+        var propagate = true;
+        if (OpenLayers.Event.element(evt).className === "foo") {
+            propagate = false;
+            var target = this.target;
+            target.triggerEvent("foostart");
+            window.setTimeout(function() {
+                target.triggerEvent("fooend");
+            }, 1000);
+        }
+        return propagate;
+    }
+});
+// only required if extension provides more than one event type
+OpenLayers.Events.fooend = OpenLayers.Events.foostart;</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.extensionCount"></a>extensionCount</h3><div class=CBody><p>{Object} Keys are event types (like in <a href="#OpenLayers.Events.listeners" class=LProperty id=link50 onMouseOver="ShowTip(event, 'tt13', 'link50')" onMouseOut="HideTip('tt13')">listeners</a>), values are the number of extension listeners for each event type.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.clearMouseListener"></a>clearMouseListener</h3><div class=CBody><p>A version of <a href="#OpenLayers.Events.clearMouseCache" class=LFunction id=link45 onMouseOver="ShowTip(event, 'tt13', 'link45')" onMouseOut="HideTip('tt13')">clearMouseCache</a> that is bound to this instance so that it can be used with <a href="#OpenLayers.Event.observe" class=LFunction id=link46 onMouseOver="ShowTip(event, 'tt8', 'lin [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.clearMouseListener"></a>clearMouseListener</h3><div class=CBody><p>A version of <a href="#OpenLayers.Events.clearMouseCache" class=LFunction id=link51 onMouseOver="ShowTip(event, 'tt14', 'link51')" onMouseOut="HideTip('tt14')">clearMouseCache</a> that is bound to this instance so that it can be used with <a href="#OpenLayers.Event.observe" class=LFunction id=link52 onMouseOver="ShowTip(event, 'tt8', 'lin [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.OpenLayers.Events"></a>OpenLayers.<wbr>Events</h3><div class=CBody><p>Construct an OpenLayers.Events object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} The js object to which this Events object  is being added</td></tr><tr><td class=CDLEntry>element</td><td class=CDLDescript [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.OpenLayers.Events"></a>OpenLayers.<wbr>Events</h3><div class=CBody><p>Construct an OpenLayers.Events object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} The js object to which this Events object  is being added</td></tr><tr><td class=CDLEntry>element</td><td class=CDLDescript [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.addEventType"></a>addEventType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addEventType: function(</td><td class="PParameter  prettyprint " nowrap>eventName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.addEventType"></a>addEventType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addEventType: function(</td><td class="PParameter  prettyprint " nowrap>eventName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.attachToElement"></a>attachToElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>attachToElement: function (</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.on"></a>on</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>on: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.on"></a>on</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>on: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
 events.on({"loadstart": loadStartListener});
 
 // this is equivalent to the following
@@ -118,11 +152,11 @@ events.on({
 events.register("loadstart", object, loadStartListener);
 events.register("loadend", object, loadEndListener);</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.register"></a>register</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>register: function (</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PPar [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.register"></a>register</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>register: function (</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PPar [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.registerPriority"></a>registerPriority</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>registerPriority: function (</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.un"></a>un</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.un"></a>un</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Convenience method f [...]
 events.un({"loadstart": loadStartListener});
 
 // this is equivalent to the following
@@ -149,7 +183,7 @@ events.unregister("loadend", object, loadEndListener);</pre></blockquo
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.clearMouseCache"></a>clearMouseCache</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clearMouseCache: function()</td></tr></table></blockquote><p>Clear cached data about the mouse position.  This should be called any time the element that events are registered on changes position within the page.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.getMousePosition"></a>getMousePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMousePosition: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.getMousePosition"></a>getMousePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMousePosition: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
 </div><!--Content-->
 
@@ -157,15 +191,15 @@ events.unregister("loadend", object, loadEndListener);</pre></blockquo
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>element: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Cross browser event element detection.</div></div><div class=CToolTip id="tt2"><div cl [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>element: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Cross browser event element detection.</div></div><div class=CToolTip id="tt2"><div cl [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Events/buttonclick-js.html b/doc/devdocs/files/OpenLayers/Events/buttonclick-js.html
new file mode 100644
index 0000000..278d468
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Events/buttonclick-js.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Events.buttonclick - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Events.buttonclick"></a>OpenLayers.<wbr>Events.<wbr>buttonclick</h1><div class=CBody><p>Extension event type for handling buttons on top of a dom element.  This event type fires “buttonclick” on its <a href="#OpenLayers.Events.buttonclick.target" class=LProperty id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">target</a> when a button w [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.target"></a>target</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} The events instance that the buttonclick event will be triggered on.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.events"></a>events</h3><div class=CBody><p>{Array} Events to observe and conditionally stop from propagating when an element with the olButton class (or its olAlphaImg child) is clicked.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.startRegEx"></a>startRegEx</h3><div class=CBody><p>{RegExp} Regular expression to test Event.type for events that start a buttonclick sequence.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.cancelRegEx"></a>cancelRegEx</h3><div class=CBody><p>{RegExp} Regular expression to test Event.type for events that cancel a buttonclick sequence.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.completeRegEx"></a>completeRegEx</h3><div class=CBody><p>{RegExp} Regular expression to test Event.type for events that complete a buttonclick sequence.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.startEvt"></a>startEvt</h3><div class=CBody><p>{Event} The event that started the click sequence</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.OpenLayers.Events.buttonclick"></a>OpenLayers.<wbr>Events.<wbr>buttonclick</h3><div class=CBody><p>Construct a buttonclick event type.  Applications are not supposed to create instances of this class - they are created on demand by <a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a> instances.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspaci [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.getPressedButton"></a>getPressedButton</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPressedButton: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Events.buttonclick.buttonClick"></a>buttonClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buttonClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPressedButton: function(</td><td class="PPara [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Feature-js.html b/doc/devdocs/files/OpenLayers/Feature-js.html
index a742e20..94f1979 100644
--- a/doc/devdocs/files/OpenLayers/Feature-js.html
+++ b/doc/devdocs/files/OpenLayers/Feature-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h1><div class=CBody><p>Features are combinations of geography and attributes.  The OpenLayers.Feature class specifically combines a marker and a lonlat.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a hr [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h1><div class=CBody><p>Features are combinations of geography and attributes.  The OpenLayers.Feature class specifically combines a marker and a lonlat.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a hr [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Properties"></a>Properties</h3></div></div>
 
@@ -19,19 +19,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.id"></a>id</h3><div class=CBody><p>{String}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.lonlat"></a>lonlat</h3><div class=CBody><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.lonlat"></a>lonlat</h3><div class=CBody><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt1', 'link10')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.data"></a>data</h3><div class=CBody><p>{Object}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.marker"></a>marker</h3><div class=CBody><p>{<a href="Marker-js.html#OpenLayers.Marker" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt2', 'link12')" onMouseOut="HideTip('tt2')">OpenLayers.Marker</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.marker"></a>marker</h3><div class=CBody><p>{<a href="Marker-js.html#OpenLayers.Marker" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt2', 'link11')" onMouseOut="HideTip('tt2')">OpenLayers.Marker</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.popupClass"></a>popupClass</h3><div class=CBody><p>{<a href="BaseTypes/Class-js.html#OpenLayers.Class" class=LConstructor id=link13 onMouseOver="ShowTip(event, 'tt3', 'link13')" onMouseOut="HideTip('tt3')">OpenLayers.Class</a>} The class which will be used to instantiate a new Popup.  Default is <a href="Popup/AnchoredBubble-js.html#OpenLayers.Popup.AnchoredBubble" class=LClass >OpenLayers.Popup.An [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.popupClass"></a>popupClass</h3><div class=CBody><p>{<a href="../deprecated-js.html#OpenLayers.Class" class=LClass >OpenLayers.Class</a>} The class which will be used to instantiate a new Popup.  Default is <a href="Popup/Anchored-js.html#OpenLayers.Popup.Anchored" class=LClass >OpenLayers.Popup.Anchored</a>.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.popup"></a>popup</h3><div class=CBody><p>{<a href="Popup-js.html#OpenLayers.Popup" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt4', 'link14')" onMouseOut="HideTip('tt4')">OpenLayers.Popup</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.popup"></a>popup</h3><div class=CBody><p>{<a href="Popup-js.html#OpenLayers.Popup" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt3', 'link12')" onMouseOut="HideTip('tt3')">OpenLayers.Popup</a>}</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h3><div class=CBody><p>Constructor for features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescripti [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.OpenLayers.Feature"></a>OpenLayers.<wbr>Feature</h3><div class=CBody><p>Constructor for features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescripti [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Functions"></a>Functions</h3></div></div>
 
@@ -39,11 +39,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.onScreen"></a>onScreen</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onScreen:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the feature is currently visible on screen (based on its ‘lonlat’ property)</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.createMarker"></a>createMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createMarker: function()</td></tr></table></blockquote><p>Based on the data associated with the Feature, create and return a marker object.</p><h4 class=CHeading>Returns</h4><p>{<a href="Marker-js.html#OpenLayers.Marker" class=LClass id=link17 onMouseO [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.createMarker"></a>createMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createMarker: function()</td></tr></table></blockquote><p>Based on the data associated with the Feature, create and return a marker object.</p><h4 class=CHeading>Returns</h4><p>{<a href="Marker-js.html#OpenLayers.Marker" class=LClass id=link15 onMouseO [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.destroyMarker"></a>destroyMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroyMarker: function()</td></tr></table></blockquote><p>Destroys marker.  If user overrides the createMarker() function, s/he should be able to also specify an alternative function for destroying it</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.createPopup"></a>createPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createPopup: function(</td><td class="PParameter  prettyprint " nowrap>closeBox</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.createPopup"></a>createPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createPopup: function(</td><td class="PParameter  prettyprint " nowrap>closeBox</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.destroyPopup"></a>destroyPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroyPopup: function()</td></tr></table></blockquote><p>Destroys the popup created via createPopup.</p><p>As with the marker, if user overrides the createPopup() function, s/he should also be able to override the destruction</p></div></div></div>
 
@@ -53,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([3, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([4, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Marker are a combination of a OpenLayers.LonLat and an OpenLayers.Icon.</div></div><div class=CToolTip id="tt3"><div class=CConstructor>Base class used to construct all other classes. </div></div><div class=CToolTip id="tt4"><div class=CClass>A popup is a small div that can opened and closed on the map. </div> [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of OpenLayers.Marker are a combination of a OpenLayers.LonLat and an OpenLayers.Icon.</div></div><div class=CToolTip id="tt3"><div class=CClass>A popup is a small div that can opened and closed on the map. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 c [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Feature/Vector-js.html b/doc/devdocs/files/OpenLayers/Feature/Vector-js.html
index afe1d34..1728663 100644
--- a/doc/devdocs/files/OpenLayers/Feature/Vector-js.html
+++ b/doc/devdocs/files/OpenLayers/Feature/Vector-js.html
@@ -59,17 +59,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.createPopup"></a>createPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createPopup: function()</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>HACK</td><td class=CDLDescription>we need to decide if all vector features should be able to create pop [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.atPoint"></a>atPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>atPoint: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>toleranceLon,</td></tr><tr><td></td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.atPoint"></a>atPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>atPoint: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>toleranceLon,</td></tr><tr><td></td> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.destroyPopup"></a>destroyPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroyPopup: function()</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>HACK</td><td class=CDLDescription>we need to decide if all vector features should be able to delete  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.move"></a>move</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>move: function(</td><td class="PParameter  prettyprint " nowrap>location</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Move [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.move"></a>move</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>move: function(</td><td class="PParameter  prettyprint " nowrap>location</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Move [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.toState"></a>toState</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>toState: function(</td><td class="PParameter  prettyprint " nowrap>state</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.OpenLayers.Feature.Vector.style"></a>OpenLayers.<wbr>Feature.<wbr>Vector.<wbr>style</h3><div class=CBody><p>OpenLayers features can have a number of style attributes.  The ‘default’ style will typically be used if no other style is specified.  These styles correspond for the most part, to the styling properties defined by the SVG standard.  Information on fill propertie [...]
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.Vector.OpenLayers.Feature.Vector.style"></a>OpenLayers.<wbr>Feature.<wbr>Vector.<wbr>style</h3><div class=CBody><p>OpenLayers features can have a number of style attributes.  The ‘default’ style will typically be used if no other style is specified.  These styles correspond for the most part, to the styling properties defined by the SVG standard.  Information on fill propertie [...]
 
 </div><!--Content-->
 
@@ -77,15 +77,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([3, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([4, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A Geometry is a description of a geographic object. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">d [...]
+<div class=CToolTip id="tt1"><div class=CClass>A Geometry is a description of a geographic object. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">d [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Feature/WFS-js.html b/doc/devdocs/files/OpenLayers/Feature/WFS-js.html
deleted file mode 100644
index 16123e7..0000000
--- a/doc/devdocs/files/OpenLayers/Feature/WFS-js.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Feature.WFS - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();">< [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h1><div class=CBody><p>WFS handling class, for use as a featureClass on the WFS layer for handling ‘point’ WFS types.  Good for subclassing when creating a custom WFS like XML application.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Feature-js.html#OpenLayers.Feature" class=LClass id=link3 onMouseOver="ShowT [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h3><div class=CBody><p>Create a WFS feature.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>xmlNode</td><td class= [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.processXMLNode"></a>processXMLNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>processXMLNode: function(</td><td class="PParameter  prettyprint " nowrap>xmlNode</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([3, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  pr [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Filter-js.html b/doc/devdocs/files/OpenLayers/Filter-js.html
index 1b2cd7b..a477298 100644
--- a/doc/devdocs/files/OpenLayers/Filter-js.html
+++ b/doc/devdocs/files/OpenLayers/Filter-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h1><div class=CBody><p>This class represents an OGC Filter.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Filter" >OpenLayers.<wbr>Filter</a></td><td class=SDescription>This class represents [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h1><div class=CBody><p>This class represents an OGC Filter.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Filter" >OpenLayers.<wbr>Filter</a></td><td class=SDescription>This class represents [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h3><div class=CBody><p>This class represents a generic filter.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a href [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.OpenLayers.Filter"></a>OpenLayers.<wbr>Filter</h3><div class=CBody><p>This class represents a generic filter.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a href [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Functions"></a>Functions</h3></div></div>
 
@@ -23,7 +23,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.evaluate"></a>evaluate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>E [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this filter.  Should be implementted by subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Filter.OpenLayers.Filter" class=LConstructor id=link5 onMouseOver="ShowTip(event, 'tt4', 'lin [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this filter.  Should be implemented by subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Filter.OpenLayers.Filter" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt6', 'link [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.toString"></a>toString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} Include <a href="Format/CQL-js.html#OpenLayers.Format.CQL" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">OpenLayers.Fo [...]
 
 </div><!--Content-->
 
@@ -31,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Remove reference to anything added.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: fun [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Remove reference to anything added.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: fun [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Filter/Comparison-js.html b/doc/devdocs/files/OpenLayers/Filter/Comparison-js.html
index 4d9d127..bf289ad 100644
--- a/doc/devdocs/files/OpenLayers/Filter/Comparison-js.html
+++ b/doc/devdocs/files/OpenLayers/Filter/Comparison-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Comparison"></a>OpenLayers.<wbr>Filter.<wbr>Comparison</h1><div class=CBody><p>This class represents a comparison filter.</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STi [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Comparison"></a>OpenLayers.<wbr>Filter.<wbr>Comparison</h1><div class=CBody><p>This class represents a comparison filter.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div class=Summa [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.Properties"></a>Properties</h3></div></div>
 
@@ -35,7 +35,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.evaluate"></a>evaluate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluate: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.value2regex"></a>value2regex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.value2regex"></a>value2regex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Comparison.regex2value"></a>regex2value</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">regex2value: function()</td></tr></table></blockquote><p>Convert the value of this rule from a regular expression string into an ogc literal string using a wildCard of *, a singleChar of ., and an escape of !.   Leaves the <a href="#OpenLa [...]
 
@@ -47,10 +47,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Filter/FeatureId-js.html b/doc/devdocs/files/OpenLayers/Filter/FeatureId-js.html
index d2a54c3..d84140f 100644
--- a/doc/devdocs/files/OpenLayers/Filter/FeatureId-js.html
+++ b/doc/devdocs/files/OpenLayers/Filter/FeatureId-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.FeatureId"></a>OpenLayers.<wbr>Filter.<wbr>FeatureId</h1><div class=CBody><p>This class represents a ogc:FeatureId Filter, as being used for rule-based SLD styling</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Filter</a></li></ul><!--START_ND_S [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.FeatureId"></a>OpenLayers.<wbr>Filter.<wbr>FeatureId</h1><div class=CBody><p>This class represents a ogc:FeatureId Filter, as being used for rule-based SLD styling</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Filter</a></li></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.fids"></a>fids</h3><div class=CBody><p>{Array(String)} Feature Ids to evaluate this rule against.  To be passed To be passed inside the params object.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.fids"></a>fids</h3><div class=CBody><p>{Array(String)} Feature Ids to evaluate this rule against.  To be passed inside the params object.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.FeatureId.type"></a>type</h3><div class=CBody><p>{String} Type to identify this filter.</p></div></div></div>
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Filter/Function-js.html b/doc/devdocs/files/OpenLayers/Filter/Function-js.html
index 0f50f9b..93b9476 100644
--- a/doc/devdocs/files/OpenLayers/Filter/Function-js.html
+++ b/doc/devdocs/files/OpenLayers/Filter/Function-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Function"></a>OpenLayers.<wbr>Filter.<wbr>Function</h1><div class=CBody><p>This class represents a filter function.  We are using this class for creation of complex filters that can contain filter functions as values.  Nesting function as other functions parameter is supported.</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Function"></a>OpenLayers.<wbr>Filter.<wbr>Function</h1><div class=CBody><p>This class represents a filter function.  We are using this class for creation of complex filters that can contain filter functions as values.  Nesting function as other functions parameter is supported.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Function.Properties"></a>Properties</h3></div></div>
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Filter/Logical-js.html b/doc/devdocs/files/OpenLayers/Filter/Logical-js.html
index 9dd9331..09f9b55 100644
--- a/doc/devdocs/files/OpenLayers/Filter/Logical-js.html
+++ b/doc/devdocs/files/OpenLayers/Filter/Logical-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Logical"></a>OpenLayers.<wbr>Filter.<wbr>Logical</h1><div class=CBody><p>This class represents ogc:And, ogc:Or and ogc:Not rules.</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div c [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Logical"></a>OpenLayers.<wbr>Filter.<wbr>Logical</h1><div class=CBody><p>This class represents ogc:And, ogc:Or and ogc:Not rules.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Filter</a></li></ul><!--START_ND_SUMMARY--><div cla [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Logical.Properties"></a>Properties</h3></div></div>
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Filter/Spatial-js.html b/doc/devdocs/files/OpenLayers/Filter/Spatial-js.html
index 8a54385..b4b475d 100644
--- a/doc/devdocs/files/OpenLayers/Filter/Spatial-js.html
+++ b/doc/devdocs/files/OpenLayers/Filter/Spatial-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Spatial"></a>OpenLayers.<wbr>Filter.<wbr>Spatial</h1><div class=CBody><p>This class represents a spatial filter.  Currently implemented: BBOX, DWithin and Intersects</p><p>Inherits from</p><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Filter</a></li></ul><!--STA [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Filter.Spatial"></a>OpenLayers.<wbr>Filter.<wbr>Spatial</h1><div class=CBody><p>This class represents a spatial filter.  Currently implemented: BBOX, DWithin and Intersects</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Filter</a> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Filter.Spatial.Properties"></a>Properties</h3></div></div>
 
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([4, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([5, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format-js.html b/doc/devdocs/files/OpenLayers/Format-js.html
index 4a7c6d6..6343896 100644
--- a/doc/devdocs/files/OpenLayers/Format-js.html
+++ b/doc/devdocs/files/OpenLayers/Format-js.html
@@ -43,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Class for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: functi [...]
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: func [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/ArcXML-js.html b/doc/devdocs/files/OpenLayers/Format/ArcXML-js.html
index 5be9cc4..4a4bee6 100644
--- a/doc/devdocs/files/OpenLayers/Format/ArcXML-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/ArcXML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML"></a>OpenLayers.<wbr>Format.<wbr>ArcXML</h1><div class=CBody><p>Read/Wite ArcXML.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.OpenLayers.Format.ArcXML" class=LConstructor id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">OpenLayers.Format.ArcXML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML"></a>OpenLayers.<wbr>Format.<wbr>ArcXML</h1><div class=CBody><p>Read/Wite ArcXML.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.OpenLayers.Format.ArcXML" class=LConstructor id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">OpenLayers.Format.ArcXML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Properties"></a>Properties</h3></div></div>
 
@@ -31,13 +31,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.addLayers"></a>addLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayers: function(</td><td class="PParameter  prettyprint " nowrap>ll,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>lyrs</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.addImageSize"></a>addImageSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addImageSize: function(</td><td class="PParameter  prettyprint " nowrap>imsize,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>olsize</td><td class=" [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.addImageSize"></a>addImageSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addImageSize: function(</td><td class="PParameter  prettyprint " nowrap>imsize,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>olsize</td><td class=" [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.addCoordSys"></a>addCoordSys</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addCoordSys: function(</td><td class="PParameter  prettyprint " nowrap>featOrFilt,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>fsys</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.addCoordSys"></a>addCoordSys</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addCoordSys: function(</td><td class="PParameter  prettyprint " nowrap>featOrFilt,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>fsys</td><td class="P [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.iserror"></a>iserror</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>iserror: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Gen [...]
 
@@ -45,7 +45,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.parseAttributes"></a>parseAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseAttributes: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>type</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.parsePointGeometry"></a>parsePointGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parsePointGeometry: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.parsePointGeometry"></a>parsePointGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parsePointGeometry: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
 
 </div><!--Content-->
 
@@ -53,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseEnvelope: function(</td><td class="PParameter  prettyprint " nowrap>env,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>arr</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse an ar [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseEnvelope: function(</td><td class="PParameter  prettyprint " nowrap>env,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>arr</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse an ar [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/ArcXML/Features-js.html b/doc/devdocs/files/OpenLayers/Format/ArcXML/Features-js.html
index 29b94d8..801c824 100644
--- a/doc/devdocs/files/OpenLayers/Format/ArcXML/Features-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/ArcXML/Features-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML.Features"></a>OpenLayers.<wbr>Format.<wbr>ArcXML.<wbr>Features</h1><div class=CBody><p>Read/Wite ArcXML features.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.Features.OpenLayers.Format.ArcXML.Features" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.ArcXML.Features</a> const [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.ArcXML.Features"></a>OpenLayers.<wbr>Format.<wbr>ArcXML.<wbr>Features</h1><div class=CBody><p>Read/Wite ArcXML features.  Create a new instance with the <a href="#OpenLayers.Format.ArcXML.Features.OpenLayers.Format.ArcXML.Features" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.ArcXML.Features</a> const [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.Constructor"></a>Constructor</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.ArcXML.Features.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
 </div><!--Content-->
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string of ArcXML, and return a set of OpenLayers features.</div></div><di [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string of ArcXML, and return a set of OpenLayers features.</div></div><di [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Atom-js.html b/doc/devdocs/files/OpenLayers/Format/Atom-js.html
index a4a3d66..8f0057a 100644
--- a/doc/devdocs/files/OpenLayers/Format/Atom-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Atom-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Atom"></a>OpenLayers.<wbr>Format.Atom</h1><div class=CBody><p>Read/write Atom feeds.  Create a new instance with the <OpenLayers.Format.AtomFeed> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">OpenLayers.Format.XM [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Atom"></a>OpenLayers.<wbr>Format.Atom</h1><div class=CBody><p>Read/write Atom feeds.  Create a new instance with the <OpenLayers.Format.AtomFeed> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STit [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.Properties"></a>Properties</h3></div></div>
 
@@ -31,25 +31,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Seri [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Seri [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.buildContentNode"></a>buildContentNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildContentNode: function(</td><td class="PParameter  prettyprint " nowrap>content</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.buildEntryNode"></a>buildEntryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildEntryNode: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.buildEntryNode"></a>buildEntryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildEntryNode: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.initGmlParser"></a>initGmlParser</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initGmlParser: function()</td></tr></table></blockquote><p>Creates a GML parser.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.buildGeometryNode"></a>buildGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.buildGeometryNode"></a>buildGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.buildPersonConstructNode"></a>buildPersonConstructNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildPersonConstructNode: function(</td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td class="PParameter  prettyprint [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.getFirstChildValue"></a>getFirstChildValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFirstChildValue: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nsuri,</ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parseFeature"></a>parseFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeature: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parseFeature"></a>parseFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeature: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parseFeatures"></a>parseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parseFeatures"></a>parseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parseLocations"></a>parseLocations</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseLocations: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parseLocations"></a>parseLocations</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseLocations: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Atom.parsePersonConstruct"></a>parsePersonConstruct</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parsePersonConstructs: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>n [...]
 
@@ -59,15 +59,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Serialize or more feature nodes to Atom documents.</div></div><div class=CToolTip id= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Serialize or more feature nodes to Atom documents.</div></div><div class=CToolTip id= [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/CQL-js.html b/doc/devdocs/files/OpenLayers/Format/CQL-js.html
index e0c765d..4ce7ed8 100644
--- a/doc/devdocs/files/OpenLayers/Format/CQL-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/CQL-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/CSWGetDomain-js.html b/doc/devdocs/files/OpenLayers/Format/CSWGetDomain-js.html
index fe425cd..9078664 100644
--- a/doc/devdocs/files/OpenLayers/Format/CSWGetDomain-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/CSWGetDomain-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html b/doc/devdocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html
index 3a04d29..9de8192 100644
--- a/doc/devdocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/CSWGetDomain/v2_0_2-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetDomain.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetDomain.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetDomain v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetDomain.v2_0_2.OpenLayers.Format.CSWGetDomain.v2_0_2" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3') [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetDomain.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetDomain.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetDomain v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetDomain.v2_0_2.OpenLayers.Format.CSWGetDomain.v2_0_2" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3') [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.CSWGetDomain.v2_0_2.Properties"></a>Properties</h3></div></div>
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetDomain request.</div></div><div class=CToolTip id="tt2"><div  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetDomain request.</div></div><div class=CToolTip id="tt2"><div  [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/CSWGetRecords-js.html b/doc/devdocs/files/OpenLayers/Format/CSWGetRecords-js.html
index 81ed87a..d6615dc 100644
--- a/doc/devdocs/files/OpenLayers/Format/CSWGetRecords-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/CSWGetRecords-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html b/doc/devdocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html
index 73470cb..cd3250d 100644
--- a/doc/devdocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetRecords.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetRecords v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetRecords.v2_0_2.OpenLayers.Format.CSWGetRecords.v2_0_2" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip(' [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.CSWGetRecords.v2_0_2"></a>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</h1><div class=CBody><p>A format for creating CSWGetRecords v2.0.2 transactions.  Create a new instance with the <a href="#OpenLayers.Format.CSWGetRecords.v2_0_2.OpenLayers.Format.CSWGetRecords.v2_0_2" class=LConstructor id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip(' [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.CSWGetRecords.v2_0_2.Properties"></a>Properties</h3></div></div>
 
@@ -63,15 +63,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetRecords request.</div></div><div class=CToolTip id="tt2"><div [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse the response from a GetRecords request.</div></div><div class=CToolTip id="tt2"><div [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Context-js.html b/doc/devdocs/files/OpenLayers/Format/Context-js.html
index bd46c4b..6675a7a 100644
--- a/doc/devdocs/files/OpenLayers/Format/Context-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Context-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Context"></a>OpenLayers.<wbr>Format.<wbr>Context</h1><div class=CBody><p>Base class for both Format.WMC and Format.OWSContext</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Format.Context" >OpenLayers.<wbr>Format.<wbr>Co [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Context"></a>OpenLayers.<wbr>Format.<wbr>Context</h1><div class=CBody><p>Base class for both Format.WMC and Format.OWSContext</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML/VersionedOGC-js.html#OpenLayers.Format.XML.VersionedOGC" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Format.XML.VersionedOGC</a></li [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.Properties"></a>Properties</h3></div></div>
 
@@ -25,17 +25,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pretty [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pretty [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.getLayerFromContext"></a>getLayerFromContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerFromContext: function(</td><td class="PParameter  prettyprint " nowrap>layerContext</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.getLayerFromContext"></a>getLayerFromContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerFromContext: function(</td><td class="PParameter  prettyprint " nowrap>layerContext</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.getLayersFromContext"></a>getLayersFromContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersFromContext: function(</td><td class="PParameter  prettyprint " nowrap>layersContext</td><td class="PAfterParameters  prettyprint "nowrap>)</t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.contextToMap"></a>contextToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>contextToMap: function(</td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.contextToMap"></a>contextToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>contextToMap: function(</td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.mergeContextToMap"></a>mergeContextToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeContextToMap: function(</td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>map</ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.mergeContextToMap"></a>mergeContextToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeContextToMap: function(</td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>map</ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pret [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  pret [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Context.Constants"></a>Constants</h3></div></div>
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read Context da [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read Context da [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Filter-js.html b/doc/devdocs/files/OpenLayers/Format/Filter-js.html
index daa0297..cce01a1 100644
--- a/doc/devdocs/files/OpenLayers/Format/Filter-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Filter-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Filter/v1-js.html b/doc/devdocs/files/OpenLayers/Format/Filter/v1-js.html
index caa2920..83477d7 100644
--- a/doc/devdocs/files/OpenLayers/Format/Filter/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Filter/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h1><div class=CBody><p>Superclass for Filter version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h1><div class=CBody><p>Superclass for Filter version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border= [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.Properties"></a>Properties</h3></div></div>
 
@@ -23,21 +23,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeading>Parameters [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.OpenLayers.Format.Filter.v1"></a>OpenLayers.<wbr>Format.<wbr>Filter.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeading>Parameters</h4 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.readSpatial"></a>readSpatial</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readSpatial: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.readSpatial"></a>readSpatial</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readSpatial: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.readOgcExpression"></a>readOgcExpression</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readOgcExpression: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.writeOgcExpression"></a>writeOgcExpression</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeOgcExpression: function(</td><td class="PParameter  prettyprint " nowrap>value,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>no [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.writeOgcExpression"></a>writeOgcExpression</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeOgcExpression: function(</td><td class="PParameter  prettyprint " nowrap>value,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>no [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1.writeFeatureIdNodes"></a>writeFeatureIdNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeFeatureIdNodes: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
 
@@ -53,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0  [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Filter/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/Filter/v1_0_0-js.html
index 8ca1242..71028c1 100644
--- a/doc/devdocs/files/OpenLayers/Format/Filter/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Filter/v1_0_0-js.html
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Filter/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/Filter/v1_1_0-js.html
index 070989d..80f465c 100644
--- a/doc/devdocs/files/OpenLayers/Format/Filter/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Filter/v1_1_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h1><div class=CBody><p>Write ogc:Filter version 1.1.0.</p><h4 class=CHeading>Differences from the v1.0.0 parser</h4><ul><li>uses GML v3 instead of GML v2</li><li>reads matchCase attribute on ogc:PropertyIsEqual and ogc:PropertyIsNotEqual elements.</li><li>writes matchCase attribute from comparison filters of type [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h1><div class=CBody><p>Write ogc:Filter version 1.1.0.</p><h4 class=CHeading>Differences from the v1.0.0 parser</h4><ul><li>uses GML v3 instead of GML v2</li><li>reads matchCase attribute on ogc:PropertyIsEqual and ogc:PropertyIsNotEqual elements.</li><li>writes matchCase attribute from comparison filters of type [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.Constants"></a>Constants</h3></div></div>
 
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeadi [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.OpenLayers.Format.Filter.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>Filter.<wbr>v1_1_0</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../Filter-js.html#OpenLayers.Format.Filter" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Format.Filter</a> constructor instead.</p><h4 class=CHeadi [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.Properties"></a>Properties</h3></div></div>
 
@@ -33,7 +33,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.writeSpatial"></a>writeSpatial</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeSpatial: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Filter.v1_1_0.writeSpatial"></a>writeSpatial</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeSpatial: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td cl [...]
 
 </div><!--Content-->
 
@@ -41,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([5, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([6, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeSpatial: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read a { [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeSpatial: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read a { [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GML-js.html b/doc/devdocs/files/OpenLayers/Format/GML-js.html
index c4b38ed..909bec5 100644
--- a/doc/devdocs/files/OpenLayers/Format/GML-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML"></a>OpenLayers.<wbr>Format.GML</h1><div class=CBody><p>Read/Wite GML.  Create a new instance with the <a href="#OpenLayers.Format.GML.OpenLayers.Format.GML" class=LConstructor id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Format.GML</a> constructor.   Supports the GML simple features profile.</p><h4 class=CHeading>Inh [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML"></a>OpenLayers.<wbr>Format.GML</h1><div class=CBody><p>Read/Wite GML.  Create a new instance with the <a href="#OpenLayers.Format.GML.OpenLayers.Format.GML" class=LConstructor id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Format.GML</a> constructor.   Supports the GML simple features profile.</p><h4 class=CHeading>Inh [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Properties"></a>Properties</h3></div></div>
 
@@ -39,53 +39,53 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data fr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Read data fr [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseFeature"></a>parseFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeature: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry"></a>parseGeometry</h3><div class=CBody><p>Properties of this object are the functions that parse geometries based on their type.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.point"></a>parseGeometry.<wbr>point</h3><div class=CBody><p>Given a GML node representing a point geometry, create an OpenLayers point geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a hre [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.point"></a>parseGeometry.<wbr>point</h3><div class=CBody><p>Given a GML node representing a point geometry, create an OpenLayers point geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a hre [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.multipoint"></a>parseGeometry.<wbr>multipoint</h3><div class=CBody><p>Given a GML node representing a multipoint geometry, create an OpenLayers multipoint geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Re [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.multipoint"></a>parseGeometry.<wbr>multipoint</h3><div class=CBody><p>Given a GML node representing a multipoint geometry, create an OpenLayers multipoint geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Re [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.linestring"></a>parseGeometry.<wbr>linestring</h3><div class=CBody><p>Given a GML node representing a linestring geometry, create an OpenLayers linestring geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Re [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.linestring"></a>parseGeometry.<wbr>linestring</h3><div class=CBody><p>Given a GML node representing a linestring geometry, create an OpenLayers linestring geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Re [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.multilinestring"></a>parseGeometry.<wbr>multilinestring</h3><div class=CBody><p>Given a GML node representing a multilinestring geometry, create an OpenLayers multilinestring geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.multilinestring"></a>parseGeometry.<wbr>multilinestring</h3><div class=CBody><p>Given a GML node representing a multilinestring geometry, create an OpenLayers multilinestring geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.polygon"></a>parseGeometry.<wbr>polygon</h3><div class=CBody><p>Given a GML node representing a polygon geometry, create an OpenLayers polygon geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Returns</h4><p [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.polygon"></a>parseGeometry.<wbr>polygon</h3><div class=CBody><p>Given a GML node representing a polygon geometry, create an OpenLayers polygon geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Returns</h4><p [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.multipolygon"></a>parseGeometry.<wbr>multipolygon</h3><div class=CBody><p>Given a GML node representing a multipolygon geometry, create an OpenLayers multipolygon geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHe [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.multipolygon"></a>parseGeometry.<wbr>multipolygon</h3><div class=CBody><p>Given a GML node representing a multipolygon geometry, create an OpenLayers multipolygon geometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHe [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.box"></a>parseGeometry.box</h3><div class=CBody><p>Given a GML node representing a box geometry, create an OpenLayers.Bounds.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bou [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseGeometry.box"></a>parseGeometry.box</h3><div class=CBody><p>Given a GML node representing a box geometry, create an OpenLayers.Bounds.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement} A GML node.</td></tr></table><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bou [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.parseAttributes"></a>parseAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseAttributes: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Gener [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Gener [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.createFeatureXML"></a>createFeatureXML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureXML: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.createFeatureXML"></a>createFeatureXML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureXML: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometryNode"></a>buildGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry"></a>buildGeometry</h3><div class=CBody><p>Object containing methods to do the actual geometry node building based on geometry type.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.point"></a>buildGeometry.<wbr>point</h3><div class=CBody><p>Given an OpenLayers point geometry, create a GML point.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link20 onMouseOver="ShowTip(e [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.point"></a>buildGeometry.<wbr>point</h3><div class=CBody><p>Given an OpenLayers point geometry, create a GML point.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link19 onMouseOver="ShowTip(e [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.multipoint"></a>buildGeometry.<wbr>multipoint</h3><div class=CBody><p>Given an OpenLayers multipoint geometry, create a GML multipoint.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/MultiPoint-js.html#OpenLayers.Geometry.MultiPoint" class=LClass id [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.multipoint"></a>buildGeometry.<wbr>multipoint</h3><div class=CBody><p>Given an OpenLayers multipoint geometry, create a GML multipoint.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/MultiPoint-js.html#OpenLayers.Geometry.MultiPoint" class=LClass id [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.linestring"></a>buildGeometry.<wbr>linestring</h3><div class=CBody><p>Given an OpenLayers linestring geometry, create a GML linestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/LineString-js.html#OpenLayers.Geometry.LineString" class=LClass id [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.linestring"></a>buildGeometry.<wbr>linestring</h3><div class=CBody><p>Given an OpenLayers linestring geometry, create a GML linestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/LineString-js.html#OpenLayers.Geometry.LineString" class=LClass id [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.multilinestring"></a>buildGeometry.<wbr>multilinestring</h3><div class=CBody><p>Given an OpenLayers multilinestring geometry, create a GML multilinestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/MultiLineString-js.html#OpenLayers.Geometry.Mu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.multilinestring"></a>buildGeometry.<wbr>multilinestring</h3><div class=CBody><p>Given an OpenLayers multilinestring geometry, create a GML multilinestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/MultiLineString-js.html#OpenLayers.Geometry.Mu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.linearring"></a>buildGeometry.<wbr>linearring</h3><div class=CBody><p>Given an OpenLayers linearring geometry, create a GML linearring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/LinearRing-js.html#OpenLayers.Geometry.LinearRing" class=LClass id [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.linearring"></a>buildGeometry.<wbr>linearring</h3><div class=CBody><p>Given an OpenLayers linearring geometry, create a GML linearring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/LinearRing-js.html#OpenLayers.Geometry.LinearRing" class=LClass id [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.polygon"></a>buildGeometry.<wbr>polygon</h3><div class=CBody><p>Given an OpenLayers polygon geometry, create a GML polygon.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link25 onMouseOve [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.polygon"></a>buildGeometry.<wbr>polygon</h3><div class=CBody><p>Given an OpenLayers polygon geometry, create a GML polygon.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link24 onMouseOve [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.multipolygon"></a>buildGeometry.<wbr>multipolygon</h3><div class=CBody><p>Given an OpenLayers multipolygon geometry, create a GML multipolygon.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/MultiPolygon-js.html#OpenLayers.Geometry.MultiPolygon" cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.multipolygon"></a>buildGeometry.<wbr>multipolygon</h3><div class=CBody><p>Given an OpenLayers multipolygon geometry, create a GML multipolygon.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/MultiPolygon-js.html#OpenLayers.Geometry.MultiPolygon" cla [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildGeometry.bounds"></a>buildGeometry.<wbr>bounds</h3><div class=CBody><p>Given an OpenLayers bounds, create a GML box.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>bounds</td><td class=CDLDescription>{<OpenLayers.Geometry.Bounds>} A bounds object.</td></tr></table><h4 class=CHeading>Returns</h4><p>{DOMElement}  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildCoordinates"></a>buildCoordinates</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinatesNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.buildCoordinates"></a>buildCoordinates</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinatesNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 </div><!--Content-->
 
@@ -93,15 +93,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string, and return a list of features.</div></div><div class=CToolTip id= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read data from a string, and return a list of features.</div></div><div class=CToolTip id= [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GML/Base-js.html b/doc/devdocs/files/OpenLayers/Format/GML/Base-js.html
index 84d309d..2d49312 100644
--- a/doc/devdocs/files/OpenLayers/Format/GML/Base-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GML/Base-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h1><div class=CBody><p>Superclass for GML parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt8', 'link9')" onMouseOut="HideTip('tt8')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class= [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h1><div class=CBody><p>Superclass for GML parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.Properties"></a>Properties</h3></div></div>
 
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.featureNS"></a>featureNS</h3><div class=CBody><p>{String} The feature namespace.   Must be set in the options at construction.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.geometry"></a>geometry</h3><div class=CBody><p>{String} Name of geometry element.   Defaults to “geometry”.  If null, it will be set on <a href="#OpenLayers.Format.GML.Base.read" class=LFunction id=link10 onMouseOver="ShowTip(event, 'tt3', 'link10')" onMouseOut="HideTip('tt3')">read</a> when the first geometry is parsed.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.geometry"></a>geometry</h3><div class=CBody><p>{String} Name of geometry element.   Defaults to “geometry”.  If null, it will be set on <a href="#OpenLayers.Format.GML.Base.read" class=LFunction id=link9 onMouseOver="ShowTip(event, 'tt3', 'link9')" onMouseOut="HideTip('tt3')">read</a> when the first geometry is parsed.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract attributes from GML.   Default is true.</p></div></div></div>
 
@@ -33,31 +33,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.xy"></a>xy</h3><div class=CBody><p>{Boolean} Order of the GML coordinate true:(x,y) or false:(y,x) Changing is not recommended, a new Format should be instantiated.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.geometryTypes"></a>geometryTypes</h3><div class=CBody><p>{Object} Maps OpenLayers geometry class names to GML element names.  Use <a href="#OpenLayers.Format.GML.Base.setGeometryTypes" class=LFunction id=link11 onMouseOver="ShowTip(event, 'tt6', 'link11')" onMouseOut="HideTip('tt6')">setGeometryTypes</a> before accessing this property.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.geometryTypes"></a>geometryTypes</h3><div class=CBody><p>{Object} Maps OpenLayers geometry class names to GML element names.  Use <a href="#OpenLayers.Format.GML.Base.setGeometryTypes" class=LFunction id=link10 onMouseOver="ShowTip(event, 'tt6', 'link10')" onMouseOut="HideTip('tt6')">setGeometryTypes</a> before accessing this property.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.singleFeatureType"></a>singleFeatureType</h3><div class=CBody><p>{Boolean} True if there is only 1 featureType, and not an array of featuretypes.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.autoConfig"></a>autoConfig</h3><div class=CBody><p>{Boolean} Indicates if the format was configured without a <a href="#OpenLayers.Format.GML.Base.featureNS" class=LProperty id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">featureNS</a>, but auto-configured <a href="#OpenLayers.Format.GML.Base.featureNS" class=LProperty id=link13 onMouseOver="ShowTip(event, 'tt [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.autoConfig"></a>autoConfig</h3><div class=CBody><p>{Boolean} Indicates if the format was configured without a <a href="#OpenLayers.Format.GML.Base.featureNS" class=LProperty id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">featureNS</a>, but auto-configured <a href="#OpenLayers.Format.GML.Base.featureNS" class=LProperty id=link12 onMouseOver="ShowTip(event, 'tt [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.regExes"></a>regExes</h3><div class=CBody><p>Compiled regular expressions for manipulating strings.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v2-js.html#OpenLayers.Format.GML.v2" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt9', 'link17')" onMouseOut="HideTip('tt9')">OpenLayers.Format.GML.v2</a> or <a href="v3-js.html#OpenLayers.Format.GML.v3" class=LClass id= [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.OpenLayers.Format.GML.Base"></a>OpenLayers.<wbr>Format.<wbr>GML.Base</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v2-js.html#OpenLayers.Format.GML.v2" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt8', 'link16')" onMouseOut="HideTip('tt8')">OpenLayers.Format.GML.v2</a> or <a href="v3-js.html#OpenLayers.Format.GML.v3" class=LClass id= [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.readNode"></a>readNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readNode: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td cla [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.writers"></a>writers</h3><div class=CBody><p>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.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.setGeometryTypes"></a>setGeometryTypes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setGeometryTypes: function()</td></tr></table></blockquote><p>Sets the <a href="#OpenLayers.Format.GML.Base.geometryTypes" class=LProperty id=link21 onMouseOver="ShowTip(event, 'tt7', 'link21')" onMouseOut="HideTip('tt7')">geometryTypes [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GML.Base.setGeometryTypes"></a>setGeometryTypes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setGeometryTypes: function()</td></tr></table></blockquote><p>Sets the <a href="#OpenLayers.Format.GML.Base.geometryTypes" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt7', 'link20')" onMouseOut="HideTip('tt7')">geometryTypes [...]
 
 </div><!--Content-->
 
@@ -65,15 +65,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>{String} The feature namespace. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Array(String) or String} The local (without prefix) feature typeName(s).</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PP [...]
+<div class=CToolTip id="tt1"><div class=CProperty>{String} The feature namespace. </div></div><div class=CToolTip id="tt2"><div class=CProperty>{Array(String) or String} The local (without prefix) feature typeName(s).</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PP [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GML/v2-js.html b/doc/devdocs/files/OpenLayers/Format/GML/v2-js.html
index bd2919d..375dca4 100644
--- a/doc/devdocs/files/OpenLayers/Format/GML/v2-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GML/v2-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GML/v3-js.html b/doc/devdocs/files/OpenLayers/Format/GML/v3-js.html
index e630f72..39f2e64 100644
--- a/doc/devdocs/files/OpenLayers/Format/GML/v3-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GML/v3-js.html
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([6, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([7, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GPX-js.html b/doc/devdocs/files/OpenLayers/Format/GPX-js.html
index b77fe70..9c17d13 100644
--- a/doc/devdocs/files/OpenLayers/Format/GPX-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GPX-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GPX"></a>OpenLayers.<wbr>Format.GPX</h1><div class=CBody><p>Read/write GPX parser.  Create a new instance with the <a href="#OpenLayers.Format.GPX.OpenLayers.Format.GPX" class=LConstructor id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.GPX</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.ht [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GPX"></a>OpenLayers.<wbr>Format.GPX</h1><div class=CBody><p>Read/write GPX parser.  Create a new instance with the <a href="#OpenLayers.Format.GPX.OpenLayers.Format.GPX" class=LConstructor id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">OpenLayers.Format.GPX</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../.. [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.defaultDesc"></a>defaultDesc</h3><div class=CBody><p>{String} Default description for the waypoints/tracks in the case where the feature has no “description” attribute.  Default is “No description available”.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractWaypoints"></a>extractWaypoints</h3><div class=CBody><p>{Boolean} Extract waypoints from GPX.  (default: true)</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractTracks"></a>extractTracks</h3><div class=CBody><p>{Boolean} Extract tracks from GPX.  (default: true)</p></div></div></div>
@@ -23,33 +25,53 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract feature attributes from GPX.  (default: true) NOTE: Attributes as part of extensions to the GPX standard may not be extracted.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.namespaces"></a>namespaces</h3><div class=CBody><p>{Object} Mapping of namespace aliases to namespace URIs.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.schemaLocation"></a>schemaLocation</h3><div class=CBody><p>{String} Schema location.  Defaults to “<a href="http://www.topografix.com/GPX/1/1" class=LURL target=_top>http://www.topografix.com/GPX/1/1</a> <a href="http://www.topografix.com/GPX/1/1/gpx.xsd" class=LURL target=_top>http://www.topografix.com/GPX/1/1/gpx.xsd</a>”</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.creator"></a>creator</h3><div class=CBody><p>{String} The creator attribute to be added to the written GPX files.  Defaults to “OpenLayers”</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.OpenLayers.Format.GPX"></a>OpenLayers.<wbr>Format.GPX</h3><div class=CBody><p>Create a new parser for GPX.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose properties will be set on this instance.</td></tr></table></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a list [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a list [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractSegment"></a>extractSegment</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extractSegment: function(</td><td class="PParameter  prettyprint " nowrap>segment,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>segmentType</td><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.extractSegment"></a>extractSegment</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extractSegment: function(</td><td class="PParameter  prettyprint " nowrap>segment,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>segmentType</td><t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.parseAttributes"></a>parseAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseAttributes: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>metadata</td><td class="PAfterParameters  pr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.buildMetadataNode"></a>buildMetadataNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildMetadataNode: function(</td><td class="PParameter  prettyprint " nowrap>metadata</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.buildFeatureNode"></a>buildFeatureNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildFeatureNode: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.buildTrkSegNode"></a>buildTrkSegNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildTrkSegNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.buildTrkPtNode"></a>buildTrkPtNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildTrkPtNode: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.buildWptNode"></a>buildWptNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildWptNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GPX.appendAttributesNode"></a>appendAttributesNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>appendAttributesNode: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>fea [...]
+
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a list of features from a GPX doc</div></div><div class=CToolTip id="tt2"><div class [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a list of features from a GPX doc</div></div><div class=CToolTip id="tt2"><div class [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GeoJSON-js.html b/doc/devdocs/files/OpenLayers/Format/GeoJSON-js.html
index de78905..9818a8b 100644
--- a/doc/devdocs/files/OpenLayers/Format/GeoJSON-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GeoJSON-js.html
@@ -39,7 +39,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.parseCoords.point"></a>parseCoords.<wbr>point</h3><div class=CBody><p>Convert a coordinate array from GeoJSON into an <a href="../Geometry-js.html#OpenLayers.Geometry" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt6', 'link25')" onMouseOut="HideTip('tt6')">OpenLayers.Geometry</a>.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.parseCoords.multipoint"></a>parseCoords.<wbr>multipoint</h3><div class=CBody><p>Convert a coordinate array from GeoJSON into an <a href="../Geometry-js.html#OpenLayers.Geometry" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt6', 'link27')" onMouseOut="HideTip('tt6')">OpenLayers.Geometry</a>.</p><h4 class=CHeading>Parameters</h4><p>array {Object} The coordinates array from the GeoJSON fragm [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.parseCoords.multipoint"></a>parseCoords.<wbr>multipoint</h3><div class=CBody><p>Convert a coordinate array from GeoJSON into an <a href="../Geometry-js.html#OpenLayers.Geometry" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt6', 'link27')" onMouseOut="HideTip('tt6')">OpenLayers.Geometry</a>.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescription [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.parseCoords.linestring"></a>parseCoords.<wbr>linestring</h3><div class=CBody><p>Convert a coordinate array from GeoJSON into an <a href="../Geometry-js.html#OpenLayers.Geometry" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt6', 'link29')" onMouseOut="HideTip('tt6')">OpenLayers.Geometry</a>.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescription [...]
 
@@ -71,7 +71,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.extract.linestring"></a>extract.<wbr>linestring</h3><div class=CBody><p>Return an array of coordinate arrays from a linestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>linestring</td><td class=CDLDescription>{<a href="../Geometry/LineString-js.html#OpenLayers.Geometry.LineString" class=LClass id=link46 onMouseO [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.extract.multilinestring"></a>extract.<wbr>multilinestring</h3><div class=CBody><p>Return an array of linestring arrays from a linestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>linestring</td><td class=CDLDescription>{<a href="../Geometry/MultiLineString-js.html#OpenLayers.Geometry.MultiLineString" class=LClas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.extract.multilinestring"></a>extract.<wbr>multilinestring</h3><div class=CBody><p>Return an array of linestring arrays from a linestring.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>multilinestring</td><td class=CDLDescription>{<a href="../Geometry/MultiLineString-js.html#OpenLayers.Geometry.MultiLineString" class= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoJSON.extract.polygon"></a>extract.<wbr>polygon</h3><div class=CBody><p>Return an array of linear ring arrays from a polygon.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>polygon</td><td class=CDLDescription>{<a href="../Geometry/Polygon-js.html#OpenLayers.Geometry.Polygon" class=LClass id=link48 onMouseOver="ShowTip(even [...]
 
@@ -85,10 +85,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/GeoRSS-js.html b/doc/devdocs/files/OpenLayers/Format/GeoRSS-js.html
index ffc3cb1..3ad8212 100644
--- a/doc/devdocs/files/OpenLayers/Format/GeoRSS-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/GeoRSS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GeoRSS"></a>OpenLayers.<wbr>Format.<wbr>GeoRSS</h1><div class=CBody><p>Read/write GeoRSS parser.  Create a new instance with the <a href="#OpenLayers.Format.GeoRSS.OpenLayers.Format.GeoRSS" class=LConstructor id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Format.GeoRSS</a> constructor.</p><h4 class=CHeading>Inherits from</h4 [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.GeoRSS"></a>OpenLayers.<wbr>Format.<wbr>GeoRSS</h1><div class=CBody><p>Read/write GeoRSS parser.  Create a new instance with the <a href="#OpenLayers.Format.GeoRSS.OpenLayers.Format.GeoRSS" class=LConstructor id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Format.GeoRSS</a> constructor.</p><h4 class=CHeading>Inherits from</h4 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.Properties"></a>Properties</h3></div></div>
 
@@ -37,21 +37,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.createGeometryFromItem"></a>createGeometryFromItem</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createGeometryFromItem: function(</td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.createGeometryFromItem"></a>createGeometryFromItem</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createGeometryFromItem: function(</td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.createFeatureFromItem"></a>createFeatureFromItem</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureFromItem: function(</td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.createFeatureFromItem"></a>createFeatureFromItem</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureFromItem: function(</td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.getChildValue"></a>getChildValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getChildValue: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nsuri,</td></tr><tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS._getChildValue"></a>_getChildValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_getChildValue: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nsuri,</td></tr><t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a l [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a l [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ac [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ac [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.createFeatureXML"></a>createFeatureXML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureXML: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.createFeatureXML"></a>createFeatureXML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureXML: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.buildGeometryNode"></a>buildGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.buildGeometryNode"></a>buildGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.buildCoordinatesNode"></a>buildCoordinatesNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinatesNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.GeoRSS.buildCoordinatesNode"></a>buildCoordinatesNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinatesNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
 
 </div><!--Content-->
 
@@ -59,15 +59,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createGeometryFromItem: function(</td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a geometry from a GeoRSS Item.</div></div><div class=CToolTip id= [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createGeometryFromItem: function(</td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return a geometry from a GeoRSS Item.</div></div><div class=CToolTip id= [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/JSON-js.html b/doc/devdocs/files/OpenLayers/Format/JSON-js.html
index 0890338..537080f 100644
--- a/doc/devdocs/files/OpenLayers/Format/JSON-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/JSON-js.html
@@ -67,10 +67,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/KML-js.html b/doc/devdocs/files/OpenLayers/Format/KML-js.html
index 0ecff2d..9644bd4 100644
--- a/doc/devdocs/files/OpenLayers/Format/KML-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/KML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.KML"></a>OpenLayers.<wbr>Format.KML</h1><div class=CBody><p>Read/Write KML.  Create a new instance with the <a href="#OpenLayers.Format.KML.OpenLayers.Format.KML" class=LConstructor id=link25 onMouseOver="ShowTip(event, 'tt23', 'link25')" onMouseOut="HideTip('tt23')">OpenLayers.Format.KML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html# [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.KML"></a>OpenLayers.<wbr>Format.KML</h1><div class=CBody><p>Read/Write KML.  Create a new instance with the <a href="#OpenLayers.Format.KML.OpenLayers.Format.KML" class=LConstructor id=link26 onMouseOver="ShowTip(event, 'tt24', 'link26')" onMouseOut="HideTip('tt24')">OpenLayers.Format.KML</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprec [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.Properties"></a>Properties</h3></div></div>
 
@@ -25,7 +25,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.foldersDesc"></a>foldersDesc</h3><div class=CBody><p>{String} Description of the folders.  Default is “Exported on [date].”  If set to null, no description element will be created.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract attributes from KML.   Default is true.  Extracting styleUrls requires this to be set to true</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Extract attributes from KML.   Default is true.  Extracting styleUrls requires this to be set to true Note that currently only Data and SimpleData elements are handled.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.kvpAttributes"></a>kvpAttributes</h3><div class=CBody><p>{Boolean} Only used if extractAttributes is true.  If set to true, attributes will be simple key-value pairs, compatible with other formats, Any displayName elements will be ignored.  If set to false, attributes will be objects, retaining any displayName elements, but not compatible with other formats.  Any CDATA in displayName w [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.extractStyles"></a>extractStyles</h3><div class=CBody><p>{Boolean} Extract styles from KML.   Default is false.  Extracting styleUrls also requires extractAttributes to be set to true</p></div></div></div>
 
@@ -117,25 +119,27 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.buildGeometry.collection"></a>buildGeometry.<wbr>collection</h3><div class=CBody><p>Given an OpenLayers geometry collection, create a KML MultiGeometry.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry/Collection-js.html#OpenLayers.Geometry.Collection" class=LClass [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.buildCoordinatesNode"></a>buildCoordinatesNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinatesNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.buildCoordinatesNode"></a>buildCoordinatesNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinatesNode: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.buildCoordinates"></a>buildCoordinates</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildCoordinates: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.KML.buildExtendedData"></a>buildExtendedData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buildExtendedData: function(</td><td class="PParameter  prettyprint " nowrap>attributes</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} Extract gx:Track elements from Placemark elements. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
+<div class=CToolTip id="tt1"><div class=CProperty>{Boolean} Extract gx:Track elements from Placemark elements. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OGCExceptionReport-js.html b/doc/devdocs/files/OpenLayers/Format/OGCExceptionReport-js.html
index fdcc8f6..c625433 100644
--- a/doc/devdocs/files/OpenLayers/Format/OGCExceptionReport-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OGCExceptionReport-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OGCExceptionReport"></a>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport</h1><div class=CBody><p>Class to read exception reports for various OGC services and versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></l [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OGCExceptionReport"></a>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport</h1><div class=CBody><p>Class to read exception reports for various OGC services and versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OGCExceptionReport.Properties"></a>Properties</h3></div></div>
 
@@ -39,15 +39,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read OGC exception report data from a string, and return an object with information about  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read OGC exception report data from a string, and return an object with information about  [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OSM-js.html b/doc/devdocs/files/OpenLayers/Format/OSM-js.html
index 352a146..8753227 100644
--- a/doc/devdocs/files/OpenLayers/Format/OSM-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OSM-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OSM"></a>OpenLayers.<wbr>Format.OSM</h1><div class=CBody><p>OSM parser.  Create a new instance with the <a href="#OpenLayers.Format.OSM.OpenLayers.Format.OSM" class=LConstructor id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Format.OSM</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#Open [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OSM"></a>OpenLayers.<wbr>Format.OSM</h1><div class=CBody><p>OSM parser.  Create a new instance with the <a href="#OpenLayers.Format.OSM.OpenLayers.Format.OSM" class=LConstructor id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Format.OSM</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.Properties"></a>Properties</h3></div></div>
 
@@ -27,23 +27,23 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.getNodes"></a>getNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodes: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>R [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.getNodes"></a>getNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodes: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>R [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.getWays"></a>getWays</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getWays: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Retu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.getWays"></a>getWays</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getWays: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Retu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.getTags"></a>getTags</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTags: function(</td><td class="PParameter  prettyprint " nowrap>dom_node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>interesting_tags</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.getTags"></a>getTags</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTags: function(</td><td class="PParameter  prettyprint " nowrap>dom_node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>interesting_tags</td><td class="PAfter [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.isWayArea"></a>isWayArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isWayArea: function(</td><td class="PParameter  prettyprint " nowrap>way</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Takes [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Takes [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.createFeatureNodes"></a>createFeatureNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureNodes: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.createFeatureNodes"></a>createFeatureNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeatureNodes: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.createXML"></a>createXML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createXML:</td></tr></table></blockquote><p>Takes a feature, returns a list of nodes from size 0->n.  Will include all pieces of the serialization that are required which have not already been created.</p><h4 class=CHeading>Parameters</h4><table b [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.createXML"></a>createXML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createXML:</td></tr></table></blockquote><p>Takes a feature, returns a list of nodes from size 0->n.  Will include all pieces of the serialization that are required which have not already been created.</p><h4 class=CHeading>Parameters</h4><table b [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.serializeTags"></a>serializeTags</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>serializeTags: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.serializeTags"></a>serializeTags</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>serializeTags: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td><td class="P [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.setState"></a>setState</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setState: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OSM.setState"></a>setState</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setState: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters [...]
 
 </div><!--Content-->
 
@@ -51,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodes: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return the node items from a doc.</div></div><div class=CToolTip id="tt2"><div class=CF [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodes: function(</td><td class="PParameter  prettyprint " nowrap>doc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return the node items from a doc.</div></div><div class=CToolTip id="tt2"><div class=CF [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OWSCommon-js.html b/doc/devdocs/files/OpenLayers/Format/OWSCommon-js.html
index fcefb4b..b8f45a6 100644
--- a/doc/devdocs/files/OpenLayers/Format/OWSCommon-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OWSCommon-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1-js.html b/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1-js.html
index e010ae4..ce5d797 100644
--- a/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.v1</h1><div class=CBody><p>Common readers and writers for OWSCommon v1.X formats</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Format.OWSCommon.v1" >OpenLayers.<wb [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.v1</h1><div class=CBody><p>Common readers and writers for OWSCommon v1.X formats</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBo [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1.Properties_and_Functions"></a>Properties and Functions</h3></div></div>
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([13, 14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html
index 7f26275..7c7f873 100644
--- a/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_0_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_0_0</h1><div class=CBody><p>Parser for OWS Common version 1.0.0.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Format.OWSCommon.v1_0_0" >OpenLayers.<wb [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_0_0</h1><div class=CBody><p>Parser for OWS Common version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="v1-js.html#OpenLayers.Format.OWSCommon.v1" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.OWSCommon.v1</a></li></ul><!--START [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_0_0.Properties"></a>Properties</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([13, 14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Common readers and writers for OWSCommon v1.X formats</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html
index b1bcebf..78a19d6 100644
--- a/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OWSCommon/v1_1_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_1_0</h1><div class=CBody><p>Parser for OWS Common version 1.1.0.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Format.OWSCommon.v1_1_0" >OpenLayers.<wb [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>OWSCommon.<wbr>v1_1_0</h1><div class=CBody><p>Parser for OWS Common version 1.1.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="v1-js.html#OpenLayers.Format.OWSCommon.v1" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.OWSCommon.v1</a></li></ul><!--START [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSCommon.v1_1_0.Properties"></a>Properties</h3></div></div>
 
@@ -27,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([13, 14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([9, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Common readers and writers for OWSCommon v1.X formats</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OWSContext-js.html b/doc/devdocs/files/OpenLayers/Format/OWSContext-js.html
index 052f5b4..538c55e 100644
--- a/doc/devdocs/files/OpenLayers/Format/OWSContext-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OWSContext-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext"></a>OpenLayers.<wbr>Format.<wbr>OWSContext</h1><div class=CBody><p>Read and write OWS Context documents.  OWS Context documents are a preliminary OGC (Open Geospatial Consortium) standard for storing the state of a web mapping application.  In a way it is the successor to Web Map Context (WMC), since it is more generic and more types of layers can be stored [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext"></a>OpenLayers.<wbr>Format.<wbr>OWSContext</h1><div class=CBody><p>Read and write OWS Context documents.  OWS Context documents are a preliminary OGC (Open Geospatial Consortium) standard for storing the state of a web mapping application.  In a way it is the successor to Web Map Context (WMC), since it is more generic and more types of layers can be stored [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.Properties"></a>Properties</h3></div></div>
 
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.getVersion"></a>getVersion</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVersion: function(</td><td class="PParameter  prettyprint " nowrap>root,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAf [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.toContext"></a>toContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>toContext: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.toContext"></a>toContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>toContext: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
 </div><!--Content-->
 
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVersion: function(</td><td class="PParameter  prettyprint " nowrap>root,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Returns t [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVersion: function(</td><td class="PParameter  prettyprint " nowrap>root,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Returns t [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html b/doc/devdocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html
index afc799b..262a14b 100644
--- a/doc/devdocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/OWSContext/v0_3_1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h1><div class=CBody><p>Read and write OWSContext version 0.3.1.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMM [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h1><div class=CBody><p>Read and write OWSContext version 0.3.1.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.Properties"></a>Properties</h3></div></div>
 
@@ -43,7 +43,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../OWSContext-js.html#OpenLayers.Format.OWSContext" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Format.OWSContext</a> constructor inst [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1"></a>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../OWSContext-js.html#OpenLayers.Format.OWSContext" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Format.OWSContext</a> constructor inst [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.Functions"></a>Functions</h3></div></div>
 
@@ -53,7 +53,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.processLayer"></a>processLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>processLayer: function(</td><td class="PParameter  prettyprint " nowrap>layerArray,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>layer</ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.processLayer"></a>processLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>processLayer: function(</td><td class="PParameter  prettyprint " nowrap>layerArray,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>layer</ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.OWSContext.v0_3_1.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPa [...]
 
@@ -69,15 +69,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setNestingPath : function(</td><td class="PParameter  prettyprint " nowrap>l</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the nestingPath property of the layer depending on the position of the layer i [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setNestingPath : function(</td><td class="PParameter  prettyprint " nowrap>l</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set the nestingPath property of the layer depending on the position of the layer i [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/QueryStringFilter-js.html b/doc/devdocs/files/OpenLayers/Format/QueryStringFilter-js.html
index bda96a2..91defee 100644
--- a/doc/devdocs/files/OpenLayers/Format/QueryStringFilter-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/QueryStringFilter-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SLD-js.html b/doc/devdocs/files/OpenLayers/Format/SLD-js.html
index 2eb381a..73c6387 100644
--- a/doc/devdocs/files/OpenLayers/Format/SLD-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SLD-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SLD"></a>OpenLayers.<wbr>Format.SLD</h1><div class=CBody><p>Read/Wite SLD.  Create a new instance with the <a href="#OpenLayers.Format.SLD" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.SLD</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML/VersionedOGC-js.html#OpenLayers.Format.XM [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SLD"></a>OpenLayers.<wbr>Format.SLD</h1><div class=CBody><p>Read/Wite SLD.  Create a new instance with the <a href="#OpenLayers.Format.SLD" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.SLD</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML/VersionedOGC-js.html#OpenLayers.Format.XM [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.profile"></a>profile</h3><div class=CBody><p>{String} If provided, use a custom profile.</p><h4 class=CHeading>Currently supported profiles</h4><ul><li>GeoServer - parses GeoServer vendor specific capabilities for SLD.</li></ul></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.defaultVersion"></a>defaultVersion</h3><div class=CBody><p>{String} Version number to assume if none found.   Default is “1.0.0”.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.stringifyOutput"></a>stringifyOutput</h3><div class=CBody><p>{Boolean} If true, write will return a string otherwise a DOMElement.  Default is true.</p></div></div></div>
@@ -33,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([7, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SLD/v1-js.html b/doc/devdocs/files/OpenLayers/Format/SLD/v1-js.html
index fc7e7df..16bdbd2 100644
--- a/doc/devdocs/files/OpenLayers/Format/SLD/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SLD/v1-js.html
@@ -41,9 +41,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.v1.getCssProperty"></a>getCssProperty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getCssProperty: function(</td><td class="PParameter  prettyprint " nowrap>sym</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.v1.getGraphicFormat"></a>getGraphicFormat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGraphicFormat: function(</td><td class="PParameter  prettyprint " nowrap>href</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.v1.getGraphicFormat"></a>getGraphicFormat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGraphicFormat: function(</td><td class="PParameter  prettyprint " nowrap>href</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.v1.defaultGraphicFormat"></a>defaultGraphicFormat</h3><div class=CBody><p>{String} If none other can be determined from <a href="#OpenLayers.Format.SLD.v1.getGraphicFormat" class=LFunction id=link12 onMouseOver="ShowTip(event, 'tt4', 'link12')" onMouseOut="HideTip('tt4')">getGraphicFormat</a>, this default will be returned.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.v1.defaultGraphicFormat"></a>defaultGraphicFormat</h3><div class=CBody><p>{String} If none other can be determined from <a href="#OpenLayers.Format.SLD.v1.getGraphicFormat" class=LFunction id=link13 onMouseOver="ShowTip(event, 'tt4', 'link13')" onMouseOut="HideTip('tt4')">getGraphicFormat</a>, this default will be returned.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD.v1.graphicFormats"></a>graphicFormats</h3><div class=CBody><p>{Object} Mapping of image mime-types to regular extensions matching well-known file extensions.</p></div></div></div>
 
@@ -57,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([7, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><di [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><di [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0-js.html
index 29aa117..aa10886 100644
--- a/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([7, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html b/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html
new file mode 100644
index 0000000..0988ac0
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Format/SLD/v1_0_0_GeoServer-js.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Format.SLD/v1_0_0_GeoServer - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad=" [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer"></a>OpenLayers.<wbr>Format.<wbr>SLD/<wbr>v1_0_0_GeoServer</h1><div class=CBody><p>Read and write SLD version 1.0.0 with GeoServer-specific enhanced options.  See <a href="http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-sld/src/main/resources/org/geotools/sld/bindings/StyledLayerDescriptor.xsd" class=LURL target=_top>http://svn.osgeo.org<w [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.version"></a>version</h3><div class=CBody><p>{String} The specific parser version.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.profile"></a>profile</h3><div class=CBody><p>{String} The specific profile</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.OpenLayers.Format.SLD.v1_0_0_GeoServer"></a>OpenLayers.<wbr>Format.<wbr>SLD.<wbr>v1_0_0_GeoServer</h3><div class=CBody><p>Create a new parser for GeoServer-enhanced SLD version 1.0.0.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose p [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.writers"></a>writers</h3><div class=CBody><p>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.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SLD/v1_0_0_GeoServer.addVendorOptions"></a>addVendorOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addVendorOptions: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([8, 15, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addVendorOptions: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>symbolizer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Format/SOSCapabilities-js.html b/doc/devdocs/files/OpenLayers/Format/SOSCapabilities-js.html
index e80a587..7ffd0c4 100644
--- a/doc/devdocs/files/OpenLayers/Format/SOSCapabilities-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SOSCapabilities-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html
index 382d346..06402e3 100644
--- a/doc/devdocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SOSCapabilities/v1_0_0-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html b/doc/devdocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html
index cf1f5ec..d99a157 100644
--- a/doc/devdocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SOSGetFeatureOfInterest-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest"></a>OpenLayers.<wbr>Format.<wbr>SOSGetFeatureOfInterest</h1><div class=CBody><p>Read and write SOS GetFeatureOfInterest.  This is used to get to the location of the features (stations).  The stations can have 1 or more sensors.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMo [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest"></a>OpenLayers.<wbr>Format.<wbr>SOSGetFeatureOfInterest</h1><div class=CBody><p>Read and write SOS GetFeatureOfInterest.  This is used to get to the location of the features (stations).  The stations can have 1 or more sensors.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.Constants"></a>Constants</h3></div></div>
 
@@ -33,7 +33,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetFeatureOfInterest.Properties"></a>Properties</h3></div></div>
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a GetFeatureOfInterest response and return an array of features</div></div><div clas [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a GetFeatureOfInterest response and return an array of features</div></div><div clas [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/SOSGetObservation-js.html b/doc/devdocs/files/OpenLayers/Format/SOSGetObservation-js.html
index 971a36d..4b59613 100644
--- a/doc/devdocs/files/OpenLayers/Format/SOSGetObservation-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/SOSGetObservation-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetObservation"></a>OpenLayers.<wbr>Format.<wbr>SOSGetObservation</h1><div class=CBody><p>Read and write SOS GetObersation (to get the actual values from a sensor) version 1.0.0</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Fo [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.SOSGetObservation"></a>OpenLayers.<wbr>Format.<wbr>SOSGetObservation</h1><div class=CBody><p>Read and write SOS GetObersation (to get the actual values from a sensor) version 1.0.0</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.SOSGetObservation.Properties"></a>Properties</h3></div></div>
 
@@ -51,15 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0  [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/Text-js.html b/doc/devdocs/files/OpenLayers/Format/Text-js.html
index 443cef8..a088aea 100644
--- a/doc/devdocs/files/OpenLayers/Format/Text-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/Text-js.html
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Text.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Text.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>text</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a li [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.Text.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>text</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Return a li [...]
 
 </div><!--Content-->
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WCSGetCoverage-js.html b/doc/devdocs/files/OpenLayers/Format/WCSGetCoverage-js.html
index 833c2c6..c218249 100644
--- a/doc/devdocs/files/OpenLayers/Format/WCSGetCoverage-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WCSGetCoverage-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WCSGetCoverage_version_1.1.0"></a>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.1.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div cla [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WCSGetCoverage_version_1.1.0"></a>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.1.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacin [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WCSGetCoverage_version_1.1.0.Properties"></a>Properties</h3></div></div>
 
@@ -45,15 +45,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CClass>Read and write XML. </div>< [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFS-js.html b/doc/devdocs/files/OpenLayers/Format/WFS-js.html
index f6926aa..8b33a58 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFS-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFS-js.html
@@ -11,15 +11,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFS"></a>OpenLayers.<wbr>Format.WFS</h1><div class=CBody><p>Read/Write WFS.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="GML-js.html#OpenLayers.Format.GML" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Format.GML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFS"></a>OpenLayers.<wbr>Format.WFS</h1><div class=CBody><p>Read/Write WFS.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="GML-js.html#OpenLayers.Format.GML" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Format.GML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.layer"></a>layer</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.layer"></a>layer</h3><div class=CBody><p>{<a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.wfsns"></a>wfsns</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.wfsns"></a>wfsns</h3><div class=CBody><p>{String}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.ogcns"></a>ogcns</h3></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.ogcns"></a>ogcns</h3><div class=CBody><p>{String}</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFS.Constructor"></a>Constructor</h3></div></div>
 
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities-js.html b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities-js.html
index 47d9a25..590d239 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html
index 3823ffb..eeb3f55 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1-js.html
@@ -11,7 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Format.XML</a></li></ul><!--START_ND_ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div cla [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.namespaces"></a>namespaces</h3><div class=CBody><p>{Object} Mapping of namespace aliases to namespace URIs.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.defaultPrefix"></a>defaultPrefix</h3></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.Constructor"></a>Constructor</h3></div></div>
 
@@ -21,17 +27,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.runChildNodes"></a>runChildNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>runChildNodes: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.read_cap_FeatureTypeList"></a>read_cap_FeatureTypeList</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_FeatureTypeList: function(</td><td class="PParameter  prettyprint " nowrap>request,</td></tr><tr><td></td><td class="PParam [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.read_cap_FeatureType"></a>read_cap_FeatureType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_FeatureType: function(</td><td class="PParameter  prettyprint " nowrap>featureTypeList,</td></tr><tr><td></td><td class="PParameter [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.read_cap_Name"></a>read_cap_Name</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Name: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.read_cap_Title"></a>read_cap_Title</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Title: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</t [...]
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.Properties"></a>Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.read_cap_Abstract"></a>read_cap_Abstract</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Abstract: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities.v1.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
 </div><!--Content-->
 
@@ -39,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><div class=C [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><!--END_ND_T [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html
index 597fb42..4474f54 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_0_0-js.html
@@ -11,41 +11,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities/<wbr>v1_0_0</h1><div class=CBody><p>Read WFS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../WFSCapabilities-js.html#OpenLayers.Format.WFSCapabilities" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">OpenLayers.Format. [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities/<wbr>v1_0_0</h1><div class=CBody><p>Read WFS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="v1-js.html#OpenLayers.Format.WFSCapabilities.v1" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.WFSCapabilities.v [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.OpenLayers.Format.WFSCapabilities.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities.<wbr>v1_0_0</h3><div class=CBody><p>Create a new parser for WFS capabilities version 1.0.0.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose p [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.Functions"></a>Functions</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.Properties"></a>Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Service"></a>read_cap_Service</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Service: function(</td><td class="PParameter  prettyprint " nowrap>capabilities,</td></tr><tr><td></td><td class="PParameter  prettypri [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Fees"></a>read_cap_Fees</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Fees: function(</td><td class="PParameter  prettyprint " nowrap>service,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>no [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_AccessConstraints"></a>read_cap_AccessConstraints</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_AccessConstraints: function(</td><td class="PParameter  prettyprint " nowrap>service,</td></tr><tr><td></td><td cla [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_OnlineResource"></a>read_cap_OnlineResource</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_OnlineResource: function(</td><td class="PParameter  prettyprint " nowrap>service,</td></tr><tr><td></td><td class="PPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Keywords"></a>read_cap_Keywords</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Keywords: function(</td><td class="PParameter  prettyprint " nowrap>service,</td></tr><tr><td></td><td class="PParameter  prettyprint [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Capability"></a>read_cap_Capability</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Capability: function(</td><td class="PParameter  prettyprint " nowrap>capabilities,</td></tr><tr><td></td><td class="PParameter   [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Request"></a>read_cap_Request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Request: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowr [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_GetFeature"></a>read_cap_GetFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_GetFeature: function(</td><td class="PParameter  prettyprint " nowrap>request,</td></tr><tr><td></td><td class="PParameter  prett [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_ResultFormat"></a>read_cap_ResultFormat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_ResultFormat: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  pre [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_DCPType"></a>read_cap_DCPType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_DCPType: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowr [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_HTTP"></a>read_cap_HTTP</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_HTTP: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Get"></a>read_cap_Get</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Get: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_Post"></a>read_cap_Post</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Post: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.read_cap_SRS"></a>read_cap_SRS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_SRS: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td> [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_0_0.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
 </div><!--Content-->
 
@@ -53,15 +27,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_Service: function(</td><td class="PParameter  prettyprint " nowrap>capabilities,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
+<div class=CToolTip id="tt1"><div class=CClass>Abstract class not to be instantiated directly.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html
index 62c6165..07191aa 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFSCapabilities/v1_1_0-js.html
@@ -11,15 +11,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities/<wbr>v1_1_0</h1><div class=CBody><p>Read WFS Capabilities version 1.1.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../WFSCapabilities-js.html#OpenLayers.Format.WFSCapabilities" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.WFSC [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities/<wbr>v1_1_0</h1><div class=CBody><p>Read WFS Capabilities version 1.1.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../WFSCapabilities-js.html#OpenLayers.Format.WFSCapabilities" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Format.WFSC [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.regExes"></a>regExes</h3><div class=CBody><p>Compiled regular expressions for manipulating strings.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.OpenLayers.Format.WFSCapabilities.v1_1_0"></a>OpenLayers.<wbr>Format.<wbr>WFSCapabilities.<wbr>v1_1_0</h3><div class=CBody><p>Create a new parser for WFS capabilities version 1.1.0.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose p [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.Functions"></a>Functions</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.Properties"></a>Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.read_cap_DefaultSRS"></a>read_cap_DefaultSRS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_DefaultSRS: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettypri [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSCapabilities/v1_1_0.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
 </div><!--Content-->
 
@@ -27,15 +31,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([8, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([10, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_cap_DefaultSRS: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></di [...]
+<div class=CToolTip id="tt1"><div class=CClass>Read WFS Capabilities.</div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html b/doc/devdocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html
index baa6040..be624b6 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFSDescribeFeatureType-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSDescribeFeatureType.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></sc [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Format.WFSDescribeFeatureType - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad() [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,25 +11,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="WFSDescribeFeatureType.js"></a>WFSDescribeFeatureType.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#WFSDescribeFeatureType.js" >WFSDescribeFeatureType.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEnt [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType"></a>OpenLayers.<wbr>Format.<wbr>WFSDescribeFeatureType</h1><div class=CBody><p>Read WFS DescribeFeatureType response</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SB [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="namespaces"></a>namespaces</h3><div class=CBody><p>{Object} Mapping of namespace aliases to namespace URIs.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.namespaces"></a>namespaces</h3><div class=CBody><p>{Object} Mapping of namespace aliases to namespace URIs.</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constructor"></a>Constructor</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType"></a>OpenLayers.<wbr>Format.<wbr>WFSDescribeFeatureType</h3><div class=CBody><p>Create a new parser for WFS DescribeFeatureType responses.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose properties will be set on this instance.</td [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.OpenLayers.Format.WFSDescribeFeatureType"></a>OpenLayers.<wbr>Format.<wbr>WFSDescribeFeatureType</h3><div class=CBody><p>Create a new parser for WFS DescribeFeatureType responses.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An optional object whose pro [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="readRestriction"></a>readRestriction</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readRestriction: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  pre [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.readRestriction"></a>readRestriction</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readRestriction: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHeading>Parameters</h4><ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFSDescribeFeatureType.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 </div><!--Content-->
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFST-js.html b/doc/devdocs/files/OpenLayers/Format/WFST-js.html
index 44beace..21af31d 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFST-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFST-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body  [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="Cont [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFST/v1-js.html b/doc/devdocs/files/OpenLayers/Format/WFST/v1-js.html
index 800cf0f..1d932da 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFST/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFST/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h1><div class=CBody><p>Superclass for WFST parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=S [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h1><div class=CBody><p>Superclass for WFST parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.Properties"></a>Properties</h3></div></div>
 
@@ -33,7 +33,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v1_0_0-js.html#OpenLayers.Format.WFST.v1_0_0" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Format.WFST.v1_0_0</a> or <a href="v1_1_0-js.html#OpenLayers.Format.WFST.v1_1_0 [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.OpenLayers.Format.WFST.v1"></a>OpenLayers.<wbr>Format.<wbr>WFST.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="v1_0_0-js.html#OpenLayers.Format.WFST.v1_0_0" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Format.WFST.v1_0_0</a> or <a href="v1_1_0-js.html#OpenLayers.Format.WFST.v1_1_0 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
@@ -43,13 +43,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.writers"></a>writers</h3><div class=CBody><p>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.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.schemaLocationAttr"></a>schemaLocationAttr</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>schemaLocationAttr: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tab [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.setFilterProperty"></a>setFilterProperty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFilterProperty: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WFST.v1.setFilterProperty"></a>setFilterProperty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFilterProperty: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
 
 </div><!--Content-->
 
@@ -57,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSrsName: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div> [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSrsName: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div> [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFST/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/WFST/v1_0_0-js.html
index f34c656..e20ca42 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFST/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFST/v1_0_0-js.html
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WFST/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/WFST/v1_1_0-js.html
index 5b52eea..bf20d76 100644
--- a/doc/devdocs/files/OpenLayers/Format/WFST/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WFST/v1_1_0-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([9, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([11, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WKT-js.html b/doc/devdocs/files/OpenLayers/Format/WKT-js.html
index b5fdcca..ac950ad 100644
--- a/doc/devdocs/files/OpenLayers/Format/WKT-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WKT-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMC-js.html b/doc/devdocs/files/OpenLayers/Format/WMC-js.html
index 6a4b39e..45488f4 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMC-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMC-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC"></a>OpenLayers.<wbr>Format.WMC</h1><div class=CBody><p>Read and write Web Map Context documents.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STit [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC"></a>OpenLayers.<wbr>Format.WMC</h1><div class=CBody><p>Read and write Web Map Context documents.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Context-js.html#OpenLayers.Format.Context" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.Context</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><di [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.Properties"></a>Properties</h3></div></div>
 
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.layerToContext"></a>layerToContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>layerToContext: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.layerToContext"></a>layerToContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>layerToContext: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.toContext"></a>toContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>toContext: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>layerToContext: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a layer context object given a wms layer object.</div></div><div class=C [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>layerToContext: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a layer context object given a wms layer object.</div></div><div class=C [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMC/v1-js.html b/doc/devdocs/files/OpenLayers/Format/WMC/v1-js.html
index 55c2530..d76e1ef 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMC/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMC/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h1><div class=CBody><p>Superclass for WMC version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link75 onMouseOver="ShowTip(event, 'tt75', 'link75')" onMouseOut="HideTip('tt75')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h1><div class=CBody><p>Superclass for WMC version 1 parsers.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspa [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.Properties_and_Functions"></a>Properties and Functions</h3></div></div>
 
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.schemaLocation"></a>schemaLocation</h3><div class=CBody><p>{String} Schema location for a particular minor version.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.getNamespacePrefix"></a>getNamespacePrefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNamespacePrefix: function(</td><td class="PParameter  prettyprint " nowrap>uri</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.getNamespacePrefix"></a>getNamespacePrefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNamespacePrefix: function(</td><td class="PParameter  prettyprint " nowrap>uri</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.defaultPrefix"></a>defaultPrefix</h3></div></div>
 
@@ -31,7 +31,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../WMC-js.html#OpenLayers.Format.WMC" class=LClass id=link77 onMouseOver="ShowTip(event, 'tt76', 'link77')" onMouseOut="HideTip('tt76')">OpenLayers.Format.WMC</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.OpenLayers.Format.WMC.v1"></a>OpenLayers.<wbr>Format.<wbr>WMC.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../WMC-js.html#OpenLayers.Format.WMC" class=LClass id=link76 onMouseOver="ShowTip(event, 'tt75', 'link76')" onMouseOut="HideTip('tt75')">OpenLayers.Format.WMC</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.Functions"></a>Functions</h3></div></div>
 
@@ -163,17 +163,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_LayerExtension"></a>write_wmc_LayerExtension</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_LayerExtension: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.createOLPropertyNode"></a>createOLPropertyNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createOLPropertyNode: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>p [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.createOLPropertyNode"></a>createOLPropertyNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createOLPropertyNode: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>p [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_Server"></a>write_wmc_Server</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_Server: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_URLType"></a>write_wmc_URLType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_URLType: function(</td><td class="PParameter  prettyprint " nowrap>elName,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>url,</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_URLType"></a>write_wmc_URLType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_URLType: function(</td><td class="PParameter  prettyprint " nowrap>elName,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>url,</t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_DimensionList"></a>write_wmc_DimensionList</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_DimensionList: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_FormatList"></a>write_wmc_FormatList</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_FormatList: function(</td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_StyleList"></a>write_wmc_StyleList</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_StyleList: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_StyleList"></a>write_wmc_StyleList</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_StyleList: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tab [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMC.v1.write_wmc_OnlineResource"></a>write_wmc_OnlineResource</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write_wmc_OnlineResource: function(</td><td class="PParameter  prettyprint " nowrap>href</td><td class="PAfterParameters  prettyprint "nowrap>)< [...]
 
@@ -185,15 +185,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNamespacePrefix: function(</td><td class="PParameter  prettyprint " nowrap>uri</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Get the namespace prefix for a given uri from the namespaces object.</div></d [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNamespacePrefix: function(</td><td class="PParameter  prettyprint " nowrap>uri</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Get the namespace prefix for a given uri from the namespaces object.</div></d [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMC/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/WMC/v1_0_0-js.html
index e9a7457..fb70842 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMC/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMC/v1_0_0-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMC/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/WMC/v1_1_0-js.html
index ef138ff..1619752 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMC/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMC/v1_1_0-js.html
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([10, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([12, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities-js.html
index 114b58e..5fc7c93 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html
index 0bbd6ae..88b1e9b 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WMSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.  Creates the common parts for both WMS 1.1.X and WMS 1.3.X.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut= [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1"></a>OpenLayers.<wbr>Format.<wbr>WMSCapabilities.v1</h1><div class=CBody><p>Abstract class not to be instantiated directly.  Creates the common parts for both WMS 1.1.X and WMS 1.3.X.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUM [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.Properties"></a>Properties</h3></div></div>
 
@@ -27,10 +27,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.postProcessLayers"></a>postProcessLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>postProcessLayers: function(</td><td class="PParameter  prettyprint " nowrap>capabilities</td><td class="PAfterParameters  prettyprint "nowrap>)</ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.processLayer"></a>processLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>processLayer: function(</td><td class="PParameter  prettyprint " nowrap>capability,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>layer, [...]
-
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSCapabilities.v1.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
@@ -41,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><div class=C [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return a list of layers.</div></div><!--END_ND_T [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html
index 991137b..f07ca86 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html
index 0c71a61..06ac4f9 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_0-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html
index c2b592c..e009204 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html
index 7f6f2d5..3487a37 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html
index d009298..60aa525 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html
index bdb4a5a..5b41b3a 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSCapabilities/v1_3_0-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([11, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([13, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer-js.html b/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer-js.html
index da45f12..bd4d86b 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([12, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([14, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html b/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html
index 41a0564..ec99909 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSDescribeLayer/v1_1-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([12, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([14, 15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html b/doc/devdocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html
index f3250f9..9c8bf20 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMSGetFeatureInfo-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Format.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>Class to read GetFeatureInfo responses from Web Mapping Services</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Format.XML</a></li></ul>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo"></a>OpenLayers.<wbr>Format.<wbr>WMSGetFeatureInfo</h1><div class=CBody><p>Class to read GetFeatureInfo responses from Web Mapping Services</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.regExes"></a>regExes</h3><div class=CBody><p>Compiled regular expressions for manipulating strings.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.gmlFormat"></a>gmlFormat</h3><div class=CBody><p>{<a href="GML-js.html#OpenLayers.Format.GML" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Format.GML</a>} internal GML format for parsing geometries in msGMLOutput</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.gmlFormat"></a>gmlFormat</h3><div class=CBody><p>{<a href="GML-js.html#OpenLayers.Format.GML" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.Format.GML</a>} internal GML format for parsing geometries in msGMLOutput</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.Constructor"></a>Constructor</h3></div></div>
 
@@ -29,13 +29,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.read_msGMLOutput"></a>read_msGMLOutput</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_msGMLOutput: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ta [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.read_FeatureInfoResponse"></a>read_FeatureInfoResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read_FeatureInfoResponse: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.getSiblingNodesByTagCriteria"></a>getSiblingNodesByTagCriteria</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSiblingNodesByTagCriteria: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.getSiblingNodesByTagCriteria"></a>getSiblingNodesByTagCriteria</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSiblingNodesByTagCriteria: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WMSGetFeatureInfo.parseAttributes"></a>parseAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseAttributes: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
@@ -47,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Read/Wite GML. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read WMS GetFeat [...]
+<div class=CToolTip id="tt1"><div class=CClass>Read/Wite GML. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read WMS GetFeat [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities-js.html b/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities-js.html
index 8872b45..4657bd9 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html
index 4c9220a..5cad554 100644
--- a/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WMTSCapabilities/v1_0_0-js.html
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WPSCapabilities-js.html b/doc/devdocs/files/OpenLayers/Format/WPSCapabilities-js.html
index e020d5e..f589a7e 100644
--- a/doc/devdocs/files/OpenLayers/Format/WPSCapabilities-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WPSCapabilities-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html
index 4ec4e84..cc0fcb9 100644
--- a/doc/devdocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WPSCapabilities/v1_0_0-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSCapabilities.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WPSCapabilities.<wbr>v1_0_0</h1><div class=CBody><p>Read WPS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_N [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSCapabilities.v1_0_0"></a>OpenLayers.<wbr>Format.<wbr>WPSCapabilities.<wbr>v1_0_0</h1><div class=CBody><p>Read WPS Capabilities version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WPSCapabilities.v1_0_0.Properties"></a>Properties</h3></div></div>
 
@@ -37,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return info about the WPS.</div></div><div class [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Read capabilities data from a string, and return info about the WPS.</div></div><!--END_ND [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WPSDescribeProcess-js.html b/doc/devdocs/files/OpenLayers/Format/WPSDescribeProcess-js.html
index 66b4e97..58e3ab1 100644
--- a/doc/devdocs/files/OpenLayers/Format/WPSDescribeProcess-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WPSDescribeProcess-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSDescribeProcess"></a>OpenLayers.<wbr>Format.<wbr>WPSDescribeProcess</h1><div class=CBody><p>Read WPS DescribeProcess responses.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSDescribeProcess"></a>OpenLayers.<wbr>Format.<wbr>WPSDescribeProcess</h1><div class=CBody><p>Read WPS DescribeProcess responses.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tab [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WPSDescribeProcess.Constants"></a>Constants</h3></div></div>
 
@@ -45,15 +45,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a WPS DescribeProcess and return an object with its information.</div></div><div cla [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Parse a WPS DescribeProcess and return an object with its information.</div></div><!--END_ [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/WPSExecute-js.html b/doc/devdocs/files/OpenLayers/Format/WPSExecute-js.html
index 90d88dd..c619ce8 100644
--- a/doc/devdocs/files/OpenLayers/Format/WPSExecute-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/WPSExecute-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSExecute_version_1.0.0"></a>OpenLayers.<wbr>Format.<wbr>WPSExecute version 1.0.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="XML-js.html#OpenLayers.Format.XML" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.WPSExecute_version_1.0.0"></a>OpenLayers.<wbr>Format.<wbr>WPSExecute version 1.0.0</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cell [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.WPSExecute_version_1.0.0.Properties"></a>Properties</h3></div></div>
 
@@ -45,15 +45,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CClass>Read and write XML. </div>< [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/XLS-js.html b/doc/devdocs/files/OpenLayers/Format/XLS-js.html
index 53ca5ab..67ced2f 100644
--- a/doc/devdocs/files/OpenLayers/Format/XLS-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/XLS-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/XLS/v1-js.html b/doc/devdocs/files/OpenLayers/Format/XLS/v1-js.html
index c8d9bda..d0dba4d 100644
--- a/doc/devdocs/files/OpenLayers/Format/XLS/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/XLS/v1-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h1><div class=CBody><p>Superclass for XLS version 1 parsers.  Only supports GeocodeRequest for now.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.XML</a></li></ul><!- [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h1><div class=CBody><p>Superclass for XLS version 1 parsers.  Only supports GeocodeRequest for now.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</di [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.Properties"></a>Properties</h3></div></div>
 
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../XLS-js.html#OpenLayers.Format.XLS" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Format.XLS</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border=0 c [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.OpenLayers.Format.XLS.v1"></a>OpenLayers.<wbr>Format.<wbr>XLS.v1</h3><div class=CBody><p>Instances of this class are not created directly.   Use the <a href="../XLS-js.html#OpenLayers.Format.XLS" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">OpenLayers.Format.XLS</a> constructor instead.</p><h4 class=CHeading>Parameters</h4><table border=0 c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XLS.v1.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
@@ -45,15 +45,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><di [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>data,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><di [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/XLS/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Format/XLS/v1_1_0-js.html
index e8e0e6e..bd54195 100644
--- a/doc/devdocs/files/OpenLayers/Format/XLS/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/XLS/v1_1_0-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/XML-js.html b/doc/devdocs/files/OpenLayers/Format/XML-js.html
index 646d724..ccfdd57 100644
--- a/doc/devdocs/files/OpenLayers/Format/XML-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/XML-js.html
@@ -11,19 +11,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML"></a>OpenLayers.<wbr>Format.XML</h1><div class=CBody><p>Read and write XML.   For cross-browser XML generation, use methods on an instance of the XML format class instead of on <code>document<end>.  The DOM creation and traversing methods exposed here all mimic the W3C XML DOM methods.   Create a new parser with the <a href="#OpenLayers.Format.XML. [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML"></a>OpenLayers.<wbr>Format.XML</h1><div class=CBody><p>Read and write XML.   For cross-browser XML generation, use methods on an instance of the XML format class instead of on <code>document<end>.  The DOM creation and traversing methods exposed here all mimic the W3C XML DOM methods.   Create a new parser with the <a href="#OpenLayers.Format.XML. [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.namespaces"></a>namespaces</h3><div class=CBody><p>{Object} Mapping of namespace aliases to namespace URIs.   Properties of this object should not be set individually.   Read-only.   All XML subclasses should have their own namespaces object.   Use <a href="#OpenLayers.Format.XML.setNamespace" class=LFunction id=link28 onMouseOver="ShowTip(event, 'tt3', 'link28')" onMouseOut="Hide [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.namespaces"></a>namespaces</h3><div class=CBody><p>{Object} Mapping of namespace aliases to namespace URIs.   Properties of this object should not be set individually.   Read-only.   All XML subclasses should have their own namespaces object.   Use <a href="#OpenLayers.Format.XML.setNamespace" class=LFunction id=link27 onMouseOver="ShowTip(event, 'tt3', 'link27')" onMouseOut="Hide [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.namespaceAlias"></a>namespaceAlias</h3><div class=CBody><p>{Object} Mapping of namespace URI to namespace alias.   This object is read-only.   Use <a href="#OpenLayers.Format.XML.setNamespace" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt3', 'link29')" onMouseOut="HideTip('tt3')">setNamespace</a> to add or set a namespace alias.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.namespaceAlias"></a>namespaceAlias</h3><div class=CBody><p>{Object} Mapping of namespace URI to namespace alias.   This object is read-only.   Use <a href="#OpenLayers.Format.XML.setNamespace" class=LFunction id=link28 onMouseOver="ShowTip(event, 'tt3', 'link28')" onMouseOut="HideTip('tt3')">setNamespace</a> to add or set a namespace alias.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.defaultPrefix"></a>defaultPrefix</h3><div class=CBody><p>{String} The default namespace alias for creating element nodes.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.readers"></a>readers</h3><div class=CBody><p>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.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.writers"></a>writers</h3><div class=CBody><p>As a compliment to the <a href="#OpenLayers.Format.XML.readers" class=LProperty id=link30 onMouseOver="ShowTip(event, 'tt1', 'link30')" onMouseOut="HideTip('tt1')">readers</a> property, this structure contains public writing functions grouped by namespace alias and named like the node names they produce.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.writers"></a>writers</h3><div class=CBody><p>As a compliment to the <a href="#OpenLayers.Format.XML.readers" class=LProperty id=link29 onMouseOver="ShowTip(event, 'tt1', 'link29')" onMouseOut="HideTip('tt1')">readers</a> property, this structure contains public writing functions grouped by namespace alias and named like the node names they produce.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.xmldom"></a>xmldom</h3><div class=CBody><p>{XMLDom} If this browser uses ActiveX, this will be set to a XMLDOM object.   It is not intended to be a browser sniffing property.  Instead, the xmldom property is used instead of <code>document<end> where namespaced node creation methods are not supported.  In all other browsers, this remains null.</p></div></div></div>
 
@@ -51,8 +51,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.getChildValue"></a>getChildValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getChildValue: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>def</td><td class="PAfte [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.concatChildValues"></a>concatChildValues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>concatChildValues: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>def</td><td  [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.isSimpleContent"></a>isSimpleContent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isSimpleContent: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.contentType"></a>contentType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>contentType: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
@@ -61,7 +59,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.setAttributeNS"></a>setAttributeNS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setAttributeNS: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.createElementNSPlus"></a>createElementNSPlus</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createElementNSPlus: function(</td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>option [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.createElementNSPlus"></a>createElementNSPlus</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createElementNSPlus: function(</td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>option [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.setAttributes"></a>setAttributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setAttributes: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfte [...]
 
@@ -69,7 +67,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.readChildNodes"></a>readChildNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>readChildNodes: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PA [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.writeNode"></a>writeNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeNode: function(</td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.writeNode"></a>writeNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>writeNode: function(</td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.getChildEl"></a>getChildEl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getChildEl: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td c [...]
 
@@ -79,7 +77,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.lookupNamespaceURI"></a>lookupNamespaceURI</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>lookupNamespaceURI: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>prefix</t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.getXMLDoc"></a>getXMLDoc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getXMLDoc: function()</td></tr></table></blockquote><p>Get an XML document for nodes that are not supported in HTML (e.g. createCDATASection).  On IE, this will either return an existing or create a new <a href="#OpenLayers.Format.XML.xmldom" class=L [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.getXMLDoc"></a>getXMLDoc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getXMLDoc: function()</td></tr></table></blockquote><p>Get an XML document for nodes that are not supported in HTML (e.g. createCDATASection).  On IE, this will either return an existing or create a new <a href="#OpenLayers.Format.XML.xmldom" class=L [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.OpenLayers.Format.XML.lookupNamespaceURI"></a>OpenLayers.<wbr>Format.<wbr>XML.<wbr>lookupNamespaceURI</h3><div class=CBody><p>Takes a prefix and returns the namespace URI associated with it on the given node if found (and null if not).  Supplying null for the prefix will return the default namespace.</p><p>For browsers that support it, this calls the native lookupNamesapceURI function.   In [...]
 
@@ -93,15 +91,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>Contains public functions, grouped by namespace prefix, that will be applied when a namespaced node is found matching the function name. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table b [...]
+<div class=CToolTip id="tt1"><div class=CProperty>Contains public functions, grouped by namespace prefix, that will be applied when a namespaced node is found matching the function name. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table b [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Format/XML/VersionedOGC-js.html b/doc/devdocs/files/OpenLayers/Format/XML/VersionedOGC-js.html
index 7767a8a..e7912bd 100644
--- a/doc/devdocs/files/OpenLayers/Format/XML/VersionedOGC-js.html
+++ b/doc/devdocs/files/OpenLayers/Format/XML/VersionedOGC-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC"></a>OpenLayers.<wbr>Format.<wbr>XML.<wbr>VersionedOGC</h1><div class=CBody><p>Base class for versioned formats, i.e. a format which supports multiple versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../XML-js.html#OpenLayers.Format.XML" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Fo [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC"></a>OpenLayers.<wbr>Format.<wbr>XML.<wbr>VersionedOGC</h1><div class=CBody><p>Base class for versioned formats, i.e. a format which supports multiple versions.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../../deprecated-js.html#OpenLayers.Format.XML" class=LClass >OpenLayers.Format.XML</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC.Properties"></a>Properties</h3></div></div>
 
@@ -37,7 +37,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC.getVersion"></a>getVersion</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVersion: function(</td><td class="PParameter  prettyprint " nowrap>root,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC.getParser"></a>getParser</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getParser: function(</td><td class="PParameter  prettyprint " nowrap>version</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC.getParser"></a>getParser</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getParser: function(</td><td class="PParameter  prettyprint " nowrap>version</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.VersionedOGC.write"></a>write</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>write: function(</td><td class="PParameter  prettyprint " nowrap>obj,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParamet [...]
 
@@ -49,15 +49,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([14, 15, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([15, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVersion: function(</td><td class="PParameter  prettyprint " nowrap>root,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Returns t [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVersion: function(</td><td class="PParameter  prettyprint " nowrap>root,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Returns t [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry-js.html b/doc/devdocs/files/OpenLayers/Geometry-js.html
index 5623705..26a7d91 100644
--- a/doc/devdocs/files/OpenLayers/Geometry-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry-js.html
@@ -11,15 +11,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry"></a>OpenLayers.<wbr>Geometry</h1><div class=CBody><p>A Geometry is a description of a geographic object.   Create an instance of this class with the <a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor id=link19 onMouseOver="ShowTip(event, 'tt1', 'link19')" onMouseOut="HideTip('tt1')">OpenLayers.Geometry</a> constructor.   This is a base class, typi [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry"></a>OpenLayers.<wbr>Geometry</h1><div class=CBody><p>A Geometry is a description of a geographic object.   Create an instance of this class with the <a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Geometry</a> constructor.   This is a base class, typi [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.id"></a>id</h3><div class=CBody><p>{String} A unique identifier for this geometry.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.parent"></a>parent</h3><div class=CBody><p>{<a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Geometry</a>}This is set when a Geometry is added as component of another geometry</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.parent"></a>parent</h3><div class=CBody><p>{<a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor id=link22 onMouseOver="ShowTip(event, 'tt1', 'link22')" onMouseOut="HideTip('tt1')">OpenLayers.Geometry</a>}This is set when a Geometry is added as component of another geometry</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.bounds"></a>bounds</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt2', 'link21')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} The bounds of this geometry</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.bounds"></a>bounds</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt2', 'link23')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} The bounds of this geometry</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Constructor"></a>Constructor</h3></div></div>
 
@@ -29,33 +29,35 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy this geometry.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Create a clone of this geometry.   Does not set any non-standard properties of the cloned geometry.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor i [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Create a clone of this geometry.   Does not set any non-standard properties of the cloned geometry.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Geometry.OpenLayers.Geometry" class=LConstructor i [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.setBounds"></a>setBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setBounds: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.clearBounds"></a>clearBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clearBounds: function()</td></tr></table></blockquote><p>Nullify this components bounds and that of its parent as well.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.extendBounds"></a>extendBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extendBounds: function(</td><td class="PParameter  prettyprint " nowrap>newBounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.extendBounds"></a>extendBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extendBounds: function(</td><td class="PParameter  prettyprint " nowrap>newBounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getBounds"></a>getBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getBounds: function()</td></tr></table></blockquote><p>Get the bounds for this Geometry.  If bounds is not set, it is calculated again, this makes queries faster.</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getBounds"></a>getBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getBounds: function()</td></tr></table></blockquote><p>Get the bounds for this Geometry.  If bounds is not set, it is calculated again, this makes queries faster.</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.calculateBounds"></a>calculateBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote><p>Recalculate the bounds for the geometry.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPa [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPa [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getVertices"></a>getVertices</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getVertices: function(</td><td class="PParameter  prettyprint " nowrap>nodes</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.atPoint"></a>atPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>atPoint: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>toleranceLon,</td></tr><tr><td></td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.atPoint"></a>atPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>atPoint: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>toleranceLon,</td></tr><tr><td></td><td cl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote><p>Calculate the length of this geometry.  This method is defined in subclasses.</p><h4 class=CHeading>Returns</h4><p>{Float} The length of the collection by summing its parts</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote><p>Calculate the area of this geometry.  This method is defined in subclasses.</p><h4 class=CHeading>Returns</h4><p>{Float} The area of the collection by summing its parts</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getCentroid"></a>getCentroid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCentroid: function()</td></tr></table></blockquote><p>Calculate the centroid of this geometry.  This method is defined in subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass i [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.getCentroid"></a>getCentroid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCentroid: function()</td></tr></table></blockquote><p>Calculate the centroid of this geometry.  This method is defined in subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass i [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.toString"></a>toString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString: function()</td></tr></table></blockquote><p>Returns the Well-Known Text representation of a geometry</p><h4 class=CHeading>Returns</h4><p>{String} Well-Known Text</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.toString"></a>toString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">toString: function()</td></tr></table></blockquote><p>Returns a text representation of the geometry.   If the WKT format is included in a build, this will be the Well-Known Text representation.</p><h4 class=CHeading>Returns</h4><p>{String} String represe [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.OpenLayers.Geometry.fromWKT"></a>OpenLayers.<wbr>Geometry.<wbr>fromWKT</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Geometry.fromWKT = function(</td><td class="PParameter  prettyprint " nowrap>wkt</td><td class="PAfterParameters  prettypr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.OpenLayers.Geometry.fromWKT"></a>OpenLayers.<wbr>Geometry.<wbr>fromWKT</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Geometry.fromWKT = function(</td><td class="PParameter  prettyprint " nowrap>wkt</td><td class="PAfterParameters  prettypr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.OpenLayers.Geometry.segmentsIntersect"></a>OpenLayers.<wbr>Geometry.<wbr>segmentsIntersect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Geometry.segmentsIntersect = function(</td><td class="PParameter  prettyprint " nowrap>seg1,</td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.OpenLayers.Geometry.segmentsIntersect"></a>OpenLayers.<wbr>Geometry.<wbr>segmentsIntersect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Geometry.segmentsIntersect = function(</td><td class="PParameter  prettyprint " nowrap>seg1,</td></tr> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.OpenLayers.Geometry.distanceToSegment"></a>OpenLayers.<wbr>Geometry.<wbr>distanceToSegment</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Geometry.distanceToSegment = function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr [...]
 
@@ -65,15 +67,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CConstructor>Creates a geometry object.</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this geometry.</div></div><div class=CToolTip id="tt4"><div class=CFunction><block [...]
+<div class=CToolTip id="tt1"><div class=CConstructor>Creates a geometry object.</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this geometry.</div></div><div class=CToolTip id="tt4"><div class=CFunction><block [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/Collection-js.html b/doc/devdocs/files/OpenLayers/Geometry/Collection-js.html
index c832cc7..0c54d46 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/Collection-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/Collection-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry.Collection"></a>OpenLayers.<wbr>Geometry.<wbr>Collection</h1><div class=CBody><p>A Collection is exactly what it sounds like: A collection of different Geometries.  These are stored in the local parameter <a href="#OpenLayers.Geometry.Collection.components" class=LProperty id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">components</a> [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry.Collection"></a>OpenLayers.<wbr>Geometry.<wbr>Collection</h1><div class=CBody><p>A Collection is exactly what it sounds like: A collection of different Geometries.  These are stored in the local parameter <a href="#OpenLayers.Geometry.Collection.components" class=LProperty id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">components</a> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.Properties"></a>Properties</h3></div></div>
 
@@ -55,11 +55,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.rotate"></a>rotate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>rotate: function(</td><td class="PParameter  prettyprint " nowrap>angle,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.distanceTo"></a>distanceTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>distanceTo: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.equals"></a>equals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>equals: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Collection.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfte [...]
 
@@ -73,15 +73,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A Geometry is a description of a geographic object. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote>Destroy this geometry.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prett [...]
+<div class=CToolTip id="tt1"><div class=CClass>A Geometry is a description of a geographic object. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function ()</td></tr></table></blockquote>Destroy this geometry.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prett [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/Curve-js.html b/doc/devdocs/files/OpenLayers/Geometry/Curve-js.html
index b356942..6d838e8 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/Curve-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/Curve-js.html
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote>{Float} The length of the curve</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeodesicLeng [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote>{Float} The length of the curve</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeodesicLeng [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/LineString-js.html b/doc/devdocs/files/OpenLayers/Geometry/LineString-js.html
index 8b60a29..ea4e5f0 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/LineString-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/LineString-js.html
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/LinearRing-js.html b/doc/devdocs/files/OpenLayers/Geometry/LinearRing-js.html
index f68a4cc..bb498ac 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/LinearRing-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/LinearRing-js.html
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.addComponent"></a>addComponent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.addComponent"></a>addComponent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td cla [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.removeComponent"></a>removeComponent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeComponent: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
@@ -31,7 +31,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.rotate"></a>rotate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>rotate: function(</td><td class="PParameter  prettyprint " nowrap>angle,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td c [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.LinearRing.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transform: function(</td><td class="PParameter  prettyprint " nowrap>source,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dest</td><td class="PAfte [...]
 
@@ -53,15 +53,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds a p [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addComponent: function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>index</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds a p [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/MultiLineString-js.html b/doc/devdocs/files/OpenLayers/Geometry/MultiLineString-js.html
index aea8dab..4a17147 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/MultiLineString-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/MultiLineString-js.html
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.MultiLineString.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.MultiLineString.split"></a>split</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>split: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.MultiLineString.split"></a>split</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>split: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterP [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.MultiLineString.splitWith"></a>splitWith</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>splitWith: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/MultiPoint-js.html b/doc/devdocs/files/OpenLayers/Geometry/MultiPoint-js.html
index 4bd953c..92d5461 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/MultiPoint-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/MultiPoint-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/MultiPolygon-js.html b/doc/devdocs/files/OpenLayers/Geometry/MultiPolygon-js.html
index 69fb0b6..35fe928 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/MultiPolygon-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/MultiPolygon-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/Point-js.html b/doc/devdocs/files/OpenLayers/Geometry/Point-js.html
index 81bbc1c..a8ca52b 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/Point-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/Point-js.html
@@ -41,7 +41,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.getCentroid"></a>getCentroid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCentroid: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Geometry.Point.OpenLayers.Geometry.Point" class=LConstructor id=link20 onMouseOver="ShowTip(event, 'tt2', 'link20')" onMouseOut="HideTip( [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.resize"></a>resize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resize: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>origin,</td></tr><tr><td></td><td class= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Point.intersects"></a>intersects</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>intersects: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
 
@@ -55,15 +55,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>{OpenLayers.Geometry.Point} An exact clone of this OpenLayers.Geometry.Point</div></div><d [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>{OpenLayers.Geometry.Point} An exact clone of this OpenLayers.Geometry.Point</div></div><d [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/Polygon-js.html b/doc/devdocs/files/OpenLayers/Geometry/Polygon-js.html
index 63a7035..32e663e 100644
--- a/doc/devdocs/files/OpenLayers/Geometry/Polygon-js.html
+++ b/doc/devdocs/files/OpenLayers/Geometry/Polygon-js.html
@@ -41,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([16, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote>Calculated by subtracting the areas of the internal holes from the area of the outer hole.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td clas [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote>Calculated by subtracting the areas of the internal holes from the area of the outer hole.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td clas [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Geometry/Rectangle-js.html b/doc/devdocs/files/OpenLayers/Geometry/Rectangle-js.html
deleted file mode 100644
index c98c7bb..0000000
--- a/doc/devdocs/files/OpenLayers/Geometry/Rectangle-js.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Geometry.Rectangle - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h1><div class=CBody><p>This class is <b>not supported</b>, and probably isn’t what you’re looking for.  Instead, most users probably want something like:</p><blockquote><pre class="prettyprint">var poly = new OpenLayers.Bounds(0,0,10,10).toGeometry();</pre></blockquote><p>This will create a rectangular Po [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.x"></a>x</h3><div class=CBody><p>{Float}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.y"></a>y</h3><div class=CBody><p>{Float}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.width"></a>width</h3><div class=CBody><p>{Float}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.height"></a>height</h3><div class=CBody><p>{Float}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>points</td><td class=CDLDescription>{Array(<a href="Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut=" [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.calculateBounds"></a>calculateBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote><p>Recalculate the bounds for the geometry.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The length of the geometry</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The area of the geometry</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([16, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote>Recalculate the bounds for the geometry.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote>{Float} The length of the  [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Handler-js.html b/doc/devdocs/files/OpenLayers/Handler-js.html
index aaae27d..5ace64f 100644
--- a/doc/devdocs/files/OpenLayers/Handler-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler-js.html
@@ -72,10 +72,10 @@ handler.keyMask = OpenLayers.Handler.MOD_SHIFT |
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Box-js.html b/doc/devdocs/files/OpenLayers/Handler/Box-js.html
index 6949ca6..25de72d 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Box-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Box-js.html
@@ -51,10 +51,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Click-js.html b/doc/devdocs/files/OpenLayers/Handler/Click-js.html
index 17fd08a..62315be 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Click-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Click-js.html
@@ -93,10 +93,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Drag-js.html b/doc/devdocs/files/OpenLayers/Handler/Drag-js.html
index a3cf783..c46ecca 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Drag-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Drag-js.html
@@ -93,10 +93,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Feature-js.html b/doc/devdocs/files/OpenLayers/Handler/Feature-js.html
index a88256a..1fcd310 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Feature-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Feature-js.html
@@ -11,19 +11,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h1><div class=CBody><p>Handler to respond to mouse events related to a drawn feature.   Callbacks with the following keys will be notified of the following events associated with features: click, clickout, over, out, and dblclick.</p><p>This handler stops event propagation for mousedown and mouseup if those browser events  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h1><div class=CBody><p>Handler to respond to mouse events related to a drawn feature.   Callbacks with the following keys will be notified of the following events associated with features: click, clickout, over, out, and dblclick.</p><p>This handler stops event propagation for mousedown and mouseup if those browser events  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.EVENTMAP"></a>EVENTMAP</h3><div class=CBody><p>{Object} A object mapping the browser events to objects with callback keys for in and out.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.feature"></a>feature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt1', 'link19')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} The last feature that was hovered.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.feature"></a>feature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt1', 'link21')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} The last feature that was hovered.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.lastFeature"></a>lastFeature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} The last feature that was handled.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.lastFeature"></a>lastFeature</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt1', 'link22')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>} The last feature that was handled.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.down"></a>down</h3><div class=CBody><p>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt2', 'link21')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>} The location of the last mousedown.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.down"></a>down</h3><div class=CBody><p>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt2', 'link23')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>} The location of the last mousedown.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.up"></a>up</h3><div class=CBody><p>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt2', 'link22')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>} The location of the last mouseup.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.up"></a>up</h3><div class=CBody><p>{<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link24 onMouseOver="ShowTip(event, 'tt2', 'link24')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>} The location of the last mouseup.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.touch"></a>touch</h3><div class=CBody><p>{Boolean} When a touchstart event is fired, touch will be true and all mouse related listeners will do nothing.</p></div></div></div>
 
@@ -39,7 +39,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt17', 'link23')" onMouseOut="HideTip('tt17 [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.OpenLayers.Handler.Feature"></a>OpenLayers.<wbr>Handler.<wbr>Feature</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt19', 'link25')" onMouseOut="HideTip('tt19 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.Functions"></a>Functions</h3></div></div>
 
@@ -61,12 +61,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.handle"></a>handle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handle: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.triggerCallback"></a>triggerCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>triggerCallback: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>mode,</td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.triggerCallback"></a>triggerCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>triggerCallback: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>mode,</td></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Turn on the handler.   Returns false if the handler was already active.</p><h4 class=CHeading>Returns</h4><p>{Boolean}</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Turn off the handler.   Returns false if the handler was already active.</p><h4 class=CHeading>Returns</h4><p>{Boolean}</p></div></div></div>
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.handleMapEvents"></a>handleMapEvents</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleMapEvents: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.moveLayerToTop"></a>moveLayerToTop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">moveLayerToTop: function()</td></tr></table></blockquote><p>Moves the layer for this handler to the top, so mouse events can reach it.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Feature.moveLayerBack"></a>moveLayerBack</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">moveLayerBack: function()</td></tr></table></blockquote><p>Moves the layer back to the position determined by the map’s layers array.</p></div></div></div>
@@ -77,15 +79,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>to [...]
+<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>to [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Hover-js.html b/doc/devdocs/files/OpenLayers/Handler/Hover-js.html
index 6659970..0075b16 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Hover-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Hover-js.html
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Keyboard-js.html b/doc/devdocs/files/OpenLayers/Handler/Keyboard-js.html
index 7af7902..5ff7e57 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Keyboard-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Keyboard-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.handler.Keyboard"></a>OpenLayers.<wbr>handler.<wbr>Keyboard</h1><div class=CBody><p>A handler for keyboard events.   Create a new instance with the <a href="#OpenLayers.handler.Keyboard.OpenLayers.Handler.Keyboard" class=LConstructor id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Handler.Keyboard</a> constructor.</p><h4 class=CHeading> [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.handler.Keyboard"></a>OpenLayers.<wbr>handler.<wbr>Keyboard</h1><div class=CBody><p>A handler for keyboard events.   Create a new instance with the <a href="#OpenLayers.handler.Keyboard.OpenLayers.Handler.Keyboard" class=LConstructor id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Handler.Keyboard</a> constructor.</p><h4 class=CHeading> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.handler.Keyboard.Constants"></a>Constants</h3></div></div>
 
@@ -21,6 +21,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.handler.Keyboard.eventListener"></a>eventListener</h3><div class=CBody><p>{Function}</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.handler.Keyboard.observeElement"></a>observeElement</h3><div class=CBody><p>{DOMElement|String} The DOM element on which we listen for key events.  Default to the document.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.handler.Keyboard.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.handler.Keyboard.OpenLayers.Handler.Keyboard"></a>OpenLayers.<wbr>Handler.<wbr>Keyboard</h3><div class=CBody><p>Returns a new keyboard handler.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7 [...]
@@ -41,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/MouseWheel-js.html b/doc/devdocs/files/OpenLayers/Handler/MouseWheel-js.html
index 4d9747d..2f2c289 100644
--- a/doc/devdocs/files/OpenLayers/Handler/MouseWheel-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/MouseWheel-js.html
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Path-js.html b/doc/devdocs/files/OpenLayers/Handler/Path-js.html
index d4bac70..3ab23d4 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Path-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Path-js.html
@@ -17,7 +17,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.line"></a>line</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt1', 'link28')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.maxVertices"></a>maxVertices</h3><div class=CBody><p>{Number} The maximum number of vertices which can be drawn by this handler.  When the number of vertices reaches maxVertices, the geometry is automatically finalized.  This property doesn’t apply if freehand is set.  Default is null.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.maxVertices"></a>maxVertices</h3><div class=CBody><p>{Number} The maximum number of vertices which can be drawn by this handler.  When the number of vertices reaches maxVertices, the geometry is automatically finalized.  Default is null.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Path.doubleTouchTolerance"></a>doubleTouchTolerance</h3><div class=CBody><p>{Number} Maximum number of pixels between two touches for the gesture to be considered a “finalize feature” action.  Default is 20.</p></div></div></div>
 
@@ -87,10 +87,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Pinch-js.html b/doc/devdocs/files/OpenLayers/Handler/Pinch-js.html
index 3110dcf..5fd087b 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Pinch-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Pinch-js.html
@@ -51,10 +51,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Point-js.html b/doc/devdocs/files/OpenLayers/Handler/Point-js.html
index 93f11ad..8559f55 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Point-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Point-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Point"></a>OpenLayers.<wbr>Handler.<wbr>Point</h1><div class=CBody><p>Handler to draw a point on the map.  Point is displayed on activation, moves on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’, ‘cancel’, and ‘modify’.  The modify callback is called with each change in the sketch and will [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Point"></a>OpenLayers.<wbr>Handler.<wbr>Point</h1><div class=CBody><p>Handler to draw a point on the map.  Point is displayed on activation, moves on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’, ‘cancel’, and ‘modify’.  The modify callback is called with each change in the sketch and will [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.Properties"></a>Properties</h3></div></div>
 
@@ -21,6 +21,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.multi"></a>multi</h3><div class=CBody><p>{Boolean} Cast features to multi-part geometries before passing to the layer.   Default is false.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.citeCompliant"></a>citeCompliant</h3><div class=CBody><p>{Boolean} If set to true, coordinates of features drawn in a map extent crossing the date line won’t exceed the world bounds.  Default is false.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.mouseDown"></a>mouseDown</h3><div class=CBody><p>{Boolean} The mouse is down</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Point.stoppedDown"></a>stoppedDown</h3><div class=CBody><p>{Boolean} Indicate whether the last mousedown stopped the event propagation.</p></div></div></div>
@@ -101,10 +103,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/Polygon-js.html b/doc/devdocs/files/OpenLayers/Handler/Polygon-js.html
index 46a4534..dd2ae76 100644
--- a/doc/devdocs/files/OpenLayers/Handler/Polygon-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/Polygon-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Polygon"></a>OpenLayers.<wbr>Handler.<wbr>Polygon</h1><div class=CBody><p>Handler to draw a polygon on the map.   Polygon is displayed on mouse down, moves on mouse move, and is finished on mouse up.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Path-js.html#OpenLayers.Handler.Path" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.Polygon"></a>OpenLayers.<wbr>Handler.<wbr>Polygon</h1><div class=CBody><p>Handler to draw a polygon on the map.   Polygon is displayed on mouse down, moves on mouse move, and is finished on mouse up.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Path-js.html#OpenLayers.Handler.Path" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.Properties"></a>Properties</h3></div></div>
 
@@ -19,19 +19,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.drawingHole"></a>drawingHole</h3><div class=CBody><p>{Boolean} Currently drawing an interior ring.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.polygon"></a>polygon</h3><div class=CBody><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Feature.Vector</a>}</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.OpenLayers.Handler.Polygon"></a>OpenLayers.<wbr>Handler.<wbr>Polygon</h3><div class=CBody><p>Create a Polygon Handler.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt15', 'lin [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.OpenLayers.Handler.Polygon"></a>OpenLayers.<wbr>Handler.<wbr>Polygon</h3><div class=CBody><p>Create a Polygon Handler.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>control</td><td class=CDLDescription>{<a href="../Control-js.html#OpenLayers.Control" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt16', 'lin [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.createFeature"></a>createFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeature: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.createFeature"></a>createFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeature: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.addPoint"></a>addPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPoint: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.addPoint"></a>addPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPoint: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.getCurrentPointIndex"></a>getCurrentPointIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCurrentPointIndex: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Number} The index of the most recently drawn point.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.enforceTopology"></a>enforceTopology</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>enforceTopology: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.enforceTopology"></a>enforceTopology</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>enforceTopology: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.finishGeometry"></a>finishGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">finishGeometry: function()</td></tr></table></blockquote><p>Finish the geometry and send it back to the control.</p></div></div></div>
 
@@ -45,9 +47,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">drawFeature: function()</td></tr></table></blockquote><p>Render geometries on the temporary layer.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.getSketch"></a>getSketch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSketch: function()</td></tr></table></blockquote><p>Return the sketch feature.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt17', 'link19') [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.getSketch"></a>getSketch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSketch: function()</td></tr></table></blockquote><p>Return the sketch feature.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt1', 'link21')" [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.getGeometry"></a>getGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getGeometry: function()</td></tr></table></blockquote><p>Return the sketch geometry.   If <multi> is true, this will return a multi-part geometry.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Geometry/Polygon-js.html#OpenLayers.Ge [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.Polygon.getGeometry"></a>getGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getGeometry: function()</td></tr></table></blockquote><p>Return the sketch geometry.   If <multi> is true, this will return a multi-part geometry.</p><h4 class=CHeading>Returns</h4><p>{<a href="../Geometry/Polygon-js.html#OpenLayers.Ge [...]
 
 </div><!--Content-->
 
@@ -55,15 +57,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeature: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Add temporary geometries</div></div><div class=CToolTip id="tt2"><div class=CFun [...]
+<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createFeature: function(</td><td class="PParameter  prettyprint " nowrap>pixel</td><td class="PAfterParameters  prettyprint "n [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Handler/RegularPolygon-js.html b/doc/devdocs/files/OpenLayers/Handler/RegularPolygon-js.html
index aeee4a1..22e5495 100644
--- a/doc/devdocs/files/OpenLayers/Handler/RegularPolygon-js.html
+++ b/doc/devdocs/files/OpenLayers/Handler/RegularPolygon-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.RegularPolygon"></a>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</h1><div class=CBody><p>Handler to draw a regular polygon on the map.   Polygon is displayed on mouse down, moves or is modified on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’ and ‘cancel’.   Create a new instance with the <a href="#Open [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Handler.RegularPolygon"></a>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</h1><div class=CBody><p>Handler to draw a regular polygon on the map.   Polygon is displayed on mouse down, moves or is modified on mouse move, and is finished on mouse up.  The handler triggers callbacks for ‘done’ and ‘cancel’.   Create a new instance with the <a href="#Open [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.Properties"></a>Properties</h3></div></div>
 
@@ -29,6 +29,8 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.irregular"></a>irregular</h3><div class=CBody><p>{Boolean} Draw an irregular polygon instead of a regular polygon.  Default is false.   If true, the initial mouse down will represent one corner of the polygon bounds and with each mouse movement, the polygon will be stretched so the opposite corner of its bounds follows the mouse position.   This property takes precedence ov [...]
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.citeCompliant"></a>citeCompliant</h3><div class=CBody><p>{Boolean} If set to true, coordinates of features drawn in a map extent crossing the date line won’t exceed the world bounds.  Default is false.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.angle"></a>angle</h3><div class=CBody><p>{Float} The angle from the origin (mouse down) to the current mouse position, in radians.   This is measured counterclockwise from the positive x-axis.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.fixedRadius"></a>fixedRadius</h3><div class=CBody><p>{Boolean} The polygon has a fixed radius.   True if a radius is set before drawing begins.   False otherwise.</p></div></div></div>
@@ -47,9 +49,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.setOptions"></a>setOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOptions: function (</td><td class="PParameter  prettyprint " nowrap>newOptions</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Turn on the handler.</p><h4 class=CHeading>Return</h4><p>{Boolean} The handler was successfully activated</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Turn on the handler.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The handler was successfully activated</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Turn off the handler.</p><h4 class=CHeading>Return</h4><p>{Boolean} The handler was successfully deactivated</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Turn off the handler.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The handler was successfully deactivated</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Handler.RegularPolygon.down"></a>down</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>down: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>S [...]
 
@@ -79,10 +81,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([17, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([17, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Icon-js.html b/doc/devdocs/files/OpenLayers/Icon-js.html
index 417af7e..13cf41f 100644
--- a/doc/devdocs/files/OpenLayers/Icon-js.html
+++ b/doc/devdocs/files/OpenLayers/Icon-js.html
@@ -11,43 +11,43 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Icon"></a>OpenLayers.Icon</h1><div class=CBody><p>The icon represents a graphical icon on the screen.   Typically used in conjunction with a <a href="Marker-js.html#OpenLayers.Marker" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt14', 'link16')" onMouseOut="HideTip('tt14')">OpenLayers.Marker</a> to represent markers on a screen.</p><p>An icon has a url, size and position.& [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Icon"></a>OpenLayers.Icon</h1><div class=CBody><p>The icon represents a graphical icon on the screen.   Typically used in conjunction with a <a href="Marker-js.html#OpenLayers.Marker" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">OpenLayers.Marker</a> to represent markers on a screen.</p><p>An icon has a url, size and position.& [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.url"></a>url</h3><div class=CBody><p>{String}  image url</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.size"></a>size</h3><div class=CBody><p>{<OpenLayers.Size>|Object} An OpenLayers.Size or an object with a ‘w’ and ‘h’ properties.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.offset"></a>offset</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt2', 'link18')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>} distance in pixels to offset the image when being rendered</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.offset"></a>offset</h3><div class=CBody><p>{<OpenLayers.Pixel>|Object} distance in pixels to offset the image when being rendered.  An OpenLayers.Pixel or an object with a ‘x’ and ‘y’ properties.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.calculateOffset"></a>calculateOffset</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt2', 'link19')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>} Function to calculate the offset (based on the size)</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.calculateOffset"></a>calculateOffset</h3><div class=CBody><p>{Function} Function to calculate the offset (based on the size)</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.imageDiv"></a>imageDiv</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.px"></a>px</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt2', 'link20')" onMouseOut="HideTip('tt2')">OpenLayers.Pixel</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.px"></a>px</h3><div class=CBody><p>{<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an object with a ‘x’ and ‘y’ properties.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.OpenLayers.Icon"></a>OpenLayers.Icon</h3><div class=CBody><p>Creates an icon, which is an image tag in a div.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>size</td><td class=CDLDescription>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link21 onMouseOver="ShowTip(e [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.OpenLayers.Icon"></a>OpenLayers.Icon</h3><div class=CBody><p>Creates an icon, which is an image tag in a div.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>size</td><td class=CDLDescription>{<OpenLayers.Size>|Object} An OpenLayers.Size or an object with a ‘w’ and &ls [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Nullify references and remove event listeners to prevent circular references and memory leaks</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Icon.OpenLayers.Icon" class=LConstructor id=link23 onMouseOver="ShowTip(event, 'tt5', 'link23')" onMouseOut="HideTip('tt5')">OpenLayers.Icon</a>} A fresh copy of the [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Icon.OpenLayers.Icon" class=LConstructor id=link13 onMouseOver="ShowTip(event, 'tt3', 'link13')" onMouseOut="HideTip('tt3')">OpenLayers.Icon</a>} A fresh copy of the [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CH [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CH [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.setUrl"></a>setUrl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setUrl: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHeadi [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>draw: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Move the div to the  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>draw: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Move the div to the  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.erase"></a>erase</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">erase: function()</td></tr></table></blockquote><p>Erase the underlying image element.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>move icon to  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>move icon to  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Icon.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>display</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Hide o [...]
 
@@ -59,15 +59,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Nullify references and remove event listeners to preve [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Nullify references and remove event listeners to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></tabl [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Kinetic-js.html b/doc/devdocs/files/OpenLayers/Kinetic-js.html
index 0fea8a0..bd59219 100644
--- a/doc/devdocs/files/OpenLayers/Kinetic-js.html
+++ b/doc/devdocs/files/OpenLayers/Kinetic-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Kinetic.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPa [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Kinetic.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad= [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Kinetic.js"></a>Kinetic.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Kinetic.js" >Kinetic.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDesc [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Kinetic.js"></a>Kinetic.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Kinetic.js" >Kinetic.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDesc [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="threshold"></a>threshold</h3><div class=CBody><p>In most cases changing the threshold isn’t needed.  In px/ms, default to 0.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="interval"></a>interval</h3><div class=CBody><p>{Integer} Interval in milliseconds between 2 steps in the “kinetic dragging”.  Defaults to 10 milliseconds.</p></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="deceleration"></a>deceleration</h3><div class=CBody><p>{Float} the deseleration in px/ms², default to 0.0035.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="nbPoints"></a>nbPoints</h3><div class=CBody><p>{Integer} the number of points we use to calculate the kinetic initial values.</p></div></div></div>
@@ -49,10 +47,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang-js.html b/doc/devdocs/files/OpenLayers/Lang-js.html
index df1b270..766eceb 100644
--- a/doc/devdocs/files/OpenLayers/Lang-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang-js.html
@@ -21,9 +21,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.getCode"></a>getCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCode: function()</td></tr></table></blockquote><p>Get the current language code.</p><h4 class=CHeading>Returns</h4><p>The current language code.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.getCode"></a>getCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCode: function()</td></tr></table></blockquote><p>Get the current language code.</p><h4 class=CHeading>Returns</h4><p>{String} The current language code.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.setCode"></a>setCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCode: function(</td><td class="PParameter  prettyprint " nowrap>code</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set the l [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.setCode"></a>setCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCode: function(</td><td class="PParameter  prettyprint " nowrap>code</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set the l [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Lang.translate"></a>translate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>translate: function(</td><td class="PParameter  prettyprint " nowrap>key,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  pr [...]
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/ar-js.html b/doc/devdocs/files/OpenLayers/Lang/ar-js.html
index 69db88b..3a72a7c 100644
--- a/doc/devdocs/files/OpenLayers/Lang/ar-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/ar-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/be-tarask-js.html b/doc/devdocs/files/OpenLayers/Lang/be-tarask-js.html
index 781d522..9b5c217 100644
--- a/doc/devdocs/files/OpenLayers/Lang/be-tarask-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/be-tarask-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/bg-js.html b/doc/devdocs/files/OpenLayers/Lang/bg-js.html
index 523c343..bb06a9e 100644
--- a/doc/devdocs/files/OpenLayers/Lang/bg-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/bg-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/br-js.html b/doc/devdocs/files/OpenLayers/Lang/br-js.html
index 69f4ff0..0158a86 100644
--- a/doc/devdocs/files/OpenLayers/Lang/br-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/br-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/ca-js.html b/doc/devdocs/files/OpenLayers/Lang/ca-js.html
index b27f398..ebb32e8 100644
--- a/doc/devdocs/files/OpenLayers/Lang/ca-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/ca-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/cs-CZ-js.html b/doc/devdocs/files/OpenLayers/Lang/cs-CZ-js.html
index 064a956..4f0f673 100644
--- a/doc/devdocs/files/OpenLayers/Lang/cs-CZ-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/cs-CZ-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/da-DK-js.html b/doc/devdocs/files/OpenLayers/Lang/da-DK-js.html
index c17162b..25f8195 100644
--- a/doc/devdocs/files/OpenLayers/Lang/da-DK-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/da-DK-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/de-js.html b/doc/devdocs/files/OpenLayers/Lang/de-js.html
index 7d093b8..cb80a03 100644
--- a/doc/devdocs/files/OpenLayers/Lang/de-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/de-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/el-js.html b/doc/devdocs/files/OpenLayers/Lang/el-js.html
index ae07348..f951108 100644
--- a/doc/devdocs/files/OpenLayers/Lang/el-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/el-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/en-CA-js.html b/doc/devdocs/files/OpenLayers/Lang/en-CA-js.html
index 1b44a81..0c73bd7 100644
--- a/doc/devdocs/files/OpenLayers/Lang/en-CA-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/en-CA-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/en-js.html b/doc/devdocs/files/OpenLayers/Lang/en-js.html
index 8de9d98..4869976 100644
--- a/doc/devdocs/files/OpenLayers/Lang/en-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/en-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/es-js.html b/doc/devdocs/files/OpenLayers/Lang/es-js.html
index 9f0df6e..89ef111 100644
--- a/doc/devdocs/files/OpenLayers/Lang/es-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/es-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/fi-js.html b/doc/devdocs/files/OpenLayers/Lang/fi-js.html
index 9560671..3a7e42a 100644
--- a/doc/devdocs/files/OpenLayers/Lang/fi-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/fi-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/fr-js.html b/doc/devdocs/files/OpenLayers/Lang/fr-js.html
index 05444a9..16632bd 100644
--- a/doc/devdocs/files/OpenLayers/Lang/fr-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/fr-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/fur-js.html b/doc/devdocs/files/OpenLayers/Lang/fur-js.html
index 3a47ab8..d0b3cd2 100644
--- a/doc/devdocs/files/OpenLayers/Lang/fur-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/fur-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/gl-js.html b/doc/devdocs/files/OpenLayers/Lang/gl-js.html
index 77eb8ab..7f0096f 100644
--- a/doc/devdocs/files/OpenLayers/Lang/gl-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/gl-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/gsw-js.html b/doc/devdocs/files/OpenLayers/Lang/gsw-js.html
index e1a2ad3..80760c5 100644
--- a/doc/devdocs/files/OpenLayers/Lang/gsw-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/gsw-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/hr-js.html b/doc/devdocs/files/OpenLayers/Lang/hr-js.html
index 5094721..23735e2 100644
--- a/doc/devdocs/files/OpenLayers/Lang/hr-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/hr-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/hsb-js.html b/doc/devdocs/files/OpenLayers/Lang/hsb-js.html
index f7033be..8db6769 100644
--- a/doc/devdocs/files/OpenLayers/Lang/hsb-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/hsb-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/hu-js.html b/doc/devdocs/files/OpenLayers/Lang/hu-js.html
index ffe5e62..ef48478 100644
--- a/doc/devdocs/files/OpenLayers/Lang/hu-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/hu-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/ia-js.html b/doc/devdocs/files/OpenLayers/Lang/ia-js.html
index dfe7b82..c9e2c8f 100644
--- a/doc/devdocs/files/OpenLayers/Lang/ia-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/ia-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/id-js.html b/doc/devdocs/files/OpenLayers/Lang/id-js.html
index bdb75cf..6e3dd3c 100644
--- a/doc/devdocs/files/OpenLayers/Lang/id-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/id-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/io-js.html b/doc/devdocs/files/OpenLayers/Lang/io-js.html
index 081bf9b..a3c70bc 100644
--- a/doc/devdocs/files/OpenLayers/Lang/io-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/io-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/is-js.html b/doc/devdocs/files/OpenLayers/Lang/is-js.html
index 07e416d..90716c0 100644
--- a/doc/devdocs/files/OpenLayers/Lang/is-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/is-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/it-js.html b/doc/devdocs/files/OpenLayers/Lang/it-js.html
index 5cf5c14..4cbfd35 100644
--- a/doc/devdocs/files/OpenLayers/Lang/it-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/it-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/ja-js.html b/doc/devdocs/files/OpenLayers/Lang/ja-js.html
index 7062e06..b9d9240 100644
--- a/doc/devdocs/files/OpenLayers/Lang/ja-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/ja-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/km-js.html b/doc/devdocs/files/OpenLayers/Lang/km-js.html
index b909720..96bcc81 100644
--- a/doc/devdocs/files/OpenLayers/Lang/km-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/km-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/ksh-js.html b/doc/devdocs/files/OpenLayers/Lang/ksh-js.html
index 178a45b..caaf9a8 100644
--- a/doc/devdocs/files/OpenLayers/Lang/ksh-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/ksh-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/lt-js.html b/doc/devdocs/files/OpenLayers/Lang/lt-js.html
index 4b41f36..b43bcb4 100644
--- a/doc/devdocs/files/OpenLayers/Lang/lt-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/lt-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/nb-js.html b/doc/devdocs/files/OpenLayers/Lang/nb-js.html
index 59f8983..d49539d 100644
--- a/doc/devdocs/files/OpenLayers/Lang/nb-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/nb-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/nds-js.html b/doc/devdocs/files/OpenLayers/Lang/nds-js.html
index 96c9607..630fbfb 100644
--- a/doc/devdocs/files/OpenLayers/Lang/nds-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/nds-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/nl-js.html b/doc/devdocs/files/OpenLayers/Lang/nl-js.html
index 67bc79c..cff3b3e 100644
--- a/doc/devdocs/files/OpenLayers/Lang/nl-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/nl-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/nn-js.html b/doc/devdocs/files/OpenLayers/Lang/nn-js.html
index aeedd38..faa7d58 100644
--- a/doc/devdocs/files/OpenLayers/Lang/nn-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/nn-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/oc-js.html b/doc/devdocs/files/OpenLayers/Lang/oc-js.html
index fbc74de..c29136f 100644
--- a/doc/devdocs/files/OpenLayers/Lang/oc-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/oc-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/pl-js.html b/doc/devdocs/files/OpenLayers/Lang/pl-js.html
new file mode 100644
index 0000000..1161a12
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Lang/pl-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Lang[“pl”] - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();pretty [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Lang[pl]"></a>OpenLayers.<wbr>Lang[“pl”]</h1><div class=CBody><p>Dictionary for Polish.   Keys for entries are used in calls to <a href="../Lang-js.html#OpenLayers.Lang.translate" class=LFunction id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">OpenLayers.Lang.translate</a>.   Entry bodies are normal strings or strings formatted fo [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>translate: function(</td><td class="PParameter  prettyprint " nowrap>key,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Looks up a  [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Lang/pt-BR-js.html b/doc/devdocs/files/OpenLayers/Lang/pt-BR-js.html
index a5b176f..0fb410a 100644
--- a/doc/devdocs/files/OpenLayers/Lang/pt-BR-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/pt-BR-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/pt-js.html b/doc/devdocs/files/OpenLayers/Lang/pt-js.html
index c2bcb26..c37cd89 100644
--- a/doc/devdocs/files/OpenLayers/Lang/pt-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/pt-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/ru-js.html b/doc/devdocs/files/OpenLayers/Lang/ru-js.html
index 2a5a1c1..0b1f8f9 100644
--- a/doc/devdocs/files/OpenLayers/Lang/ru-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/ru-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/sk-js.html b/doc/devdocs/files/OpenLayers/Lang/sk-js.html
index ab827fc..ab7aaf5 100644
--- a/doc/devdocs/files/OpenLayers/Lang/sk-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/sk-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/sv-SE-js.html b/doc/devdocs/files/OpenLayers/Lang/sv-SE-js.html
index a1d303e..02ac6b9 100644
--- a/doc/devdocs/files/OpenLayers/Lang/sv-SE-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/sv-SE-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/te-js.html b/doc/devdocs/files/OpenLayers/Lang/te-js.html
index 72812f5..54834e2 100644
--- a/doc/devdocs/files/OpenLayers/Lang/te-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/te-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/vi-js.html b/doc/devdocs/files/OpenLayers/Lang/vi-js.html
index a9a8f97..aecadaa 100644
--- a/doc/devdocs/files/OpenLayers/Lang/vi-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/vi-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/zh-CN-js.html b/doc/devdocs/files/OpenLayers/Lang/zh-CN-js.html
index 789be35..f6eb487 100644
--- a/doc/devdocs/files/OpenLayers/Lang/zh-CN-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/zh-CN-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Lang/zh-TW-js.html b/doc/devdocs/files/OpenLayers/Lang/zh-TW-js.html
index aac35b2..db1dfcf 100644
--- a/doc/devdocs/files/OpenLayers/Lang/zh-TW-js.html
+++ b/doc/devdocs/files/OpenLayers/Lang/zh-TW-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([18, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([18, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer-js.html b/doc/devdocs/files/OpenLayers/Layer-js.html
index 66f90d9..e178339 100644
--- a/doc/devdocs/files/OpenLayers/Layer-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer"></a>OpenLayers.<wbr>Layer</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Layer" >OpenLayers.<wbr>Layer</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer"></a>OpenLayers.<wbr>Layer</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Layer" >OpenLayers.<wbr>Layer</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Properties"></a>Properties</h3></div></div>
 
@@ -21,21 +21,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.div"></a>div</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.opacity"></a>opacity</h3><div class=CBody><p>{Float} The layer’s opacity.  Float number between 0.0 and 1.0.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.opacity"></a>opacity</h3><div class=CBody><p>{Float} The layer’s opacity.  Float number between 0.0 and 1.0.  Default is 1.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.alwaysInRange"></a>alwaysInRange</h3><div class=CBody><p>{Boolean} If a layer’s display should not be scale-based, this should be set to true.  This will cause the layer, as an overlay, to always be ‘active’, by always returning true from the calculateInRange() function.</p><p>If not explicitly specified for a layer, its value will be determined on startup in initResolutions() based [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactly what  [...]
-
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.RESOLUTION_PROPERTIES"></a>RESOLUTION_PROPERTIES</h3><div class=CBody><p>{Array} The properties that are used for calculating resolutions information.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of  [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.map"></a>map</h3><div class=CBody><p>{<a href="Map-js.html#OpenLayers.Map" class=LClass id=link44 onMouseOver="ShowTip(event, 'tt1', 'link44')" onMouseOut="HideTip('tt1')">OpenLayers.Map</a>} This variable is set when the layer is added to the map, via the accessor function setMap().</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.map"></a>map</h3><div class=CBody><p>{<a href="Map-js.html#OpenLayers.Map" class=LClass id=link41 onMouseOver="ShowTip(event, 'tt1', 'link41')" onMouseOut="HideTip('tt1')">OpenLayers.Map</a>} This variable is set when the layer is added to the map, via the accessor function setMap().</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} Whether or not the layer is a base layer.  This should be set individually by all subclasses.  Default is false</p></div></div></div>
 
@@ -45,31 +43,29 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.visibility"></a>visibility</h3><div class=CBody><p>{Boolean} The layer should be displayed in the map.   Default is true.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.attribution"></a>attribution</h3><div class=CBody><p>{String} Attribution string, displayed when an <a href="Control/Attribution-js.html#OpenLayers.Control.Attribution" class=LClass id=link45 onMouseOver="ShowTip(event, 'tt2', 'link45')" onMouseOut="HideTip('tt2')">OpenLayers.Control.Attribution</a> has been added to the map.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.inRange"></a>inRange</h3><div class=CBody><p>{Boolean} The current map resolution is within the layer’s min/max range.  This is set in <a href="Map-js.html#OpenLayers.Map.setCenter" class=LFunction id=link46 onMouseOver="ShowTip(event, 'tt42', 'link46')" onMouseOut="HideTip('tt42')">OpenLayers.Map.setCenter</a> whenever the zoom changes.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.attribution"></a>attribution</h3><div class=CBody><p>{String} Attribution string, displayed when an <a href="Control/Attribution-js.html#OpenLayers.Control.Attribution" class=LClass id=link42 onMouseOver="ShowTip(event, 'tt2', 'link42')" onMouseOut="HideTip('tt2')">OpenLayers.Control.Attribution</a> has been added to the map.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.imageOffset"></a>imageOffset</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link47 onMouseOver="ShowTip(event, 'tt3', 'link47')" onMouseOut="HideTip('tt3')">OpenLayers.Pixel</a>} For layers with a gutter, the image offset represents displacement due to the gutter.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.inRange"></a>inRange</h3><div class=CBody><p>{Boolean} The current map resolution is within the layer’s min/max range.  This is set in <a href="Map-js.html#OpenLayers.Map.setCenter" class=LFunction id=link43 onMouseOver="ShowTip(event, 'tt41', 'link43')" onMouseOut="HideTip('tt41')">OpenLayers.Map.setCenter</a> whenever the zoom changes.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.options"></a>options</h3><div class=CBody><p>{Object} An optional object whose properties will be set on the layer.  Any of the layer properties can be set as a property of the options object and sent to the constructor when the layer is created.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link48 onMouseOver="ShowTip(event, 'tt4', 'link48')" onMouseOut="HideTip('tt4')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link44 onMouseOver="ShowTip(event, 'tt3', 'link44')" onMouseOut="HideTip('tt3')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.gutter"></a>gutter</h3><div class=CBody><p>{Integer} Determines the width (in pixels) of the gutter around image tiles to ignore.   By setting this property to a non-zero value, images will be requested that are wider and taller than the tile size by a value of 2 x gutter.   This allows artifacts of rendering at tile edges to be ignored.   Set a gutter value that is equal to half the size o [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.projection"></a>projection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link49 onMouseOver="ShowTip(event, 'tt5', 'link49')" onMouseOut="HideTip('tt5')">OpenLayers.Projection</a>} or {<a href="BaseTypes-js.html#OpenLayers.String" class=LClass id=link50 onMouseOver="ShowTip(event, 'tt6', 'link50')" onMouseOut="HideTip('tt6')">String</a>} Set in the layer optio [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.projection"></a>projection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link45 onMouseOver="ShowTip(event, 'tt4', 'link45')" onMouseOut="HideTip('tt4')">OpenLayers.Projection</a>} or {<a href="BaseTypes-js.html#OpenLayers.String" class=LClass id=link46 onMouseOver="ShowTip(event, 'tt5', 'link46')" onMouseOut="HideTip('tt5')">String</a>} Specifies the projecti [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.units"></a>units</h3><div class=CBody><p>{String} The layer map units.   Defaults to ‘degrees’.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.units"></a>units</h3><div class=CBody><p>{String} The layer map units.   Defaults to null.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.  Normally taken from the projection.  Only required if both map and layers do not define a projection, or if they define a projection whi [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.scales"></a>scales</h3><div class=CBody><p>{Array}  An array of map scales in descending order.   The values in the array correspond to the map scale denominator.   Note that these values only make sense if the display (monitor) resolution of the client is correctly guessed by whomever is configuring the application.   In addition, the units property must also be set.  Use <a href="#Op [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.scales"></a>scales</h3><div class=CBody><p>{Array}  An array of map scales in descending order.   The values in the array correspond to the map scale denominator.   Note that these values only make sense if the display (monitor) resolution of the client is correctly guessed by whomever is configuring the application.   In addition, the units property must also be set.  Use <a href="#Op [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.resolutions"></a>resolutions</h3><div class=CBody><p>{Array} A list of map resolutions (map units per pixel) in descending order.   If this is not set in the layer constructor, it will be set based on other resolution related properties (maxExtent, maxResolution, maxScale, etc.).</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link53 onMouseOver="ShowTip(event, 'tt7', 'link53')" onMouseOut="HideTip('tt7')">OpenLayers.Bounds</a>}  The center of these bounds will not stray outside of the viewport extent during panning.   In addition, if <a href="#OpenLayers.Layer.displayOutsideMaxExtent" class=LProperty id=l [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The maximum extent for the layer.   Defaults to null.</p><p>The center of these bounds will not stray outside of the viewport extent during panning.   In addition, if <a href="#OpenLayers.Layer.displayOutsideMaxExten [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.minExtent"></a>minExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link55 onMouseOver="ShowTip(event, 'tt7', 'link55')" onMouseOut="HideTip('tt7')">OpenLayers.Bounds</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.minExtent"></a>minExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The minimum extent for the layer.   Defaults to null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Default max is 360 deg / 256 px, which corresponds to zoom level 0 on gmaps.   Specify a different value in the layer options if you are not using a geographic projection and displaying the whole world.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Default max is 360 deg / 256 px, which corresponds to zoom level 0 on gmaps.   Specify a different value in the layer options if you are not using the default <a href="Map-js.html#OpenLayers.Map.tileSize" class=LProperty id=link50 onMouseOver="ShowTip(event, 'tt44', 'link50')" onMouseOut="HideTip('tt44')">OpenLayers.Map.tileSize</a> and [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.minResolution"></a>minResolution</h3><div class=CBody><p>{Float}</p></div></div></div>
 
@@ -81,11 +77,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.displayOutsideMaxExtent"></a>displayOutsideMaxExtent</h3><div class=CBody><p>{Boolean} Request map tiles that are completely outside of the max extent for this layer.  Defaults to false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} #487 for more info.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.transitionEffect"></a>transitionEffect</h3><div class=CBody><p>{String} The transition effect to use when the map is panned or zoomed.</p><h4 class=CHeading>There are currently two supported values</h4><ul><li><b>null</b> No transition effect (the default).</li><li><b>resize</b>  Existing tiles are resized on zoom to provide a visual effect of the zoom having taken place immediately.   As the new til [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SUPPORTED_TRANSITIONS"></a>SUPPORTED_TRANSITIONS</h3><div class=CBody><p>{Array} An immutable (that means don’t change it!) list of supported transitionEffect values.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Wraps the world at the international dateline, so the map can be panned infinitely in longitudinal direction.  Only use this on the base layer, and only if the layer’s maxExtent equals the world bounds.  #487 for more info.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.metadata"></a>metadata</h3><div class=CBody><p>{Object} This object can be used to store additional information on a layer object.</p></div></div></div>
 
@@ -99,7 +91,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHeadin [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getOptions"></a>getOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getOptions: function()</td></tr></table></blockquote><p>Extracts an object from the layer with the properties that were set as options, but updates them with the values currently set on the instance.</p><h4 class=CHeading>Returns</h4><p>{Object} the <a href= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getOptions"></a>getOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getOptions: function()</td></tr></table></blockquote><p>Extracts an object from the layer with the properties that were set as options, but updates them with the values currently set on the instance.</p><h4 class=CHeading>Returns</h4><p>{Object} the <a href= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setName"></a>setName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setName: function(</td><td class="PParameter  prettyprint " nowrap>newName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Sets  [...]
 
@@ -109,19 +101,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redraw: function()</td></tr></table></blockquote><p>Redraws the layer.   Returns true if the layer was redrawn, false if not.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The layer was redrawn.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class="PPa [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class="PPa [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.moveByPx"></a>moveByPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveByPx: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParameters  prettyprin [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set the map  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set the map  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.afterAdd"></a>afterAdd</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">afterAdd: function()</td></tr></table></blockquote><p>Called at the end of the map.addLayer sequence.   At this point, the map will have a base layer.   To be overridden by subclasses.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Jus [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Jus [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getImageSize"></a>getImageSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getImageSize: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getImageSize"></a>getImageSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getImageSize: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getVisibility"></a>getVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getVisibility: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} The layer should be displayed (if in range).</p></div></div></div>
 
@@ -137,31 +129,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.resolutionsFromScales"></a>resolutionsFromScales</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>resolutionsFromScales: function(</td><td class="PParameter  prettyprint " nowrap>scales</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.calculateResolutions"></a>calculateResolutions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateResolutions: function(</td><td class="PParameter  prettyprint " nowrap>props</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.calculateResolutions"></a>calculateResolutions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateResolutions: function(</td><td class="PParameter  prettyprint " nowrap>props</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getResolution"></a>getResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolution: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The currently selected resolution of the map, taken from the resolutions array, indexed by current zoom level.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link63 onMouseOver="ShowTip(event, 'tt7', 'link63')" onMouseOut="HideTip('tt7')">OpenLayers.Bounds</a>}  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link58 onMouseOver="ShowTip(event, 'tt30', 'link58')" onMouseOut="HideTip('tt30')">OpenLayers.Bounds</a> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getDataExtent"></a>getDataExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getDataExtent: function ()</td></tr></table></blockquote><p>Calculates the max extent which includes all of the data for the layer.  This function is to be implemented by subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds- [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getDataExtent"></a>getDataExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getDataExtent: function ()</td></tr></table></blockquote><p>Calculates the max extent which includes all of the data for the layer.  This function is to be implemented by subclasses.</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds- [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZoomForResolution"></a>getZoomForResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " now [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.getZIndex"></a>getZIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getZIndex: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} the z-index of this layer</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.setZIndex"></a>setZIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setZIndex: function (</td><td class="PParameter  prettyprint " nowrap>zIndex</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.adjustBounds"></a>adjustBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>adjustBounds: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.adjustBounds"></a>adjustBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>adjustBounds: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
 </div><!--Content-->
 
@@ -169,15 +161,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt2"><div class=CClass>The attribution control adds attribution from layers to the map display. </div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding= [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt2"><div class=CClass>The attribution control adds attribution from layers to the map display. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowra [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html b/doc/devdocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html
index 9008828..8b4ca8e 100644
--- a/doc/devdocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/ArcGIS93Rest-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest"></a>OpenLayers.<wbr>Layer.<wbr>ArcGIS93Rest</h1><div class=CBody><p>Instances of OpenLayers.Layer.ArcGIS93Rest are used to display data from ESRI ArcGIS Server 9.3 (and up?)  Mapping Services using the REST API.  Create a new ArcGIS93Rest layer with the <a href="#OpenLayers.Layer.ArcGIS93Rest.OpenLayers.Layer.ArcGIS93Rest" class=LConstructor id=link7 onMou [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest"></a>OpenLayers.<wbr>Layer.<wbr>ArcGIS93Rest</h1><div class=CBody><p>Instances of OpenLayers.Layer.ArcGIS93Rest are used to display data from ESRI ArcGIS Server 9.3 (and up?)  Mapping Services using the REST API.  Create a new ArcGIS93Rest layer with the <a href="#OpenLayers.Layer.ArcGIS93Rest.OpenLayers.Layer.ArcGIS93Rest" class=LConstructor id=link6 onMou [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.Constants"></a>Constants</h3></div></div>
 
@@ -27,15 +27,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
                                    "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export",
                                    {
                                      layers: "0,1,2"
-                                   });</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the ArcGIS server REST service</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An object with key/value pairs representing the opt [...]
+                                   });</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the ArcGIS server REST service</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} An object with key/value pairs representing the opt [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy this layer</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>C [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>C [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcGIS93Rest.setLayerFilter"></a>setLayerFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayerFilter: function (</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>queryDef</td>< [...]
 
@@ -49,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td clas [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/ArcGISCache-js.html b/doc/devdocs/files/OpenLayers/Layer/ArcGISCache-js.html
index fb59502..c1626f3 100644
--- a/doc/devdocs/files/OpenLayers/Layer/ArcGISCache-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/ArcGISCache-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGISCache.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head> [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGISCache.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -47,11 +47,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Returns an exact clone of this  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMaxExtent: function()</td></tr></table></blockquote><p>Get this layer’s maximum extent.</p><h4 class=CHeading>Returns</h4><p>{OpenLayers.Bounds}</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMaxExtent: function()</td></tr></table></blockquote><p>Get this layer’s maximum extent.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt15', 'link23')" onMouseOut [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getTileOrigin"></a>getTileOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileOrigin: function()</td></tr></table></blockquote><p>Determine the origin for aligning the grid of tiles.  The origin will be derived from the layer’s <maxExtent> property.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/LonLat-js.htm [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getTileOrigin"></a>getTileOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileOrigin: function()</td></tr></table></blockquote><p>Determine the origin for aligning the grid of tiles.  The origin will be derived from the layer’s <maxExtent> property.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/LonLat-js.htm [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine the URL for a t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determine the URL for a t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="zeroPad"></a>zeroPad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zeroPad: function(</td><td class="PParameter  prettyprint " nowrap>num,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>len,</td></tr><tr><td></td><td class="PParameter  prettyprint " n [...]
 
@@ -61,10 +61,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/ArcIMS-js.html b/doc/devdocs/files/OpenLayers/Layer/ArcIMS-js.html
index 003d85d..604717b 100644
--- a/doc/devdocs/files/OpenLayers/Layer/ArcIMS-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/ArcIMS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.ArcIMS"></a>OpenLayers.<wbr>Layer.<wbr>ArcIMS</h1><div class=CBody><p>Instances of OpenLayers.Layer.ArcIMS are used to display data from ESRI ArcIMS Mapping Services.  Create a new ArcIMS layer with the <a href="#OpenLayers.Layer.ArcIMS.OpenLayers.Layer.ArcIMS" class=LConstructor id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Lay [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.ArcIMS"></a>OpenLayers.<wbr>Layer.<wbr>ArcIMS</h1><div class=CBody><p>Instances of OpenLayers.Layer.ArcIMS are used to display data from ESRI ArcIMS Mapping Services.  Create a new ArcIMS layer with the <a href="#OpenLayers.Layer.ArcIMS.OpenLayers.Layer.ArcIMS" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Lay [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.Constants"></a>Constants</h3></div></div>
 
@@ -19,8 +19,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} Size for tiles.   Default is 512x512.</p></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.featureCoordSys"></a>featureCoordSys</h3><div class=CBody><p>{String} Code for feature coordinate system.   Default is “4326”.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.filterCoordSys"></a>filterCoordSys</h3><div class=CBody><p>{String} Code for filter coordinate system.   Default is “4326”.</p></div></div></div>
@@ -53,17 +51,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy this layer</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Re [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Re [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getURLasync"></a>getURLasync</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURLasync: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>scope,</td></tr><tr><td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getURLasync"></a>getURLasync</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURLasync: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>callback,</td></tr><tr><td [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getUrlOrImage"></a>getUrlOrImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getUrlOrImage: function(</td><td class="PParameter  prettyprint " nowrap>output</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.setLayerQuery"></a>setLayerQuery</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayerQuery: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>querydef</td><td class=" [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.setLayerQuery"></a>setLayerQuery</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayerQuery: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>querydef</td><td class=" [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getFeatureInfo"></a>getFeatureInfo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureInfo: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>layer,</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.getFeatureInfo"></a>getFeatureInfo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureInfo: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>layer,</td></tr [...]
     id: "ArcXML layer ID",  // the ArcXML layer ID
     query: {
         where: "STATE = 'PA'",  // the where clause of the query
@@ -71,7 +67,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     }
 }</pre></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Object with non-default properties to set on the layer.  Supported properties are buffer, callback, scope, and any other properties applicable to the ArcXML format.   Set the ‘callback’ and ‘scope’ for an object and function to recieve the parsed features from ArcIMS.</td></tr></table></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.ArcIMS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create  [...]
 
 </div><!--Content-->
 
@@ -79,15 +75,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this layer</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Return an image url this layer.</div></div><div class=CToolTip id="tt2"><div class=CFu [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Bing-js.html b/doc/devdocs/files/OpenLayers/Layer/Bing-js.html
index e06f14a..aca5b5c 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Bing-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Bing-js.html
@@ -11,10 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Bing"></a>OpenLayers.<wbr>Layer.Bing</h1><div class=CBody><p>Bing layer using direct tile access as provided by Bing Maps REST Services.  See <a href="http://msdn.microsoft.com/en-us/library/ff701713.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701713.aspx</a> for more information.  Note: Terms of Service compliant use requires t [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Bing"></a>OpenLayers.<wbr>Layer.Bing</h1><div class=CBody><p>Bing layer using direct tile access as provided by Bing Maps REST Services.  See <a href="http://msdn.microsoft.com/en-us/library/ff701713.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701713.aspx</a> for more information.  Note: Terms of Service compliant use requires t [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.key"></a>key</h3><div class=CBody><p>{String} API key for Bing maps, get your own key at <a href="http://bingmapsportal.com/" class=LURL target=_top>http://bingmapsportal.com/</a> .</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} the resolutions provided by the Bing servers.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.attributionTemplate"></a>attributionTemplate</h3><div class=CBody><p>{String}</p></div></div></div>
@@ -23,15 +25,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.type"></a>type</h3><div class=CBody><p>{String} The layer identifier.   Any non-birdseye imageryType from <a href="http://msdn.microsoft.com/en-us/library/ff701716.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701716.aspx</a> can be used.   Default is “Road”.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.culture"></a>culture</h3><div class=CBody><p>{String} The culture identifier.   See <a href="http://msdn.microsoft.com/en-us/library/ff701709.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701709.aspx</a> for the definition and the possible values.   Default is “en-US”.</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.metadataParams"></a>metadataParams</h3><div class=CBody><p>{Object} Optional url parameters for the Get Imagery Metadata request as described here: <a href="http://msdn.microsoft.com/en-us/library/ff701716.aspx" class=LURL target=_top>http://msdn.microsoft.com<wbr>/en-us<wbr>/library<wbr>/ff701716.aspx</a></p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a> instances created by this Layer.  Default is</p><blockquote><pre class="prettyprint">{crossOriginKeyword: 'anonymous'}</pre></blockquote></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.Constructor"></a>Constructor</h3></div></div>
 
 <div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.OpenLayers.Layer.Bing"></a>OpenLayers.<wbr>Layer.Bing</h3><div class=CBody><p>Create a new Bing layer.</p><h4 class=CHeading>Example</h4><blockquote><pre class="prettyprint">var road = new OpenLayers.Layer.Bing({
     name: "My Bing Aerial Layer",
     type: "Aerial",
     key: "my-api-key-here",
-});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>key</td><td class=CDLDescription>{String} Bing Maps API key for your application.  Get one a [...]
+});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>key</td><td class=CDLDescription>{String} Bing Maps API key for your application.  Get one  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Bing.Functions"></a>Functions</h3></div></div>
 
@@ -57,10 +63,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Boxes-js.html b/doc/devdocs/files/OpenLayers/Layer/Boxes-js.html
index 0a7509f..6da14c8 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Boxes-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Boxes-js.html
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/EventPane-js.html b/doc/devdocs/files/OpenLayers/Layer/EventPane-js.html
index 3b2e064..922cdda 100644
--- a/doc/devdocs/files/OpenLayers/Layer/EventPane-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/EventPane-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.EventPane"></a>OpenLayers.<wbr>Layer.<wbr>EventPane</h1><div class=CBody><p>Base class for 3rd party layers.   Create a new event pane layer with the <a href="#OpenLayers.Layer.EventPane.OpenLayers.Layer.EventPane" class=LConstructor id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">OpenLayers.Layer.EventPane</a> constructor.</p><h4 class= [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.EventPane"></a>OpenLayers.<wbr>Layer.<wbr>EventPane</h1><div class=CBody><p>Base class for 3rd party layers, providing a DOM element which isolates the 3rd-party layer from mouse events.  Only used by Google layers.</p><p>Automatically instantiated by the Google constructor, and not usually instantiated directly.</p><p>Create a new event pane layer with the <a href="#OpenLay [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.EventPane.Properties"></a>Properties</h3></div></div>
 
@@ -67,10 +67,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/FixedZoomLevels-js.html b/doc/devdocs/files/OpenLayers/Layer/FixedZoomLevels-js.html
index 37c5126..49de8be 100644
--- a/doc/devdocs/files/OpenLayers/Layer/FixedZoomLevels-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/FixedZoomLevels-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/GML-js.html b/doc/devdocs/files/OpenLayers/Layer/GML-js.html
deleted file mode 100644
index 1265b12..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/GML-js.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.GML - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><sc [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h1><div class=CBody><p>Create a vector layer by parsing a GML file.  The GML file is passed in as a parameter.  <b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with Protocol.HTTP and Strategy.Fixed.  Provide the protocol with a format parameter to get the parser you want for your data.</ [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.loaded"></a>loaded</h3><div class=CBody><p>{Boolean} Flag for whether the GML data has been loaded yet.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Format</a>} The format you want the data to be parsed with.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h3><div class=CBody><p>Load and parse a single file on the web, according to the format provided via the ‘format’ option, defaulting to GML.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CD [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.setVisibility"></a>setVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visibility,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>noEvent</td><td cla [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class= [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.loadGML"></a>loadGML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadGML: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.setUrl"></a>setUrl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setUrl:function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Change th [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.requestSuccess"></a>requestSuccess</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>requestSuccess:function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.requestFailure"></a>requestFailure</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>requestFailure: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visibility,</td></tr><tr><td></td><td class="PParameter  prettyprint " [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/GeoRSS-js.html b/doc/devdocs/files/OpenLayers/Layer/GeoRSS-js.html
index 0028992..a892595 100644
--- a/doc/devdocs/files/OpenLayers/Layer/GeoRSS-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/GeoRSS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.GeoRSS"></a>OpenLayers.<wbr>Layer.<wbr>GeoRSS</h1><div class=CBody><p>Add GeoRSS Point features to your map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Markers-js.html#OpenLayers.Layer.Markers" class=LClass >OpenLayers.Layer.Markers</a></li><li><a href="../Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a></li></ul><!--START_ND_SUMMARY--><div class=S [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.GeoRSS"></a>OpenLayers.<wbr>Layer.<wbr>GeoRSS</h1><div class=CBody><p>Add GeoRSS Point features to your map.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Markers-js.html#OpenLayers.Layer.Markers" class=LClass >OpenLayers.Layer.Markers</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GeoRSS.Properties"></a>Properties</h3></div></div>
 
@@ -53,10 +53,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Google-js.html b/doc/devdocs/files/OpenLayers/Layer/Google-js.html
index c96afe7..a7e7380 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Google-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Google-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Google"></a>OpenLayers.<wbr>Layer.<wbr>Google</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="SphericalMercator-js.html#OpenLayers.Layer.SphericalMercator" class=LClass id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')">OpenLayers.Layer.SphericalMercator</a></li><li><a href="EventPane-js.html#OpenLayers.Layer.EventPane [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Google"></a>OpenLayers.<wbr>Layer.<wbr>Google</h1><div class=CBody><p>Provides a wrapper for Google’s Maps API Normally the Terms of Use for this API do not allow wrapping, but Google have provided written consent to OpenLayers for this - see email in <a href="http://osgeo-org.1560.n6.nabble.com/Google-Maps-API-Terms-of-Use-changes-tp4910013p4911981.html" class=LURL target= [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.Constants"></a>Constants</h3></div></div>
 
@@ -41,11 +41,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setVisibility"></a>setVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>visible</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up this layer.</p></div></div></div>
 
@@ -75,7 +75,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.OpenLayers.Layer.Google.v2"></a>OpenLayers.<wbr>Layer.<wbr>Google.v2</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v2.</p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.OpenLayers.Layer.Google.v2"></a>OpenLayers.<wbr>Layer.<wbr>Google.v2</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v2.</p><p>This API has been deprecated by Google.  Developers are encouraged to migrate to v3 of the API; support for this is provided by <a href="Google/v3-js.html#OpenLayers.Layer.Google.v3" class=LConstant id=link37 onMouseOver="ShowTip(e [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.Properties"></a>Properties</h3></div></div>
 
@@ -95,7 +95,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.getMapContainer"></a>getMapContainer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapContainer: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} the GMap container’s div</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.getMapObjectBoundsFromOLBounds"></a>getMapObjectBoundsFromOLBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectBoundsFromOLBounds: function(</td><td class="PParameter  prettyprint " nowrap>olBounds</td><td class="PAfterParameters  p [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.getMapObjectBoundsFromOLBounds"></a>getMapObjectBoundsFromOLBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectBoundsFromOLBounds: function(</td><td class="PParameter  prettyprint " nowrap>olBounds</td><td class="PAfterParameters  p [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom< [...]
 
@@ -117,15 +117,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: functio [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: functio [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Google/v3-js.html b/doc/devdocs/files/OpenLayers/Layer/Google/v3-js.html
index 2d5649b..8bbcad5 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Google/v3-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Google/v3-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google/v3.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></scri [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google/v3.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head>< [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,22 +11,14 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="v3.js"></a>v3.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#v3.js" >v3.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td class=SDescription></td></tr><tr  [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="v3.js"></a>v3.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#v3.js" >v3.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td class=SDescription></td></tr><tr  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.v3"></a>OpenLayers.<wbr>Layer.<wbr>Google.v3</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v3.  Note that this layer configures the google.maps.map object with the “disableDefaultUI” option set to true.  Using UI controls that the Google Maps API provides is not supported by the OpenLayers API.</p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Google.v3"></a>OpenLayers.<wbr>Layer.<wbr>Google.v3</h3><div class=CBody><p>Mixin providing functionality specific to the Google Maps API v3.</p><p>To use this layer, you must include the GMaps v3 API in your html.</p><p>Because OpenLayers needs to control mouse events, it isolates the GMaps mapObject (the DOM elements provided by Google) using the EventPane.  However, because the Terms of Use requir [...]
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="DEFAULTS"></a>DEFAULTS</h3><div class=CBody><p>{Object} It is not recommended to change the properties set here.  Note that Google.v3 layers only work when sphericalMercator is set to true.</p><blockquote><pre class="prettyprint">{
-    maxExtent: new OpenLayers.Bounds(
-        -128 * 156543.03390625,
-        -128 * 156543.03390625,
-        128 * 156543.03390625,
-        128 * 156543.03390625
-    ),
     sphericalMercator: true,
-    maxResolution: 156543.03390625,
-    units: "m",
     projection: "EPSG:900913"
 }</pre></blockquote></div></div></div>
 
@@ -68,10 +60,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Grid-js.html b/doc/devdocs/files/OpenLayers/Layer/Grid-js.html
index 7bf6a12..65beb04 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Grid-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Grid-js.html
@@ -11,19 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Grid"></a>OpenLayers.<wbr>Layer.Grid</h1><div class=CBody><p>Base class for layers that use a lattice of tiles.   Create a new grid layer with the <a href="#OpenLayers.Layer.Grid.OpenLayers.Layer.Grid" class=LConstructor id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')">OpenLayers.Layer.Grid</a> constructor.</p><h4 class=CHeading>Inherits  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Grid"></a>OpenLayers.<wbr>Layer.Grid</h1><div class=CBody><p>Base class for layers that use a lattice of tiles.   Create a new grid layer with the <a href="#OpenLayers.Layer.Grid.OpenLayers.Layer.Grid" class=LConstructor id=link45 onMouseOver="ShowTip(event, 'tt43', 'link45')" onMouseOut="HideTip('tt43')">OpenLayers.Layer.Grid</a> constructor.</p><h4 class=CHeading>Inherits  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link33 onMouseOver="ShowTip(event, 'tt1', 'link33')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link46 onMouseOver="ShowTip(event, 'tt1', 'link46')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOriginCorner"></a>tileOriginCorner</h3><div class=CBody><p>{String} If the <a href="#OpenLayers.Layer.Grid.tileOrigin" class=LProperty id=link34 onMouseOver="ShowTip(event, 'tt2', 'link34')" onMouseOut="HideTip('tt2')">tileOrigin</a> property is not provided, the tile origin will be derived from the layer’s <a href="../Layer-js.html#OpenLayers.Layer.maxExtent" class=LProperty id=link35 onMo [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOriginCorner"></a>tileOriginCorner</h3><div class=CBody><p>{String} If the <a href="#OpenLayers.Layer.Grid.tileOrigin" class=LProperty id=link47 onMouseOver="ShowTip(event, 'tt2', 'link47')" onMouseOut="HideTip('tt2')">tileOrigin</a> property is not provided, the tile origin will be derived from the layer’s <a href="../Layer-js.html#OpenLayers.Layer.maxExtent" class=LProperty id=link48 onMo [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link37 onMouseOver="ShowTip(event, 'tt4', 'link37')" onMouseOut="HideTip('tt4')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this locati [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link50 onMouseOver="ShowTip(event, 'tt4', 'link50')" onMouseOut="HideTip('tt4')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this locati [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../Tile-js.html#OpenLayers.Tile" class=LClass id=link39 onMouseOver="ShowTip(event, 'tt5', 'link39')" onMouseOut="HideTip('tt5')">OpenLayers.Tile</a> instances created by this Layer, if supported by the tile class.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a> instances created by this Layer, if supported by the tile class.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.grid"></a>grid</h3><div class=CBody><p>{Array(Array(<a href="../Tile-js.html#OpenLayers.Tile" class=LClass id=link40 onMouseOver="ShowTip(event, 'tt5', 'link40')" onMouseOut="HideTip('tt5')">OpenLayers.Tile</a>))} This is an array of rows, each row is an array of tiles.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileClass"></a>tileClass</h3><div class=CBody><p>{<a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a>} The tile class to use for this layer.  Defaults is OpenLayers.Tile.Image.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.grid"></a>grid</h3><div class=CBody><p>{Array(Array(<a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a>))} This is an array of rows, each row is an array of tiles.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.singleTile"></a>singleTile</h3><div class=CBody><p>{Boolean} Moves the layer into single-tile mode, meaning that one tile will be loaded.  The tile’s size will be determined by the ‘ratio’ property.  When the tile is dragged such that it does not cover the entire viewport, it is reloaded.</p></div></div></div>
 
@@ -31,11 +33,47 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.buffer"></a>buffer</h3><div class=CBody><p>{Integer} Used only when in gridded mode, this specifies the number of extra rows and colums of tiles on each side which will surround the minimum grid tiles to cover the map.  For very slow loading layers, a larger value may increase performance somewhat when dragging, but will increase bandwidth use significantly.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.transitionEffect"></a>transitionEffect</h3><div class=CBody><p>{String} The transition effect to use when the map is zoomed.  Two posible values:</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>null</td><td class=CDLDescription>No transition effect (the default).</td></tr><tr><td class=CDLEntry>”resize”</td><td class=CDLDescription>Existin [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.numLoadingTiles"></a>numLoadingTiles</h3><div class=CBody><p>{Integer} How many tiles are still loading?</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileLoadingDelay"></a>tileLoadingDelay</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Integer}</td><td class=CDLDescription>Number of milliseconds before we shift and load tiles.  Default is 100.</td></tr></table></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileLoadingDelay"></a>tileLoadingDelay</h3><div class=CBody><p>{Integer} Number of milliseconds before we shift and load tiles when panning.  Ignored if <a href="../Animation-js.html#OpenLayers.Animation.isNative" class=LProperty id=link52 onMouseOver="ShowTip(event, 'tt44', 'link52')" onMouseOut="HideTip('tt44')">OpenLayers.Animation.isNative</a> is true.  Default is 85.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array(Number}} This property is documented in subclasses as an API property.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveTimerId"></a>moveTimerId</h3><div class=CBody><p>{Number} The id of the <a href="#OpenLayers.Layer.Grid.deferMoveGriddedTiles" class=LProperty id=link53 onMouseOver="ShowTip(event, 'tt5', 'link53')" onMouseOut="HideTip('tt5')">deferMoveGriddedTiles</a> timer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.deferMoveGriddedTiles"></a>deferMoveGriddedTiles</h3><div class=CBody><p>{Function} A function that defers execution of <a href="#OpenLayers.Layer.Grid.moveGriddedTiles" class=LFunction id=link54 onMouseOver="ShowTip(event, 'tt6', 'link54')" onMouseOut="HideTip('tt6')">moveGriddedTiles</a> by <a href="#OpenLayers.Layer.Grid.tileLoadingDelay" class=LProperty id=link55 onMouseOver="ShowTip(event, 'tt7' [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileQueueId"></a>tileQueueId</h3><div class=CBody><p>{Number} The id of the <a href="#OpenLayers.Layer.Grid.drawTileFromQueue" class=LFunction id=link57 onMouseOver="ShowTip(event, 'tt8', 'link57')" onMouseOut="HideTip('tt8')">drawTileFromQueue</a> animation.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.tileQueue"></a>tileQueue</h3><div class=CBody><p>{Array(<a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a>)} Tiles queued for drawing.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.loading"></a>loading</h3><div class=CBody><p>{Boolean} Indicates if tiles are being loaded.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.backBuffer"></a>backBuffer</h3><div class=CBody><p>{DOMElement} The back buffer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.gridResolution"></a>gridResolution</h3><div class=CBody><p>{Number} The resolution of the current grid.  Used for backbuffering.  This property is updated each the grid is initialized.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.backBufferResolution"></a>backBufferResolution</h3><div class=CBody><p>{Number} The resolution of the current back buffer.  This property is updated each time a back buffer is created.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.backBufferLonLat"></a>backBufferLonLat</h3><div class=CBody><p>{Object} The top-left corner of the current back buffer.  Includes lon and lat properties.  This object is updated each time a back buffer is created.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.backBufferTimerId"></a>backBufferTimerId</h3><div class=CBody><p>{Number} The id of the back buffer timer.  This timer is used to delay the removal of the back buffer, thereby preventing flash effects caused by tile animation.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.timerId"></a>timerId</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Number}</td><td class=CDLDescription>The id of the tileLoadingDelay timer.</td></tr></table></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeBackBufferDelay"></a>removeBackBufferDelay</h3><div class=CBody><p>{Number} Delay for removing the backbuffer when all tiles have finished loading.  Can be set to 0 when no css opacity transitions for the olTileImage class are used.  Default is 0 for <a href="#OpenLayers.Layer.Grid.singleTile" class=LProperty id=link58 onMouseOver="ShowTip(event, 'tt45', 'link58')" onMouseOut="HideTip [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.className"></a>className</h3><div class=CBody><p>{String} Name of the class added to the layer div.  If not set in the options passed to the constructor then className defaults to “olLayerGridSingleTile” for single tile layers (see <a href="#OpenLayers.Layer.Grid.singleTile" class=LProperty id=link60 onMouseOver="ShowTip(event, 'tt45', 'link60')" onMouseOut="HideTip('tt45')">singleTi [...]
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+ }</pre></blockquote><p>To animate tile displaying for any grid layer the following CSS rule can be used:</p><blockquote><pre class="prettyprint">.olTileImage {
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+}</pre></blockquote><p>In that case, to avoid flash effects, <a href="#OpenLayers.Layer.Grid.removeBackBufferDelay" class=LProperty id=link61 onMouseOver="ShowTip(event, 'tt47', 'link61')" onMouseOut="HideTip('tt47')">removeBackBufferDelay</a> should not be zero.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.Constructor"></a>Constructor</h3></div></div>
 
@@ -43,45 +81,65 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class= [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Deconstruct the layer and clear the grid.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.clearGrid"></a>clearGrid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clearGrid:function()</td></tr></table></blockquote><p>Go through and remove all tiles from the grid, calling destroy() on each of them to kill circular references</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveByPx"></a>moveByPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveByPx: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParameters  prett [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileData"></a>getTileData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTileData: function(</td><td class="PParameter  prettyprint " nowrap>loc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.queueTileDraw"></a>queueTileDraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>queueTileDraw: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.drawTileFromQueue"></a>drawTileFromQueue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">drawTileFromQueue: function()</td></tr></table></blockquote><p>Draws the first tile from the tileQueue, and unqueues that tile</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.clearTileQueue"></a>clearTileQueue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clearTileQueue: function()</td></tr></table></blockquote><p>Clears the animation queue</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.destroyTile"></a>destroyTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>destroyTile: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.scheduleMoveGriddedTiles"></a>scheduleMoveGriddedTiles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">scheduleMoveGriddedTiles: function()</td></tr></table></blockquote><p>Schedule the move of tiles.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getServerResolution"></a>getServerResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getServerResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getServerZoom"></a>getServerZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getServerZoom: function()</td></tr></table></blockquote><p>Return the zoom value corresponding to the best matching server resolution, taking into account <a href="#OpenLayers.Layer.Grid.serverResolutions" class=LProperty id=link67 onMouseOver="Sh [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getGridBounds"></a>getGridBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getGridBounds: function()</td></tr></table></blockquote><p>Deprecated.  This function will be removed in 3.0.  Please use getTilesBounds() instead.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bou [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.transformDiv"></a>transformDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>transformDiv: function(</td><td class="PParameter  prettyprint " nowrap>scale</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getResolutionScale"></a>getResolutionScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolutionScale: function()</td></tr></table></blockquote><p>Return the value by which the layer is currently scaled.</p><h4 class=CHeading>Returns</h4><p>{Number} The resolution scale.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.applyBackBuffer"></a>applyBackBuffer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>applyBackBuffer: function(</td><td class="PParameter  prettyprint " nowrap>resolution</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.createBackBuffer"></a>createBackBuffer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createBackBuffer: function()</td></tr></table></blockquote><p>Create a back buffer.</p><h4 class=CHeading>Returns</h4><p>{DOMElement} The DOM element for the back buffer, undefined if the grid isn’t initialized yet.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeBackBuffer"></a>removeBackBuffer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">removeBackBuffer: function()</td></tr></table></blockquote><p>Remove back buffer from DOM.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveByPx"></a>moveByPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveByPx: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParameters  prett [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTilesBounds"></a>getTilesBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTilesBounds: function()</td></tr></table></blockquote><p>Return the bounds of the tile grid.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link46 onMouseOver="ShowTip(event, 'tt3 [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.setTileSize"></a>setTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setTileSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.initSingleTile"></a>initSingleTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initSingleTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTilesBounds"></a>getTilesBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTilesBounds: function()</td></tr></table></blockquote><p>Return the bounds of the tile grid.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link69 onMouseOver="ShowTip(event, 'tt4 [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>orig [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.initSingleTile"></a>initSingleTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initSingleTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileOrigin"></a>getTileOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileOrigin: function()</td></tr></table></blockquote><p>Determine the origin for aligning the grid of tiles.   If a <a href="#OpenLayers.Layer.Grid.tileOrigin" class=LProperty id=link49 onMouseOver="ShowTip(event, 'tt2', 'link49')" onMouse [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>orig [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.initGriddedTiles"></a>initGriddedTiles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initGriddedTiles:function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileOrigin"></a>getTileOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileOrigin: function()</td></tr></table></blockquote><p>Determine the origin for aligning the grid of tiles.   If a <a href="#OpenLayers.Layer.Grid.tileOrigin" class=LProperty id=link71 onMouseOver="ShowTip(event, 'tt2', 'link71')" onMouse [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMaxExtent: function()</td></tr></table></blockquote><p>Get this layer’s maximum extent.  (Implemented as a getter for potential specific implementations in sub-classes.)</p><h4 class=CHeading>Returns</h4><p>{OpenLayers.Bounds}</p></div [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.initGriddedTiles"></a>initGriddedTiles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initGriddedTiles:function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.spiralTileLoad"></a>spiralTileLoad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">spiralTileLoad: function()</td></tr></table></blockquote><p>Starts at the top right corner of the grid and proceeds in a spiral towards the center, adding tiles one at a time to the beginning of a queue.</p><p>Once all the grid’s tiles hav [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMaxExtent: function()</td></tr></table></blockquote><p>Get this layer’s maximum extent.  (Implemented as a getter for potential specific implementations in sub-classes.)</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bound [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.addTile"></a>addTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.addTile"></a>addTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.addTileMonitoringHooks"></a>addTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.addTileMonitoringHooks"></a>addTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeTileMonitoringHooks"></a>removeTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.removeTileMonitoringHooks"></a>removeTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveGriddedTiles"></a>moveGriddedTiles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">moveGriddedTiles: function()</td></tr></table></blockquote></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.moveGriddedTiles"></a>moveGriddedTiles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveGriddedTiles: function(</td><td class="PParameter  prettyprint " nowrap>deferred</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.shiftRow"></a>shiftRow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>shiftRow:function(</td><td class="PParameter  prettyprint " nowrap>prepend</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
@@ -91,7 +149,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote><p>For singleTile layers, this will set a new tile size according to the dimensions of the map pane.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileBounds"></a>getTileBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTileBounds: function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getTileBounds"></a>getTileBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTileBounds: function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
 </div><!--Content-->
 
@@ -99,15 +157,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CProperty>{OpenLayers.LonLat} Optional origin for aligning the grid of tiles. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{OpenLayers.Bounds}  The center of these bounds will not stray outside of the viewport extent during panning. </div></div><div class=CToolTip id="tt4"><div class=CClass>This class represents a longitu [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CProperty>{OpenLayers.LonLat} Optional origin for aligning the grid of tiles. </div></div><div class=CToolTip id="tt3"><div class=CProperty>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top). </div></div><div class=CToolTip id="tt4"><div class=CClass>This class rep [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/HTTPRequest-js.html b/doc/devdocs/files/OpenLayers/Layer/HTTPRequest-js.html
index 5ebf228..8137a55 100644
--- a/doc/devdocs/files/OpenLayers/Layer/HTTPRequest-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/HTTPRequest-js.html
@@ -51,10 +51,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Image-js.html b/doc/devdocs/files/OpenLayers/Layer/Image-js.html
index f62d937..5e2807c 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Image-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Image-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Image"></a>OpenLayers.<wbr>Layer.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Layer.Image are used to display data from a web accessible image as a map layer.   Create a new image layer with the <a href="#OpenLayers.Layer.Image.OpenLayers.Layer.Image" class=LConstructor id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')">OpenLa [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Image"></a>OpenLayers.<wbr>Layer.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Layer.Image are used to display data from a web accessible image as a map layer.   Create a new image layer with the <a href="#OpenLayers.Layer.Image.OpenLayers.Layer.Image" class=LConstructor id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')">OpenLa [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.Properties"></a>Properties</h3></div></div>
 
@@ -41,13 +41,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.addTileMonitoringHooks"></a>addTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.addTileMonitoringHooks"></a>addTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.removeTileMonitoringHooks"></a>removeTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>) [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.removeTileMonitoringHooks"></a>removeTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>) [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.setUrl"></a>setUrl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setUrl: function(</td><td class="PParameter  prettyprint " nowrap>newUrl</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>The [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Image.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>The [...]
 
 </div><!--Content-->
 
@@ -55,15 +55,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Proto [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Proto [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/KaMap-js.html b/doc/devdocs/files/OpenLayers/Layer/KaMap-js.html
index a255a0b..57400a1 100644
--- a/doc/devdocs/files/OpenLayers/Layer/KaMap-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/KaMap-js.html
@@ -11,16 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.KaMap"></a>OpenLayers.<wbr>Layer.<wbr>KaMap</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Layer.Grid</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tabl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.KaMap"></a>OpenLayers.<wbr>Layer.<wbr>KaMap</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Layer.Grid</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tabl [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.Properties"></a>Properties</h3></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} KaMap Layer is always a base layer</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.units"></a>units</h3><div class=CBody><p>{?}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.resolution"></a>resolution</h3><div class=CBody><p>{Float}</p></div></div></div>
-
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.DEFAULT_PARAMS"></a>DEFAULT_PARAMS</h3><div class=CBody><p>{Object} parameters set by default.  The default parameters set the format via the ‘i’ parameter to ‘jpeg’.</p></div></div></div>
@@ -33,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>ori [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>ori [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.KaMap.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=C [...]
 
@@ -45,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/KaMapCache-js.html b/doc/devdocs/files/OpenLayers/Layer/KaMapCache-js.html
index 52b91b0..1a65b5e 100644
--- a/doc/devdocs/files/OpenLayers/Layer/KaMapCache-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/KaMapCache-js.html
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/MapGuide-js.html b/doc/devdocs/files/OpenLayers/Layer/MapGuide-js.html
index 7207790..91f5c48 100644
--- a/doc/devdocs/files/OpenLayers/Layer/MapGuide-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/MapGuide-js.html
@@ -55,7 +55,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapGuide.getImageFilePath"></a>getImageFilePath</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getImageFilePath:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>altUrl< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapGuide.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapGuide.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
 
 </div><!--Content-->
 
@@ -63,10 +63,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/MapServer-js.html b/doc/devdocs/files/OpenLayers/Layer/MapServer-js.html
index 1023988..e7cf5c8 100644
--- a/doc/devdocs/files/OpenLayers/Layer/MapServer-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/MapServer-js.html
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.getFullRequestString"></a>getFullRequestString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFullRequestString:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " n [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.getFullRequestString"></a>getFullRequestString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFullRequestString:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " n [...]
 
 </div><!--Content-->
 
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/MapServer/Untiled-js.html b/doc/devdocs/files/OpenLayers/Layer/MapServer/Untiled-js.html
deleted file mode 100644
index 78d677b..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/MapServer/Untiled-js.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.MapServer.Untiled - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOn [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h1><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.MapServer and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../MapServer-js.html#OpenLayers.Layer.MapServer" class=LClass id=link2 onMouseOv [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>par [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CClass>In [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/Markers-js.html b/doc/devdocs/files/OpenLayers/Layer/Markers-js.html
index d495666..79261b7 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Markers-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Markers-js.html
@@ -29,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function(</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Markers.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td cl [...]
 
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/MultiMap-js.html b/doc/devdocs/files/OpenLayers/Layer/MultiMap-js.html
deleted file mode 100644
index 95a03fb..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/MultiMap-js.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.MultiMap - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint(); [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.MultiMap"></a>OpenLayers.<wbr>Layer.<wbr>MultiMap</h1><div class=CBody><p>Note that MultiMap does not fully support the sphericalMercator option.  See Ticket #953 for more details.  <b>Deprecated</b>.   Use OpenLayers.Layer.Bing instead.  See #3063</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="EventPane-js.html#OpenLayers.Layer.EventPane" class=LCla [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 1</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 17</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.type"></a>type</h3><div class=CBody><p>{?}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.OpenLayers.Layer.MultiMap"></a>OpenLayers.<wbr>Layer.<wbr>MultiMap</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.loadMapObject"></a>loadMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoo [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class=" [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class= [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParamete [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParamete [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MultiMap.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint "  [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote>{String} String with information on why layer is broken, how to g [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/OSM-js.html b/doc/devdocs/files/OpenLayers/Layer/OSM-js.html
new file mode 100644
index 0000000..cbf1668
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Layer/OSM-js.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.OSM - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><sc [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.OSM"></a>OpenLayers.<wbr>Layer.OSM</h1><div class=CBody><p>This layer allows accessing OpenStreetMap tiles.  By default the OpenStreetMap hosted tile.openstreetmap.org Mapnik tileset is used.  If you wish to use a different layer instead, you need to provide a different URL to the constructor.  Here’s an example for using OpenCycleMap:</p><blockquote><pre cla [...]
+  ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"]);</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="XYZ-js.html#OpenLayers.Layer.XYZ" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">OpenLayers.Layer.XYZ</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.name"></a>name</h3><div class=CBody><p>{String} The layer name.  Defaults to “OpenStreetMap” if the first argument to the constructor is null or undefined.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.url"></a>url</h3><div class=CBody><p>{String} The tileset URL scheme.  Defaults to</p><blockquote><pre>http://[a|b|c].tile.openstreetmap.org/${z}/${x}/${y}.png</pre></blockquote><p>(the official OSM tileset) if the second argument to the constructor is null or undefined.  To use another tileset you can have something like this:</p><blockquote><pre class="prettyprint">new OpenLayers.Layer.OSM [...]
+  ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+   "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"]);</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.attribution"></a>attribution</h3><div class=CBody><p>{String} The layer attribution.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.tileOptions"></a>tileOptions</h3><div class=CBody><p>{Object} optional configuration options for <a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a> instances created by this Layer.  Default is</p><blockquote><pre class="prettyprint">{crossOriginKeyword: 'anonymous'}</pre></blockquote><p>When using OSM tilesets other than the default ones, it may be necessary to s [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.OpenLayers.Layer.OSM"></a>OpenLayers.<wbr>Layer.OSM</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} The layer name.</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} The tileset URL scheme.</td></tr><tr><td class=CDLEntry>options</td><td [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.OSM.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CClass>The XYZ class is designed to ma [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/PointGrid-js.html b/doc/devdocs/files/OpenLayers/Layer/PointGrid-js.html
index decbfdb..1a84382 100644
--- a/doc/devdocs/files/OpenLayers/Layer/PointGrid-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/PointGrid-js.html
@@ -11,53 +11,53 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h1><div class=CBody><p>A point grid layer dynamically generates a regularly spaced grid of point features.   This is a specialty layer for cases where an application needs a regular grid of points.   It can be used, for example, in an editing environment to snap to a grid.</p><p>Create a new vector layer with the <a h [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h1><div class=CBody><p>A point grid layer dynamically generates a regularly spaced grid of point features.   This is a specialty layer for cases where an application needs a regular grid of points.   It can be used, for example, in an editing environment to snap to a grid.</p><p>Create a new vector layer with the <a h [...]
 var points = new OpenLayers.Layer.PointGrid({dx: 10, dy: 10});
 
 // create a grid with different x/y spacing rotated 15 degrees clockwise.
-var points = new OpenLayers.Layer.PointGrid({dx: 5, dy: 10, rotation: 15});</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')">OpenLayers.Layer.Vector</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain">< [...]
+var points = new OpenLayers.Layer.PointGrid({dx: 5, dy: 10, rotation: 15});</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')">OpenLayers.Layer.Vector</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain">< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dx"></a>dx</h3><div class=CBody><p>{Number} Point grid spacing in the x-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link23 onMouseOver="ShowTip(event, 'tt8', 'link23')" onMouseOut="HideTip('tt8')">setSpacing</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dx"></a>dx</h3><div class=CBody><p>{Number} Point grid spacing in the x-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link24 onMouseOver="ShowTip(event, 'tt9', 'link24')" onMouseOut="HideTip('tt9')">setSpacing</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dy"></a>dy</h3><div class=CBody><p>{Number} Point grid spacing in the y-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link24 onMouseOver="ShowTip(event, 'tt8', 'link24')" onMouseOut="HideTip('tt8')">setSpacing</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.dy"></a>dy</h3><div class=CBody><p>{Number} Point grid spacing in the y-axis direction (map units).  Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setSpacing" class=LFunction id=link25 onMouseOver="ShowTip(event, 'tt9', 'link25')" onMouseOut="HideTip('tt9')">setSpacing</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.ratio"></a>ratio</h3><div class=CBody><p>{Number} Ratio of the desired grid size to the map viewport size.  Default is 1.5.   Larger ratios mean the grid is recalculated less often while panning.   The <a href="#OpenLayers.Layer.PointGrid.maxFeatures" class=LProperty id=link25 onMouseOver="ShowTip(event, 'tt7', 'link25')" onMouseOut="HideTip('tt7')">maxFeatures</a> setting has pre [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.ratio"></a>ratio</h3><div class=CBody><p>{Number} Ratio of the desired grid size to the map viewport size.  Default is 1.5.   Larger ratios mean the grid is recalculated less often while panning.   The <a href="#OpenLayers.Layer.PointGrid.maxFeatures" class=LProperty id=link26 onMouseOver="ShowTip(event, 'tt8', 'link26')" onMouseOut="HideTip('tt8')">maxFeatures</a> setting has pre [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Number} The maximum number of points to generate in the grid.   Default is 250.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setMaxFeatures" class=LFunction id=link27 onMouseOver="ShowTip(event, 'tt6', 'link27')" onMouseOut="HideTip('tt6')">setMaxFeatures</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.maxFeatures"></a>maxFeatures</h3><div class=CBody><p>{Number} The maximum number of points to generate in the grid.   Default is 250.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setMaxFeatures" class=LFunction id=link28 onMouseOver="ShowTip(event, 'tt7', 'link28')" onMouseOut="HideTip('tt7')">setMaxFeatures</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.rotation"></a>rotation</h3><div class=CBody><p>{Number} Grid rotation (in degrees clockwise from the positive x-axis).  Default is 0.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setRotation" class=LFunction id=link28 onMouseOver="ShowTip(event, 'tt14', 'link28')" onMouseOut="HideTip('tt14')">setRotation</a> method to modify this value.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.rotation"></a>rotation</h3><div class=CBody><p>{Number} Grid rotation (in degrees clockwise from the positive x-axis).  Default is 0.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setRotation" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt15', 'link29')" onMouseOut="HideTip('tt15')">setRotation</a> method to modify this value.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.origin"></a>origin</h3><div class=CBody><p>{OpenLayers.LonLat} Grid origin.   The grid lattice will be aligned with the origin.   If not set at construction, the center of the map’s maximum extent is used.   Read-only.   Use the <a href="#OpenLayers.Layer.PointGrid.setOrigin" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt11', 'link29')" onMouseOut="HideTip('t [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.origin"></a>origin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt1', 'link30')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} Grid origin.   The grid lattice will be aligned with the origin.   If not set at construction, the center of the map’s maximum extent is used.   Read-only.&n [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.gridBounds"></a>gridBounds</h3><div class=CBody><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link30 onMouseOver="ShowTip(event, 'tt1', 'link30')" onMouseOut="HideTip('tt1')">OpenLayers.Bounds</a>}  Internally cached grid bounds (with optional rotation applied).</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.gridBounds"></a>gridBounds</h3><div class=CBody><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt2', 'link32')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>}  Internally cached grid bounds (with optional rotation applied).</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h3><div class=CBody><p>Creates a new point grid layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing all configuration properties for the layer.   The <a href="#OpenLayers.L [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.OpenLayers.Layer.PointGrid"></a>OpenLayers.<wbr>Layer.<wbr>PointGrid</h3><div class=CBody><p>Creates a new point grid layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing all configuration properties for the layer.   The <a href="#OpenLayers.L [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Th [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Th [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.removeMap"></a>removeMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRatio"></a>setRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRatio: function(</td><td class="PParameter  prettyprint " nowrap>ratio</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRatio"></a>setRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRatio: function(</td><td class="PParameter  prettyprint " nowrap>ratio</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setMaxFeatures"></a>setMaxFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMaxFeatures: function(</td><td class="PParameter  prettyprint " nowrap>maxFeatures</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setMaxFeatures"></a>setMaxFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMaxFeatures: function(</td><td class="PParameter  prettyprint " nowrap>maxFeatures</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setSpacing"></a>setSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSpacing: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParame [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setSpacing"></a>setSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSpacing: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParame [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setOrigin"></a>setOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOrigin: function(</td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setOrigin"></a>setOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOrigin: function(</td><td class="PParameter  prettyprint " nowrap>origin</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.getOrigin"></a>getOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getOrigin: function()</td></tr></table></blockquote><p>Get the grid <a href="#OpenLayers.Layer.PointGrid.origin" class=LProperty id=link43 onMouseOver="ShowTip(event, 'tt12', 'link43')" onMouseOut="HideTip('tt12')">origin</a> property.</p><h4 class=C [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.getOrigin"></a>getOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getOrigin: function()</td></tr></table></blockquote><p>Get the grid <a href="#OpenLayers.Layer.PointGrid.origin" class=LProperty id=link45 onMouseOver="ShowTip(event, 'tt13', 'link45')" onMouseOut="HideTip('tt13')">origin</a> property.</p><h4 class=C [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRotation"></a>setRotation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRotation: function(</td><td class="PParameter  prettyprint " nowrap>rotation</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.setRotation"></a>setRotation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setRotation: function(</td><td class="PParameter  prettyprint " nowrap>rotation</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.onMoveEnd"></a>onMoveEnd</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMoveEnd: function()</td></tr></table></blockquote><p>Listener for map “moveend” events.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.getViewBounds"></a>getViewBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getViewBounds: function()</td></tr></table></blockquote><p>Gets the (potentially rotated) view bounds for grid calculations.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link46  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.getViewBounds"></a>getViewBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getViewBounds: function()</td></tr></table></blockquote><p>Gets the (potentially rotated) view bounds for grid calculations.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link48  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointGrid.updateGrid"></a>updateGrid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateGrid: function(</td><td class="PParameter  prettyprint " nowrap>force</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
@@ -69,15 +69,15 @@ var points = new OpenLayers.Layer.PointGrid({dx: 5, dy: 10, rotation: 15});</pre
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/PointTrack-js.html b/doc/devdocs/files/OpenLayers/Layer/PointTrack-js.html
index 0d50ee9..f8ad08d 100644
--- a/doc/devdocs/files/OpenLayers/Layer/PointTrack-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/PointTrack-js.html
@@ -11,7 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointTrack"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack</h1><div class=CBody><p>Vector layer to display ordered point features as a line, creating one LineString feature for each pair of two points.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip(' [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.PointTrack"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack</h1><div class=CBody><p>Vector layer to display ordered point features as a line, creating one LineString feature for each pair of two points.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip(' [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.dataFrom"></a>dataFrom</h3><div class=CBody><p>{<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE" class=LConstant id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.PointTrack.TARGET_NODE</a>} or {<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE" class=LConstant id=link10 onMouseOver="ShowT [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.styleFrom"></a>styleFrom</h3><div class=CBody><p>{<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE" class=LConstant id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Layer.PointTrack.TARGET_NODE</a>} or {<a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE" class=LConstant id=link12 onMouseOver="S [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Constructor"></a>Constructor</h3></div></div>
 
@@ -19,13 +25,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.addNodes"></a>addNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addNodes: function(</td><td class="PParameter  prettyprint " nowrap>pointFeatures,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.addNodes"></a>addNodes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addNodes: function(</td><td class="PParameter  prettyprint " nowrap>pointFeatures,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>SOURCE_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <OpenLayers.Layer.PointTrack.styleFrom></p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.SOURCE_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>SOURCE_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <a href="#OpenLayers.Layer.PointTrack.styleFrom" class=LProperty id=link14 onMouseOver="ShowTip(event, 'tt4', 'link1 [...]
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>TARGET_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <OpenLayers.Layer.PointTrack.styleFrom></p></div></div></div>
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.TARGET_NODE"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>TARGET_NODE</h3><div class=CBody><p>{Number} value for <a href="#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" class=LConstant >OpenLayers.Layer.PointTrack.dataFrom</a> and <a href="#OpenLayers.Layer.PointTrack.styleFrom" class=LProperty id=link15 onMouseOver="ShowTip(event, 'tt4', 'link1 [...]
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom"></a>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>dataFrom</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Object} with the following keys</td><td class=CDLDescription><b>deprecated</b></td></tr></table><ul><li>SOURCE_NODE: take data/attributes from the source node of the line</li><li>TARGET_NODE: [...]
 
@@ -35,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addNodes: function(</td><td class="PParameter  prettyprint " nowrap>pointFeatures,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Ad [...]
+<div class=CToolTip id="tt1"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt2"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding= [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/SphericalMercator-js.html b/doc/devdocs/files/OpenLayers/Layer/SphericalMercator-js.html
index b3e3786..97a08c2 100644
--- a/doc/devdocs/files/OpenLayers/Layer/SphericalMercator-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/SphericalMercator-js.html
@@ -11,25 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.SphericalMercator"></a>OpenLayers.<wbr>Layer.<wbr>SphericalMercator</h1><div class=CBody><p>A mixin for layers that wraps up the pieces neccesary to have a coordinate conversion for working with commercial APIs which use a spherical mercator projection.   Using this layer as a base layer, additional layers can be used as overlays if they are in the same projection.</p><p>A l [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.SphericalMercator"></a>OpenLayers.<wbr>Layer.<wbr>SphericalMercator</h1><div class=CBody><p>A mixin for layers that wraps up the pieces neccesary to have a coordinate conversion for working with commercial APIs which use a spherical mercator projection.   Using this layer as a base layer, additional layers can be used as overlays if they are in the same projection.</p><p>A l [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote><p>Get the map’s extent.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9') [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote><p>Get the map’s extent.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5') [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettypr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettypr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.initMercatorParameters"></a>initMercatorParameters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initMercatorParameters: function()</td></tr></table></blockquote><p>Set up the mercator parameters on the layer: resolutions, projection, units.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.forwardMercator"></a>forwardMercator</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>forwardMercator: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>lat</t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.forwardMercator"></a>forwardMercator</h3><div class=CBody><p>Given a lon,lat in EPSG:4326, return a point in Spherical Mercator.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lon</td><td class=CDLDescription>{float}</td></tr><tr><td class=CDLEntry>lat</td><td class=CDLDescription>{float}</td></tr></table><h4 [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.inverseMercator"></a>inverseMercator</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>inverseMercator: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.projectForward"></a>projectForward</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>projectForward: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.projectInverse"></a>projectInverse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>projectInverse: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.SphericalMercator.inverseMercator"></a>inverseMercator</h3><div class=CBody><p>Given a x,y in Spherical Mercator, return a point in EPSG:4326.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>x</td><td class=CDLDescription>{float} A map x in Spherical Mercator.</td></tr><tr><td class=CDLEntry>y</td><td class=CDLDescription>{floa [...]
 
 </div><!--Content-->
 
@@ -37,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote>Get the map’s extent.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPo [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function()</td></tr></table></blockquote>Get the map’s extent.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPo [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/TMS-js.html b/doc/devdocs/files/OpenLayers/Layer/TMS-js.html
index 7f0638b..a7ba778 100644
--- a/doc/devdocs/files/OpenLayers/Layer/TMS-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/TMS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h1><div class=CBody><p>Create a layer for accessing tiles from services that conform with the Tile Map Service Specification (<a href="http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification" class=LURL target=_top>http://wiki.osgeo.org<wbr>/wiki<wbr>/Tile_Map_Service_Specification</a>).</p><h4 class=CHeading>Example</h4><blockquote><pre clas [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h1><div class=CBody><p>Create a layer for accessing tiles from services that conform with the Tile Map Service Specification (<a href="http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification" class=LURL target=_top>http://wiki.osgeo.org<wbr>/wiki<wbr>/Tile_Map_Service_Specification</a>).</p><h4 class=CHeading>Example</h4><blockquote><pre clas [...]
     "My Layer", // name for display in LayerSwitcher
     "http://tilecache.osgeo.org/wms-c/Basic.py/", // service endpoint
     {layername: "basic", type: "png"} // required properties
@@ -27,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} Make this layer a base layer.   Default is true.   Set false to use the layer as an overlay.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this location) [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt1', 'link8')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} Optional origin for aligning the grid of tiles.  If provided, requests for tiles at all resolutions will be aligned with this location (no tiles shall overlap this location) [...]
     "My Layer",
     "http://tilecache.osgeo.org/wms-c/Basic.py/",
     {
@@ -38,21 +38,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     }
 );</pre></blockquote></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differs from the server.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.TMS.serverResolutions" class=LProperty id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">se [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more zoom levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more zoom levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} Title to be displayed in a <a href="../Control/LayerSwitcher-js.html#OpenLayers.Control.LayerSwitcher" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt11', [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.OpenLayers.Layer.TMS"></a>OpenLayers.<wbr>Layer.TMS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} Title to be displayed in a <a href="../Control/LayerSwitcher-js.html#OpenLayers.Control.LayerSwitcher" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt11', [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When the [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TMS.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When the [...]
 
 </div><!--Content-->
 
@@ -60,15 +60,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Text-js.html b/doc/devdocs/files/OpenLayers/Layer/Text-js.html
index b4fbfc6..f83b991 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Text-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Text-js.html
@@ -38,7 +38,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Text.parseData"></a>parseData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseData: function(</td><td class="PParameter  prettyprint " nowrap>ajaxRequest</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Text.markerClick"></a>markerClick</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>evt</td><td class=CDLDescription>{Event}</td></tr></table></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Text.markerClick"></a>markerClick</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>evt</td><td class=CDLDescription>{Event}</td></tr></table><h4 class=CHeading>Context</h4><ul><li>{<a href="../Feature-js.html#OpenLayers.Feature" class=LClass id=link14 onMouseOver="ShowTip(event, 'tt1', 'link14')" onMouseOut="Hi [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Text.clearFeatures"></a>clearFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clearFeatures: function()</td></tr></table></blockquote></div></div></div>
 
@@ -48,10 +48,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/TileCache-js.html b/doc/devdocs/files/OpenLayers/Layer/TileCache-js.html
index b33e971..17e5d2f 100644
--- a/doc/devdocs/files/OpenLayers/Layer/TileCache-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/TileCache-js.html
@@ -19,7 +19,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.format"></a>format</h3><div class=CBody><p>{String} Mime type of the images returned.   Default is image/png.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differs from the server.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.TileCache.serverResolutions" class=LProperty id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip( [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.Constructor"></a>Constructor</h3></div></div>
 
@@ -27,9 +27,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><table  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><table  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.TileCache.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h [...]
 
 </div><!--Content-->
 
@@ -37,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/UTFGrid-js.html b/doc/devdocs/files/OpenLayers/Layer/UTFGrid-js.html
new file mode 100644
index 0000000..56b7773
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Layer/UTFGrid-js.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.UTFGrid - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();" [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.UTFGrid"></a>OpenLayers.<wbr>Layer.<wbr>UTFGrid</h1><div class=CBody><p>This Layer reads from UTFGrid tiled data sources.   Since UTFGrids are essentially JSON-based ASCII art with attached attributes, they are not visibly rendered.   In order to use them in the map, you must add a <a href="../Control/UTFGrid-js.html#OpenLayers.Control.UTFGrid" class=LClass id=link4 onM [...]
+    url: "/tiles/world_utfgrid/${z}/${x}/${y}.json",
+    utfgridResolution: 4,
+    displayInLayerSwitcher: false
+);
+map.addLayer(world_utfgrid);
+
+var control = new OpenLayers.Control.UTFGrid({
+    layers: [world_utfgrid],
+    handlerMode: 'move',
+    callback: function(dataLookup) {
+        // do something with returned data
+    }
+})</pre></blockquote><h4 class=CHeading>Inherits from</h4><ul><li><a href="XYZ-js.html#OpenLayers.Layer.XYZ" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Layer.XYZ</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Layer.UTFGrid" >OpenLayers.<wbr>Layer.<wbr>UTFGri [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>Default is true, as this is designed to be a base tile source.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.projection"></a>projection</h3><div class=CBody><p>{<a href="../Projection-js.html#OpenLayers.Projection" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Projection</a>} Source projection for the UTFGrids.   Default is “EPSG:900913”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.useJSONP"></a>useJSONP</h3><div class=CBody><p>{Boolean} Should we use a JSONP script approach instead of a standard AJAX call?</p><p>Set to true for using utfgrids from another server.  Avoids same-domain policy restrictions.  Note that this only works if the server accepts the callback GET parameter and dynamically wraps the returned json in a function call.</p><p>Default is false</p>< [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.url"></a>url</h3><div class=CBody><p>{String} URL tempate for UTFGrid tiles.   Include x, y, and z parameters.  E.g.  “/tiles/${z}/${x}/${y}.json”</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.utfgridResolution"></a>utfgridResolution</h3><div class=CBody><p>{Number} Ratio of the pixel width to the width of a UTFGrid data point.   If an entry in the grid represents a 4x4 block of pixels, the utfgridResolution would be 4.   Default is 2 (specified in <a href="../Tile/UTFGrid-js.html#OpenLayers.Tile.UTFGrid" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMou [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.tileClass"></a>tileClass</h3><div class=CBody><p>{<a href="../../deprecated-js.html#OpenLayers.Tile" class=LClass >OpenLayers.Tile</a>} The tile class to use for this layer.  Defaults is <a href="../Tile/UTFGrid-js.html#OpenLayers.Tile.UTFGrid" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt6', 'link8')" onMouseOut="HideTip('tt6')">OpenLayers.Tile.UTFGrid</a>.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.OpenLayers.Layer.UTFGrid"></a>OpenLayers.<wbr>Layer.<wbr>UTFGrid</h3><div class=CBody><p>Create a new UTFGrid layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration propertie [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.getFeatureInfo"></a>getFeatureInfo</h3><div class=CBody><p>Get details about a feature associated with a map location.   The object returned will have id and data properties.   If the given location doesn’t correspond to a feature, null will be returned.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>lo [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.UTFGrid.getFeatureId"></a>getFeatureId</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureId: function(</td><td class="PParameter  prettyprint " nowrap>location</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Methods for coordinate transforms between coordinate systems. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/Vector-js.html b/doc/devdocs/files/OpenLayers/Layer/Vector-js.html
index ddc31dc..3a2d78d 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Vector-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Vector-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h1><div class=CBody><p>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources.  Create a new vector layer with the <a href="#OpenLayers.Layer.Vector.OpenLayers.Layer.Vector" class=LConstructor id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')">OpenLayers.L [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h1><div class=CBody><p>Instances of OpenLayers.Layer.Vector are used to render vector data from a variety of sources.  Create a new vector layer with the <a href="#OpenLayers.Layer.Vector.OpenLayers.Layer.Vector" class=LConstructor id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')">OpenLayers.L [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">layer.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The prop [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} The layer is a base layer.   Default is false.   Set this property in the layer options.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.isFixed"></a>isFixed</h3><div class=CBody><p>{Boolean} Whether the layer remains in one place while dragging the map.</p></div></div></div>
@@ -51,15 +49,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.drawn"></a>drawn</h3><div class=CBody><p>{Boolean} Whether the Vector Layer features have been drawn yet.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.ratio"></a>ratio</h3><div class=CBody><p>{Float} This specifies the ratio of the size of the visiblity of the Vector Layer features to the size of the map.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h3><div class=CBody><p>Create a new vector layer</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object  [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.OpenLayers.Layer.Vector"></a>OpenLayers.<wbr>Layer.<wbr>Vector</h3><div class=CBody><p>Create a new vector layer</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy this layer</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.refresh"></a>refresh</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>refresh: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>As [...]
 
@@ -77,8 +77,6 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redraw: function()</td></tr></table></blockquote><p>Redraws the layer.   Returns true if the layer was redrawn, false if not.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The layer was redrawn.</p></div></div></div>
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>display</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.addFeatures"></a>addFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addFeatures: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
@@ -101,9 +99,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.getFeatureByFid"></a>getFeatureByFid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureByFid: function(</td><td class="PParameter  prettyprint " nowrap>featureFid</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.getFeaturesByAttribute"></a>getFeaturesByAttribute</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeaturesByAttribute: function(</td><td class="PParameter  prettyprint " nowrap>attrName,</td></tr><tr><td></td><td class="PParameter  prettyprint  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.getFeaturesByAttribute"></a>getFeaturesByAttribute</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeaturesByAttribute: function(</td><td class="PParameter  prettyprint " nowrap>attrName,</td></tr><tr><td></td><td class="PParameter  prettyprint  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.onFeatureInsert"></a>onFeatureInsert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onFeatureInsert: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.onFeatureInsert"></a>onFeatureInsert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onFeatureInsert: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Vector.preFeatureInsert"></a>preFeatureInsert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>preFeatureInsert: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
@@ -115,15 +113,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CClass>Abstract vector layer strategy class. </div></div><div class=CToolTip id="tt4"><div class=CClass>Abstract vector layer protocol class. </div></div><div class=CToolTip id="tt5"><div class=CClass>This is the base cla [...]
+<div class=CToolTip id="tt1"><div class=CClass>Vector features use the OpenLayers.Geometry classes as geometry description. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CClass>Abstract vector layer strategy class. </div></div><div class=CToolTip id="tt4"><div class=CClass>Abstract vector layer protocol class. </div></div><div class=CToolTip id="tt5"><div class=CClass>This is the base cla [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Vector/RootContainer-js.html b/doc/devdocs/files/OpenLayers/Layer/Vector/RootContainer-js.html
index aa88d81..438c023 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Vector/RootContainer-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Vector/RootContainer-js.html
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/VirtualEarth-js.html b/doc/devdocs/files/OpenLayers/Layer/VirtualEarth-js.html
deleted file mode 100644
index 7fb7910..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/VirtualEarth-js.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.VirtualEarth - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrin [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h1><div class=CBody><p>Instances of OpenLayers.Layer.VirtualEarth are used to display the data from the Bing Maps AJAX Control <img mode="link" target="e.g.  
url target=”http://msdn.microsoft.com/library/bb429619.aspx” name=”http://msdn.microsoft.com/library/bb429619.aspx”>” original=&r [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 1</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 19</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.type"></a>type</h3><div class=CBody><p>{VEMapType}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.VirtualEarth.sphericalMercator" class=LProperty id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">sphericalMercator</a> is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.animationEnabled"></a>animationEnabled</h3><div class=CBody><p>{Boolean} If set to true, the transition between zoom levels will be animated.  Set to false to match the zooming experience of other layer types.  Default is true.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h3><div class=CBody><p>Creates a new instance of a OpenLayers.Layer.VirtualEarth.  If you use an instance of OpenLayers.Layer.VirtualEarth in you map, you should set the <a href="../Map-js.html#OpenLayers.Map" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">Op [...]
-    // other map options
-    restrictedExtent : OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
-} );
-
-var veLayer = new OpenLayers.Layer.VirtualEarth (
-    "Virtual Earth Layer"
-);
-
-map.addLayer( veLayer );</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.loadMapObject"></a>loadMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td cla [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td cl [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParamet [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><bloc [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/WFS-js.html b/doc/devdocs/files/OpenLayers/Layer/WFS-js.html
deleted file mode 100644
index ff496f5..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/WFS-js.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.WFS - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><sc [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h1><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with a Protocol.WFS and one or more Strategies.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideT [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} WFS layer is not a base layer by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.tile"></a>tile</h3><div class=CBody><p>{<a href="../Tile/WFS-js.html#OpenLayers.Tile.WFS" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt1', 'link23')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.WFS</a>}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.ratio"></a>ratio</h3><div class=CBody><p>{Float} The ratio property determines the size of the serverside query relative to the map viewport size.  By default, we load an area twice as big as the map, to allow for panning without immediately reload.  Setting this to 1 will cause the area of the WFS request to match the map area exactly.  It is recommended to set this to some number at l [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.DEFAULT_PARAMS"></a>DEFAULT_PARAMS</h3><div class=CBody><p>{Object} Hashtable of default key/value parameters</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.featureClass"></a>featureClass</h3><div class=CBody><p>{<a href="../Feature-js.html#OpenLayers.Feature" class=LClass id=link24 onMouseOver="ShowTip(event, 'tt2', 'link24')" onMouseOut="HideTip('tt2')">OpenLayers.Feature</a>} If featureClass is defined, an old-style markers based WFS layer is created instead of a new-style vector layer.  If sent, this should be a subclass of OpenLayers.Feature</p> [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt3', 'link25')" onMouseOut="HideTip('tt3')">OpenLayers.Format</a>} The format you want the data to be parsed with.  Must be passed in the constructor.  Should be a class, not an instance.  This option can only be used if no featureClass is passed [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.formatObject"></a>formatObject</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt3', 'link26')" onMouseOut="HideTip('tt3')">OpenLayers.Format</a>} Internally created/managed format object, used by the Tile to parse data.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.vectorMode"></a>vectorMode</h3><div class=CBody><p>{Boolean} Should be calculated automatically.  Determines whether the layer is in vector mode or marker mode.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.encodeBBOX"></a>encodeBBOX</h3><div class=CBody><p>{Boolean} Should the BBOX commas be encoded?  The WMS spec says ‘no’, but some services want it that way.  Default false.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Should the WFS layer parse attributes from the retrieved GML?  Defaults to false.  If enabled, parsing is slower, but attributes are available in the attributes property of layer features.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>{Object}</td></tr>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=C [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class= [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.addTileMonitoringHooks"></a>addTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.removeTileMonitoringHooks"></a>removeTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote><p>Call the onMapResize method of the appropriate parent class.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">display: function()</td></tr></table></blockquote><p>Call the display method of the appropriate parent class.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams:function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getFullRequestString"></a>getFullRequestString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFullRequestString:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">commit: function()</td></tr></table></blockquote><p>Write out the data to a WFS server.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitSuccess"></a>commitSuccess</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitSuccess: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitFailure"></a>commitFailure</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitFailure: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitReport"></a>commitReport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitReport: function(</td><td class="PParameter  prettyprint " nowrap>string,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>response</td><td class="PA [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.refresh"></a>refresh</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">refresh: function()</td></tr></table></blockquote><p>Refreshes all the features of the layer</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getDataExtent"></a>getDataExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getDataExtent: function ()</td></tr></table></blockquote><p>Calculates the max extent which includes all of the layer data.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link31 onMouse [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function (</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of OpenLayers.Tile.WFS are used to manage the image tiles used by various layers. </div></div><div class=CToolTip id="tt2"><div class=CClass>Features are combinations of geography and attributes. </div></div><div class=CToolTip id="tt3"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 cl [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/WMS-js.html b/doc/devdocs/files/OpenLayers/Layer/WMS-js.html
index 2f9dcc6..cec6e14 100644
--- a/doc/devdocs/files/OpenLayers/Layer/WMS-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/WMS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMS"></a>OpenLayers.<wbr>Layer.WMS</h1><div class=CBody><p>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services.  Create a new WMS layer with the <a href="#OpenLayers.Layer.WMS.OpenLayers.Layer.WMS" class=LConstructor id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">OpenLayers.Layer.WMS</a> constructor.</p> [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMS"></a>OpenLayers.<wbr>Layer.WMS</h1><div class=CBody><p>Instances of OpenLayers.Layer.WMS are used to display data from OGC Web Mapping Services.  Create a new WMS layer with the <a href="#OpenLayers.Layer.WMS.OpenLayers.Layer.WMS" class=LConstructor id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">OpenLayers.Layer.WMS</a> constructor.</p> [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Constants"></a>Constants</h3></div></div>
 
@@ -19,15 +19,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.reproject"></a>reproject</h3><div class=CBody><p><b>Deprecated</b>.  See <a href="http://trac.openlayers.org/wiki/SphericalMercator" class=LURL target=_top>http://trac.openlayers.org/wiki/SphericalMercator</a> for information on the replacement for this functionality.  {Boolean} Try to reproject this layer if its coordinate reference system is different than that of the base layer.   De [...]
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} Default is true for WMS layer</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.encodeBBOX"></a>encodeBBOX</h3><div class=CBody><p>{Boolean} Should the BBOX commas be encoded?  The WMS spec says ‘no’, but some services want it that way.  Default false.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.noMagic"></a>noMagic</h3><div class=CBody><p>{Boolean} If true, the image format will not be automagicaly switched from image/jpeg to image/png or image/gif when using TRANSPARENT=TRUE.  Also isBaseLayer will not changed by the constructor.  Default false.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.yx"></a>yx</h3><div class=CBody><p>{Object} Keys in this object are EPSG codes for which the axis order is to be reversed (yx instead of xy, LatLon instead of LonLat), with true as value.  This is only relevant for WMS versions >= 1.3.0.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.yx"></a>yx</h3><div class=CBody><p>{Object} Keys in this object are EPSG codes for which the axis order is to be reversed (yx instead of xy, LatLon instead of LonLat), with true as value.  This is only relevant for WMS versions >= 1.3.0, and only if yx is not set in <a href="../Projection-js.html#OpenLayers.Projection.defaults" class=LProperty id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Constructor"></a>Constructor</h3></div></div>
 
@@ -45,9 +43,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy this layer</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a c [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.reverseAxisOrder"></a>reverseAxisOrder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">reverseAxisOrder: function()</td></tr></table></blockquote><p>Returns true if the axis order is reversed for the WMS version and projection of the layer.</p><h4 class=CHeading>Returns</h4><p>{Boolean} true if the axis order is reversed, false [...]
 
@@ -63,15 +59,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Destroy this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td clas [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/WMS/Post-js.html b/doc/devdocs/files/OpenLayers/Layer/WMS/Post-js.html
deleted file mode 100644
index bcfde8e..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/WMS/Post-js.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.WMS.Post - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();pr [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h1><div class=CBody><p>Instances of OpenLayers.Layer.WMS.Post are used to retrieve data from OGC Web Mapping Services via HTTP-POST (application/x-www-form-urlencoded).  Create a new WMS layer with the <a href="#OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post" class=LConstructor id=link2 onMouseOver="ShowTip(event, 'tt2' [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.unsupportedBrowsers"></a>unsupportedBrowsers</h3><div class=CBody><p>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles from a WMS . Defaults to [“mozilla”, “firefox”, “opera”], because Opera is not able to show transparent images in IFrames and Firefox/Mozilla has some ugly effects of viewport-shaking wh [...]
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.SUPPORTED_TRANSITIONS"></a>SUPPORTED_TRANSITIONS</h3><div class=CBody><p>{Array} no supported transitions for this type of layer, because it is not possible to modify the initialized tiles (iframes)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.usePost"></a>usePost</h3><div class=CBody><p>{Boolean}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h3><div class=CBody><p>Creates a new WMS layer object.</p><h4 class=CHeading>Example</h4><blockquote><pre class="prettyprint">var wms = new OpenLayers.Layer.WMS.Post(
- "NASA Global Mosaic",
- "http://wms.jpl.nasa.gov/wms.cgi",
- {layers: "modis, global_mosaic"});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the WMS (e.g.  <a href="http://wms.jpl.nasa.gov/wms.cgi" class=LURL target=_top>http://wms.jpl.nasa.gov/wms.cgi</a>)</td></tr><tr><td class=CDLEntry [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.addTile"></a>addTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParame [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>addTile c [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/WMS/Untiled-js.html b/doc/devdocs/files/OpenLayers/Layer/WMS/Untiled-js.html
deleted file mode 100644
index ea973eb..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/WMS/Untiled-js.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.WMS.Untiled - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad() [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h1><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.WMS and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'lin [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class= [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Cr [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CClass>In [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/WMTS-js.html b/doc/devdocs/files/OpenLayers/Layer/WMTS-js.html
index fe6e9ce..eebd037 100644
--- a/doc/devdocs/files/OpenLayers/Layer/WMTS-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/WMTS-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMTS"></a>OpenLayers.<wbr>Layer.WMTS</h1><div class=CBody><p>Instances of the WMTS class allow viewing of tiles from a service that implements the OGC WMTS specification version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">OpenL [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.WMTS"></a>OpenLayers.<wbr>Layer.WMTS</h1><div class=CBody><p>Instances of the WMTS class allow viewing of tiles from a service that implements the OGC WMTS specification version 1.0.0.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">OpenL [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.requestEncoding"></a>requestEncoding</h3><div class=CBody><p>{String} Request encoding.   Can be “REST” or “KVP”.   Default is “KVP”.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.url"></a>url</h3><div class=CBody><p>{String} The base URL for the WMTS service.   Must be provided.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.url"></a>url</h3><div class=CBody><p>{String|Array(String)} The base URL or request URL template for the WMTS service.  Must be provided.  Array is only supported for base URLs, not for request URL templates.  URL templates are only supported for REST <a href="#OpenLayers.Layer.WMTS.requestEncoding" class=LProperty id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="Hi [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.layer"></a>layer</h3><div class=CBody><p>{String} The layer identifier advertised by the WMTS service.   Must be provided.</p></div></div></div>
 
@@ -31,23 +31,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.format"></a>format</h3><div class=CBody><p>{String} The image MIME type.   Default is “image/jpeg”.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt1', 'link13')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} The top-left corner of the tile matrix in map units.   If the tile origin for each matrix in a set is different, the <a href="#OpenLayers.Layer.WMTS.matrixIds" class=LPro [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileOrigin"></a>tileOrigin</h3><div class=CBody><p>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt1', 'link15')" onMouseOut="HideTip('tt1')">OpenLayers.LonLat</a>} The top-left corner of the tile matrix in map units.   If the tile origin for each matrix in a set is different, the <a href="#OpenLayers.Layer.WMTS.matrixIds" class=LPro [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileFullExtent"></a>tileFullExtent</h3><div class=CBody><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt2', 'link16')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>}  The full extent of the tile set.   If not supplied, the layer’s <a href="../Layer-js.html#OpenLayers.Layer.maxExtent" class=LProperty id=link17 onMouseOver [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.tileFullExtent"></a>tileFullExtent</h3><div class=CBody><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt2', 'link18')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>}  The full extent of the tile set.   If not supplied, the layer’s <a href="../Layer-js.html#OpenLayers.Layer.maxExtent" class=LProperty id=link19 onMouseOver [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.formatSuffix"></a>formatSuffix</h3><div class=CBody><p>{String} For REST request encoding, an image format suffix must be included in the request.   If not provided, the suffix will be derived from the <a href="#OpenLayers.Layer.WMTS.format" class=LProperty id=link18 onMouseOver="ShowTip(event, 'tt15', 'link18')" onMouseOut="HideTip('tt15')">format</a> property.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.formatSuffix"></a>formatSuffix</h3><div class=CBody><p>{String} For REST request encoding, an image format suffix must be included in the request.   If not provided, the suffix will be derived from the <a href="#OpenLayers.Layer.WMTS.format" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt17', 'link20')" onMouseOut="HideTip('tt17')">format</a> property.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.matrixIds"></a>matrixIds</h3><div class=CBody><p>{Array} A list of tile matrix identifiers.   If not provided, the matrix identifiers will be assumed to be integers corresponding to the map zoom level.   If a list of strings is provided, each item should be the matrix identifier that corresponds to the map zoom level.  Additionally, a list of objects can be provided.   Each object [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.matrixIds"></a>matrixIds</h3><div class=CBody><p>{Array} A list of tile matrix identifiers.   If not provided, the matrix identifiers will be assumed to be integers corresponding to the map zoom level.   If a list of strings is provided, each item should be the matrix identifier that corresponds to the map zoom level.  Additionally, a list of objects can be provided.   Each object [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.dimensions"></a>dimensions</h3><div class=CBody><p>{Array} For RESTful request encoding, extra dimensions may be specified.  Items in this list should be property names in the <a href="#OpenLayers.Layer.WMTS.params" class=LProperty id=link23 onMouseOver="ShowTip(event, 'tt11', 'link23')" onMouseOut="HideTip('tt11')">params</a> object.  Values of extra dimensions will be determined from the  [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.dimensions"></a>dimensions</h3><div class=CBody><p>{Array} For RESTful request encoding, extra dimensions may be specified.  Items in this list should be property names in the <a href="#OpenLayers.Layer.WMTS.params" class=LProperty id=link25 onMouseOver="ShowTip(event, 'tt12', 'link25')" onMouseOut="HideTip('tt12')">params</a> object.  Values of extra dimensions will be determined from the  [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.params"></a>params</h3><div class=CBody><p>{Object} Extra parameters to include in tile requests.   For KVP <a href="#OpenLayers.Layer.WMTS.requestEncoding" class=LProperty id=link25 onMouseOver="ShowTip(event, 'tt18', 'link25')" onMouseOut="HideTip('tt18')">requestEncoding</a>, these properties will be encoded in the request query string.   For REST <a href="#OpenLayers.Layer.WMTS.requestE [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.params"></a>params</h3><div class=CBody><p>{Object} Extra parameters to include in tile requests.   For KVP <a href="#OpenLayers.Layer.WMTS.requestEncoding" class=LProperty id=link27 onMouseOver="ShowTip(event, 'tt14', 'link27')" onMouseOut="HideTip('tt14')">requestEncoding</a>, these properties will be encoded in the request query string.   For REST <a href="#OpenLayers.Layer.WMTS.requestE [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 cac [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 cac [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.WMTS.serverResolutions" class=LProperty id=link31 onMouseOver="ShowTip(event, 'tt21', 'link31')" onMouseOut="HideTip('tt21') [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.formatSuffixMap"></a>formatSuffixMap</h3><div class=CBody><p>{Object} a map between WMTS ‘format’ request parameter and tile image file suffix</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.matrix"></a>matrix</h3><div class=CBody><p>{Object} Matrix definition for the current map resolution.   Updated by the <a href="#OpenLayers.Layer.WMTS.updateMatrixProperties" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt4', 'link29')" onMouseOut="HideTip('tt4')">updateMatrixProperties</a> method.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.matrix"></a>matrix</h3><div class=CBody><p>{Object} Matrix definition for the current map resolution.   Updated by the <a href="#OpenLayers.Layer.WMTS.updateMatrixProperties" class=LFunction id=link35 onMouseOver="ShowTip(event, 'tt4', 'link35')" onMouseOut="HideTip('tt4')">updateMatrixProperties</a> method.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.Constructor"></a>Constructor</h3></div></div>
 
@@ -57,7 +59,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     layer: "layer_id",
     style: "default",
     matrixSet: "matrix_id"
-});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} The base url for the service.   See the <a href="# [...]
+});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} Configuration properties for the layer.</td></tr></table><h4 class=CHeading>Required configuration properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} The base url for the service.   See the <a href="# [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.Functions"></a>Functions</h3></div></div>
 
@@ -65,17 +67,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.updateMatrixProperties"></a>updateMatrixProperties</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateMatrixProperties: function()</td></tr></table></blockquote><p>Called when map resolution changes to update matrix related properties.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.getIdentifier"></a>getIdentifier</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getIdentifier: function()</td></tr></table></blockquote><p>Get the current index in the matrixIds array.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.getMatrix"></a>getMatrix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMatrix: function()</td></tr></table></blockquote><p>Get the appropriate matrix definition for the current map resolution.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.getTileInfo"></a>getTileInfo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getTileInfo: function(</td><td class="PParameter  prettyprint " nowrap>loc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams: function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMTS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams: function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
 
 </div><!--Content-->
 
@@ -83,15 +87,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setMap: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquot [...]
+<div class=CToolTip id="tt1"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setMap: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquot [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/WorldWind-js.html b/doc/devdocs/files/OpenLayers/Layer/WorldWind-js.html
index 599598c..2b5698f 100644
--- a/doc/devdocs/files/OpenLayers/Layer/WorldWind-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/WorldWind-js.html
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/XYZ-js.html b/doc/devdocs/files/OpenLayers/Layer/XYZ-js.html
index 47d14dd..4f3dfc7 100644
--- a/doc/devdocs/files/OpenLayers/Layer/XYZ-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/XYZ-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.XYZ"></a>OpenLayers.<wbr>Layer.XYZ</h1><div class=CBody><p>The XYZ class is designed to make it easier for people who have tiles arranged by a standard XYZ grid.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Layer.Grid</a></li></ [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.XYZ"></a>OpenLayers.<wbr>Layer.XYZ</h1><div class=CBody><p>The XYZ class is designed to make it easier for people who have tiles arranged by a standard XYZ grid.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Layer.Grid</a></li></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.zoomOffset"></a>zoomOffset</h3><div class=CBody><p>{Number} If your cache has more zoom levels than you want to provide access to with this layer, supply a zoomOffset.   This zoom offset is added to the current map zoom level to determine the level 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 [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differs from the server.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.serverResolutions"></a>serverResolutions</h3><div class=CBody><p>{Array} A list of all resolutions available on the server.   Only set this property if the map resolutions differ from the server.  This property serves two purposes.  (a) <a href="#OpenLayers.Layer.XYZ.serverResolutions" class=LProperty id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">serv [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.Constructor"></a>Constructor</h3></div></div>
 
@@ -31,14 +31,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.getURL"></a>getURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getURL: function (</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.getXYZ"></a>getXYZ</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXYZ: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Calcu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.getXYZ"></a>getXYZ</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXYZ: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Calcu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When the [...]
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.OSM"></a>OpenLayers.<wbr>Layer.OSM</h2><div class=CBody><p>A class to access OpenStreetMap tiles.  By default, uses the OpenStreetMap hosted tile.openstreetmap.org ‘Mapnik’ tileset.  If you wish to use tiles at home / osmarender layer instead, you can pass a layer like:</p><blockquote><pre class="prettyprint">new OpenLayers.Layer.OSM("t at h",
-  "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png");</pre></blockquote><p>This layer defaults to Spherical Mercator.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="#OpenLayers.Layer.XYZ" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">OpenLayers.Layer.XYZ</a></li></ul></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.XYZ.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When the [...]
 
 </div><!--Content-->
 
@@ -46,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a clone of this layer</div></div><div class=CToolTip id="tt2"><div class=CFunction [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Layer/Yahoo-js.html b/doc/devdocs/files/OpenLayers/Layer/Yahoo-js.html
deleted file mode 100644
index 8e6081e..0000000
--- a/doc/devdocs/files/OpenLayers/Layer/Yahoo-js.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Layer.Yahoo - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();">< [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="EventPane-js.html#OpenLayers.Layer.EventPane" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">OpenLayers.Layer.EventPane</a></li><li><a href="FixedZoomLevels-js.html#OpenLayers.Layer.FixedZoomLevels" class=LClass [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 0</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 17</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.type"></a>type</h3><div class=CBody><p>{YahooMapType}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.Yahoo.sphericalMercator" class=LProperty id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">sphericalMercator</a> is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.loadMapObject"></a>loadMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Overri [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.fixYahooEventPane"></a>fixYahooEventPane</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">fixYahooEventPane: function()</td></tr></table></blockquote><p>The map has been centered, so the mysterious yahoo eventpane has been added. we remove it so that it doesnt mess with <b>our</b> event pane.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getOLZoomFromMapObjectZoom"></a>getOLZoomFromMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOLZoomFromMapObjectZoom: function(</td><td class="PParameter  prettyprint " nowrap>moZoom</td><td class="PAfterParameters  prettyprint "now [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoomFromOLZoom"></a>getMapObjectZoomFromOLZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectZoomFromOLZoom: function(</td><td class="PParameter  prettyprint " nowrap>olZoom</td><td class="PAfterParameters  prettyprint "now [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom</ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><td class [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAf [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PA [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  pr [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter   [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " now [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectSizeFromOLSize"></a>getMapObjectSizeFromOLSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectSizeFromOLSize: function(</td><td class="PParameter  prettyprint " nowrap>olSize</td><td class="PAfterParameters  prettyprint "now [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><bloc [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Layer/Zoomify-js.html b/doc/devdocs/files/OpenLayers/Layer/Zoomify-js.html
index 09561c5..d64c3c5 100644
--- a/doc/devdocs/files/OpenLayers/Layer/Zoomify-js.html
+++ b/doc/devdocs/files/OpenLayers/Layer/Zoomify-js.html
@@ -11,12 +11,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Zoomify"></a>OpenLayers.<wbr>Layer.<wbr>Zoomify</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt8', 'link10')" onMouseOut="HideTip('tt8')">OpenLayers.Layer.Grid</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Layer.Zoomify"></a>OpenLayers.<wbr>Layer.<wbr>Zoomify</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Grid-js.html#OpenLayers.Layer.Grid" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt8', 'link10')" onMouseOut="HideTip('tt8')">OpenLayers.Layer.Grid</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.url"></a>url</h3><div class=CBody><p>{String} URL for root directory with TileGroupX subdirectories.</p></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.size"></a>size</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} The Zoomify image size in pixels.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean}</p></div></div></div>
@@ -49,7 +47,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>When [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>o [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Zoomify.calculateGridLayout"></a>calculateGridLayout</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateGridLayout: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>o [...]
 
 </div><!--Content-->
 
@@ -57,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([19, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([19, 20, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Map-js.html b/doc/devdocs/files/OpenLayers/Map-js.html
index 68428bf..e8917b4 100644
--- a/doc/devdocs/files/OpenLayers/Map-js.html
+++ b/doc/devdocs/files/OpenLayers/Map-js.html
@@ -11,39 +11,39 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Map"></a>OpenLayers.Map</h1><div class=CBody><p>Instances of OpenLayers.Map are interactive maps embedded in a web page.  Create a new map with the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link92 onMouseOver="ShowTip(event, 'tt79', 'link92')" onMouseOut="HideTip('tt79')">OpenLayers.Map</a> constructor.</p><p>On their own maps do not provide much functionality [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Map"></a>OpenLayers.Map</h1><div class=CBody><p>Instances of OpenLayers.Map are interactive maps embedded in a web page.  Create a new map with the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link90 onMouseOver="ShowTip(event, 'tt81', 'link90')" onMouseOut="HideTip('tt81')">OpenLayers.Map</a> constructor.</p><p>On their own maps do not provide much functionality [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Constants"></a>Constants</h3></div></div>
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Z_INDEX_BASE"></a>Z_INDEX_BASE</h3><div class=CBody><p>{Object} Base z-indexes for different classes of thing</p></div></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">map.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this event depends on exactly what happ [...]
-
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>}</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">map.events.register(type, obj, listener);</pre></blockquote><p>Listeners will be called with a reference to an event object.   The properties of this [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.id"></a>id</h3><div class=CBody><p>{String} Unique identifier for the map</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.fractionalZoom"></a>fractionalZoom</h3><div class=CBody><p>{Boolean} For a base layer that supports it, allow the map resolution to be set to a value between one of the values in the resolutions array.   Default is false.</p><p>When fractionalZoom is set to true, it is possible to zoom to an arbitrary extent.   This requires a base layer from a source that supports requests for arbitrary extents ( [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.fractionalZoom"></a>fractionalZoom</h3><div class=CBody><p>{Boolean} For a base layer that supports it, allow the map resolution to be set to a value between one of the values in the resolutions array.   Default is false.</p><p>When fractionalZoom is set to true, it is possible to zoom to an arbitrary extent.   This requires a base layer from a source that supports requests for arbitrary extents ( [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the map</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.allOverlays"></a>allOverlays</h3><div class=CBody><p>{Boolean} Allow the map to function with “overlays” only.   Defaults to false.   If true, the lowest layer in the draw order will act as the base layer.   In addition, if set to true, all layers will have isBaseLayer set to false when they are added to the map.</p><h4 class=CHeading>Note</h4><p>If you set map.allOverlays to true [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.allOverlays"></a>allOverlays</h3><div class=CBody><p>{Boolean} Allow the map to function with “overlays” only.   Defaults to false.   If true, the lowest layer in the draw order will act as the base layer.   In addition, if set to true, all layers will have isBaseLayer set to false when they are added to the map.</p><h4 class=CHeading>Note</h4><p>If you set map.allOverlays to true [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.div"></a>div</h3><div class=CBody><p>{DOMElement|String} The element that contains the map (or an id for that element).   If the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link98 onMouseOver="ShowTip(event, 'tt79', 'link98')" onMouseOut="HideTip('tt79')">OpenLayers.Map</a> constructor is called with two arguments, this should be provided as the first argument.  Alternatively, t [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.div"></a>div</h3><div class=CBody><p>{DOMElement|String} The element that contains the map (or an id for that element).   If the <a href="#OpenLayers.Map.OpenLayers.Map" class=LConstructor id=link96 onMouseOver="ShowTip(event, 'tt81', 'link96')" onMouseOut="HideTip('tt81')">OpenLayers.Map</a> constructor is called with two arguments, this should be provided as the first argument.  Alternatively, t [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.dragging"></a>dragging</h3><div class=CBody><p>{Boolean} The map is currently being dragged.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link103 onMouseOver="ShowTip(event, 'tt1', 'link103')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} Size of the main div (this.div)</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link101 onMouseOver="ShowTip(event, 'tt1', 'link101')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} Size of the main div (this.div)</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.viewPortDiv"></a>viewPortDiv</h3><div class=CBody><p>{HTMLDivElement} The element that represents the map viewport</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.layerContainerOrigin"></a>layerContainerOrigin</h3><div class=CBody><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link104 onMouseOver="ShowTip(event, 'tt2', 'link104')" onMouseOut="HideTip('tt2')">OpenLayers.LonLat</a>} The lonlat at which the later container was re-initialized (on-zoom)</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.layerContainerOrigin"></a>layerContainerOrigin</h3><div class=CBody><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link102 onMouseOver="ShowTip(event, 'tt2', 'link102')" onMouseOut="HideTip('tt2')">OpenLayers.LonLat</a>} The lonlat at which the later container was re-initialized (on-zoom)</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.layerContainerDiv"></a>layerContainerDiv</h3><div class=CBody><p>{HTMLDivElement} The element that contains the layers.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.layers"></a>layers</h3><div class=CBody><p>{Array(<a href="Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>)} Ordered list of layers in the map</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.controls"></a>controls</h3><div class=CBody><p>{Array(<a href="Control-js.html#OpenLayers.Control" class=LClass id=link105 onMouseOver="ShowTip(event, 'tt3', 'link105')" onMouseOut="HideTip('tt3')">OpenLayers.Control</a>)} List of controls associated with the map.</p><p>If not provided in the map options at construction, the map will be given the following controls by default:</p><ul><li><a href="Control/Na [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.controls"></a>controls</h3><div class=CBody><p>{Array(<a href="Control-js.html#OpenLayers.Control" class=LClass id=link103 onMouseOver="ShowTip(event, 'tt3', 'link103')" onMouseOut="HideTip('tt3')">OpenLayers.Control</a>)} List of controls associated with the map.</p><p>If not provided in the map options at construction, the map will by default be given the following controls if present in the build:</p><ul [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.popups"></a>popups</h3><div class=CBody><p>{Array(<a href="Popup-js.html#OpenLayers.Popup" class=LClass id=link110 onMouseOver="ShowTip(event, 'tt4', 'link110')" onMouseOut="HideTip('tt4')">OpenLayers.Popup</a>)} List of popups associated with the map</p></div></div></div>
 
@@ -57,17 +57,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panRatio"></a>panRatio</h3><div class=CBody><p>{Float} The ratio of the current extent within which panning will tween.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.viewRequestID"></a>viewRequestID</h3><div class=CBody><p>{String} Used to store a unique identifier that changes when the map view changes. viewRequestID should be used when adding data asynchronously to the map: viewRequestID is incremented when you initiate your request (right now during changing of baselayers and changing of zooms).  It is stored here in the map and also in the data that will be com [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.options"></a>options</h3><div class=CBody><p>{Object} The options object passed to the class constructor.  Read-only.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.tileSize"></a>tileSize</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link112 onMouseOver="ShowTip(event, 'tt1', 'link112')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} Set in the map options to override the default tile size for this map.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.projection"></a>projection</h3><div class=CBody><p>{String} Set in the map options to override the default projection string this map - also set maxExtent, maxResolution, and units if appropriate.   Default is “EPSG:4326”.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.projection"></a>projection</h3><div class=CBody><p>{String} Set in the map options to specify the default projection for layers added to this map.  When using a projection other than EPSG:4326 (CRS:84, Geographic) or EPSG:3857 (EPSG:900913, Web Mercator), also set maxExtent, maxResolution or resolutions.   Default is “EPSG:4326”.  Note that the projection of the map is usually det [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.units"></a>units</h3><div class=CBody><p>{String} The map units.   Defaults to ‘degrees’.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.units"></a>units</h3><div class=CBody><p>{String} The map units.   Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’.   Normally taken from the projection.  Only required if both map and layers do not define a projection, or if they define a projection which does not define units</p></di [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.resolutions"></a>resolutions</h3><div class=CBody><p>{Array(Float)} A list of map resolutions (map units per pixel) in descending order.   If this is not set in the layer constructor, it will be set based on other resolution related properties (maxExtent, maxResolution, maxScale, etc.).</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Default max is 360 deg / 256 px, which corresponds to zoom level 0 on gmaps.   Specify a different value in the map options if you are not using a geographic projection and displaying the whole world.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxResolution"></a>maxResolution</h3><div class=CBody><p>{Float} Required if you are not displaying the whole world on a tile with the size specified in <a href="#OpenLayers.Map.tileSize" class=LProperty id=link115 onMouseOver="ShowTip(event, 'tt5', 'link115')" onMouseOut="HideTip('tt5')">tileSize</a>.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minResolution"></a>minResolution</h3><div class=CBody><p>{Float}</p></div></div></div>
 
@@ -75,67 +75,67 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minScale"></a>minScale</h3><div class=CBody><p>{Float}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link113 onMouseOver="ShowTip(event, 'tt5', 'link113')" onMouseOut="HideTip('tt5')">OpenLayers.Bounds</a>} The maximum extent for the map.   Defaults to the whole world in decimal degrees (-180, -90, 180, 90).   Specify a different extent in the map options if you are not using a g [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxExtent"></a>maxExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The maximum extent for the map.   Defaults to the whole world in decimal degrees (-180, -90, 180, 90).   Specify a different extent in the map options if you are not using a geographic projection and displaying the who [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minExtent"></a>minExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link114 onMouseOver="ShowTip(event, 'tt5', 'link114')" onMouseOut="HideTip('tt5')">OpenLayers.Bounds</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minExtent"></a>minExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  The minimum extent for the map.   Defaults to null.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.restrictedExtent"></a>restrictedExtent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link115 onMouseOver="ShowTip(event, 'tt5', 'link115')" onMouseOut="HideTip('tt5')">OpenLayers.Bounds</a>} Limit map navigation to this extent where possible.  If a non-null restrictedExtent is set, panning will be restricted to the given bounds.   In addition, zoomin [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.restrictedExtent"></a>restrictedExtent</h3><div class=CBody><p>{<OpenLayers.Bounds>|Array} If provided as an array, the array should consist of four values (left, bottom, right, top).  Limit map navigation to this extent where possible.  If a non-null restrictedExtent is set, panning will be restricted to the given bounds.   In addition, zooming to a resolution that displays more than t [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.numZoomLevels"></a>numZoomLevels</h3><div class=CBody><p>{Integer} Number of zoom levels for the map.   Defaults to 16.   Set a different value in the map options if needed.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.theme"></a>theme</h3><div class=CBody><p>{String} Relative path to a CSS file from which to load theme styles.  Specify null in the map options (e.g.  {theme: null}) if you want to get cascading style declarations - by putting links to stylesheets or style declarations directly in your page.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link116 onMouseOver="ShowTip(event, 'tt6', 'link116')" onMouseOut="HideTip('tt6')">OpenLayers.Projection</a>} Requires proj4js support.Projection used by several controls to display data to user.  If this property is set, it will be set on any control which has a null dis [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.displayProjection"></a>displayProjection</h3><div class=CBody><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link118 onMouseOver="ShowTip(event, 'tt6', 'link118')" onMouseOut="HideTip('tt6')">OpenLayers.Projection</a>} Requires proj4js support for projections other than EPSG:4326 or EPSG:900913/EPSG:3857.  Projection used by several controls to display data to user.  If thi [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.fallThrough"></a>fallThrough</h3><div class=CBody><p>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  (#457) Default is to fall through.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panTween"></a>panTween</h3><div class=CBody><p>{OpenLayers.Tween} Animated panning tween object, see panTo()</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panTween"></a>panTween</h3><div class=CBody><p>{<a href="Tween-js.html#OpenLayers.Tween" class=LClass >OpenLayers.Tween</a>} Animated panning tween object, see panTo()</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link117 onMouseOver="ShowTip(event, 'tt7', 'link117')" onMouseOut="HideTip('tt7')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link119 onMouseOver="ShowTip(event, 'tt7', 'link119')" onMouseOut="HideTip('tt7')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for th [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panMethod"></a>panMethod</h3><div class=CBody><p>{Function} The Easing function to be used for tweening.   Default is OpenLayers.Easing.Expo.easeOut.  Setting this to ‘null’ turns off animated panning.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panDuration"></a>panDuration</h3><div class=CBody><p>{Integer} The number of steps to be passed to the OpenLayers.Tween.start() method when the map is panned.  Default is 50.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.paddingForPopups"></a>paddingForPopups</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link118 onMouseOver="ShowTip(event, 'tt5', 'link118')" onMouseOut="HideTip('tt5')">OpenLayers.Bounds</a>} Outside margin of the popup.  Used to prevent the popup from getting too close to the map border.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.paddingForPopups"></a>paddingForPopups</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link120 onMouseOver="ShowTip(event, 'tt8', 'link120')" onMouseOut="HideTip('tt8')">OpenLayers.Bounds</a>} Outside margin of the popup.  Used to prevent the popup from getting too close to the map border.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minPx"></a>minPx</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link119 onMouseOver="ShowTip(event, 'tt8', 'link119')" onMouseOut="HideTip('tt8')">OpenLayers.Pixel</a>} Lower left of maxExtent in viewport pixel space.  Used to verify in moveByPx that the new location we’re moving to is valid.  It is also used in the getLonLatFromViewPortPx functio [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.minPx"></a>minPx</h3><div class=CBody><p>{Object} An object with a ‘x’ and ‘y’ values that is the lower left of maxExtent in viewport pixel space.  Used to verify in moveByPx that the new location we’re moving to is valid.  It is also used in the getLonLatFromViewPortPx function of Layer.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxPx"></a>maxPx</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link120 onMouseOver="ShowTip(event, 'tt8', 'link120')" onMouseOut="HideTip('tt8')">OpenLayers.Pixel</a>} Top right of maxExtent in viewport pixel space.  Used to verify in moveByPx that the new location we’re moving to is valid.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.maxPx"></a>maxPx</h3><div class=CBody><p>{Object} An object with a ‘x’ and ‘y’ values that is the top right of maxExtent in viewport pixel space.  Used to verify in moveByPx that the new location we’re moving to is valid.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.OpenLayers.Map"></a>OpenLayers.Map</h3><div class=CBody><p>Constructor for a new OpenLayers.Map instance.   There are two possible ways to call the map constructor.   See the examples below.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>div</td><td class=CDLDescription>{DOMElement|String}  The element or id of an e [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.OpenLayers.Map"></a>OpenLayers.Map</h3><div class=CBody><p>Constructor for a new OpenLayers.Map instance.   There are two possible ways to call the map constructor.   See the examples below.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>div</td><td class=CDLDescription>{DOMElement|String}  The element or id of an e [...]
 var map = new OpenLayers.Map("map1");
 
 // create a map with non-default options in an element with id "map2"
 var options = {
+    projection: "EPSG:3857",
     maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-    maxResolution: 156543,
-    units: 'm',
-    projection: "EPSG:41001"
+    center: new OpenLayers.LonLat(-12356463.476333, 5621521.4854095)
 };
 var map = new OpenLayers.Map("map2", options);
 
-// map with non-default options - same as above but with a single argument
+// map with non-default options - same as above but with a single argument,
+// a restricted extent, and using arrays for bounds and center
 var map = new OpenLayers.Map({
     div: "map_id",
-    maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-    maxResolution: 156543,
-    units: 'm',
-    projection: "EPSG:41001"
+    projection: "EPSG:3857",
+    maxExtent: [-18924313.432222, -15538711.094146, 18924313.432222, 15538711.094146],
+    restrictedExtent: [-13358338.893333, -9608371.5085962, 13358338.893333, 9608371.5085962],
+    center: [-12356463.476333, 5621521.4854095]
 });
 
 // create a map without a reference to a container - call render later
 var map = new OpenLayers.Map({
-    maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-    maxResolution: 156543,
-    units: 'm',
-    projection: "EPSG:41001"
+    projection: "EPSG:3857",
+    maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000)
 });</pre></blockquote></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Functions"></a>Functions</h3></div></div>
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewport"></a>getViewport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getViewport: function()</td></tr></table></blockquote><p>Get the DOMElement representing the view port.</p><h4 class=CHeading>Returns</h4><p>{DOMElement}</p></div></div></div>
+
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.render"></a>render</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>render: function(</td><td class="PParameter  prettyprint " nowrap>div</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Render the map [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.unloadDestroy"></a>unloadDestroy</h3><div class=CBody><p>Function that is called to destroy the map on page unload. stored here so that if map is manually destroyed, we can unregister this.</p></div></div></div>
@@ -146,27 +146,27 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setOptions"></a>setOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOptions: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getTileSize"></a>getTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileSize: function()</td></tr></table></blockquote><p>Get the tile size for the map</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link123 onMouseOver="ShowTip(event, 'tt1', 'link123')" onMouseOut="H [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getTileSize"></a>getTileSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTileSize: function()</td></tr></table></blockquote><p>Get the tile size for the map</p><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link127 onMouseOver="ShowTip(event, 'tt1', 'link127')" onMouseOut="H [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getBy"></a>getBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBy: function(</td><td class="PParameter  prettyprint " nowrap>array,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersBy"></a>getLayersBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParame [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersBy"></a>getLayersBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParame [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByName"></a>getLayersByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByName"></a>getLayersByName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByName: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByClass"></a>getLayersByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayersByClass"></a>getLayersByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayersByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsBy"></a>getControlsBy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsBy: function(</td><td class="PParameter  prettyprint " nowrap>property,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControlsByClass"></a>getControlsByClass</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControlsByClass: function(</td><td class="PParameter  prettyprint " nowrap>match</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayer"></a>getLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayer: function(</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get a lay [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayer"></a>getLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayer: function(</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get a lay [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setLayerZIndex"></a>setLayerZIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayerZIndex: function (</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zIdx</td><td class="PAfter [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.resetLayersZIndex"></a>resetLayersZIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">resetLayersZIndex: function()</td></tr></table></blockquote><p>Reset each layer’s z-index based on layer’s array index</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addLayer"></a>addLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addLayer"></a>addLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayer: function (</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 clas [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addLayers"></a>addLayers</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addLayers: function (</td><td class="PParameter  prettyprint " nowrap>layers</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
 
@@ -182,61 +182,63 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setBaseLayer"></a>setBaseLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setBaseLayer: function(</td><td class="PParameter  prettyprint " nowrap>newBaseLayer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></b [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControl"></a>addControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControl: function (</td><td class="PParameter  prettyprint " nowrap>control,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters   [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControl"></a>addControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControl: function (</td><td class="PParameter  prettyprint " nowrap>control,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters   [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function (</td><td class="PParameter  prettyprint " nowrap>controls,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>pixels</td><td class="PAfterPara [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControls"></a>addControls</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControls: function (</td><td class="PParameter  prettyprint " nowrap>controls,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>pixels</td><td class="PAfterPara [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControlToMap"></a>addControlToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControlToMap: function (</td><td class="PParameter  prettyprint " nowrap>control,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addControlToMap"></a>addControlToMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addControlToMap: function (</td><td class="PParameter  prettyprint " nowrap>control,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAf [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControl"></a>getControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControl: function (</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getControl"></a>getControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getControl: function (</td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removeControl"></a>removeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeControl: function (</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removeControl"></a>removeControl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeControl: function (</td><td class="PParameter  prettyprint " nowrap>control</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addPopup"></a>addPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPopup: function(</td><td class="PParameter  prettyprint " nowrap>popup,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>exclusive</td><td class="PAfterParameters  pr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.addPopup"></a>addPopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPopup: function(</td><td class="PParameter  prettyprint " nowrap>popup,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>exclusive</td><td class="PAfterParameters  pr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removePopup"></a>removePopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removePopup: function(</td><td class="PParameter  prettyprint " nowrap>popup</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.removePopup"></a>removePopup</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removePopup: function(</td><td class="PParameter  prettyprint " nowrap>popup</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link136 onMouseOver="ShowTip(event, 'tt1', 'link136')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} An <a href= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getSize"></a>getSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getSize: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link140 onMouseOver="ShowTip(event, 'tt1', 'link140')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>} An <a href= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.updateSize"></a>updateSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateSize: function()</td></tr></table></blockquote><p>This function should be called by any external code which dynamically changes the size of the map div (because mozilla wont let us catch the “onresize” for an element)</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCurrentSize"></a>getCurrentSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCurrentSize: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link138 onMouseOver="ShowTip(event, 'tt1', 'link138')" onMouseOut="HideTip('tt1')">OpenLayers.S [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCurrentSize"></a>getCurrentSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCurrentSize: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link142 onMouseOver="ShowTip(event, 'tt1', 'link142')" onMouseOut="HideTip('tt1')">OpenLayers.S [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.calculateBounds"></a>calculateBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateBounds: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolution</td><td clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.calculateBounds"></a>calculateBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateBounds: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolution</td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCenter"></a>getCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenter: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link142 onMouseOver="ShowTip(event, 'tt2', 'link142')" onMouseOut="HideTip('tt2')">OpenLayers.LonLat</a>} [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCenter"></a>getCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCenter: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link146 onMouseOver="ShowTip(event, 'tt2', 'link146')" onMouseOut="HideTip('tt2')">OpenLayers.LonLat</a>} [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCachedCenter"></a>getCachedCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCachedCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link143 onMouseOver="ShowTip(event, 'tt2', 'link143')" onMouseOut="HideTip('tt2')">OpenL [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getCachedCenter"></a>getCachedCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCachedCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=link147 onMouseOver="ShowTip(event, 'tt2', 'link147')" onMouseOut="HideTip('tt2')">OpenL [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoom"></a>getZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getZoom: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer}</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.pan"></a>pan</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pan: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy,</td></tr><tr><td></td><td class="PParameter  prettyprint "  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panTo"></a>panTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>panTo: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Allows user to [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.panTo"></a>panTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>panTo: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Allows user to [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setCenter"></a>setCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCenter: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom,</td></tr><tr><td></td><td class="PP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.setCenter"></a>setCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCenter: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom,</td></tr><tr><td></td><td class="PP [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.moveByPx"></a>moveByPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveByPx: function(</td><td class="PParameter  prettyprint " nowrap>dx,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dy</td><td class="PAfterParameters  prettyprint  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom,</td></tr><tr><td></td><td class="PParameter  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.adjustZoom"></a>adjustZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>adjustZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.centerLayerContainer"></a>centerLayerContainer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>centerLayerContainer: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.centerLayerContainer"></a>centerLayerContainer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>centerLayerContainer: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.isValidZoomLevel"></a>isValidZoomLevel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isValidZoomLevel: function(</td><td class="PParameter  prettyprint " nowrap>zoomLevel</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.isValidLonLat"></a>isValidLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isValidLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.isValidLonLat"></a>isValidLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isValidLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getProjection"></a>getProjection</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getProjection: function()</td></tr></table></blockquote><p>This method returns a string representing the projection.  In the case of projection support, this will be the srsCode which is loaded -- otherwise it will simply be the string value that wa [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getProjectionObject"></a>getProjectionObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getProjectionObject: function()</td></tr></table></blockquote><p>Returns the projection obect from the baselayer.</p><h4 class=CHeading>Returns</h4><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link149 onMouseOver="Sh [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getProjectionObject"></a>getProjectionObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getProjectionObject: function()</td></tr></table></blockquote><p>Returns the projection obect from the baselayer.</p><h4 class=CHeading>Returns</h4><p>{<a href="Projection-js.html#OpenLayers.Projection" class=LClass id=link153 onMouseOver="Sh [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getMaxResolution"></a>getMaxResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMaxResolution: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} The Map’s Maximum Resolution</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMaxExtent: function (</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getMaxExtent"></a>getMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMaxExtent: function (</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getNumZoomLevels"></a>getNumZoomLevels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getNumZoomLevels: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The total number of zoom levels that can be displayed by the current baseLayer.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link151 onMouseOver="ShowTip(event, 'tt5', 'link151')" onMouseOut="HideTip('tt5')">OpenLayers.Bounds</a>} [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getExtent"></a>getExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getExtent: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link155 onMouseOver="ShowTip(event, 'tt8', 'link155')" onMouseOut="HideTip('tt8')">OpenLayers.Bounds</a>} [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getResolution"></a>getResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolution: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The current resolution of the map.  If no baselayer is set, returns null.</p></div></div></div>
 
@@ -244,11 +246,11 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getScale"></a>getScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getScale: function ()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The current scale denominator of the map.  If no baselayer is set, returns null.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function (</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForExtent"></a>getZoomForExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForExtent: function (</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td cla [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getResolutionForZoom"></a>getResolutionForZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResolutionForZoom: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForResolution"></a>getZoomForResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>clos [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getZoomForResolution"></a>getZoomForResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZoomForResolution: function(</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>clos [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomTo"></a>zoomTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomTo: function(</td><td class="PParameter  prettyprint " nowrap>zoom</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Zoom to a spe [...]
 
@@ -256,29 +258,29 @@ var map = new OpenLayers.Map({
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomOut"></a>zoomOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">zoomOut: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToExtent"></a>zoomToExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToExtent: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td class="PAfterPar [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToExtent"></a>zoomToExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToExtent: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td class="PAfterPar [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToMaxExtent"></a>zoomToMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToMaxExtent: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToMaxExtent"></a>zoomToMaxExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToMaxExtent: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.zoomToScale"></a>zoomToScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomToScale: function(</td><td class="PParameter  prettyprint " nowrap>scale,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>closest</td><td class="PAfterParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromViewPortPx"></a>getLonLatFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromViewPortPx: function (</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLonLat"></a>getViewPortPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromPixel"></a>getLonLatFromPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromPixel: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromPixel"></a>getLonLatFromPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromPixel: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getPixelFromLonLat"></a>getPixelFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPixelFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getPixelFromLonLat"></a>getPixelFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPixelFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getGeodesicPixelSize"></a>getGeodesicPixelSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeodesicPixelSize: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getGeodesicPixelSize"></a>getGeodesicPixelSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getGeodesicPixelSize: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLayerPx"></a>getViewPortPxFromLayerPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLayerPx:function(</td><td class="PParameter  prettyprint " nowrap>layerPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getViewPortPxFromLayerPx"></a>getViewPortPxFromLayerPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getViewPortPxFromLayerPx:function(</td><td class="PParameter  prettyprint " nowrap>layerPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromViewPortPx"></a>getLayerPxFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromViewPortPx:function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromViewPortPx"></a>getLayerPxFromViewPortPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromViewPortPx:function(</td><td class="PParameter  prettyprint " nowrap>viewPortPx</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromLayerPx"></a>getLonLatFromLayerPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromLayerPx: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLonLatFromLayerPx"></a>getLonLatFromLayerPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLonLatFromLayerPx: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromLonLat"></a>getLayerPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.getLayerPxFromLonLat"></a>getLayerPxFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLayerPxFromLonLat: function (</td><td class="PParameter  prettyprint " nowrap>lonlat</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Map.Constants"></a>Constants</h3></div></div>
 
@@ -292,15 +294,15 @@ var map = new OpenLayers.Map({
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt4"><div class=CClass>A popup is a small div that can opened and closed on the map. </div></div><div class=CToolTip id="tt5"><div clas [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CClass>Controls affect the display or behavior of the map. </div></div><div class=CToolTip id="tt4"><div class=CClass>A popup is a small div that can opened and closed on the map. </div></div><div class=CToolTip id="tt5"><div clas [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Marker-js.html b/doc/devdocs/files/OpenLayers/Marker-js.html
index 37429c1..b223e3e 100644
--- a/doc/devdocs/files/OpenLayers/Marker-js.html
+++ b/doc/devdocs/files/OpenLayers/Marker-js.html
@@ -42,7 +42,7 @@ markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone())
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.erase"></a>erase</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">erase: function()</td></tr></table></blockquote><p>Erases any drawn elements for this marker.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Move the ma [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function (</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Move the ma [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.isDrawn"></a>isDrawn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">isDrawn: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the marker is drawn.</p></div></div></div>
 
@@ -56,7 +56,7 @@ markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone())
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>display: function(</td><td class="PParameter  prettyprint " nowrap>display</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Hide [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.defaultIcon"></a>defaultIcon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Marker.defaultIcon = function()</td></tr></table></blockquote><p>Creates a default <a href="Icon-js.html#OpenLayers.Icon" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt2', 'link27')" onMouseOut="HideTip('tt2')">OpenLayers.Icon</a>.</p>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Marker.defaultIcon"></a>defaultIcon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Marker.defaultIcon = function()</td></tr></table></blockquote><p>Creates a default <a href="Icon-js.html#OpenLayers.Icon" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt2', 'link26')" onMouseOut="HideTip('tt2')">OpenLayers.Icon</a>.</p>< [...]
 
 </div><!--Content-->
 
@@ -64,10 +64,10 @@ markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone())
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([20, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([21, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Marker/Box-js.html b/doc/devdocs/files/OpenLayers/Marker/Box-js.html
index 7a12078..c02cd01 100644
--- a/doc/devdocs/files/OpenLayers/Marker/Box-js.html
+++ b/doc/devdocs/files/OpenLayers/Marker/Box-js.html
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([20, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([21, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Popup-js.html b/doc/devdocs/files/OpenLayers/Popup-js.html
index 889155e..89e99aa 100644
--- a/doc/devdocs/files/OpenLayers/Popup-js.html
+++ b/doc/devdocs/files/OpenLayers/Popup-js.html
@@ -139,10 +139,10 @@ map.addPopup(popup);</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Popup/Anchored-js.html b/doc/devdocs/files/OpenLayers/Popup/Anchored-js.html
index f1b0f66..73cd9fc 100644
--- a/doc/devdocs/files/OpenLayers/Popup/Anchored-js.html
+++ b/doc/devdocs/files/OpenLayers/Popup/Anchored-js.html
@@ -11,15 +11,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.Anchored"></a>OpenLayers.<wbr>Popup.<wbr>Anchored</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Popup-js.html#OpenLayers.Popup" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Popup</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tabl [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.Anchored"></a>OpenLayers.<wbr>Popup.<wbr>Anchored</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Popup-js.html#OpenLayers.Popup" class=LClass id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">OpenLayers.Popup</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><tabl [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.relativePosition"></a>relativePosition</h3><div class=CBody><p>{String} Relative position of the popup (“br”, “tr”, “tl” or “bl”).</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.keepInMap"></a>keepInMap</h3><div class=CBody><p>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space.  By default, this is set.  If you are creating popups that are near map edges and not allowing pannning, and especially if you have a popup which has a fixedRelativePosition, setting this to false may [...]
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.anchor"></a>anchor</h3><div class=CBody><p>{Object} Object to which we’ll anchor the popup.  Must expose a ‘size’ (<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">OpenLayers.Size</a>) and ‘offset’ (<a href="../BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass  [...]
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.OpenLayers.Popup.Anchored"></a>OpenLayers.<wbr>Popup.<wbr>Anchored</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescription>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=li [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.OpenLayers.Popup.Anchored"></a>OpenLayers.<wbr>Popup.<wbr>Anchored</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescription>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LClass id=li [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.Functions"></a>Functions</h3></div></div>
 
@@ -27,15 +31,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p>Overridden from Popup since user might hide popup and then show() it in a new location (meaning we might want to update the relative position on the show)</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Sinc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Sinc [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize:function(</td><td class="PParameter  prettyprint " nowrap>contentSize</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize:function(</td><td class="PParameter  prettyprint " nowrap>contentSize</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.calculateRelativePosition"></a>calculateRelativePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateRelativePosition:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>) [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.calculateRelativePosition"></a>calculateRelativePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateRelativePosition:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>) [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.updateRelativePosition"></a>updateRelativePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateRelativePosition: function()</td></tr></table></blockquote><p>The popup has been moved to a new relative location, so we may want to make some cosmetic adjustments to it.</p><p>Note that in the classic Anchored popup, t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.updateRelativePosition"></a>updateRelativePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">updateRelativePosition: function()</td></tr></table></blockquote><p>The popup has been moved to a new relative location, so we may want to make some cosmetic adjustments to it.</p><p>Note that in the classic Anchored popup, t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.calculateNewPx"></a>calculateNewPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateNewPx:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.Anchored.calculateNewPx"></a>calculateNewPx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateNewPx:function(</td><td class="PParameter  prettyprint " nowrap>px</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
 
 </div><!--Content-->
 
@@ -43,15 +47,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote>Overridden from Popup since user might hide popup and then show() it in a new l [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote>Overridden from Popup since user might hide popup and then show() it in a new l [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Popup/AnchoredBubble-js.html b/doc/devdocs/files/OpenLayers/Popup/AnchoredBubble-js.html
index f64afbb..3c55853 100644
--- a/doc/devdocs/files/OpenLayers/Popup/AnchoredBubble-js.html
+++ b/doc/devdocs/files/OpenLayers/Popup/AnchoredBubble-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.AnchoredBubble"></a>OpenLayers.<wbr>Popup.<wbr>AnchoredBubble</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Anchored-js.html#OpenLayers.Popup.Anchored" class=LClass >OpenLayers.Popup.Anchored</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.AnchoredBubble"></a>OpenLayers.<wbr>Popup.<wbr>AnchoredBubble</h1><div class=CBody><p>This class is <b>deprecated</b>.  Use {<a href="Anchored-js.html#OpenLayers.Popup.Anchored" class=LClass >OpenLayers.Popup.Anchored</a>} and round corners using CSS3’s border-radius property.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="Anchored-js.html#OpenLayers.Popup.An [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.AnchoredBubble.Properties"></a>Properties</h3></div></div>
 
@@ -49,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Popup/Framed-js.html b/doc/devdocs/files/OpenLayers/Popup/Framed-js.html
index 82a4aff..50d377b 100644
--- a/doc/devdocs/files/OpenLayers/Popup/Framed-js.html
+++ b/doc/devdocs/files/OpenLayers/Popup/Framed-js.html
@@ -57,10 +57,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Popup/FramedCloud-js.html b/doc/devdocs/files/OpenLayers/Popup/FramedCloud-js.html
index 0afc86a..60dca4b 100644
--- a/doc/devdocs/files/OpenLayers/Popup/FramedCloud-js.html
+++ b/doc/devdocs/files/OpenLayers/Popup/FramedCloud-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Framed-js.html#OpenLayers.Popup.Framed" class=LClass >OpenLayers.Popup.Framed</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class=" [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Framed-js.html#OpenLayers.Popup.Framed" class=LClass >OpenLayers.Popup.Framed</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class=" [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.Properties"></a>Properties</h3></div></div>
 
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.panMapIfOutOfView"></a>panMapIfOutOfView</h3><div class=CBody><p>{Boolean} Framed Cloud does pan into view by default.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.imageSize"></a>imageSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.imageSize"></a>imageSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt1', 'link4')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.isAlphaImage"></a>isAlphaImage</h3><div class=CBody><p>{Boolean} The FramedCloud does not use an alpha image (in honor of the good ie6 folk out there)</p></div></div></div>
 
@@ -29,17 +29,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.positionBlocks"></a>positionBlocks</h3><div class=CBody><p>{Object} Hash of differen position blocks, keyed by relativePosition two-character code string (ie “tl”, “tr”, “bl”, “br”)</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.minSize"></a>minSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.minSize"></a>minSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.maxSize"></a>maxSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.maxSize"></a>maxSize</h3><div class=CBody><p>{<a href="../BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">OpenLayers.Size</a>}</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescription>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LCl [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Popup.FramedCloud.OpenLayers.Popup.FramedCloud"></a>OpenLayers.<wbr>Popup.<wbr>FramedCloud</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>lonlat</td><td class=CDLDescription>{<a href="../BaseTypes/LonLat-js.html#OpenLayers.LonLat" class=LCl [...]
 
 </div><!--Content-->
 
@@ -47,15 +43,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([21, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([22, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt4"><div class=CClass>This clas [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents a longitude and latitude pair</div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt4"><div class=CClass>The icon represents a graphical icon on the screen. </div></div><!--END_ND_TOOLTIPS-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Projection-js.html b/doc/devdocs/files/OpenLayers/Projection-js.html
index ee057fe..6d1b5ab 100644
--- a/doc/devdocs/files/OpenLayers/Projection-js.html
+++ b/doc/devdocs/files/OpenLayers/Projection-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h1><div class=CBody><p>Class for coordinate transforms between coordinate systems.  Depends on the proj4js library.  If proj4js is not available, then this is just an empty stub.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h1><div class=CBody><p>Methods for coordinate transforms between coordinate systems.   By default, OpenLayers ships with the ability to transform coordinates between geographic (EPSG:4326) and web or spherical mercator (EPSG:900913 et al.) coordinate reference systems.   See the <a href="#OpenLayers.Projection.transform" class=LFunc [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.Properties"></a>Properties</h3></div></div>
 
@@ -23,7 +23,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h3><div class=CBody><p>This class offers several methods for interacting with a wrapped pro4js projection object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>projCode</td><td class=CDLDescription>{String} A string identifying the Well Known Identifier for the pr [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.OpenLayers.Projection"></a>OpenLayers.<wbr>Projection</h3><div class=CBody><p>This class offers several methods for interacting with a wrapped pro4js projection object.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>projCode</td><td class=CDLDescription>{String} A string identifying the Well Known Identifier for the pr [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
@@ -37,17 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Destroy projection object.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.transforms"></a>transforms</h3><div class=CBody><p>Transforms is an object, with from properties, each of which may have a to property.  This allows you to define projections without requiring support for proj4js to be included.</p><p>This object has keys which correspond to a ‘source’ projection object.   The keys should be strings, corresponding to the projection.getCode() val [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.transforms"></a>transforms</h3><div class=CBody><p>{Object} Transforms is an object, with from properties, each of which may have a to property.  This allows you to define projections without requiring support for proj4js to be included.</p><p>This object has keys which correspond to a ‘source’ projection object.   The keys should be strings, corresponding to the projection.getC [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.defaults"></a>defaults</h3><div class=CBody><p>{Object} Defaults for the SRS codes known to OpenLayers (currently EPSG:4326, CRS:84, urn:ogc:def:crs:EPSG:6.6:4326, EPSG:900913, EPSG:3857, EPSG:102113 and EPSG:102100).  Keys are the SRS code, values are units, maxExtent (the validity extent for the SRS) and yx (true if this SRS is known to have a reverse axis order).</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.addTransform"></a>addTransform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.addTransform = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>to,< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.transform = function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>source,</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.transform"></a>transform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.transform = function(</td><td class="PParameter  prettyprint " nowrap>point,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>source,</td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.nullTransform"></a>nullTransform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.nullTransform = function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
-    OpenLayers.Layer.SphericalMercator.projectForward);
-OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:3857",
-    OpenLayers.Layer.SphericalMercator.projectInverse);
-OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:900913",
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Projection.nullTransform"></a>nullTransform</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Projection.nullTransform = function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></t [...]
     OpenLayers.Projection.nullTransform);
 OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:3857",
     OpenLayers.Projection.nullTransform);</pre></blockquote></div></div></div>
@@ -58,10 +56,10 @@ OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:3857&quot
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol-js.html b/doc/devdocs/files/OpenLayers/Protocol-js.html
index dd41425..c44665d 100644
--- a/doc/devdocs/files/OpenLayers/Protocol-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol-js.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol"></a>OpenLayers.<wbr>Protocol</h1><div class=CBody><p>Abstract vector layer protocol class.   Not to be instantiated directly.   Use one of the protocol subclasses instead.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href=" [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol"></a>OpenLayers.<wbr>Protocol</h1><div class=CBody><p>Abstract vector layer protocol class.   Not to be instantiated directly.   Use one of the protocol subclasses instead.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href=" [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.format"></a>format</h3><div class=CBody><p>{<a href="Format-js.html#OpenLayers.Format" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">OpenLayers.Format</a>} The format used by this protocol.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.format"></a>format</h3><div class=CBody><p>{<a href="Format-js.html#OpenLayers.Format" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Format</a>} The format used by this protocol.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.options"></a>options</h3><div class=CBody><p>{Object} Any options sent to the constructor.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.autoDestroy"></a>autoDestroy</h3><div class=CBody><p>{Boolean} The creator of the protocol can set autoDestroy to false to fully control when the protocol is destroyed.  Defaults to true.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.defaultFilter"></a>defaultFilter</h3><div class=CBody><p>{OpenLayers.Filter} Optional default filter to read requests</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.defaultFilter"></a>defaultFilter</h3><div class=CBody><p>{<a href="Filter-js.html#OpenLayers.Filter" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt2', 'link18')" onMouseOut="HideTip('tt2')">OpenLayers.Filter</a>} Optional default filter to read requests</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Constructor"></a>Constructor</h3></div></div>
 
@@ -29,25 +29,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.mergeWithDefaultFilter"></a>mergeWithDefaultFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeWithDefaultFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.mergeWithDefaultFilter"></a>mergeWithDefaultFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeWithDefaultFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Construct a [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Construct a [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">create: function()</td></tr></table></blockquote><p>Construct a request for writing newly created features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>features</td><td class=CDLDe [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">create: function()</td></tr></table></blockquote><p>Construct a request for writing newly created features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>features</td><td class=CDLDe [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">update: function()</td></tr></table></blockquote><p>Construct a request updating modified features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>features</td><td class=CDLDescriptio [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">update: function()</td></tr></table></blockquote><p>Construct a request updating modified features.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>features</td><td class=CDLDescriptio [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">"delete": function()</td></tr></table></blockquote><p>Construct a request deleting a removed feature.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>feature</td><td class=CD [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">"delete": function()</td></tr></table></blockquote><p>Construct a request deleting a removed feature.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>feature</td><td class=CD [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">commit: function()</td></tr></table></blockquote><p>Go over the features and for each take action based on the feature state.  Possible actions are create, update and delete.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">commit: function()</td></tr></table></blockquote><p>Go over the features and for each take action based on the feature state.  Possible actions are create, update and delete.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Abort a [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Abort a [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.createCallback"></a>createCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createCallback: function(</td><td class="PParameter  prettyprint " nowrap>method,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>response,</td></tr><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.createCallback"></a>createCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createCallback: function(</td><td class="PParameter  prettyprint " nowrap>method,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>response,</td></tr><t [...]
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Protocol.Response"></a>OpenLayers.<wbr>Protocol.<wbr>Response</h2><div class=CBody><p>Protocols return Response objects to their users.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Protocol.Response.Properties" >Properties</a></td><td class=SDescription [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Protocol.Response"></a>OpenLayers.<wbr>Protocol.<wbr>Response</h2><div class=CBody><p>Protocols return Response objects to their users.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Protocol.Response.Properties" >Properties</a></td><td class=SDescription [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.Properties"></a>Properties</h3></div></div>
 
@@ -57,9 +57,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.last"></a>last</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Boolean}</td><td class=CDLDescription>true if this is the last response expected in a commit, false otherwise, defaults to true.</td></tr></table></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.features"></a>features</h3><div class=CBody><p>{Array({<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link40 onMouseOver="ShowTip(event, 'tt11', 'link40')" onMouseOut="HideTip('tt11')">OpenLayers.Feature.Vector</a>})} or {<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link41 onMouseOver="ShowTip(event, 'tt11', 'link41')" onMouseOut="HideT [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.features"></a>features</h3><div class=CBody><p>{Array({<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link43 onMouseOver="ShowTip(event, 'tt12', 'link43')" onMouseOut="HideTip('tt12')">OpenLayers.Feature.Vector</a>})} or {<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link44 onMouseOver="ShowTip(event, 'tt12', 'link44')" onMouseOut="HideT [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.reqFeatures"></a>reqFeatures</h3><div class=CBody><p>{Array({<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link42 onMouseOver="ShowTip(event, 'tt11', 'link42')" onMouseOut="HideTip('tt11')">OpenLayers.Feature.Vector</a>})} or {<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link43 onMouseOver="ShowTip(event, 'tt11', 'link43')" onMouseOut= [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.data"></a>data</h3><div class=CBody><p>{Object} The data returned in the response by the server.  Depending on the protocol’s read payload, either features or data will be populated.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.reqFeatures"></a>reqFeatures</h3><div class=CBody><p>{Array({<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link45 onMouseOver="ShowTip(event, 'tt12', 'link45')" onMouseOut="HideTip('tt12')">OpenLayers.Feature.Vector</a>})} or {<a href="Feature/Vector-js.html#OpenLayers.Feature.Vector" class=LClass id=link46 onMouseOver="ShowTip(event, 'tt12', 'link46')" onMouseOut= [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Response.priv"></a>priv</h3></div></div>
 
@@ -79,15 +81,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeWithDefaultFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>) [...]
+<div class=CToolTip id="tt1"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt2"><div class=CClass>This class represents an OGC Filter.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeWithDefaultFilter: function(</td><td class= [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/CSW-js.html b/doc/devdocs/files/OpenLayers/Protocol/CSW-js.html
new file mode 100644
index 0000000..de44df7
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Protocol/CSW-js.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.CSW - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.CSW"></a>OpenLayers.<wbr>Protocol.CSW</h1><div class=CBody><p>Used to create a versioned CSW protocol.  Default version is 2.0.2.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Protocol.CSW" >OpenLayers.<wbr>Proto [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.OpenLayers.Protocol.CSW.DEFAULTS"></a>OpenLayers.<wbr>Protocol.<wbr>CSW.<wbr>DEFAULTS</h3></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Protocol/CSW/v2_0_2-js.html b/doc/devdocs/files/OpenLayers/Protocol/CSW/v2_0_2-js.html
new file mode 100644
index 0000000..8577b91
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Protocol/CSW/v2_0_2-js.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.CSW.v2_0_2 - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2"></a>OpenLayers.<wbr>Protocol.<wbr>CSW.<wbr>v2_0_2</h1><div class=CBody><p>CS-W (Catalogue services for the Web) version 2.0.2 protocol.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">OpenLayers.Protocol</a></li></ul><! [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Optional options for the format.   If a format is not provided, this property can be used to extend the default format options.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.OpenLayers.Protocol.CSW.v2_0_2"></a>OpenLayers.<wbr>Protocol.<wbr>CSW.<wbr>v2_0_2</h3><div class=CBody><p>A class for CSW version 2.0.2 protocol management.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance. [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.handleRead"></a>handleRead</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleRead: function(</td><td class="PParameter  prettyprint " nowrap>response,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.CSW.v2_0_2.parseData"></a>parseData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseData: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td cl [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Protocol/HTTP-js.html b/doc/devdocs/files/OpenLayers/Protocol/HTTP-js.html
index 3988a36..41de594 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/HTTP-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/HTTP-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h1><div class=CBody><p>A basic HTTP protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP" class=LConstructor id=link24 onMouseOver="ShowTip(event, 'tt16', 'link24')" onMouseOut="HideTip('tt16')">OpenLayers.Protocol.HTTP</a> constructor.</p><h4 class=CHeading>Inheri [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h1><div class=CBody><p>A basic HTTP protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP" class=LConstructor id=link24 onMouseOver="ShowTip(event, 'tt16', 'link24')" onMouseOut="HideTip('tt16')">OpenLayers.Protocol.HTTP</a> constructor.</p><h4 class=CHeading>Inheri [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.Properties"></a>Properties</h3></div></div>
 
@@ -27,45 +27,49 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.readWithPOST"></a>readWithPOST</h3><div class=CBody><p>{Boolean} true if read operations are done with POST requests instead of GET, defaults to false.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.updateWithPOST"></a>updateWithPOST</h3><div class=CBody><p>{Boolean} true if update operations are done with POST requests defaults to false.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.deleteWithPOST"></a>deleteWithPOST</h3><div class=CBody><p>{Boolean} true if delete operations are done with POST requests defaults to false. if true, POST data is set to output of format.write().</p></div></div></div>
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.wildcarded"></a>wildcarded.</h3><div class=CBody><p>{Boolean} If true percent signs are added around values read from LIKE filters, for example if the protocol read method is passed a LIKE filter whose property is “foo” and whose value is “bar” the string “foo__ilike=%bar%” will be sent in the query string; defaults to false.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.srsInBBOX"></a>srsInBBOX</h3><div class=CBody><p>{Boolean} Include the SRS identifier in BBOX query string parameter.  Default is false.   If true and the layer has a projection object set, any BBOX filter will be serialized with a fifth item identifying the projection.   E.g. bbox=-1000,-1000,1000,1000,EPSG:900913</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h3><div class=CBody><p>A class for giving layers generic HTTP protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CH [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.OpenLayers.Protocol.HTTP"></a>OpenLayers.<wbr>Protocol.HTTP</h3><div class=CBody><p>A class for giving layers generic HTTP protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CH [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.filterToParams"></a>filterToParams</h3><div class=CBody><p>Optional method to translate an <a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt7', 'link32')" onMouseOut="HideTip('tt7')">OpenLayers.Filter</a> object into an object that can be serialized as request query string provided.   If a custom method is not provided, the filter will be ser [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.filterToParams"></a>filterToParams</h3><div class=CBody><p>Optional method to translate an <a href="../Filter-js.html#OpenLayers.Filter" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt7', 'link32')" onMouseOut="HideTip('tt7')">OpenLayers.Filter</a> object into an object that can be serialized as request query string provided.   If a custom method is not provided, the filter will be ser [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Constr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Constr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleRead"></a>handleRead</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleRead: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleRead"></a>handleRead</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleRead: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterP [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleCreate"></a>handleCreate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleCreate: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleCreate"></a>handleCreate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleCreate: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleUpdate"></a>handleUpdate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleUpdate: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleUpdate"></a>handleUpdate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleUpdate: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAft [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAft [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleDelete"></a>handleDelete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleDelete: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleDelete"></a>handleDelete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleDelete: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="P [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleResponse"></a>handleResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleResponse: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.handleResponse"></a>handleResponse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleResponse: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.parseFeatures"></a>parseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.parseFeatures"></a>parseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameter [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ab [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Ab [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.callUserCallback"></a>callUserCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>callUserCallback: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.HTTP.callUserCallback"></a>callUserCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>callUserCallback: function(</td><td class="PParameter  prettyprint " nowrap>resp,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td> [...]
 
 </div><!--Content-->
 
@@ -73,15 +77,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Construct a request for reading new features.</div></div><div class=CToolTip id="tt2">< [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Construct a request for reading new features.</div></div><div class=CToolTip id="tt2">< [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/SOS-js.html b/doc/devdocs/files/OpenLayers/Protocol/SOS-js.html
index ce3500f..e43ea07 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/SOS-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/SOS-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SOS.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/SOS.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="Con [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html
index 2c7cf55..ef05416 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/SOS/v1_0_0-js.html
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.OpenLayers.Protocol.SOS"></a>OpenLayers.<wbr>Protocol.SOS</h3><div class=CBody><p>A class for giving layers an SOS protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.  Valid options properties: [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.OpenLayers.Protocol.SOS"></a>OpenLayers.<wbr>Protocol.SOS</h3><div class=CBody><p>A class for giving layers an SOS protocol.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} Optional object whose properties will be set on the instance.</td></tr></table><h4 class=CHea [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SOS.v1_0_0.Functions"></a>Functions</h3></div></div>
 
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/SQL-js.html b/doc/devdocs/files/OpenLayers/Protocol/SQL-js.html
deleted file mode 100644
index 4dfc7e3..0000000
--- a/doc/devdocs/files/OpenLayers/Protocol/SQL-js.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.SQL - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h1><div class=CBody><p>Abstract SQL protocol class.   Not to be instantiated directly.   Use one of the SQL protocol subclasses instead.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="../Protocol-js.html#OpenLayers.Protocol" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')"> [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.databaseName"></a>databaseName</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.tableName"></a>tableName</h3><div class=CBody><p>Name of the database table into which Features should be saved.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.postReadFiltering"></a>postReadFiltering</h3><div class=CBody><p>{Boolean} Whether the filter (if there’s one) must be applied after the features have been read from the database; for example the BBOX strategy passes the read method a BBOX spatial filter, if postReadFiltering is true every feature read from the database will go through the BBOX spatial filter, which can be costly; defaults to [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h3></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>This should be overridden by specific subclasses</p><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SQL backend</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.evaluateFilter"></a>evaluateFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluateFilter: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>filter</td><td c [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([22, 24, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>This should be overridden by specific subclasses</di [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Protocol/SQL/Gears-js.html b/doc/devdocs/files/OpenLayers/Protocol/SQL/Gears-js.html
deleted file mode 100644
index 4d84ce7..0000000
--- a/doc/devdocs/files/OpenLayers/Protocol/SQL/Gears-js.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Protocol.SQL.Gears - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad( [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h1><div class=CBody><p>This Protocol stores feature in the browser via the Gears Database module <a href="http://code.google.com/apis/gears/api_database.html" class=LURL target=_top>http://code.google.com<wbr>/apis<wbr>/gears<wbr>/api_database.html</a>.</p><p>The main advantage is that all the read, create, update an [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.FID_PREFIX"></a>FID_PREFIX</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.NULL_GEOMETRY"></a>NULL_GEOMETRY</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.NULL_FEATURE_STATE"></a>NULL_FEATURE_STATE</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.jsonParser"></a>jsonParser</h3><div class=CBody><p>{<a href="../../Format/JSON-js.html#OpenLayers.Format.JSON" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt1', 'link21')" onMouseOut="HideTip('tt1')">OpenLayers.Format.JSON</a>}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.wktParser"></a>wktParser</h3><div class=CBody><p>{<a href="../../Format/WKT-js.html#OpenLayers.Format.WKT" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt2', 'link22')" onMouseOut="HideTip('tt2')">OpenLayers.Format.WKT</a>}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.fidRegExp"></a>fidRegExp</h3><div class=CBody><p>{RegExp} Regular expression to know whether a feature was created in offline mode.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.saveFeatureState"></a>saveFeatureState</h3><div class=CBody><p>{Boolean} Whether to save the feature state (<OpenLayers.State>) into the database, defaults to true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.typeOfFid"></a>typeOfFid</h3><div class=CBody><p>{String} The type of the feature identifier, either “number” or “string”, defaults to “string”.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.db"></a>db</h3><div class=CBody><p>{GearsDatabase}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h3></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.initializeDatabase"></a>initializeDatabase</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initializeDatabase: function()</td></tr></table></blockquote></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>Determine whether a browser supports Gears</p><h4 class=CHeading>Returns</h4><p>{Boolean} The browser supports Gears</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>R [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.unfreezeFeature"></a>unfreezeFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unfreezeFeature: function(</td><td class="PParameter  prettyprint " nowrap>row</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.extractFidFromField"></a>extractFidFromField</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extractFidFromField: function(</td><td class="PParameter  prettyprint " nowrap>field</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.createOrUpdate"></a>createOrUpdate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createOrUpdate: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.freezeFeature"></a>freezeFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>freezeFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.getFeatureStateForFreeze"></a>getFeatureStateForFreeze</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureStateForFreeze: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "n [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.createdOffline"></a>createdOffline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createdOffline: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Removes all rows of the table.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.callUserCallback"></a>callUserCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>callUserCallback: function(</td><td class="PParameter  prettyprint " nowrap>options,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resp [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([22, 24, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A parser to read/write JSON safely. </div></div><div class=CToolTip id="tt2"><div class=CClass>Class for reading and writing Well-Known Text. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initializeDatabase: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><tab [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Protocol/Script-js.html b/doc/devdocs/files/OpenLayers/Protocol/Script-js.html
index 2c18ef1..52c0b7c 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/Script-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/Script-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.Script"></a>OpenLayers.<wbr>Protocol.<wbr>Script</h1><div class=CBody><p>A basic Script protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.Script.OpenLayers.Protocol.Script" class=LConstructor id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">OpenLayers.Protocol.Script</a> constructor.   A sc [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Protocol.Script"></a>OpenLayers.<wbr>Protocol.<wbr>Script</h1><div class=CBody><p>A basic Script protocol for vector layers.   Create a new instance with the <a href="#OpenLayers.Protocol.Script.OpenLayers.Protocol.Script" class=LConstructor id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">OpenLayers.Protocol.Script</a> constructor.   A sc [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.Properties"></a>Properties</h3></div></div>
 
@@ -21,13 +21,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callback"></a>callback</h3><div class=CBody><p>{Object} Function to be called when the <a href="#OpenLayers.Protocol.Script.read" class=LFunction id=link16 onMouseOver="ShowTip(event, 'tt1', 'link16')" onMouseOut="HideTip('tt1')">read</a> operation completes.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.scope"></a>scope</h3><div class=CBody><p>{Object} Optional ``this`` object for the callback.  Read-only, set through the options passed to the constructor.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackTemplate"></a>callbackTemplate</h3><div class=CBody><p>{String} Template for creating a unique callback function name for the registry.  Should include ${id}.   The ${id} variable will be replaced with a string identifier prefixed with a “c” (e.g. c1, c2).  Default is “OpenLayers.Protocol.Script.registry.${id}”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackKey"></a>callbackKey</h3><div class=CBody><p>{String} The name of the query string parameter that the service recognizes as the callback identifier.   Default is “callback”.  This key is used to generate the URL for the script.   For example setting <a href="#OpenLayers.Protocol.Script.callbackKey" class=LProperty id=link17 onMouseOver="ShowTip(event, 'tt15', ' [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt2', 'link17')" onMouseOut="HideTip('tt2')">OpenLayers.Format</a>} Format for parsing features.   Default is an <a href="../Format/GeoJSON-js.html#OpenLayers.Format.GeoJSON" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt15', 'link18')" onMous [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackPrefix"></a>callbackPrefix</h3><div class=CBody><p>{String} Where a service requires that the callback query string parameter value is prefixed by some string, this value may be set.  For example, setting <a href="#OpenLayers.Protocol.Script.callbackPrefix" class=LProperty id=link18 onMouseOver="ShowTip(event, 'tt16', 'link18')" onMouseOut="HideTip('tt16')">callbackPrefix</a> to &ld [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackKey"></a>callbackKey</h3><div class=CBody><p>{String} The name of the query string parameter that the service recognizes as the callback identifier.   Default is “callback”.  This key is used to generate the URL for the script.   For example setting <a href="#OpenLayers.Protocol.Script.callbackKey" class=LProperty id=link19 onMouseOver="ShowTip(event, 'tt16', ' [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.scope"></a>scope</h3><div class=CBody><p>{Object} Optional ``this`` object for the callback.  Read-only, set through the options passed to the constructor.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.callbackPrefix"></a>callbackPrefix</h3><div class=CBody><p>{String} Where a service requires that the callback query string parameter value is prefixed by some string, this value may be set.  For example, setting <a href="#OpenLayers.Protocol.Script.callbackPrefix" class=LProperty id=link20 onMouseOver="ShowTip(event, 'tt17', 'link20')" onMouseOut="HideTip('tt17')">callbackPrefix</a> to &ld [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.format"></a>format</h3><div class=CBody><p>{<a href="../Format-js.html#OpenLayers.Format" class=LClass id=link19 onMouseOver="ShowTip(event, 'tt2', 'link19')" onMouseOut="HideTip('tt2')">OpenLayers.Format</a>} Format for parsing features.   Default is an <a href="../Format/GeoJSON-js.html#OpenLayers.Format.GeoJSON" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt17', 'link20')" onMous [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.pendingRequests"></a>pendingRequests</h3><div class=CBody><p>{Object} References all pending requests.   Property names are script identifiers and property values are script elements.</p></div></div></div>
 
@@ -57,9 +59,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.OpenLayers.Protocol.Script.register"></a>OpenLayers.<wbr>Protocol.<wbr>Script.<wbr>register</h3><div class=CBody><p>Register a callback for a newly created script.</p><h4 class=CHeading>Parameters</h4><p>callback: {Function} The callback to be executed when the newly added script loads.   This callback will be called with a single argument that is the JSON returned by the service.</p><h4 cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.OpenLayers.Protocol.Script.register"></a>OpenLayers.<wbr>Protocol.<wbr>Script.<wbr>register</h3><div class=CBody><p>Register a callback for a newly created script.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>callback</td><td class=CDLDescription>{Function} The callback to be executed when the newly added script lo [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.OpenLayers.Protocol.Script.unregister"></a>OpenLayers.<wbr>Protocol.<wbr>Script.<wbr>unregister</h3><div class=CBody><p>Unregister a callback previously registered with the register function.</p><h4 class=CHeading>Parameters</h4><p>id: {Number} The identifer returned by the register function.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.Script.OpenLayers.Protocol.Script.unregister"></a>OpenLayers.<wbr>Protocol.<wbr>Script.<wbr>unregister</h3><div class=CBody><p>Unregister a callback previously registered with the register function.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>{Number} The identifer returned by the register [...]
 
 </div><!--Content-->
 
@@ -67,15 +69,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([23, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Construct a request for reading new features.</div></div><div class=CToolTip id="tt2">< [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Construct a request for reading new features.</div></div><div class=CToolTip id="tt2">< [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/WFS-js.html b/doc/devdocs/files/OpenLayers/Protocol/WFS-js.html
index 3bea40b..a4e0346 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/WFS-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/WFS-js.html
@@ -21,7 +21,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.fromWMSLayer"></a>fromWMSLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Protocol.WFS.fromWMSLayer = function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.fromWMSLayer"></a>fromWMSLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Protocol.WFS.fromWMSLayer = function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.Constants"></a>Constants</h3></div></div>
 
@@ -33,15 +33,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Protocol.WFS.fromWMSLayer = function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Protocol.WFS.fromWMSLayer = function(</td><td class="PParameter  prettyprint " nowrap>layer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/WFS/v1-js.html b/doc/devdocs/files/OpenLayers/Protocol/WFS/v1-js.html
index e02d986..26cf7d7 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/WFS/v1-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/WFS/v1-js.html
@@ -69,9 +69,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.v1.handleCommit"></a>handleCommit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleCommit: function(</td><td class="PParameter  prettyprint " nowrap>response,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.v1.filterDelete"></a>filterDelete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>filterDelete: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.v1.filterDelete"></a>filterDelete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>filterDelete: function(</td><td class="PParameter  prettyprint " nowrap>filter,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td clas [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.v1.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.WFS.v1.abort"></a>abort</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
 </div><!--Content-->
 
@@ -79,15 +79,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><tabl [...]
+<div class=CToolTip id="tt1"><div class=CClass>Base class for format reading/writing a variety of formats. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up the protocol.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><tabl [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html b/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html
index f63f422..c6766d4 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_0_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html b/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html
index 4e4bbe0..a8fe2c3 100644
--- a/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html
+++ b/doc/devdocs/files/OpenLayers/Protocol/WFS/v1_1_0-js.html
@@ -27,10 +27,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([23, 24, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([24, 25, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Renderer-js.html b/doc/devdocs/files/OpenLayers/Renderer-js.html
index e957beb..c98b213 100644
--- a/doc/devdocs/files/OpenLayers/Renderer-js.html
+++ b/doc/devdocs/files/OpenLayers/Renderer-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer"></a>OpenLayers.<wbr>Renderer</h1><div class=CBody><p>This is the base class for all renderers.</p><p>This is based on a merger code written by Paul Spencer and Bertil Chapuis.  It is largely composed of virtual functions that are to be implemented in technology-specific subclasses, but there is some generic code too.</p><p>The functions that <b>are</b> implemented here m [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer"></a>OpenLayers.<wbr>Renderer</h1><div class=CBody><p>This is the base class for all renderers.</p><p>This is based on a merger code written by Paul Spencer and Bertil Chapuis.  It is largely composed of virtual functions that are to be implemented in technology-specific subclasses, but there is some generic code too.</p><p>The functions that <b>are</b> implemented here m [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Properties"></a>Properties</h3></div></div>
 
@@ -19,19 +19,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.root"></a>root</h3><div class=CBody><p>{DOMElement}</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.extent"></a>extent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">OpenLayers.Bounds</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.extent"></a>extent</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt1', 'link21')" onMouseOut="HideTip('tt1')">OpenLayers.Bounds</a>}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.locked"></a>locked</h3><div class=CBody><p>{Boolean} If the renderer is currently in a state where many things are changing, the ‘locked’ property is set to true.  This means that renderers can expect at least one more drawFeature event to be called with the ‘locked’ property set to ‘true’: In some renderers, this might make sense to use as a ‘only update  [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt2', 'link21')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>}</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt2', 'link22')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>}</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.resolution"></a>resolution</h3><div class=CBody><p>{Float} cache of current map resolution</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.map"></a>map</h3><div class=CBody><p>{<a href="Map-js.html#OpenLayers.Map" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt3', 'link22')" onMouseOut="HideTip('tt3')">OpenLayers.Map</a>} Reference to the map -- this is set in Vector’s setMap()</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.map"></a>map</h3><div class=CBody><p>{<a href="Map-js.html#OpenLayers.Map" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt3', 'link23')" onMouseOut="HideTip('tt3')">OpenLayers.Map</a>} Reference to the map -- this is set in Vector’s setMap()</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.featureDx"></a>featureDx</h3><div class=CBody><p>{Number} Feature offset in x direction.  Will be calculated for and applied to the current feature while rendering (see <a href="#OpenLayers.Renderer.calculateFeatureDx" class=LFunction id=link24 onMouseOver="ShowTip(event, 'tt10', 'link24')" onMouseOut="HideTip('tt10')">calculateFeatureDx</a>).</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.OpenLayers.Renderer"></a>OpenLayers.<wbr>Renderer</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{<a href="BaseTypes-js.html#OpenLayers.String" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt20', 'link23')" onMouseOut="HideTip('tt20')">String</a>}</td></tr [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.OpenLayers.Renderer"></a>OpenLayers.<wbr>Renderer</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{<a href="BaseTypes-js.html#OpenLayers.String" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt21', 'link25')" onMouseOut="HideTip('tt21')">String</a>}</td></tr [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Functions"></a>Functions</h3></div></div>
 
@@ -39,27 +41,29 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>This should be overridden by specific subclasses</p><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the renderer class</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td class="PAf [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Sets  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Sets  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.getResolution"></a>getResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolution: function()</td></tr></table></blockquote><p>Uses cached copy of resolution if available to minimize computing</p><h4 class=CHeading>Returns</h4><p>{Float} The current map’s resolution</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.getResolution"></a>getResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getResolution: function()</td></tr></table></blockquote><p>Uses cached copy of resolution if available to minimize computing</p><h4 class=CHeading>Returns</h4><p>The current map’s resolution</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfterPa [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfterPa [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.calculateFeatureDx"></a>calculateFeatureDx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateFeatureDx: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>worldBoun [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.drawGeometry"></a>drawGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.drawGeometry"></a>drawGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td cla [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.removeText"></a>removeText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeText: function(</td><td class="PParameter  prettyprint " nowrap>featureId</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Clear all vectors from the renderer. virtual function.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.eraseFeatures"></a>eraseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.eraseFeatures"></a>eraseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.eraseGeometry"></a>eraseGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td><td clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.eraseGeometry"></a>eraseGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td><td clas [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.moveRoot"></a>moveRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveRoot: function(</td><td class="PParameter  prettyprint " nowrap>renderer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
@@ -79,21 +83,23 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
     graphicName: "square"
 };</pre></blockquote></div></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.OpenLayers.Renderer.symbol"></a>OpenLayers.<wbr>Renderer.<wbr>symbol</h3><div class=CBody><p>Coordinate arrays for well known (named) symbols.</p></div></div></div>
+
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class=" [...]
+<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CClass>Instances of OpenLayers.Map are interactive maps embedded in a web page. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class=" [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Renderer/Canvas-js.html b/doc/devdocs/files/OpenLayers/Renderer/Canvas-js.html
index 097980b..cb40875 100644
--- a/doc/devdocs/files/OpenLayers/Renderer/Canvas-js.html
+++ b/doc/devdocs/files/OpenLayers/Renderer/Canvas-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.Canvas"></a>OpenLayers.<wbr>Renderer.<wbr>Canvas</h1><div class=CBody><p>A renderer based on the 2D ‘canvas’ drawing element.</p><h4 class=CHeading>Inherits</h4><ul><li><a href="../Renderer-js.html#OpenLayers.Renderer" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">OpenLayers.Renderer</a></li></ul><!--START_ND_SUM [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.Canvas"></a>OpenLayers.<wbr>Renderer.<wbr>Canvas</h1><div class=CBody><p>A renderer based on the 2D ‘canvas’ drawing element.</p><h4 class=CHeading>Inherits</h4><ul><li><a href="../Renderer-js.html#OpenLayers.Renderer" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">OpenLayers.Renderer</a></li></ul><!--START_ND_SUM [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.Properties"></a>Properties</h3></div></div>
 
@@ -25,49 +25,55 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.pendingRedraw"></a>pendingRedraw</h3><div class=CBody><p>{Boolean} The renderer needs a redraw call to render features added while the renderer was locked.</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.cachedSymbolBounds"></a>cachedSymbolBounds</h3><div class=CBody><p>{Object} Internal cache of calculated symbol extents.</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas"></a>OpenLayers.<wbr>Renderer.<wbr>Canvas</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{<a href="../BaseTypes-js.html#OpenLayers.String" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip( [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas"></a>OpenLayers.<wbr>Renderer.<wbr>Canvas</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{<a href="../BaseTypes-js.html#OpenLayers.String" class=LClass id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip( [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.eraseGeometry"></a>eraseGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setExtent: function()</td></tr></table></blockquote><p>Set the visible part of the layer.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>extent</td><td class=CDLDescripti [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.eraseGeometry"></a>eraseGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the renderer class</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="P [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="P [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawGeometry"></a>drawGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawGeometry"></a>drawGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawExternalGraphic"></a>drawExternalGraphic</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawExternalGraphic: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawExternalGraphic"></a>drawExternalGraphic</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawExternalGraphic: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawNamedSymbol"></a>drawNamedSymbol</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawNamedSymbol: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.setCanvasStyle"></a>setCanvasStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setCanvasStyle: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td cl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.featureIdToHex"></a>featureIdToHex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>featureIdToHex: function(</td><td class="PParameter  prettyprint " nowrap>featureId</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.setHitContextStyle"></a>setHitContextStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setHitContextStyle: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>feat [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.setHitContextStyle"></a>setHitContextStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setHitContextStyle: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>feat [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.renderPath"></a>renderPath</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>renderPath: function(</td><td class="PParameter  prettyprint " nowrap>context,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><t [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>location,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfterPar [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.getLocalXY"></a>getLocalXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLocalXY: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.getLocalXY"></a>getLocalXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLocalXY: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Clear all vectors from the renderer.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.eraseFeatures"></a>eraseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.eraseFeatures"></a>eraseFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseFeatures: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Canvas.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">redraw: function()</td></tr></table></blockquote><p>The real ‘meat’ of the function: any time things have changed, redraw() can be called to loop over all the data and (you guessed it) redraw it.   Unlike Elements-based Renderers, we can&r [...]
 
@@ -85,15 +91,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote> [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setExtent: function()</td></tr></table></blockquote>Set the visible part of the layer.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometr [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Renderer/Elements-js.html b/doc/devdocs/files/OpenLayers/Renderer/Elements-js.html
index f6d2b9b..efd6b07 100644
--- a/doc/devdocs/files/OpenLayers/Renderer/Elements-js.html
+++ b/doc/devdocs/files/OpenLayers/Renderer/Elements-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.ElementsIndexer"></a>OpenLayers.<wbr>ElementsIndexer</h1><div class=CBody><p>This class takes care of figuring out which order elements should be placed in the DOM based on given indexing methods.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a h [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.ElementsIndexer"></a>OpenLayers.<wbr>ElementsIndexer</h1><div class=CBody><p>This class takes care of figuring out which order elements should be placed in the DOM based on given indexing methods.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a h [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.Properties"></a>Properties</h3></div></div>
 
@@ -33,7 +33,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.exists"></a>exists</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>exists: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.exists"></a>exists</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>exists: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.getZIndex"></a>getZIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getZIndex: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
 
@@ -51,7 +51,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_Y_ORDER"></a>Z_ORDER_Y_ORDER</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER_Y_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " n [...]
 
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h2><div class=CBody><p>This is another virtual class in that it should never be instantiated by itself as a Renderer.  It exists because there is <b>tons</b> of shared functionality between different vector libraries which use nodes/elements as a base for rendering vectors.</p><p>The highlevel bits of code that are implemented here are the adding  [...]
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h2><div class=CBody><p>This is another virtual class in that it should never be instantiated by itself as a Renderer.  It exists because there is <b>tons</b> of shared functionality between different vector libraries which use nodes/elements as a base for rendering vectors.</p><p>The highlevel bits of code that are implemented here are the adding  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Properties"></a>Properties</h3></div></div>
 
@@ -65,6 +65,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.xmlns"></a>xmlns</h3><div class=CBody><p>{String}</p></div></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.xOffset"></a>xOffset</h3><div class=CBody><p>{Number} Offset to apply to the renderer viewport translation in x direction.  If the renderer extent’s center is on the right of the dateline (i.e. exceeds the world bounds), we shift the viewport to the left by one world width.  This avoids that features disappear from the map viewport.  Because our dateline handling logic in  [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.rightOfDateLine"></a>rightOfDateLine</h3><div class=CBody><p>{Boolean} Keeps track of the location of the map extent relative to the date line.  The <a href="#OpenLayers.Renderer.Elements.setExtent" class=LFunction id=link67 onMouseOver="ShowTip(event, 'tt14', 'link67')" onMouseOut="HideTip('tt14')">setExtent</a> method compares this value (which is the one from the previous <a href="#Ope [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Indexer"></a>Indexer</h3><div class=CBody><p>{<OpenLayers.ElementIndexer>} An instance of OpenLayers.ElementsIndexer created upon initialization if the zIndexing or yOrdering options passed to this renderer’s constructor are set to true.</p></div></div></div>
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constants"></a>Constants</h3></div></div>
@@ -73,9 +77,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.LABEL_ID_SUFFIX"></a>LABEL_ID_SUFFIX</h3><div class=CBody><p>{String}</p></div></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.LABEL_OUTLINE_SUFFIX"></a>LABEL_OUTLINE_SUFFIX</h3><div class=CBody><p>{String}</p></div></div></div>
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.  Supported opti [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.OpenLayers.Renderer.Elements"></a>OpenLayers.<wbr>Renderer.<wbr>Elements</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.</td></tr></table><h4 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Functions"></a>Functions</h3></div></div>
 
@@ -83,37 +89,37 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Remove all the elements from the root</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td c [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawGeometry"></a>drawGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.redrawNode"></a>redrawNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>redrawNode: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawGeometry"></a>drawGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.redrawBackgroundNode"></a>redrawBackgroundNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>redrawBackgroundNode: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.redrawNode"></a>redrawNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>redrawNode: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawGeometryNode"></a>drawGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.redrawBackgroundNode"></a>redrawBackgroundNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>redrawBackgroundNode: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.postDraw"></a>postDraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>postDraw: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawGeometryNode"></a>drawGeometryNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawGeometryNode: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfte [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.postDraw"></a>postDraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>postDraw: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfte [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class= [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PA [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawSurface"></a>drawSurface</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawSurface: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PA [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.removeText"></a>removeText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeText: function(</td><td class="PParameter  prettyprint " nowrap>featureId</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.eraseGeometry"></a>eraseGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.eraseGeometry"></a>eraseGeometry</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>eraseGeometry: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>featureId</td [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.nodeFactory"></a>nodeFactory</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>nodeFactory: function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>type</td><td class="PAfte [...]
 
@@ -121,31 +127,27 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.createNode"></a>createNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createNode: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterPa [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.moveRoot"></a>moveRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveRoot: function(</td><td class="PParameter  prettyprint " nowrap>renderer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.moveRoot"></a>moveRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveRoot: function(</td><td class="PParameter  prettyprint " nowrap>renderer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.getRenderLayerId"></a>getRenderLayerId</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getRenderLayerId: function()</td></tr></table></blockquote><p>Gets the layer that this renderer’s output appears on.  If moveRoot was used, this will be different from the id of the layer containing the features rendered by [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.isComplexSymbol"></a>isComplexSymbol</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>isComplexSymbol: function(</td><td class="PParameter  prettyprint " nowrap>graphicName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
 
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.Elements.OpenLayers.Renderer.symbol"></a>OpenLayers.<wbr>Renderer.<wbr>symbol</h3><div class=CBody><p>Coordinate arrays for well known (named) symbols.</p></div></div></div>
-
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initialize: function(</td><td class="PParameter  prettyprint " nowrap>yOrdering</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new indexer with</div></div><div class=CToolTip id="tt2"><div class=CF [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>initialize: function(</td><td class="PParameter  prettyprint " nowrap>yOrdering</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new indexer with</div></div><div class=CToolTip id="tt2"><div class=CF [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Renderer/NG-js.html b/doc/devdocs/files/OpenLayers/Renderer/NG-js.html
deleted file mode 100644
index c8ca624..0000000
--- a/doc/devdocs/files/OpenLayers/Renderer/NG-js.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Renderer.NG - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();">< [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="Elements-js.html#OpenLayers.Renderer.Elements" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">OpenLayers.Renderer.Elements</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class= [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.  To be defined by subclasses.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.  Supported options are:</td></tr></tab [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.updateDimensions"></a>updateDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateDimensions: function(</td><td class="PParameter  prettyprint " nowrap>zoomChanged</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.resize"></a>resize</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfte [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td  [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateDimensions: function(</td><td class="PParameter  prettyprint " nowrap>zoomChanged</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquo [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Renderer/SVG-js.html b/doc/devdocs/files/OpenLayers/Renderer/SVG-js.html
index e230027..1662fad 100644
--- a/doc/devdocs/files/OpenLayers/Renderer/SVG-js.html
+++ b/doc/devdocs/files/OpenLayers/Renderer/SVG-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.SVG"></a>OpenLayers.<wbr>Renderer.SVG</h1><div class=CBody><h4 class=CHeading>Inherits</h4><ul><li><a href="Elements-js.html#OpenLayers.Renderer.Elements" class=LClass id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')">OpenLayers.Renderer.Elements</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.SVG"></a>OpenLayers.<wbr>Renderer.SVG</h1><div class=CBody><h4 class=CHeading>Inherits</h4><ul><li><a href="Elements-js.html#OpenLayers.Renderer.Elements" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')">OpenLayers.Renderer.Elements</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.Properties"></a>Properties</h3></div></div>
 
@@ -39,13 +39,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.inValidRange"></a>inValidRange</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>inValidRange: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y,</td></tr><tr><td></td><td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td class= [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.translate"></a>translate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>translate: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>y</td><td class="PAfterParameters  pr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>S [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>S [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAf [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.setStyle"></a>setStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setStyle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td clas [...]
 
@@ -57,37 +57,35 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.createRenderRoot"></a>createRenderRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createRenderRoot: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} The specific render engine’s root element</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.createRoot"></a>createRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createRoot: function(</td><td class="PParameter  prettyprint " nowrap>suffix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.createRoot"></a>createRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createRoot: function(</td><td class="PParameter  prettyprint " nowrap>suffix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.createDefs"></a>createDefs</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createDefs: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} The element to which we’ll add the symbol definitions</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterPara [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterPara [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAft [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAft [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawSurface"></a>drawSurface</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawSurface: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAft [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getComponentString"></a>getComponentString</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>components</td><td class=CDLDescription>{Array(<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link38 onMouseOver="ShowTip(event, 'tt31', 'link38')" onMouseOut="HideTip('tt31')">OpenL [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getComponentString"></a>getComponentString</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>components</td><td class=CDLDescription>{Array(<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link40 onMouseOver="ShowTip(event, 'tt32', 'link40')" onMouseOut="HideTip('tt32')">OpenL [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.clipLine"></a>clipLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clipLine: function(</td><td class="PParameter  prettyprint " nowrap>badComponent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>goodComponent</td><td class=" [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.clipLine"></a>clipLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clipLine: function(</td><td class="PParameter  prettyprint " nowrap>badComponent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>goodComponent</td><td class=" [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getShortString"></a>getShortString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getShortString: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getShortString"></a>getShortString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getShortString: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getPosition"></a>getPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getPosition: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.importSymbol"></a>importSymbol</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>importSymbol: function (</td><td class="PParameter  prettyprint " nowrap>graphicName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG.Constants"></a>Constants</h3></div></div>
 
@@ -107,15 +105,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>{Boolean} Whether or not the browser supports the SVG renderer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  pret [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>{Boolean} Whether or not the browser supports the SVG renderer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  pret [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Renderer/SVG2-js.html b/doc/devdocs/files/OpenLayers/Renderer/SVG2-js.html
deleted file mode 100644
index 2ec52e0..0000000
--- a/doc/devdocs/files/OpenLayers/Renderer/SVG2-js.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Renderer.SVG2 - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();" [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h1><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="NG-js.html#OpenLayers.Renderer.NG" class=LClass >OpenLayers.Renderer.NG</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SE [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.xmlns"></a>xmlns</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.xlinkns"></a>xlinkns</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.symbolMetrics"></a>symbolMetrics</h3><div class=CBody><p>{Object} Cache for symbol metrics according to their svg coordinate space.  This is an object keyed by the symbol’s id, and values are an object with size, x and y properties.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constructor"></a>Constructor</h3></div></div>
-
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr></table></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SVG renderer</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.updateDimensions"></a>updateDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateDimensions: function(</td><td class="PParameter  prettyprint " nowrap>zoomChanged</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PA [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.setStyle"></a>setStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setStyle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td cla [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.dashStyle"></a>dashStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>widthFactor</td><td class="PAfte [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createNode"></a>createNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createNode: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParame [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.nodeTypeCompare"></a>nodeTypeCompare</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>nodeTypeCompare: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>type</td><td cl [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createRenderRoot"></a>createRenderRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createRenderRoot: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} The specific render engine’s root element</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createRoot"></a>createRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createRoot: function(</td><td class="PParameter  prettyprint " nowrap>suffix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createDefs"></a>createDefs</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createDefs: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} The element to which we’ll add the symbol definitions</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterPar [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td c [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td c [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAf [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td clas [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawSurface"></a>drawSurface</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawSurface: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAf [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><t [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getComponentString"></a>getComponentString</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>components</td><td class=CDLDescription>{Array(<a href="../Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link32 onMouseOver="ShowTip(event, 'tt24', 'link32')" onMouseOut="HideTip('tt24')">Open [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getShortString"></a>getShortString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getShortString: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.importSymbol"></a>importSymbol</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>importSymbol: function (</td><td class="PParameter  prettyprint " nowrap>graphicName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_ALIGN"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_ALIGN</h3><div class=CBody><p>{Object}</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VSHIFT"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VSHIFT</h3><div class=CBody><p>{Object}</p></div></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VFACTOR"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VFACTOR</h3><div class=CBody><p>{Object}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.preventDefault"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>preventDefault</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Renderer.SVG2.preventDefault = function(</td><td class="PParameter  prettyprint " nowrap [...]
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>{Boolean} Whether or not the browser supports the SVG renderer</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  pret [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Renderer/VML-js.html b/doc/devdocs/files/OpenLayers/Renderer/VML-js.html
index b8c4817..4e7e323 100644
--- a/doc/devdocs/files/OpenLayers/Renderer/VML-js.html
+++ b/doc/devdocs/files/OpenLayers/Renderer/VML-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.VML"></a>OpenLayers.<wbr>Renderer.VML</h1><div class=CBody><p>Render vector features in browsers with VML capability.   Construct a new VML renderer with the <a href="#OpenLayers.Renderer.VML.OpenLayers.Renderer.VML" class=LConstructor id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">OpenLayers.Renderer.VML</a> constructor.</p><p>Note  [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Renderer.VML"></a>OpenLayers.<wbr>Renderer.VML</h1><div class=CBody><p>Render vector features in browsers with VML capability.   Construct a new VML renderer with the <a href="#OpenLayers.Renderer.VML.OpenLayers.Renderer.VML" class=LConstructor id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">OpenLayers.Renderer.VML</a> constructor.</p><p>Note  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.Properties"></a>Properties</h3></div></div>
 
@@ -29,19 +29,19 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>Determine whether a browser supports this renderer.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The browser supports the VML renderer</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td class= [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setExtent"></a>setExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setExtent: function(</td><td class="PParameter  prettyprint " nowrap>extent,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resolutionChanged</td><td class= [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>S [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setSize"></a>setSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setSize: function(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>S [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAf [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAf [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setStyle"></a>setStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setStyle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td clas [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setStyle"></a>setStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setStyle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td clas [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.graphicRotate"></a>graphicRotate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>graphicRotate: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>xOffset,</td></tr><tr> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.postDraw"></a>postDraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>postDraw: function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setNodeDimension"></a>setNodeDimension</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setNodeDimension: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.setNodeDimension"></a>setNodeDimension</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setNodeDimension: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.dashStyle"></a>dashStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
@@ -53,25 +53,23 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.createRoot"></a>createRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createRoot: function(</td><td class="PParameter  prettyprint " nowrap>suffix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterPara [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterPara [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td cl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.DrawLine"></a>DrawLine</h3><div class=CBody><p>Render a line.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement}</td></tr><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry-js.html#OpenLayers.Geometry" class=LClass id=link35 onMouseOver="ShowTip( [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.DrawLine"></a>DrawLine</h3><div class=CBody><p>Render a line.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>{DOMElement}</td></tr><tr><td class=CDLEntry>geometry</td><td class=CDLDescription>{<a href="../Geometry-js.html#OpenLayers.Geometry" class=LClass id=link34 onMouseOver="ShowTip( [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAft [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAft [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.drawSurface"></a>drawSurface</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawSurface: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAft [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.moveRoot"></a>moveRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveRoot: function(</td><td class="PParameter  prettyprint " nowrap>renderer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.moveRoot"></a>moveRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveRoot: function(</td><td class="PParameter  prettyprint " nowrap>renderer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.VML.importSymbol"></a>importSymbol</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>importSymbol: function (</td><td class="PParameter  prettyprint " nowrap>graphicName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
@@ -85,15 +83,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([25, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([26, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>Determine whether a browser supports this renderer.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "no [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote>Determine whether a browser supports this renderer.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "no [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Request-js.html b/doc/devdocs/files/OpenLayers/Request-js.html
index b1c4e83..9f33047 100644
--- a/doc/devdocs/files/OpenLayers/Request-js.html
+++ b/doc/devdocs/files/OpenLayers/Request-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Request"></a>OpenLayers.<wbr>Request</h1><div class=CBody><p>The OpenLayers.Request namespace contains convenience methods for working with XMLHttpRequests.   These methods work with a cross-browser W3C compliant <a href="Request/XMLHttpRequest-js.html#OpenLayers.Request.XMLHttpRequest" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10 [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Request"></a>OpenLayers.<wbr>Request</h1><div class=CBody><p>The OpenLayers.Request namespace contains convenience methods for working with XMLHttpRequests.   These methods work with a cross-browser W3C compliant <a href="Request/XMLHttpRequest-js.html#OpenLayers.Request.XMLHttpRequest" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11 [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.Constants"></a>Constants</h3></div></div>
 
@@ -21,25 +21,27 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the {<a href="#OpenLayers.Request" class=LClass id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">OpenLayers.Request</a>} object.</p><h4 class=CHeading>All event listeners will receive an event object wit [...]
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the {<a href="#OpenLayers.Request" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">OpenLayers.Request</a>} object.</p><h4 class=CHeading>All event listeners will receive an event object wit [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.issue"></a>issue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>issue: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a n [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.makeSameOrigin"></a>makeSameOrigin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>makeSameOrigin: function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>proxy</td><td class="PAft [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.issue"></a>issue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>issue: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a n [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.runCallbacks"></a>runCallbacks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>runCallbacks: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.GET"></a>GET</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>GET: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an HTTP GET [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.GET"></a>GET</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>GET: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an HTTP GET [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.POST"></a>POST</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>POST: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send a POST r [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.POST"></a>POST</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>POST: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send a POST r [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.PUT"></a>PUT</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>PUT: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an HTTP PUT [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.PUT"></a>PUT</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>PUT: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an HTTP PUT [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.DELETE"></a>DELETE</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>DELETE: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.DELETE"></a>DELETE</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>DELETE: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.HEAD"></a>HEAD</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>HEAD: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an HTTP  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.HEAD"></a>HEAD</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>HEAD: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send an HTTP  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.OPTIONS"></a>OPTIONS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OPTIONS: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Request.OPTIONS"></a>OPTIONS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OPTIONS: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Send [...]
 
 </div><!--Content-->
 
@@ -47,15 +49,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([26, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([27, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>The OpenLayers.Request namespace contains convenience methods for working with XMLHttpRequests. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>issue: function(</td><td class="PParameter  prettyprint " nowrap>config</td><td class="PAfterParameters  pr [...]
+<div class=CToolTip id="tt1"><div class=CClass>The OpenLayers.Request namespace contains convenience methods for working with XMLHttpRequests. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>makeSameOrigin: function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td cl [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Request/XMLHttpRequest-js.html b/doc/devdocs/files/OpenLayers/Request/XMLHttpRequest-js.html
index 3892ec1..b2af621 100644
--- a/doc/devdocs/files/OpenLayers/Request/XMLHttpRequest-js.html
+++ b/doc/devdocs/files/OpenLayers/Request/XMLHttpRequest-js.html
@@ -19,10 +19,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([26, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([27, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Rule-js.html b/doc/devdocs/files/OpenLayers/Rule-js.html
index 4d8ffbd..20cf4ea 100644
--- a/doc/devdocs/files/OpenLayers/Rule-js.html
+++ b/doc/devdocs/files/OpenLayers/Rule-js.html
@@ -57,10 +57,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/SingleFile-js.html b/doc/devdocs/files/OpenLayers/SingleFile-js.html
index c8e77b4..34ec07f 100644
--- a/doc/devdocs/files/OpenLayers/SingleFile-js.html
+++ b/doc/devdocs/files/OpenLayers/SingleFile-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/SingleFile.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="Conten [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/SingleFile.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLo [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="SingleFile.js"></a>SingleFile.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#SingleFile.js" >SingleFile.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td c [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="SingleFile.js"></a>SingleFile.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#SingleFile.js" >SingleFile.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td c [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constants"></a>Constants</h3></div></div>
 
@@ -23,16 +23,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="_getScriptLocation"></a>_getScriptLocation</h3><div class=CBody><p>Return the path to this script.  This is also implemented in OpenLayers.js</p><h4 class=CHeading>Returns</h4><p>{String} Path to this script</p></div></div></div>
 
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="ImgPath"></a>ImgPath</h3><div class=CBody><p>{String} Set this to the path where control images are stored, a path given here must end with a slash.  If set to ‘’ (which is the default) OpenLayers will use its script location + “img/”.</p><p>You will need to set this property when you have a singlefile build of OpenLayers that either is not named “OpenLayers.js” or if you move the  [...]
+<script type="text/javascript">
+   // tell OpenLayers where the control images are
+   // remember the trailing slash
+   OpenLayers.ImgPath = "/resources/external/images/ol/";
+</script></pre></blockquote><p>Please remember that when your OpenLayers script is not named “OpenLayers.js” you will have to make sure that the default theme is loaded into the page by including an appropriate <link>-tag, e.g.:</p><blockquote><pre class="prettyprint"><link rel="stylesheet" href="/path/to/default/style.css"  type="text/css"></pre></blockquote></div></div></div>
+
 </div><!--Content-->
 
 
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Spherical-js.html b/doc/devdocs/files/OpenLayers/Spherical-js.html
new file mode 100644
index 0000000..64f74f8
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Spherical-js.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Spherical - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Spherical"></a>Spherical</h1><div class=CBody><p>The OpenLayers.Spherical namespace includes utility functions for calculations on the basis of a spherical earth (ignoring ellipsoidal effects), which is accurate enough for most purposes.</p><h4 class=CHeading>Relevant links</h4><ul><li><a href="http://www.movable-type.co.uk/scripts/latlong.html" class=LURL target=_top>http://www.movable-type.co.u [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Spherical.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Spherical.computeDistanceBetween"></a>computeDistanceBetween</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Spherical.computeDistanceBetween = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettypr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Spherical.computeHeading"></a>computeHeading</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Spherical.computeHeading = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>to</td><td  [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Spherical.computeDistanceBetween = function(</td><td class="PParameter  prettyprint " nowrap>from,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>to,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>radius</td><td c [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Strategy-js.html b/doc/devdocs/files/OpenLayers/Strategy-js.html
index 4d9d72c..40b6140 100644
--- a/doc/devdocs/files/OpenLayers/Strategy-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy-js.html
@@ -33,7 +33,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the strategy.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>C [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.setLayer"></a>setLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setLayer: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>C [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.activate"></a>activate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote><p>Activate the strategy.   Register any listeners, do appropriate setup.</p><h4 class=CHeading>Returns</h4><p>{Boolean} True if the strategy was successfully activated or false if the strategy was alrea [...]
 
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/BBOX-js.html b/doc/devdocs/files/OpenLayers/Strategy/BBOX-js.html
index 47cffab..c4bf8bc 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/BBOX-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/BBOX-js.html
@@ -35,7 +35,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.deactivate"></a>deactivate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote><p>Tear down strategy with regard to reading new batches of remote data.</p><h4 class=CHeading>Returns</h4><p>{Boolean} The strategy was successfully deactivated.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.getMapBounds"></a>getMapBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapBounds: function()</td></tr></table></blockquote><p>Get the map bounds expressed in the same projection as this layer.</p><h4 class=CHeading>Returns</h4><p>{<a href="../BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link15 onMo [...]
 
@@ -43,7 +43,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.calculateBounds"></a>calculateBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>calculateBounds: function(</td><td class="PParameter  prettyprint " nowrap>mapBounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.triggerRead"></a>triggerRead</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>triggerRead: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.triggerRead"></a>triggerRead</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>triggerRead: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.BBOX.createFilter"></a>createFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createFilter: function()</td></tr></table></blockquote><p>Creates a spatial BBOX filter.  If the layer that this strategy belongs to has a filter property, this filter will be combined with the BBOX filter.</p><p>Returns {<a href="../Filter- [...]
 
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/Cluster-js.html b/doc/devdocs/files/OpenLayers/Strategy/Cluster-js.html
index 3ffb07c..6dbdbb3 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/Cluster-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/Cluster-js.html
@@ -57,10 +57,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/Filter-js.html b/doc/devdocs/files/OpenLayers/Strategy/Filter-js.html
index e519ea9..b04232e 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/Filter-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/Filter-js.html
@@ -35,7 +35,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Filter.handleRemove"></a>handleRemove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handleRemove: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Filter.setFilter"></a>setFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Filter.setFilter"></a>setFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setFilter: function(</td><td class="PParameter  prettyprint " nowrap>filter</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></bloc [...]
 
 </div><!--Content-->
 
@@ -43,10 +43,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/Fixed-js.html b/doc/devdocs/files/OpenLayers/Strategy/Fixed-js.html
index 7fc8039..3108bc9 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/Fixed-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/Fixed-js.html
@@ -29,7 +29,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Fixed.load"></a>load</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>load: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Tells [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Fixed.merge"></a>merge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>merge: function(</td><td class="PParameter  prettyprint " nowrap>mapProjection,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resp</td><td class="PAfterParameter [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Fixed.merge"></a>merge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>merge: function(</td><td class="PParameter  prettyprint " nowrap>mapProjection,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resp</td><td class="PAfterParameter [...]
 
 </div><!--Content-->
 
@@ -37,15 +37,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activate the strategy: load data or add listener to load when visible</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote>Dea [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">activate: function()</td></tr></table></blockquote>Activate the strategy: load data or add listener to load when visible</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">deactivate: function()</td></tr></table></blockquote>Dea [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/Paging-js.html b/doc/devdocs/files/OpenLayers/Strategy/Paging-js.html
index 5792267..8e83a18 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/Paging-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/Paging-js.html
@@ -41,7 +41,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageNum"></a>pageNum</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">pageNum: function()</td></tr></table></blockquote><p>Get the zero based page number.</p><h4 class=CHeading>Returns</h4><p>{Integer} The current page number being displayed.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageLength"></a>pageLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pageLength: function(</td><td class="PParameter  prettyprint " nowrap>newLength</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageLength"></a>pageLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pageLength: function(</td><td class="PParameter  prettyprint " nowrap>newLength</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Paging.pageNext"></a>pageNext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>pageNext: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquo [...]
 
@@ -55,10 +55,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/Refresh-js.html b/doc/devdocs/files/OpenLayers/Strategy/Refresh-js.html
index 2c1f9c5..234fa74 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/Refresh-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/Refresh-js.html
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Strategy/Save-js.html b/doc/devdocs/files/OpenLayers/Strategy/Save-js.html
index 3fc33f5..07f8b39 100644
--- a/doc/devdocs/files/OpenLayers/Strategy/Save-js.html
+++ b/doc/devdocs/files/OpenLayers/Strategy/Save-js.html
@@ -11,14 +11,12 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Strategy.Save"></a>OpenLayers.<wbr>Strategy.Save</h1><div class=CBody><p>A strategy that commits newly created or modified features.   By default the strategy waits for a call to <a href="#OpenLayers.Strategy.Save.save" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt4', 'link6')" onMouseOut="HideTip('tt4')">save</a> before persisting changes.   By configuring the str [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types.   Register a listener for a particular event with the following syntax:</p><blockquote><pre class="prettyprint">strategy.events.register(type, obj, listener);</pre></blockquote><ul><li><b>start</b> Triggered before saving</li><li><b>success</b> Triggered after a successful transaction</li>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Strategy.Save"></a>OpenLayers.<wbr>Strategy.Save</h1><div class=CBody><p>A strategy that commits newly created or modified features.   By default the strategy waits for a call to <a href="#OpenLayers.Strategy.Save.save" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt4', 'link6')" onMouseOut="HideTip('tt4')">save</a> before persisting changes.   By configuring the str [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.Properties"></a>Properties</h3></div></div>
 
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the strategy object.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">strategy.events.register(type, obj, listener);</pre></blockquote><h4 class=C [...]
+
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.events"></a>events</h3><div class=CBody><p>{<a href="../Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} Events instance for triggering this protocol events.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Strategy.Save.auto"></a>auto</h3><div class=CBody><p>{Boolean | Number} Auto-save.   Default is false.   If true, features will be saved immediately after being added to the layer and with each modification or deletion.   If auto is a number, features will be saved on an interval provided by the value (in seconds).</p></div></div></div>
@@ -47,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([27, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([28, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Style-js.html b/doc/devdocs/files/OpenLayers/Style-js.html
index 40b8919..27ee321 100644
--- a/doc/devdocs/files/OpenLayers/Style-js.html
+++ b/doc/devdocs/files/OpenLayers/Style-js.html
@@ -39,7 +39,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.OpenLayers.Style"></a>OpenLayers.<wbr>Style</h3><div class=CBody><p>Creates a UserStyle.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>style</td><td class=CDLDescription>{Object} Optional hash of style properties that will be used as default style for this style object.  This style applies if no rules are specified.&n [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.OpenLayers.Style"></a>OpenLayers.<wbr>Style</h3><div class=CBody><p>Creates a UserStyle.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>style</td><td class=CDLDescription>{Object} Optional hash of style properties that will be used as default style for this style object.  This style applies if no rules are specified.&n [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.Functions"></a>Functions</h3></div></div>
 
@@ -47,7 +47,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.createSymbolizer"></a>createSymbolizer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createSymbolizer: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.applySymbolizer"></a>applySymbolizer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>applySymbolizer: function(</td><td class="PParameter  prettyprint " nowrap>rule,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.applySymbolizer"></a>applySymbolizer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>applySymbolizer: function(</td><td class="PParameter  prettyprint " nowrap>rule,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.createLiterals"></a>createLiterals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createLiterals: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PA [...]
 
@@ -55,15 +55,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.addPropertyStyles"></a>addPropertyStyles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addPropertyStyles: function(</td><td class="PParameter  prettyprint " nowrap>propertyStyles,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>symboli [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.addRules"></a>addRules</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addRules: function(</td><td class="PParameter  prettyprint " nowrap>rules</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Adds [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.addRules"></a>addRules</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addRules: function(</td><td class="PParameter  prettyprint " nowrap>rules</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Adds [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.setDefaultStyle"></a>setDefaultStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setDefaultStyle: function(</td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.getSymbolizerPrefix"></a>getSymbolizerPrefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSymbolizerPrefix: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.getSymbolizerPrefix"></a>getSymbolizerPrefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getSymbolizerPrefix: function(</td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this style.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Style.OpenLayers.Style" class=LConstructor id=link25 onMouseOver="ShowTip(event, 'tt16', 'link25')" onMouseOut="HideTip('tt16')">OpenLayers [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clone: function()</td></tr></table></blockquote><p>Clones this style.</p><h4 class=CHeading>Returns</h4><p>{<a href="#OpenLayers.Style.OpenLayers.Style" class=LConstructor id=link26 onMouseOver="ShowTip(event, 'tt16', 'link26')" onMouseOut="HideTip('tt16')">OpenLayers [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.createLiteral"></a>createLiteral</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Style.createLiteral = function(</td><td class="PParameter  prettyprint " nowrap>value,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context,</ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.createLiteral"></a>createLiteral</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Style.createLiteral = function(</td><td class="PParameter  prettyprint " nowrap>value,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>context,</ [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style.Constants"></a>Constants</h3></div></div>
 
@@ -75,10 +75,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Style2-js.html b/doc/devdocs/files/OpenLayers/Style2-js.html
index 70e7288..564ed02 100644
--- a/doc/devdocs/files/OpenLayers/Style2-js.html
+++ b/doc/devdocs/files/OpenLayers/Style2-js.html
@@ -31,7 +31,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.Constructor"></a>Constructor</h3></div></div>
 
-<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.OpenLayers.Style2"></a>OpenLayers.<wbr>Style2</h3><div class=CBody><p>Creates a style representing a collection of rendering rules.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing properties to be set on the style.   Any documented properties may be set  [...]
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.OpenLayers.Style2"></a>OpenLayers.<wbr>Style2</h3><div class=CBody><p>Creates a style representing a collection of rendering rules.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>{Object} An object containing properties to be set on the style.   Any documented properties may be set  [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Style2.Functions"></a>Functions</h3></div></div>
 
@@ -45,10 +45,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/StyleMap-js.html b/doc/devdocs/files/OpenLayers/StyleMap-js.html
index fa7096b..34f2219 100644
--- a/doc/devdocs/files/OpenLayers/StyleMap-js.html
+++ b/doc/devdocs/files/OpenLayers/StyleMap-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.StyleMap"></a>OpenLayers.<wbr>StyleMap</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.StyleMap" >OpenLayers.<wbr>StyleMap</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.StyleMap"></a>OpenLayers.<wbr>StyleMap</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.StyleMap" >OpenLayers.<wbr>StyleMap</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.StyleMap.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.StyleMap.styles"></a>styles</h3><div class=CBody><p>Hash of {<a href="Style-js.html#OpenLayers.Style" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Style</a>}, keyed by names of well known rendering intents (e.g.  “default”, “temporary”, “select”, “delete”).</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.StyleMap.styles"></a>styles</h3><div class=CBody><p>{Object} Hash of {<a href="Style-js.html#OpenLayers.Style" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">OpenLayers.Style</a>}, keyed by names of well known rendering intents (e.g.  “default”, “temporary”, “select”, “delete”).</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.StyleMap.extendDefault"></a>extendDefault</h3><div class=CBody><p>{Boolean} if true, every render intent will extend the symbolizers specified for the “default” intent at rendering time.  Otherwise, every rendering intent will be treated as a completely independent style.</p></div></div></div>
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Symbolizer-js.html b/doc/devdocs/files/OpenLayers/Symbolizer-js.html
index f9575bc..13eddf8 100644
--- a/doc/devdocs/files/OpenLayers/Symbolizer-js.html
+++ b/doc/devdocs/files/OpenLayers/Symbolizer-js.html
@@ -31,10 +31,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Symbolizer/Line-js.html b/doc/devdocs/files/OpenLayers/Symbolizer/Line-js.html
index 08a451f..a0387a3 100644
--- a/doc/devdocs/files/OpenLayers/Symbolizer/Line-js.html
+++ b/doc/devdocs/files/OpenLayers/Symbolizer/Line-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Symbolizer/Point-js.html b/doc/devdocs/files/OpenLayers/Symbolizer/Point-js.html
index f8e2a66..c4ed4fe 100644
--- a/doc/devdocs/files/OpenLayers/Symbolizer/Point-js.html
+++ b/doc/devdocs/files/OpenLayers/Symbolizer/Point-js.html
@@ -57,10 +57,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Symbolizer/Polygon-js.html b/doc/devdocs/files/OpenLayers/Symbolizer/Polygon-js.html
index febcb5c..e5a89b7 100644
--- a/doc/devdocs/files/OpenLayers/Symbolizer/Polygon-js.html
+++ b/doc/devdocs/files/OpenLayers/Symbolizer/Polygon-js.html
@@ -39,10 +39,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Symbolizer/Raster-js.html b/doc/devdocs/files/OpenLayers/Symbolizer/Raster-js.html
index 142c303..1c5814c 100644
--- a/doc/devdocs/files/OpenLayers/Symbolizer/Raster-js.html
+++ b/doc/devdocs/files/OpenLayers/Symbolizer/Raster-js.html
@@ -23,10 +23,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Symbolizer/Text-js.html b/doc/devdocs/files/OpenLayers/Symbolizer/Text-js.html
index a057445..b8c7ddc 100644
--- a/doc/devdocs/files/OpenLayers/Symbolizer/Text-js.html
+++ b/doc/devdocs/files/OpenLayers/Symbolizer/Text-js.html
@@ -35,10 +35,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([28, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([29, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Tile-js.html b/doc/devdocs/files/OpenLayers/Tile-js.html
index e76a556..e34fc90 100644
--- a/doc/devdocs/files/OpenLayers/Tile-js.html
+++ b/doc/devdocs/files/OpenLayers/Tile-js.html
@@ -11,15 +11,21 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile"></a>OpenLayers.Tile</h1><div class=CBody><p>This is a class designed to designate a single tile, however it is explicitly designed to do relatively little.  Tiles store information about themselves -- such as the URL that they are related to, and their size - but do not add themselves to the layer div automatically, for example.  Create a new tile with the <a href="#Ope [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.EVENT_TYPES"></a>EVENT_TYPES</h3><div class=CBody><p>{Array(String)} Supported application event types</p></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile"></a>OpenLayers.Tile</h1><div class=CBody><p>This is a class designed to designate a single tile, however it is explicitly designed to do relatively little.  Tiles store information about themselves -- such as the URL that they are related to, and their size - but do not add themselves to the layer div automatically, for example.  Create a new tile with the <a href="#Ope [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the tile.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.events"></a>events</h3><div class=CBody><p>{<a href="Events-js.html#OpenLayers.Events" class=LClass >OpenLayers.Events</a>} An events object that handles all events on the tile.</p><h4 class=CHeading>Register a listener for a particular event with the following syntax</h4><blockquote><pre class="prettyprint">tile.events.register(type, obj, listener);</pre></blockquote><h4 class=CHeading>Supported event typ [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.eventListeners"></a>eventListeners</h3><div class=CBody><p>{Object} If set as an option at construction, the eventListeners object will be registered with <a href="Events-js.html#OpenLayers.Events.on" class=LFunction id=link14 onMouseOver="ShowTip(event, 'tt1', 'link14')" onMouseOut="HideTip('tt1')">OpenLayers.Events.on</a>.   Object structure must be a listeners object as shown in the example for the [...]
+    tileOptions: {
+        eventListeners: {
+            'loadend': function(evt) {
+                // do something on loadend
+            }
+        }
+    }
+});</pre></blockquote></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.id"></a>id</h3><div class=CBody><p>{String} null</p></div></div></div>
 
@@ -27,35 +33,33 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.url"></a>url</h3><div class=CBody><p>{String} url of the request.</p><p>TBD 3.0 Deprecated.  The base tile class does not need an url.  This should be handled in subclasses.  Does not belong here.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.bounds"></a>bounds</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt1', 'link15')" onMouseOut="HideTip('tt1')">OpenLayers.Bounds</a>} null</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.bounds"></a>bounds</h3><div class=CBody><p>{<a href="BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt2', 'link16')" onMouseOut="HideTip('tt2')">OpenLayers.Bounds</a>} null</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link16 onMouseOver="ShowTip(event, 'tt2', 'link16')" onMouseOut="HideTip('tt2')">OpenLayers.Size</a>} null</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.size"></a>size</h3><div class=CBody><p>{<a href="BaseTypes/Size-js.html#OpenLayers.Size" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt3', 'link17')" onMouseOut="HideTip('tt3')">OpenLayers.Size</a>} null</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.position"></a>position</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt3', 'link17')" onMouseOut="HideTip('tt3')">OpenLayers.Pixel</a>} Top Left pixel of the tile</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.position"></a>position</h3><div class=CBody><p>{<a href="BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt4', 'link18')" onMouseOut="HideTip('tt4')">OpenLayers.Pixel</a>} Top Left pixel of the tile</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.isLoading"></a>isLoading</h3><div class=CBody><p>{Boolean} Is the tile loading?</p></div></div></div>
 
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.OpenLayers.Tile"></a>OpenLayers.Tile</h3><div class=CBody><p>Constructor for a new <a href="#OpenLayers.Tile.OpenLayers.Tile" class=LConstructor id=link19 onMouseOver="ShowTip(event, 'tt5', 'link19')" onMouseOut="HideTip('tt5')">OpenLayers.Tile</a> instance.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class= [...]
+
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.unload"></a>unload</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">unload: function()</td></tr></table></blockquote><p>Call immediately before destroying if you are listening to tile events, so that counters are properly handled if tile is still loading at destroy-time.  Will only fire an event if the tile is still loading.</p> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy:function()</td></tr></table></blockquote><p>Nullify references to prevent circular references and memory leaks.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHeading [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><p>Clear whatever is currently in the tile, then return whether or not it should actually be re-drawn.</p><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the tile should actually be drawn.  Note that this is  [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function (</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position,</td></tr><tr><td></td><td class="PPara [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Clear the tile of any bounds/position-related data so that it can be reused in a new location.  To be implemented by subclasses.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>draw: function(</td><td class="PParameter  prettyprint " nowrap>deferred</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Clear whatever [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.getBoundsFromBaseLayer"></a>getBoundsFromBaseLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBoundsFromBaseLayer: function(</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.shouldDraw"></a>shouldDraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">shouldDraw: function()</td></tr></table></blockquote><p>Return whether or not the tile should actually be (re-)drawn.  The only case where we <b>wouldn’t</b> want to draw the tile is if the tile is outside its layer’s maxExtent</p><h4 class=C [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.showTile"></a>showTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">showTile: function()</td></tr></table></blockquote><p>Show the tile only if it should be drawn.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.setBounds"></a>setBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setBounds: function(</td><td class="PParameter  prettyprint " nowrap>bounds</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>S [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p>Show the tile.   To be implemented by subclasses.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo: function (</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position,</td></tr><tr><td></td><td class="PPara [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.hide"></a>hide</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">hide: function()</td></tr></table></blockquote><p>Hide the tile.   To be implemented by subclasses.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clear: function(</td><td class="PParameter  prettyprint " nowrap>draw</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Clear the tile  [...]
 
 </div><!--Content-->
 
@@ -63,15 +67,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Instances of this class represent bounding boxes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Instances of this class represent a width/height pair</div></div><div class=CToolTip id="tt3"><div class=CClass>This class represents a screen coordinate, in x and y coordinates</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettypr [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>on: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for registering listeners with a common scope. </div></div><div class=C [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Tile/Image-js.html b/doc/devdocs/files/OpenLayers/Tile/Image-js.html
index 7bb06ff..189bc28 100644
--- a/doc/devdocs/files/OpenLayers/Tile/Image-js.html
+++ b/doc/devdocs/files/OpenLayers/Tile/Image-js.html
@@ -11,53 +11,64 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.Image"></a>OpenLayers.<wbr>Tile.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.Image" class=LClass id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">OpenLayers.Tile.Image</a> constructor.</p><h4 clas [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.Image"></a>OpenLayers.<wbr>Tile.<wbr>Image</h1><div class=CBody><p>Instances of OpenLayers.Tile.Image are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.Image.OpenLayers.Tile.Image" class=LConstructor id=link15 onMouseOver="ShowTip(event, 'tt1', 'link15')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.Image</a [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.Properties"></a>Properties</h3></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.url"></a>url</h3><div class=CBody><p>{String} The URL of the image being requested.  No default.  Filled in by layer.getURL() function.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.url"></a>url</h3><div class=CBody><p>{String} The URL of the image being requested.  No default.  Filled in by layer.getURL() function.  May be modified by loadstart listeners.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.imgDiv"></a>imgDiv</h3><div class=CBody><p>{DOMElement} The div element which wraps the image.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.imgDiv"></a>imgDiv</h3><div class=CBody><p>{HTMLImageElement} The image for this tile.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.frame"></a>frame</h3><div class=CBody><p>{DOMElement} The image element is appended to the frame.   Any gutter on the image will be hidden behind the frame.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.frame"></a>frame</h3><div class=CBody><p>{DOMElement} The image element is appended to the frame.   Any gutter on the image will be hidden behind the frame.  If no gutter is set, this will be null.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.imageReloadAttempts"></a>imageReloadAttempts</h3><div class=CBody><p>{Integer} Attempts to load the image.</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.layerAlphaHack"></a>layerAlphaHack</h3><div class=CBody><p>{Boolean} True if the png alpha hack needs to be applied on the layer’s div.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.isBackBuffer"></a>isBackBuffer</h3><div class=CBody><p>{Boolean} Is this tile a back buffer tile?</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.asyncRequestId"></a>asyncRequestId</h3><div class=CBody><p>{Integer} ID of an request to see if request is still valid.  This is a number which increments by 1 for each asynchronous request.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.blankImageUrl"></a>blankImageUrl</h3><div class=CBody><p>{String} Using a data scheme url is not supported by all browsers, but we don’t care because we either set it as css backgroundImage, or the image’s display style is set to “none” when we use it.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.maxGetUrlLength"></a>maxGetUrlLength</h3><div class=CBody><p>{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.</p><h4 class=CHeading>Caution</h4><p>Older versions of Gecko based browsers (e.g.  Firefox < 3.5) and most Oper [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.isFirstDraw"></a>isFirstDraw</h3><div class=CBody><p>{Boolean} Is this the first time the tile is being drawn?  This is used to force resetBackBuffer to synchronize the backBufferTile with the foreground tile the first time the foreground tile loads so that if the user zooms before the layer has fully loaded, the backBufferTile for tiles that have been loaded can be used.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.canvasContext"></a>canvasContext</h3><div class=CBody><p>{CanvasRenderingContext2D} A canvas context associated with the tile image.</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.backBufferTile"></a>backBufferTile</h3><div class=CBody><p>{<a href="../Tile-js.html#OpenLayers.Tile" class=LClass id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Tile</a>} A clone of the tile used to create transition effects when the tile is moved or changes resolution.</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.crossOriginKeyword"></a>crossOriginKeyword</h3><div class=CBody><p>The value of the crossorigin keyword to use when loading images.  This is only relevant when using <a href="#OpenLayers.Tile.Image.getCanvasContext" class=LFunction id=link16 onMouseOver="ShowTip(event, 'tt14', 'link16')" onMouseOut="HideTip('tt14')">getCanvasContext</a> for tiles from remote origins and should be set to either & [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.maxGetUrlLength"></a>maxGetUrlLength</h3><div class=CBody><p>{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.</p><h4 class=CHeading>Caution</h4><p>Older versions of Gecko based browsers (e.g.  Firefox < 3.5) and Opera &lt [...]
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.OpenLayers.Tile.Image"></a>OpenLayers.<wbr>Tile.<wbr>Image</h3><div class=CBody><p>Constructor for a new <a href="#OpenLayers.Tile.Image.OpenLayers.Tile.Image" class=LConstructor id=link17 onMouseOver="ShowTip(event, 'tt1', 'link17')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.Image</a> instance.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionLi [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CH [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><p>Check that a tile should be drawn, and draw it.</p><h4 class=CHeading>Returns</h4><p>{Boolean} Was a tile drawn?</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><p>Check that a tile should be drawn, and draw it.</p><h4 class=CHeading>Returns</h4><p>{Boolean} Always returns true.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.renderTile"></a>renderTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">renderTile: function()</td></tr></table></blockquote><p>Internal function to actually initialize the image tile, position it correctly, and set its url.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.resetBackBuffer"></a>resetBackBuffer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">resetBackBuffer: function()</td></tr></table></blockquote><p>Triggered by two different events, layer loadend, and tile loadend.  In any of these cases, we check to see if we can hide the backBufferTile yet and update its parameters to ma [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.positionTile"></a>positionTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">positionTile: function()</td></tr></table></blockquote><p>Using the properties currenty set on the layer, position the tile correctly.  This method is used both by the async and non-async versions of the Tile.Image code.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.renderTile"></a>renderTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">renderTile: function()</td></tr></table></blockquote><p>Internal function to actually initialize the image tile, position it correctly, and set its url.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Remove the tile from the DOM, clear it of any image related data so that it can be reused in a new location.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.positionImage"></a>positionImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">positionImage: function()</td></tr></table></blockquote><p>Using the properties currenty set on the layer, position the tile correctly.  This method is used both by the async and non-async versions of the Tile.Image code.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.getImage"></a>getImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getImage: function()</td></tr></table></blockquote><p>Returns or creates and returns the tile image.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Clear the tile of any bounds/position-related data so that it can be reused in a new location.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.initImage"></a>initImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initImage: function()</td></tr></table></blockquote><p>Creates the content for the frame on the tile.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.initImgDiv"></a>initImgDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initImgDiv: function()</td></tr></table></blockquote><p>Creates the imgDiv property on the tile.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.setImgSrc"></a>setImgSrc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setImgSrc: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>< [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.removeImgDiv"></a>removeImgDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">removeImgDiv: function()</td></tr></table></blockquote><p>Removes the imgDiv from the DOM and stops listening to events on it.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.getTile"></a>getTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTile: function()</td></tr></table></blockquote><p>Get the tile’s markup.</p><h4 class=CHeading>Returns</h4><p>{DOMElement} The tile’s markup</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.checkImgURL"></a>checkImgURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">checkImgURL: function ()</td></tr></table></blockquote><p>Make sure that the image that just loaded is the one this tile is meant to display, since panning/zooming might have changed the tile’s URL in the meantime.  If the tile URL did chan [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.createBackBuffer"></a>createBackBuffer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createBackBuffer: function()</td></tr></table></blockquote><p>Create a backbuffer for this tile.  A backbuffer isn’t exactly a clone of the tile’s markup, because we want to avoid the reloading of the image.  So we clon [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.startTransition"></a>startTransition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">startTransition: function()</td></tr></table></blockquote><p>This method is invoked on tiles that are backBuffers for tiles in the grid.   The grid tile is about to be cleared and a new tile source loaded.   This is where the transit [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.onImageLoad"></a>onImageLoad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onImageLoad: function()</td></tr></table></blockquote><p>Handler for the image onload event</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p>Show the tile by showing its frame.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.onImageError"></a>onImageError</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onImageError: function()</td></tr></table></blockquote><p>Handler for the image onerror event</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.hide"></a>hide</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">hide: function()</td></tr></table></blockquote><p>Hide the tile by hiding its frame.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.getCanvasContext"></a>getCanvasContext</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getCanvasContext: function()</td></tr></table></blockquote><p>Returns a canvas context associated with the tile image (with the image drawn on it).  Returns undefined if the browser does not support canvas, if the tile has no image or i [...]
+if (context) {
+    var data = context.canvas.toDataURL('image/jpeg');
+}</pre></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean}</p></div></div></div>
 
 </div><!--Content-->
 
@@ -65,15 +76,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>This is a class designed to designate a single tile, however it is explicitly designed to do relatively little. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt3"><div class=C [...]
+<div class=CToolTip id="tt1"><div class=CConstructor>Constructor for a new OpenLayers.Tile.Image instance.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent circular references and memory leaks</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 ce [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Tile/Image/IFrame-js.html b/doc/devdocs/files/OpenLayers/Tile/Image/IFrame-js.html
index ba2e4c8..0f0b6d9 100644
--- a/doc/devdocs/files/OpenLayers/Tile/Image/IFrame-js.html
+++ b/doc/devdocs/files/OpenLayers/Tile/Image/IFrame-js.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/Image/IFrame.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></sc [...]
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/Image/IFrame.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../../styles/main.css"><script language=JavaScript src="../../../../javascript/main.js"></script><script language=JavaScript src="../../../../javascript/prettify.js"></script><script language=JavaScript src="../../../../javascript/searchdata.js"></script></head [...]
 if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
 
 <!--  Generated by Natural Docs, version 1.52 -->
@@ -11,11 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="IFrame.js"></a>IFrame.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#IFrame.js" >IFrame.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td class=SDescriptio [...]
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="IFrame.js"></a>IFrame.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#IFrame.js" >IFrame.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Constants" >Constants</a></td><td class=SDescriptio [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Constants"></a>Constants</h3></div></div>
 
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.IFrame"></a>OpenLayers.<wbr>Tile.<wbr>Image.<wbr>IFrame</h3><div class=CBody><p>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.</p><p>This mixin will be applied to <a href="../Image-js.html#OpenLayers.Tile.Image" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt [...]
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Image.IFrame"></a>OpenLayers.<wbr>Tile.<wbr>Image.<wbr>IFrame</h3><div class=CBody><p>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.</p><p>This mixin will be applied to <a href="../Image-js.html#OpenLayers.Tile.Image" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
 
@@ -23,15 +23,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Removes the iframe from DOM (avoids back-button problems).</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><p>Set useIFrame in the instance, and operate the image/iframe switch.  Then call Tile.Image.draw.</p><h4 class=CHeading>Returns</h4><p>{Boolean}</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="renderTile"></a>renderTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">renderTile: function()</td></tr></table></blockquote></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="getImage"></a>getImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getImage: function()</td></tr></table></blockquote><p>Creates the content for the frame on the tile.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="initImgDiv"></a>initImgDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initImgDiv: function()</td></tr></table></blockquote><p>Creates the imgDiv property on the tile.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="createRequestForm"></a>createRequestForm</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createRequestForm: function()</td></tr></table></blockquote><p>Create the html <form> element with width, height, bbox and all parameters specified in the layer params.</p><h4 class=CHeading>Returns</h4><p>{DOMElement} The form element which sends the HTT [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="createIFrame"></a>createIFrame</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createIFrame: function()</td></tr></table></blockquote><p>Create the IFrame which shows the image.</p><h4 class=CHeading>Returns</h4><p>{DOMElement} Iframe</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="setImgSrc"></a>setImgSrc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setImgSrc: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Sets the source for  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="createRequestForm"></a>createRequestForm</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createRequestForm: function()</td></tr></table></blockquote><p>Create the html <form> element with width, height, bbox and all parameters specified in the layer params.</p><h4 class=CHeading>Returns</h4><p>{DOMElement} The form element which sends the HTT [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="onImageLoad"></a>onImageLoad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onImageLoad: function()</td></tr></table></blockquote><p>Handler for the image onload event</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="createBackBuffer"></a>createBackBuffer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createBackBuffer: function()</td></tr></table></blockquote><p>Override createBackBuffer to do nothing when we use an iframe.  Moving an iframe from one element to another makes it necessary to reload the iframe because its content is lost.  So we just g [...]
 
 </div><!--Content-->
 
@@ -39,15 +41,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMe [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote>Removes the iframe from DOM (avoids back-button problems).</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">renderTile: function()</td></tr></table></blockquote></div></div><div  [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote>Set useIFrame in the instance, and operate the image/iframe switch. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getImage: function()</td></tr></table></blockquote>Creates th [...]
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Tile/UTFGrid-js.html b/doc/devdocs/files/OpenLayers/Tile/UTFGrid-js.html
new file mode 100644
index 0000000..fc6fcd7
--- /dev/null
+++ b/doc/devdocs/files/OpenLayers/Tile/UTFGrid-js.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Tile.UTFGrid - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"> [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.UTFGrid"></a>OpenLayers.<wbr>Tile.<wbr>UTFGrid</h1><div class=CBody><p>Instances of OpenLayers.Tile.UTFGrid are used to manage UTFGrids.  This is an unusual tile type in that it doesn’t have a rendered image; only a ‘hit grid’ that can be used to look up feature attributes.</p><p>See the <a href="#OpenLayers.Tile.UTFGrid.OpenLayers.Tile.UTFGrid" class=LConst [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.url"></a>url</h3><div class=CBody><p>{String} The URL of the UTFGrid file being requested.  Provided by the <a href="../Layer/ArcGISCache-js.html#getURL" class=LFunction id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">getURL</a> method.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.utfgridResolution"></a>utfgridResolution</h3><div class=CBody><p>{Number} Ratio of the pixel width to the width of a UTFGrid data point.   If an entry in the grid represents a 4x4 block of pixels, the utfgridResolution would be 4.   Default is 2.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.json"></a>json</h3><div class=CBody><p>{Object} Stores the parsed JSON tile data structure.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.format"></a>format</h3><div class=CBody><p>{OpenLayers.Format.JSON} Parser instance used to parse JSON for cross browser support.   The native JSON.parse method will be used where available (all except IE<8).</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.OpenLayers.Tile.UTFGrid"></a>OpenLayers.<wbr>Tile.<wbr>UTFGrid</h3><div class=CBody><p>Constructor for a new <a href="#OpenLayers.Tile.UTFGrid.OpenLayers.Tile.UTFGrid" class=LConstructor id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">OpenLayers.Tile.UTFGrid</a> instance.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CD [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote><p>Check that a tile should be drawn, and draw it.  In the case of UTFGrids, “drawing” it means fetching and parsing the json.</p><h4 class=CHeading>Returns</h4><p>{Boolean} Was a tile drawn?</p></di [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.abortLoading"></a>abortLoading</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">abortLoading: function()</td></tr></table></blockquote><p>Cancel a pending request.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.getFeatureInfo"></a>getFeatureInfo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureInfo: function(</td><td class="PParameter  prettyprint " nowrap>i,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>j</td><td class="PAfte [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.getFeatureId"></a>getFeatureId</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureId: function(</td><td class="PParameter  prettyprint " nowrap>i,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>j</td><td class="PAfterParam [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.indexFromCharCode"></a>indexFromCharCode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>indexFromCharCode: function(</td><td class="PParameter  prettyprint " nowrap>charCode</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.parseData"></a>parseData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>parseData: function(</td><td class="PParameter  prettyprint " nowrap>str</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.UTFGrid.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Delete data stored with this tile.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div clas [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([30, 32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CConstructor>Constructor for a new OpenLayers.Tile.UTFGrid instance.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>Clean up.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprin [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Tile/WFS-js.html b/doc/devdocs/files/OpenLayers/Tile/WFS-js.html
deleted file mode 100644
index 23df79a..0000000
--- a/doc/devdocs/files/OpenLayers/Tile/WFS-js.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>OpenLayers.Tile.WFS - OpenLayers</title><link rel="stylesheet" type="text/css" href="../../../styles/main.css"><script language=JavaScript src="../../../javascript/main.js"></script><script language=JavaScript src="../../../javascript/prettify.js"></script><script language=JavaScript src="../../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><scr [...]
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tile.WFS"></a>OpenLayers.<wbr>Tile.WFS</h1><div class=CBody><p>Instances of OpenLayers.Tile.WFS are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.WFS" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">OpenLayers.Tile.WFS</a> constructor.</p><h4 class=CHeading>Inhe [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.features"></a>features</h3><div class=CBody><p>{Array(<a href="../Feature-js.html#OpenLayers.Feature" class=LClass id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">OpenLayers.Feature</a>)} list of features in this tile</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.url"></a>url</h3><div class=CBody><p>{String}</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.request"></a>request</h3><div class=CBody><p>{<a href="../Request/XMLHttpRequest-js.html#OpenLayers.Request.XMLHttpRequest" class=LClass id=link13 onMouseOver="ShowTip(event, 'tt2', 'link13')" onMouseOut="HideTip('tt2')">OpenLayers.Request.XMLHttpRequest</a>}</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Clear the tile of any bounds/position-related data so that it can be reused in a new location.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw:function()</td></tr></table></blockquote><p>Check that a tile should be drawn, and load features for it.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.loadFeaturesForRegion"></a>loadFeaturesForRegion</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>loadFeaturesForRegion:function(</td><td class="PParameter  prettyprint " nowrap>success,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.requestSuccess"></a>requestSuccess</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>requestSuccess:function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.addResults"></a>addResults</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addResults: function(</td><td class="PParameter  prettyprint " nowrap>results</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.destroyAllFeatures"></a>destroyAllFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroyAllFeatures: function()</td></tr></table></blockquote><p>Iterate through and call destroy() on each feature, removing it from the local array</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MG [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([29, 30], 32);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Features are combinations of geography and attributes. </div></div><div class=CToolTip id="tt2"><div class=CClass>Standard-compliant (W3C) cross-browser implementation of the XMLHttpRequest object. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote>nullify references to prevent cir [...]
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/files/OpenLayers/Tween-js.html b/doc/devdocs/files/OpenLayers/Tween-js.html
index d37c840..0b9be19 100644
--- a/doc/devdocs/files/OpenLayers/Tween-js.html
+++ b/doc/devdocs/files/OpenLayers/Tween-js.html
@@ -11,11 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tween"></a>OpenLayers.<wbr>Tween</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Tween" >OpenLayers.<wbr>Tween</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.Constants"></a>Constants</h3></div></div>
-
-<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.INTERVAL"></a>INTERVAL</h3><div class=CBody><p>{int} Interval in milliseconds between 2 steps</p></div></div></div>
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="OpenLayers.Tween"></a>OpenLayers.<wbr>Tween</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#OpenLayers.Tween" >OpenLayers.<wbr>Tween</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Ope [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.Properties"></a>Properties</h3></div></div>
 
@@ -31,7 +27,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.time"></a>time</h3><div class=CBody><p>{int} Step counter</p></div></div></div>
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.interval"></a>interval</h3><div class=CBody><p>{int} Interval id returned by window.setInterval</p></div></div></div>
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.animationId"></a>animationId</h3><div class=CBody><p>{int} Loop id returned by OpenLayers.Animation.start</p></div></div></div>
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tween.playing"></a>playing</h3><div class=CBody><p>{Boolean} Tells if the easing is currently playing</p></div></div></div>
 
@@ -53,31 +49,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.easeIn"></a>easeIn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParamete [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.easeIn"></a>easeIn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParamete [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.easeOut"></a>easeOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParam [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.easeOut"></a>easeOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParam [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.easeInOut"></a>easeInOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeInOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class=" [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Linear.easeInOut"></a>easeInOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeInOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class=" [...]
 
 <div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Easing.Expo"></a>OpenLayers.<wbr>Easing.Expo</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Easing.Expo.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#Open [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.easeIn"></a>easeIn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.easeIn"></a>easeIn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.easeOut"></a>easeOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParamet [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.easeOut"></a>easeOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.easeInOut"></a>easeInOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeInOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Expo.easeInOut"></a>easeInOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeInOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PP [...]
 
 <div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Easing.Quad"></a>OpenLayers.<wbr>Easing.Quad</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Easing.Quad.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#Open [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.Functions"></a>Functions</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.easeIn"></a>easeIn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.easeIn"></a>easeIn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.easeOut"></a>easeOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParamet [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.easeOut"></a>easeOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParamet [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.easeInOut"></a>easeInOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeInOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Easing.Quad.easeInOut"></a>easeInOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeInOut: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PP [...]
 
 </div><!--Content-->
 
@@ -85,10 +81,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
diff --git a/doc/devdocs/files/OpenLayers/Util-js.html b/doc/devdocs/files/OpenLayers/Util-js.html
index 180d9d3..bddb705 100644
--- a/doc/devdocs/files/OpenLayers/Util-js.html
+++ b/doc/devdocs/files/OpenLayers/Util-js.html
@@ -11,43 +11,35 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Util"></a>Util</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Util" >Util</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Util.Functions_and_Properties" >Functions and Properties</a>< [...]
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Util"></a>Util</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Util" >Util</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Util.Functions_and_Properties" >Functions and Properties</a>< [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Util.Functions_and_Properties"></a>Functions and Properties</h3></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getElement"></a>getElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getElement = function()</td></tr></table></blockquote><p>This is the old $() from prototype</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>e</td><td class=CDLDescription>{Str [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getElement"></a>getElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getElement = function()</td></tr></table></blockquote><p>This is the old $() from prototype</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>e</td><td class=CDLDescription>{Str [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.isElement"></a>isElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.isElement = function(</td><td class="PParameter  prettyprint " nowrap>o</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p> [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.isArray"></a>isArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.isArray = function(</td><td class="PParameter  prettyprint " nowrap>a</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Tests  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.isArray"></a>isArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.isArray = function(</td><td class="PParameter  prettyprint " nowrap>a</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Tests  [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.removeItem"></a>removeItem</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.removeItem = function(</td><td class="PParameter  prettyprint " nowrap>array,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParame [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.clearArray"></a>clearArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.clearArray = function(</td><td class="PParameter  prettyprint " nowrap>array</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.removeItem"></a>removeItem</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.removeItem = function(</td><td class="PParameter  prettyprint " nowrap>array,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>item</td><td class="PAfterParame [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.indexOf"></a>indexOf</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.indexOf = function(</td><td class="PParameter  prettyprint " nowrap>array,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  pret [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.modifyDOMElement"></a>modifyDOMElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.modifyDOMElement = function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id,</td></tr [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createDiv"></a>createDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createDiv = function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td class="P [...]
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createImage"></a>createImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createImage = function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td cl [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.modifyDOMElement"></a>modifyDOMElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.modifyDOMElement = function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id,</td></tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.setOpacity = function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterP [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createDiv"></a>createDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createDiv = function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td class="P [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.onImageLoad"></a>onImageLoad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.onImageLoad = function()</td></tr></table></blockquote><p>Bound to image load events.   For all images created with <a href="#Util.createImage" class=LFunction id=link51 onMouseOver="ShowTip(event, 'tt9', 'link51')" onMouseOut="HideTip('tt9')">cre [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createImage"></a>createImage</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createImage = function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px,</td></tr><tr><td></td><td cl [...]
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Util.IMAGE_RELOAD_ATTEMPTS"></a>IMAGE_RELOAD_ATTEMPTS</h3><div class=CBody><p>{Integer} How many times should we try to reload an image before giving up?  Default is 0</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.onImageLoadError"></a>onImageLoadError</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.onImageLoadError = function()</td></tr></table></blockquote></div></div></div>
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Util.alphaHackNeeded"></a>alphaHackNeeded</h3><div class=CBody><p>{Boolean} true if the png alpha hack is necessary and possible, false otherwise.</p></div></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.alphaHack"></a>alphaHack</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.alphaHack = function()</td></tr></table></blockquote><p>Checks whether it’s necessary (and possible) to use the png alpha hack which allows alpha transparency for png images under Internet Explorer.</p><h4 class=CHeading>Returns</h4><p>{Boolean} true [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.modifyAlphaImageDiv"></a>modifyAlphaImageDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.modifyAlphaImageDiv = function(</td><td class="PParameter  prettyprint " nowrap>div,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id,</td [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.modifyAlphaImageDiv"></a>modifyAlphaImageDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.modifyAlphaImageDiv = function(</td><td class="PParameter  prettyprint " nowrap>div,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id,</td [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createAlphaImageDiv"></a>createAlphaImageDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createAlphaImageDiv = function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px,</td> [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createAlphaImageDiv"></a>createAlphaImageDiv</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createAlphaImageDiv = function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>px,</td> [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.upperCaseObject"></a>upperCaseObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.upperCaseObject = function (</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
 
@@ -57,10 +49,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.urlAppend"></a>urlAppend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.urlAppend = function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>paramStr</td><td class="PAfterParamet [...]
 
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Util.ImgPath"></a>ImgPath</h3><div class=CBody><p>{String} Default is ‘’.</p></div></div></div>
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getImagesLocation"></a>getImagesLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getImagesLocation = function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} The fully formatted image location string</p></div></div></div>
 
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getImageLocation"></a>getImageLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getImageLocation = function(</td><td class="PParameter  prettyprint " nowrap>image</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr [...]
+
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.Try"></a>Try</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.Try = function()</td></tr></table></blockquote><p>Execute functions until one of them doesn’t throw an error.  Capitalized because “try” is a reserved word in JavaScript.  Taken directly from OpenLayers.Util.Try()</p><h4 class=CHeading>Para [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getXmlNodeValue"></a>getXmlNodeValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getXmlNodeValue = function(</td><td class="PParameter  prettyprint " nowrap>node</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
@@ -77,17 +69,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Util.VincentyConstants"></a>VincentyConstants</h3><div class=CBody><p>{Object} Constants for Vincenty functions.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.distVincenty"></a>distVincenty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.distVincenty = function(</td><td class="PParameter  prettyprint " nowrap>p1,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>p2</td><td class="PAfterParam [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.distVincenty"></a>distVincenty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.distVincenty = function(</td><td class="PParameter  prettyprint " nowrap>p1,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>p2</td><td class="PAfterParam [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.destinationVincenty"></a>destinationVincenty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.destinationVincenty = function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>brng [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.destinationVincenty"></a>destinationVincenty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.destinationVincenty = function(</td><td class="PParameter  prettyprint " nowrap>lonlat,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>brng [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getParameters"></a>getParameters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getParameters = function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></ [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getArgs"></a>getArgs</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getArgs = function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p><b>D [...]
-
 <div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Util.lastSeqID"></a>lastSeqID</h3><div class=CBody><p>{Integer} The ever-incrementing count variable.  Used for generating unique ids.</p></div></div></div>
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createUniqueID"></a>createUniqueID</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createUniqueID = function(</td><td class="PParameter  prettyprint " nowrap>prefix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createUniqueID"></a>createUniqueID</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createUniqueID = function(</td><td class="PParameter  prettyprint " nowrap>prefix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Util.Constants"></a>Constants</h3></div></div>
 
@@ -103,15 +93,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getScaleFromResolution"></a>getScaleFromResolution</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getScaleFromResolution = function (</td><td class="PParameter  prettyprint " nowrap>resolution,</td></tr><tr><td></td><td class="PParameter  prettyprint [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.safeStopPropagation"></a>safeStopPropagation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.safeStopPropagation = function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
-
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.pagePosition"></a>pagePosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.pagePosition = function(</td><td class="PParameter  prettyprint " nowrap>forElement</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getViewportElement"></a>getViewportElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getViewportElement = function()</td></tr></table></blockquote><p>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.docum [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getViewportElement"></a>getViewportElement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getViewportElement = function()</td></tr></table></blockquote><p>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.docum [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.isEquivalentUrl"></a>isEquivalentUrl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.isEquivalentUrl = function(</td><td class="PParameter  prettyprint " nowrap>url1,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>url2,</td></tr><tr [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createUrlObject"></a>createUrlObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createUrlObject = function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cla [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.createUrlObject"></a>createUrlObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.createUrlObject = function(</td><td class="PParameter  prettyprint " nowrap>url,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td cla [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.removeTail"></a>removeTail</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.removeTail = function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
 
@@ -119,13 +107,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="Util.IS_GECKO"></a>IS_GECKO</h3><div class=CBody><p>{Boolean} True if the userAgent reports the browser to use the Gecko engine</p></div></div></div>
 
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="Util.CANVAS_SUPPORTED"></a>CANVAS_SUPPORTED</h3><div class=CBody><p>{Boolean} True if canvas 2d is supported.</p></div></div></div>
+
 <div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="Util.BROWSER_NAME"></a>BROWSER_NAME</h3><div class=CBody><p>{String} A substring of the navigator.userAgent property.   Depending on the userAgent property, this will be the empty string or one of the following:</p><ul><li>”opera” -- Opera</li><li>”msie”  -- Internet Explorer</li><li>”safari” -- Safari</li><li>”firefox” -- Firefox</li><li>”mozilla” -- Mozill [...]
 
 <div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Util.Functions"></a>Functions</h3></div></div>
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getBrowserName"></a>getBrowserName</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getBrowserName = function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} A string which specifies which is the current browser in which we are running.</p><h4 class=CHeading>Currently-supported browser detection and co [...]
 
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getRenderedDimensions"></a>getRenderedDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getRenderedDimensions = function(</td><td class="PParameter  prettyprint " nowrap>contentHTML,</td></tr><tr><td></td><td class="PParameter  prettyprint "  [...]
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getRenderedDimensions"></a>getRenderedDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getRenderedDimensions = function(</td><td class="PParameter  prettyprint " nowrap>contentHTML,</td></tr><tr><td></td><td class="PParameter  prettyprint "  [...]
 
 <div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="Util.getScrollbarWidth"></a>getScrollbarWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getScrollbarWidth = function()</td></tr></table></blockquote><p>This function has been modified by the OpenLayers from the original version, written by Matthew Eernisse and released under the Apache 2 license here:</p><p><a href="http://www [...]
 
@@ -137,15 +127,15 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupCo [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=M [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([30], 32);// --></script></div><!--Menu-->
+HideAllBut([31, 32], 34);// --></script></div><!--Menu-->
 
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getElement = function()</td></tr></table></blockquote>This is the old $() from prototype</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "n [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">OpenLayers.Util.getElement = function()</td></tr></table></blockquote>This is the old $() from prototype</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "n [...]
 
 
 
diff --git a/doc/devdocs/files/deprecated-js.html b/doc/devdocs/files/deprecated-js.html
new file mode 100644
index 0000000..3d2c462
--- /dev/null
+++ b/doc/devdocs/files/deprecated-js.html
@@ -0,0 +1,801 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>/tmp/openlayers/tools/OpenLayers-2.12/lib/deprecated.js - OpenLayers</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/prettify.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPr [...]
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="deprecated.js"></a>deprecated.js</h1><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#deprecated.js" >deprecated.js</a></td><td class=SDescription></td></tr><tr class="SGeneric SMarked"><td class=SEntry><a href="#Deprecated" >Deprecated</ [...]
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Deprecated"></a>Deprecated</h3><div class=CBody><p>The deprecated.js script includes all methods, properties, and constructors that are not supported as part of the long-term API.   If you use any of these, you have to explicitly include this script in your application.</p><h4 class=CHeading>For example</h4><blockquote><pre class="prettyprint"><script src="deprecated.js" type="text/javascript"&g [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Class"></a>OpenLayers.<wbr>Class</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Class.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Class.isP [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.isPrototype"></a>isPrototype</h3><div class=CBody><p><b>Deprecated</b>.   This is no longer needed and will be removed at 3.0.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.OpenLayers.create"></a>OpenLayers.<wbr>create</h3><div class=CBody><p><b>Deprecated</b>.   Old method to create an OpenLayers style class.   Use the <a href="#OpenLayers.Class" class=LClass >OpenLayers.Class</a> constructor instead.</p><h4 class=CHeading>Returns</h4><p>An OpenLayers class</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Class.inherit"></a>inherit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockq [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Util"></a>OpenLayers.Util</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Util.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Util.clearArray" id [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Util.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Util.clearArray"></a>clearArray</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.clearArray = function(</td><td class="PParameter  prettyprint " nowrap>array</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Util.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.setOpacity = function(</td><td class="PParameter  prettyprint " nowrap>element,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>opacity</td><td cla [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Util.safeStopPropagation"></a>safeStopPropagation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.safeStopPropagation = function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Util.getArgs"></a>getArgs</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.getArgs = function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax"></a>OpenLayers.Ajax</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Ajax.OpenLayers.nul [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.OpenLayers.nullHandler"></a>OpenLayers.<wbr>nullHandler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.nullHandler = function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.OpenLayers.loadURL"></a>OpenLayers.<wbr>loadURL</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.loadURL = function(</td><td class="PParameter  prettyprint " nowrap>uri,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>params,</t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.OpenLayers.parseXMLString"></a>OpenLayers.<wbr>parseXMLString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.parseXMLString = function(</td><td class="PParameter  prettyprint " nowrap>text</td><td class="PAfterParameters  prettyprint "nowrap>)< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.emptyFunction"></a>emptyFunction</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">emptyFunction: function ()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.getTransport"></a>getTransport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getTransport: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} Transport mechanism for whichever browser we’re in, or false if none available.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.activeRequestCount"></a>activeRequestCount</h3><div class=CBody><p>{Integer}</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Responders"></a>OpenLayers.<wbr>Ajax.<wbr>Responders</h2><div class=CBody><p>{Object}</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Responders.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarke [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.responders"></a>responders</h3><div class=CBody><p>{Array}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.register"></a>register</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>register: function(</td><td class="PParameter  prettyprint " nowrap>responderToAdd</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.unregister"></a>unregister</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unregister: function(</td><td class="PParameter  prettyprint " nowrap>responderToRemove</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.dispatch"></a>dispatch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dispatch: function(</td><td class="PParameter  prettyprint " nowrap>callback,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>request,</td></tr><tr><td></td [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.onCreate"></a>onCreate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onCreate: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Responders.onComplete"></a>onComplete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onComplete: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Base.Constructor" >Constructor</a></td><td class=SDescription></td></tr><tr class="SConstructor SIndent1 SMarked"><td class=SEntry><a href="#Ope [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Base.OpenLayers.Ajax.Base"></a>OpenLayers.<wbr>Ajax.Base</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h2><div class=CBody><p><b>Deprecated</b>.   Use <a href="OpenLayers/Request-js.html#OpenLayers.Request" class=LClass id=link214 onMouseOver="ShowTip(event, 'tt185', 'link214')" onMouseOut="HideTip('tt185')">OpenLayers.Request</a> method instead.</p><h4 class=CHeading>Inherit</h4><ul><li><a href="#OpenLayers.Ajax.Base" class=LClass >OpenLayers.Ajax.Base</a>< [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request._complete"></a>_complete</h3><div class=CBody><p>{Boolean}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.OpenLayers.Ajax.Request"></a>OpenLayers.<wbr>Ajax.<wbr>Request</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.request"></a>request</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>request: function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 c [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.onStateChange"></a>onStateChange</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onStateChange: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.setRequestHeaders"></a>setRequestHeaders</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">setRequestHeaders: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.success"></a>success</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">success: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} -</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.getStatus"></a>getStatus</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getStatus: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{Integer}</td><td class=CDLDescription>Status</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.respondToReadyState"></a>respondToReadyState</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>respondToReadyState: function(</td><td class="PParameter  prettyprint " nowrap>readyState</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.getHeader"></a>getHeader</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getHeader: function(</td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquot [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.dispatchException"></a>dispatchException</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dispatchException: function(</td><td class="PParameter  prettyprint " nowrap>exception</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Request.Events"></a>Events</h3><div class=CBody><p>{Array(String)}</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Ajax.Response.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry>< [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.status"></a>status</h3><div class=CBody><p>{Integer}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.statusText"></a>statusText</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.OpenLayers.Ajax.Response"></a>OpenLayers.<wbr>Ajax.<wbr>Response</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>request</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getStatus"></a>getStatus</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getStatustext"></a>getStatustext</h3><div class=CBody><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{String}</td><td class=CDLDescription>statusText</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getHeader"></a>getHeader</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getResponseHeader"></a>getResponseHeader</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getResponseHeader: function(</td><td class="PParameter  prettyprint " nowrap>name</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.getElementsByTagNameNS"></a>getElementsByTagNameNS</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Ajax.getElementsByTagNameNS = function(</td><td class="PParameter  prettyprint " nowrap>parentnode,</td></tr><tr><td></td><td class="PPar [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Ajax.Response.serializeXMLToString"></a>serializeXMLToString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Ajax.serializeXMLToString = function(</td><td class="PParameter  prettyprint " nowrap>xmldom</td><td class="PAfterParameters  prettyprint "no [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Element"></a>OpenLayers.<wbr>Element</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Element.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Eleme [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.hide"></a>hide</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">hide: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Hide element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">show: function()</td></tr></table></blockquote><p><b>Deprecated</b>.  Show element(s) passed in</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>{DO [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.getDimensions"></a>getDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getDimensions: function(</td><td class="PParameter  prettyprint " nowrap>element</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.startsWith"></a>String.<wbr>startsWith</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string starts with another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sStart</td><td class=CDLDescription>{String} The string we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.contains"></a>String.<wbr>contains</h3><div class=CBody><p><b>Deprecated</b>.  Whether or not a string contains another string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>str</td><td class=CDLDescription>{String} The string that we’re testing for.</td></tr></table><h4 class=CHeading>Returns</h4><p>{Bool [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.trim"></a>String.trim</h3><div class=CBody><p><b>Deprecated</b>.  Removes leading and trailing whitespace characters from a string.</p><h4 class=CHeading>Returns</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>{String} A trimmed version of the string</td><td class=CDLDescription>all leading and trailing spaces removed</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.String.camelize"></a>String.<wbr>camelize</h3><div class=CBody><p><b>Deprecated</b>.  Camel-case a hyphenated string.  Ex.  “chicken-head” becomes “chickenHead”, and “-chicken-head” becomes “ChickenHead”.</p><h4 class=CHeading>Returns</h4><p>{String} The string, camelized</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Function.bind"></a>Function.bind</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object.  Method to easily create closures with ‘this’ altered.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} the this parameter</td></tr></table><h4 class=CHea [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Element.Function.bindAsEventListener"></a>Function.<wbr>bindAsEventListener</h3><div class=CBody><p><b>Deprecated</b>.  Bind a function to an object, and configure it to receive the event object as first parameter when called.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>object</td><td class=CDLDescription>{Object} A referenc [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Tile"></a>OpenLayers.Tile</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Tile.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLayers.Tile.getBoundsFromB [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.getBoundsFromBaseLayer"></a>getBoundsFromBaseLayer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getBoundsFromBaseLayer: function(</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></ [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h2><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation" class=LClass id=link239 onMouseOver="ShowTip(event, 'tt189', 'link239')" onMouseOut="HideTip('tt189')">OpenLayers.Control.Navigation</a> instea [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.performedDrag"></a>performedDrag</h3><div class=CBody><p>{Boolean}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.wheelObserver"></a>wheelObserver</h3><div class=CBody><p>{Function}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.OpenLayers.Control.MouseDefaults"></a>OpenLayers.<wbr>Control.<wbr>MouseDefaults</h3></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.registerWheelEvents"></a>registerWheelEvents</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">registerWheelEvents: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultClick"></a>defaultClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultDblClick"></a>defaultDblClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultDblClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseDown"></a>defaultMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseDown: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseMove"></a>defaultMouseMove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseMove: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseUp"></a>defaultMouseUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseUp: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultMouseOut"></a>defaultMouseOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseOut: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultWheelUp"></a>defaultWheelUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultWheelUp: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.defaultWheelDown"></a>defaultWheelDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultWheelDown: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.zoomBoxEnd"></a>zoomBoxEnd</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>zoomBoxEnd: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.removeZoomBox"></a>removeZoomBox</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">removeZoomBox: function()</td></tr></table></blockquote><p>Remove the zoombox from the screen and nullify our reference to it.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseDefaults.onWheelEvent"></a>onWheelEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>onWheelEvent: function(</td><td class="PParameter  prettyprint " nowrap>e</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h2><div class=CBody><p>This class is DEPRECATED in 2.4 and will be removed by 3.0.  If you need this functionality, use <a href="OpenLayers/Control/NavToolbar-js.html#OpenLayers.Control.NavToolbar" class=LClass id=link255 onMouseOver="ShowTip(event, 'tt192', 'link255')" onMouseOut="HideTip('tt192')">OpenLayers.Control.NavToolbar</a> instead! [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.mode"></a>mode</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttons"></a>buttons</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.direction"></a>direction</h3><div class=CBody><p>{String} ‘vertical’ or ‘horizontal’</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttonClicked"></a>buttonClicked</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.OpenLayers.Control.MouseToolbar"></a>OpenLayers.<wbr>Control.<wbr>MouseToolbar</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>position</td><td class=CDLDescription>{<a href="OpenLayers/BaseTypes/Pixel-js.html#OpenLayers.Pixel" class=LClass id=link256 onMouseOver="ShowTip(event, 'tt187', 'lin [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar._addButton"></a>_addButton</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttonDown"></a>buttonDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buttonDown: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.buttonUp"></a>buttonUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>buttonUp: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultDblClick"></a>defaultDblClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultDblClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseDown"></a>defaultMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseDown: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.switchModeTo"></a>switchModeTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>switchModeTo: function(</td><td class="PParameter  prettyprint " nowrap>mode</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.leaveMode"></a>leaveMode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">leaveMode: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseMove"></a>defaultMouseMove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseMove: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseUp"></a>defaultMouseUp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseUp: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultMouseOut"></a>defaultMouseOut</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultMouseOut: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Control.MouseToolbar.defaultClick"></a>defaultClick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>defaultClick: function (</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.Grid"></a>OpenLayers.<wbr>Layer.Grid</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Layer.Grid.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLay [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Grid.getGridBounds"></a>getGridBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getGridBounds: function()</td></tr></table></blockquote><p>Deprecated.  This function will be removed in 3.0.  Please use getTilesBounds() instead.</p><h4 class=CHeading>Returns</h4><p>{<a href="OpenLayers/BaseTypes/Bounds-js.html#OpenLa [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Format.XML"></a>OpenLayers.<wbr>Format.XML</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Format.XML.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#OpenLay [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Format.XML.concatChildValues"></a>concatChildValues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>concatChildValues: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>def</td><td  [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h2><div class=CBody><p>Instances of OpenLayers.Layer.WMS.Post are used to retrieve data from OGC Web Mapping Services via HTTP-POST (application/x-www-form-urlencoded).  Create a new WMS layer with the <a href="#OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post" class=LConstructor id=link262 onMouseOver="ShowTip(event, 'tt194', 'link262')" onMouseOut= [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.unsupportedBrowsers"></a>unsupportedBrowsers</h3><div class=CBody><p>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles from a WMS . Defaults to [“mozilla”, “firefox”, “opera”], because Opera is not able to show transparent images in IFrames and Firefox/Mozilla has some ugly effects of viewport-shaking wh [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.SUPPORTED_TRANSITIONS"></a>SUPPORTED_TRANSITIONS</h3><div class=CBody><p>{Array} no supported transitions for this type of layer, because it is not possible to modify the initialized tiles (iframes)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.usePost"></a>usePost</h3><div class=CBody><p>{Boolean}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.OpenLayers.Layer.WMS.Post"></a>OpenLayers.<wbr>Layer.<wbr>WMS.Post</h3><div class=CBody><p>Creates a new WMS layer object.</p><h4 class=CHeading>Example</h4><blockquote><pre class="prettyprint">var wms = new OpenLayers.Layer.WMS.Post(
+ "NASA Global Mosaic",
+ "http://wms.jpl.nasa.gov/wms.cgi",
+ {layers: "modis, global_mosaic"});</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String} A name for the layer</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String} Base url for the WMS (e.g.  <a href="http://wms.jpl.nasa.gov/wms.cgi" class=LURL target=_top>http://wms.jpl.nasa.gov/wms.cgi</a>)</td></tr><tr><td class=CDLEntry [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Post.addTile"></a>addTile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTile: function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParame [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h2><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.WMS and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/WMS-js.html#OpenLayers.Layer.WMS" class=LClass id=link270 onMouseOver="ShowTip(event, 'tt195', 'link270')" onM [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.OpenLayers.Layer.WMS.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>WMS.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class= [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WMS.Untiled.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Cr [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h2><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.MapServer and pass the option ‘singleTile’ as true.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/MapServer-js.html#OpenLayers.Layer.MapServer" class=LClass id=link272 onMouseOver="ShowTip(e [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.singleTile"></a>singleTile</h3><div class=CBody><p>{singleTile} Always true for untiled.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled"></a>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>par [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.MapServer.Untiled.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Tile.WFS"></a>OpenLayers.<wbr>Tile.WFS</h2><div class=CBody><p>Instances of OpenLayers.Tile.WFS are used to manage the image tiles used by various layers.   Create a new image tile with the <a href="#OpenLayers.Tile.WFS" class=LClass id=link282 onMouseOver="ShowTip(event, 'tt74', 'link282')" onMouseOut="HideTip('tt74')">OpenLayers.Tile.WFS</a> constructor.</p><h4 class=CHeading>Inherits from</h4><ul><li><a hr [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.features"></a>features</h3><div class=CBody><p>{Array(<a href="OpenLayers/Feature-js.html#OpenLayers.Feature" class=LClass id=link283 onMouseOver="ShowTip(event, 'tt63', 'link283')" onMouseOut="HideTip('tt63')">OpenLayers.Feature</a>)} list of features in this tile</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.url"></a>url</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.request"></a>request</h3><div class=CBody><p>{<a href="OpenLayers/Request/XMLHttpRequest-js.html#OpenLayers.Request.XMLHttpRequest" class=LClass id=link284 onMouseOver="ShowTip(event, 'tt64', 'link284')" onMouseOut="HideTip('tt64')">OpenLayers.Request.XMLHttpRequest</a>}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Clear the tile of any bounds/position-related data so that it can be reused in a new location.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">draw:function()</td></tr></table></blockquote><p>Check that a tile should be drawn, and load features for it.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.loadFeaturesForRegion"></a>loadFeaturesForRegion</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>loadFeaturesForRegion:function(</td><td class="PParameter  prettyprint " nowrap>success,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.requestSuccess"></a>requestSuccess</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>requestSuccess:function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tabl [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.addResults"></a>addResults</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addResults: function(</td><td class="PParameter  prettyprint " nowrap>results</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockqu [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Tile.WFS.destroyAllFeatures"></a>destroyAllFeatures</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroyAllFeatures: function()</td></tr></table></blockquote><p>Iterate through and call destroy() on each feature, removing it from the local array</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h2><div class=CBody><p>WFS handling class, for use as a featureClass on the WFS layer for handling ‘point’ WFS types.  Good for subclassing when creating a custom WFS like XML application.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Feature-js.html#OpenLayers.Feature" class=LClass id=link288 onMouseOver="ShowTip(event, 'tt63', ' [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.OpenLayers.Feature.WFS"></a>OpenLayers.<wbr>Feature.WFS</h3><div class=CBody><p>Create a WFS feature.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>layer</td><td class=CDLDescription>{<a href="OpenLayers/Layer-js.html#OpenLayers.Layer" class=LClass >OpenLayers.Layer</a>}</td></tr><tr><td class=CDLEntry>xmlNode</td><t [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>nullify references to prevent circular references and memory leaks</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Feature.WFS.processXMLNode"></a>processXMLNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>processXMLNode: function(</td><td class="PParameter  prettyprint " nowrap>xmlNode</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h2><div class=CBody><p><b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with a Protocol.WFS and one or more Strategies.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/Vector-js.html#OpenLayers.Layer.Vector" class=LClass id=link310 onMouseOver="ShowTip(event, 'tt199', 'link310')" onMouseOut="HideTip('tt199 [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.isBaseLayer"></a>isBaseLayer</h3><div class=CBody><p>{Boolean} WFS layer is not a base layer by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.tile"></a>tile</h3><div class=CBody><p>{<a href="#OpenLayers.Tile.WFS" class=LClass id=link311 onMouseOver="ShowTip(event, 'tt74', 'link311')" onMouseOut="HideTip('tt74')">OpenLayers.Tile.WFS</a>}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.ratio"></a>ratio</h3><div class=CBody><p>{Float} The ratio property determines the size of the serverside query relative to the map viewport size.  By default, we load an area twice as big as the map, to allow for panning without immediately reload.  Setting this to 1 will cause the area of the WFS request to match the map area exactly.  It is recommended to set this to some number at l [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.DEFAULT_PARAMS"></a>DEFAULT_PARAMS</h3><div class=CBody><p>{Object} Hashtable of default key/value parameters</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.featureClass"></a>featureClass</h3><div class=CBody><p>{<a href="OpenLayers/Feature-js.html#OpenLayers.Feature" class=LClass id=link312 onMouseOver="ShowTip(event, 'tt63', 'link312')" onMouseOut="HideTip('tt63')">OpenLayers.Feature</a>} If featureClass is defined, an old-style markers based WFS layer is created instead of a new-style vector layer.  If sent, this should be a subclass of OpenLayers [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.format"></a>format</h3><div class=CBody><p>{<a href="OpenLayers/Format-js.html#OpenLayers.Format" class=LClass id=link313 onMouseOver="ShowTip(event, 'tt75', 'link313')" onMouseOut="HideTip('tt75')">OpenLayers.Format</a>} The format you want the data to be parsed with.  Must be passed in the constructor.  Should be a class, not an instance.  This option can only be used if no featureCla [...]
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.formatObject"></a>formatObject</h3><div class=CBody><p>{<a href="OpenLayers/Format-js.html#OpenLayers.Format" class=LClass id=link314 onMouseOver="ShowTip(event, 'tt75', 'link314')" onMouseOut="HideTip('tt75')">OpenLayers.Format</a>} Internally created/managed format object, used by the Tile to parse data.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.vectorMode"></a>vectorMode</h3><div class=CBody><p>{Boolean} Should be calculated automatically.  Determines whether the layer is in vector mode or marker mode.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.encodeBBOX"></a>encodeBBOX</h3><div class=CBody><p>{Boolean} Should the BBOX commas be encoded?  The WMS spec says ‘no’, but some services want it that way.  Default false.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.extractAttributes"></a>extractAttributes</h3><div class=CBody><p>{Boolean} Should the WFS layer parse attributes from the retrieved GML?  Defaults to false.  If enabled, parsing is slower, but attributes are available in the attributes property of layer features.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.OpenLayers.Layer.WFS"></a>OpenLayers.<wbr>Layer.WFS</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>url</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>{Object}</td></tr>< [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=C [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class= [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.addTileMonitoringHooks"></a>addTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>addTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.removeTileMonitoringHooks"></a>removeTileMonitoringHooks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>removeTileMonitoringHooks: function(</td><td class="PParameter  prettyprint " nowrap>tile</td><td class="PAfterParameters  prettyprint "nowrap>)</ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote><p>Call the onMapResize method of the appropriate parent class.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.display"></a>display</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">display: function()</td></tr></table></blockquote><p>Call the display method of the appropriate parent class.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.mergeNewParams"></a>mergeNewParams</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mergeNewParams:function(</td><td class="PParameter  prettyprint " nowrap>newParams</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.clone"></a>clone</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>clone: function (</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><h4 class=CHe [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getFullRequestString"></a>getFullRequestString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFullRequestString:function(</td><td class="PParameter  prettyprint " nowrap>newParams,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">commit: function()</td></tr></table></blockquote><p>Write out the data to a WFS server.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitSuccess"></a>commitSuccess</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitSuccess: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitFailure"></a>commitFailure</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitFailure: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.commitReport"></a>commitReport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commitReport: function(</td><td class="PParameter  prettyprint " nowrap>string,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>response</td><td class="PA [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.refresh"></a>refresh</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">refresh: function()</td></tr></table></blockquote><p>Refreshes all the features of the layer</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.getDataExtent"></a>getDataExtent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getDataExtent: function ()</td></tr></table></blockquote><p>Calculates the max extent which includes all of the layer data.</p><h4 class=CHeading>Returns</h4><p>{<a href="OpenLayers/BaseTypes/Bounds-js.html#OpenLayers.Bounds" class=LClass id=link31 [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.WFS.setOpacity"></a>setOpacity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setOpacity: function (</td><td class="PParameter  prettyprint " nowrap>opacity</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></block [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h2><div class=CBody><p><b>Deprecated</b>.  Use <a href="OpenLayers/Layer/Bing-js.html#OpenLayers.Layer.Bing" class=LClass id=link333 onMouseOver="ShowTip(event, 'tt201', 'link333')" onMouseOut="HideTip('tt201')">OpenLayers.Layer.Bing</a> instead.</p><p>Instances of OpenLayers.Layer.VirtualEarth are used to display the data from the Bing Maps AJA [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 1</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 19</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.type"></a>type</h3><div class=CBody><p>{VEMapType}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.VirtualEarth.sphericalMercator" class=LProperty id=link337 onMouseOver="ShowTip(event, 'tt205', 'link337')" onMouseOut="HideTip('tt205')">sphericalMercator</a> is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.animationEnabled"></a>animationEnabled</h3><div class=CBody><p>{Boolean} If set to true, the transition between zoom levels will be animated.  Set to false to match the zooming experience of other layer types.  Default is true.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.OpenLayers.Layer.VirtualEarth"></a>OpenLayers.<wbr>Layer.<wbr>VirtualEarth</h3><div class=CBody><p>Creates a new instance of a OpenLayers.Layer.VirtualEarth.  If you use an instance of OpenLayers.Layer.VirtualEarth in you map, you should set the <a href="OpenLayers/Map-js.html#OpenLayers.Map" class=LClass id=link338 onMouseOver="ShowTip(event, 'tt200', 'link338')" onMouseOut="HideTip( [...]
+    // other map options
+    restrictedExtent : OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
+} );
+
+var veLayer = new OpenLayers.Layer.VirtualEarth (
+    "Virtual Earth Layer"
+);
+
+map.addLayer( veLayer );</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.loadMapObject"></a>loadMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td cla [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td cl [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParamet [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.VirtualEarth.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprin [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h2><div class=CBody><p>Abstract SQL protocol class.   Not to be instantiated directly.   Use one of the SQL protocol subclasses instead.</p><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Protocol-js.html#OpenLayers.Protocol" class=LClass id=link342 onMouseOver="ShowTip(event, 'tt206', 'link342')" onMouseOut="HideTip('tt206')">OpenLayers.Pr [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.databaseName"></a>databaseName</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.tableName"></a>tableName</h3><div class=CBody><p>Name of the database table into which Features should be saved.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.postReadFiltering"></a>postReadFiltering</h3><div class=CBody><p>{Boolean} Whether the filter (if there’s one) must be applied after the features have been read from the database; for example the BBOX strategy passes the read method a BBOX spatial filter, if postReadFiltering is true every feature read from the database will go through the BBOX spatial filter, which can be costly; defaults to [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.OpenLayers.Protocol.SQL"></a>OpenLayers.<wbr>Protocol.SQL</h3></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>This should be overridden by specific subclasses</p><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SQL backend</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.evaluateFilter"></a>evaluateFilter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>evaluateFilter: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>filter</td><td c [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h2><div class=CBody><p>This Protocol stores feature in the browser via the Gears Database module <a href="http://code.google.com/apis/gears/api_database.html" class=LURL target=_top>http://code.google.com<wbr>/apis<wbr>/gears<wbr>/api_database.html</a>.</p><p>The main advantage is that all the read, create, update and delete operations can be do [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.FID_PREFIX"></a>FID_PREFIX</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.NULL_GEOMETRY"></a>NULL_GEOMETRY</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.NULL_FEATURE_STATE"></a>NULL_FEATURE_STATE</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.jsonParser"></a>jsonParser</h3><div class=CBody><p>{<a href="OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON" class=LClass id=link365 onMouseOver="ShowTip(event, 'tt111', 'link365')" onMouseOut="HideTip('tt111')">OpenLayers.Format.JSON</a>}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.wktParser"></a>wktParser</h3><div class=CBody><p>{<a href="OpenLayers/Format/WKT-js.html#OpenLayers.Format.WKT" class=LClass id=link366 onMouseOver="ShowTip(event, 'tt112', 'link366')" onMouseOut="HideTip('tt112')">OpenLayers.Format.WKT</a>}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.fidRegExp"></a>fidRegExp</h3><div class=CBody><p>{RegExp} Regular expression to know whether a feature was created in offline mode.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.saveFeatureState"></a>saveFeatureState</h3><div class=CBody><p>{Boolean} Whether to save the feature state (<OpenLayers.State>) into the database, defaults to true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.typeOfFid"></a>typeOfFid</h3><div class=CBody><p>{String} The type of the feature identifier, either “number” or “string”, defaults to “string”.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.db"></a>db</h3><div class=CBody><p>{GearsDatabase}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears"></a>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</h3></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.initializeDatabase"></a>initializeDatabase</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">initializeDatabase: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">destroy: function()</td></tr></table></blockquote><p>Clean up the protocol.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><p>Determine whether a browser supports Gears</p><h4 class=CHeading>Returns</h4><p>{Boolean} The browser supports Gears</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.read"></a>read</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>read: function(</td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>R [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.unfreezeFeature"></a>unfreezeFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>unfreezeFeature: function(</td><td class="PParameter  prettyprint " nowrap>row</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.extractFidFromField"></a>extractFidFromField</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>extractFidFromField: function(</td><td class="PParameter  prettyprint " nowrap>field</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.create"></a>create</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>create: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.update"></a>update</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>update: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.createOrUpdate"></a>createOrUpdate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createOrUpdate: function(</td><td class="PParameter  prettyprint " nowrap>features</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.freezeFeature"></a>freezeFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>freezeFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.getFeatureStateForFreeze"></a>getFeatureStateForFreeze</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureStateForFreeze: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "n [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.delete"></a>delete</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>"delete": function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.createdOffline"></a>createdOffline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createdOffline: function(</td><td class="PParameter  prettyprint " nowrap>feature</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.commit"></a>commit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>commit: function(</td><td class="PParameter  prettyprint " nowrap>features,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>options</td><td class="PAfterPara [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">clear: function()</td></tr></table></blockquote><p>Removes all rows of the table.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Protocol.SQL.Gears.callUserCallback"></a>callUserCallback</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>callUserCallback: function(</td><td class="PParameter  prettyprint " nowrap>options,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>resp [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h2><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Layer/EventPane-js.html#OpenLayers.Layer.EventPane" class=LClass id=link414 onMouseOver="ShowTip(event, 'tt203', 'link414')" onMouseOut="HideTip('tt203')">OpenLayers.Layer.EventPane</a></li><li><a href="OpenLayers/Layer/FixedZoomLevels-js.html#OpenLayers.Layer.FixedZoomLevels" cla [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MIN_ZOOM_LEVEL"></a>MIN_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 0</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.MAX_ZOOM_LEVEL"></a>MAX_ZOOM_LEVEL</h3><div class=CBody><p>{Integer} 17</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.RESOLUTIONS"></a>RESOLUTIONS</h3><div class=CBody><p>{Array(Float)} Hardcode these resolutions so that they are more closely tied with the standard wms projection</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.type"></a>type</h3><div class=CBody><p>{YahooMapType}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.wrapDateLine"></a>wrapDateLine</h3><div class=CBody><p>{Boolean} Allow user to pan forever east/west.   Default is true.  Setting this to false only restricts panning if <a href="#OpenLayers.Layer.Yahoo.sphericalMercator" class=LProperty id=link416 onMouseOver="ShowTip(event, 'tt210', 'link416')" onMouseOut="HideTip('tt210')">sphericalMercator</a> is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.sphericalMercator"></a>sphericalMercator</h3><div class=CBody><p>{Boolean} Should the map act as a mercator-projected map?  This will cause all interactions with the map to be in the actual map projection, which allows support for vector drawing, overlaying other maps, etc.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo"></a>OpenLayers.<wbr>Layer.<wbr>Yahoo</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.loadMapObject"></a>loadMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadMapObject:function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.onMapResize"></a>onMapResize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">onMapResize: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMap"></a>setMap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMap: function(</td><td class="PParameter  prettyprint " nowrap>map</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Overri [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.fixYahooEventPane"></a>fixYahooEventPane</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">fixYahooEventPane: function()</td></tr></table></blockquote><p>The map has been centered, so the mysterious yahoo eventpane has been added. we remove it so that it doesnt mess with <b>our</b> event pane.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getWarningHTML"></a>getWarningHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getWarningHTML:function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{String} String with information on why layer is broken, how to get it working.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getOLZoomFromMapObjectZoom"></a>getOLZoomFromMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getOLZoomFromMapObjectZoom: function(</td><td class="PParameter  prettyprint " nowrap>moZoom</td><td class="PAfterParameters  prettyprint "now [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoomFromOLZoom"></a>getMapObjectZoomFromOLZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectZoomFromOLZoom: function(</td><td class="PParameter  prettyprint " nowrap>olZoom</td><td class="PAfterParameters  prettyprint "now [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.setMapObjectCenter"></a>setMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setMapObjectCenter: function(</td><td class="PParameter  prettyprint " nowrap>center,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoom</ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectCenter"></a>getMapObjectCenter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectCenter: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Object} The mapObject’s current center in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.dragPanMapObject"></a>dragPanMapObject</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dragPanMapObject: function(</td><td class="PParameter  prettyprint " nowrap>dX,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>dY</td><td class [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectZoom"></a>getMapObjectZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getMapObjectZoom: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Integer} The mapObject’s current zoom, in Map Object format</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromMapObjectPixel"></a>getMapObjectLonLatFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAf [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromMapObjectLonLat"></a>getMapObjectPixelFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PA [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLongitudeFromMapObjectLonLat"></a>getLongitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLongitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getLatitudeFromMapObjectLonLat"></a>getLatitudeFromMapObjectLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getLatitudeFromMapObjectLonLat: function(</td><td class="PParameter  prettyprint " nowrap>moLonLat</td><td class="PAfterParameters  pr [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectLonLatFromLonLat"></a>getMapObjectLonLatFromLonLat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectLonLatFromLonLat: function(</td><td class="PParameter  prettyprint " nowrap>lon,</td></tr><tr><td></td><td class="PParameter   [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getXFromMapObjectPixel"></a>getXFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getXFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getYFromMapObjectPixel"></a>getYFromMapObjectPixel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getYFromMapObjectPixel: function(</td><td class="PParameter  prettyprint " nowrap>moPixel</td><td class="PAfterParameters  prettyprint "nowrap>)</td>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectPixelFromXY"></a>getMapObjectPixelFromXY</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectPixelFromXY: function(</td><td class="PParameter  prettyprint " nowrap>x,</td></tr><tr><td></td><td class="PParameter  prettyprint " now [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.Yahoo.getMapObjectSizeFromOLSize"></a>getMapObjectSizeFromOLSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getMapObjectSizeFromOLSize: function(</td><td class="PParameter  prettyprint " nowrap>olSize</td><td class="PAfterParameters  prettyprint "now [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h2><div class=CBody><p>Create a vector layer by parsing a GML file.  The GML file is passed in as a parameter.  <b>Deprecated</b>.   To be removed in 3.0.   Instead use OpenLayers.Layer.Vector with Protocol.HTTP and Strategy.Fixed.  Provide the protocol with a format parameter to get the parser you want for your data.</p><h4 class=CHeading>Inherits [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.loaded"></a>loaded</h3><div class=CBody><p>{Boolean} Flag for whether the GML data has been loaded yet.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.format"></a>format</h3><div class=CBody><p>{<a href="OpenLayers/Format-js.html#OpenLayers.Format" class=LClass id=link427 onMouseOver="ShowTip(event, 'tt75', 'link427')" onMouseOut="HideTip('tt75')">OpenLayers.Format</a>} The format you want the data to be parsed with.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.formatOptions"></a>formatOptions</h3><div class=CBody><p>{Object} Hash of options which should be passed to the format when it is created.  Must be passed in the constructor.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.OpenLayers.Layer.GML"></a>OpenLayers.<wbr>Layer.GML</h3><div class=CBody><p>Load and parse a single file on the web, according to the format provided via the ‘format’ option, defaulting to GML.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>{String}</td></tr><tr><td class=CD [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.setVisibility"></a>setVisibility</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setVisibility: function(</td><td class="PParameter  prettyprint " nowrap>visibility,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>noEvent</td><td cla [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.moveTo"></a>moveTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>moveTo:function(</td><td class="PParameter  prettyprint " nowrap>bounds,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>zoomChanged,</td></tr><tr><td></td><td class= [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.loadGML"></a>loadGML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">loadGML: function()</td></tr></table></blockquote></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.setUrl"></a>setUrl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setUrl:function(</td><td class="PParameter  prettyprint " nowrap>url</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Change th [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.requestSuccess"></a>requestSuccess</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>requestSuccess:function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></tab [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Layer.GML.requestFailure"></a>requestFailure</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>requestFailure: function(</td><td class="PParameter  prettyprint " nowrap>request</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ta [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h2><div class=CBody><p>This class is <b>not supported</b>, and probably isn’t what you’re looking for.  Instead, most users probably want something like:</p><blockquote><pre class="prettyprint">var poly = new OpenLayers.Bounds(0,0,10,10).toGeometry();</pre></blockquote><p>This will create a rectangular Polygon geometry.</p><h4 class= [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.x"></a>x</h3><div class=CBody><p>{Float}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.y"></a>y</h3><div class=CBody><p>{Float}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.width"></a>width</h3><div class=CBody><p>{Float}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.height"></a>height</h3><div class=CBody><p>{Float}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.OpenLayers.Geometry.Rectangle"></a>OpenLayers.<wbr>Geometry.<wbr>Rectangle</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>points</td><td class=CDLDescription>{Array(<a href="OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link432 onMouseOver="ShowTip(event, 'tt213' [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.calculateBounds"></a>calculateBounds</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">calculateBounds: function()</td></tr></table></blockquote><p>Recalculate the bounds for the geometry.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getLength"></a>getLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getLength: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The length of the geometry</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Geometry.Rectangle.getArea"></a>getArea</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">getArea: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Float} The area of the geometry</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h2><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="OpenLayers/Renderer/Elements-js.html#OpenLayers.Renderer.Elements" class=LClass id=link436 onMouseOver="ShowTip(event, 'tt214', 'link436')" onMouseOut="HideTip('tt214')">OpenLayers.Renderer.Elements</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=S [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.  To be defined by subclasses.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.OpenLayers.Renderer.NG"></a>OpenLayers.<wbr>Renderer.NG</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>{Object} options for this renderer.  Supported options are:</td></tr></tab [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.updateDimensions"></a>updateDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateDimensions: function(</td><td class="PParameter  prettyprint " nowrap>zoomChanged</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.resize"></a>resize</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.drawFeature"></a>drawFeature</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawFeature: function(</td><td class="PParameter  prettyprint " nowrap>feature,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PAfte [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.NG.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td  [...]
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h2><div class=CBody><h4 class=CHeading>Inherits from</h4><ul><li><a href="#OpenLayers.Renderer.NG" class=LClass >OpenLayers.Renderer.NG</a></li></ul><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#OpenLayers.Renderer.SVG [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.xmlns"></a>xmlns</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.xlinkns"></a>xlinkns</h3><div class=CBody><p>{String}</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.symbolMetrics"></a>symbolMetrics</h3><div class=CBody><p>{Object} Cache for symbol metrics according to their svg coordinate space.  This is an object keyed by the symbol’s id, and values are an object with size, x and y properties.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.labelNodeType"></a>labelNodeType</h3><div class=CBody><p>{String} The node type for text label containers.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constructor"></a>Constructor</h3></div></div>
+
+<div class="CConstructor"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2"></a>OpenLayers.<wbr>Renderer.SVG2</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>containerID</td><td class=CDLDescription>{String}</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.supported"></a>supported</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">supported: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{Boolean} Whether or not the browser supports the SVG renderer</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.updateDimensions"></a>updateDimensions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>updateDimensions: function(</td><td class="PParameter  prettyprint " nowrap>zoomChanged</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table> [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getNodeType"></a>getNodeType</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getNodeType: function(</td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style</td><td class="PA [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.setStyle"></a>setStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>setStyle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td cla [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.dashStyle"></a>dashStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>widthFactor</td><td class="PAfte [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createNode"></a>createNode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createNode: function(</td><td class="PParameter  prettyprint " nowrap>type,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>id</td><td class="PAfterParame [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.nodeTypeCompare"></a>nodeTypeCompare</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>nodeTypeCompare: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>type</td><td cl [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createRenderRoot"></a>createRenderRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createRenderRoot: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} The specific render engine’s root element</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createRoot"></a>createRoot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>createRoot: function(</td><td class="PParameter  prettyprint " nowrap>suffix</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blo [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.createDefs"></a>createDefs</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">createDefs: function()</td></tr></table></blockquote><h4 class=CHeading>Returns</h4><p>{DOMElement} The element to which we’ll add the symbol definitions</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawPoint"></a>drawPoint</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPoint: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAfterPar [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawCircle"></a>drawCircle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawCircle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry,</td></tr><tr><td></t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawLineString"></a>drawLineString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLineString: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td c [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawLinearRing"></a>drawLinearRing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawLinearRing: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td c [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawPolygon"></a>drawPolygon</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawPolygon: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td class="PAf [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawRectangle"></a>drawRectangle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawRectangle: function(</td><td class="PParameter  prettyprint " nowrap>node,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>geometry</td><td clas [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.drawText"></a>drawText</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>drawText: function(</td><td class="PParameter  prettyprint " nowrap>featureId,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getComponentString"></a>getComponentString</h3><div class=CBody><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>components</td><td class=CDLDescription>{Array(<a href="OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point" class=LClass id=link468 onMouseOver="ShowTip(event, 'tt213', 'link468')" onMouseOut="HideTip('t [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getShortString"></a>getShortString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getShortString: function(</td><td class="PParameter  prettyprint " nowrap>point</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></ [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.importSymbol"></a>importSymbol</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>importSymbol: function (</td><td class="PParameter  prettyprint " nowrap>graphicName</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr>< [...]
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.getFeatureIdFromEvent"></a>getFeatureIdFromEvent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>getFeatureIdFromEvent: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr>< [...]
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Constants"></a>Constants</h3></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_ALIGN"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_ALIGN</h3><div class=CBody><p>{Object}</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VSHIFT"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VSHIFT</h3><div class=CBody><p>{Object}</p></div></div></div>
+
+<div class="CConstant"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.LABEL_VFACTOR"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>LABEL_VFACTOR</h3><div class=CBody><p>{Object}</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="OpenLayers.Renderer.SVG2.OpenLayers.Renderer.SVG2.preventDefault"></a>OpenLayers.<wbr>Renderer.<wbr>SVG2.<wbr>preventDefault</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Renderer.SVG2.preventDefault = function(</td><td class="PParameter  prettyprint " nowrap [...]
+
+</div><!--Content-->
+
+
+<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div class=MEnt [...]
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
+HideAllBut([32], 34);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Class.inherit = function (</td><td class="PParameter  prettyprint " nowrap>P</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="tt2"><div class= [...]
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/index/Classes.html b/doc/devdocs/index/Classes.html
index 0979cf2..9d96824 100644
--- a/doc/devdocs/index/Classes.html
+++ b/doc/devdocs/index/Classes.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="#O">O</a> · P · Q · R · S · T · <a href="Classes2.html#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class= [...]
+<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="#O">O</a> · P · Q · R · <a href="Classes2.html#S">S</a> · T · <a href="Classes2.html#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing= [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>The OpenLayers object provides a namespace for all things OpenLayers</div></div><div class=CToolTip id="tt2"><div class=CClass><b>Deprecated</b>. </div></div><div class=CToolTip id="tt3"><div class=CClass>{Object}</div></div><div class=CToolTip id="tt4"><div class=CClass>Contains convenience functions for array manipulation.</div></div><div class=CToolTip id="tt5"><div class=CClass>Instances of this class represent bounding boxes. </div></di [...]
+<div class=CToolTip id="tt1"><div class=CClass>The OpenLayers object provides a namespace for all things OpenLayers</div></div><div class=CToolTip id="tt2"><div class=CClass><b>Deprecated</b>. </div></div><div class=CToolTip id="tt3"><div class=CClass>{Object}</div></div><div class=CToolTip id="tt4"><div class=CClass>A collection of utility functions for executing methods that repaint a portion of the browser window. </div></div><div class=CToolTip id="tt5"><div class=CClass>Contains con [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Classes2.html b/doc/devdocs/index/Classes2.html
index 39295a7..9633786 100644
--- a/doc/devdocs/index/Classes2.html
+++ b/doc/devdocs/index/Classes2.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="Classes.html#O">O</a> · P · Q · R · S · T · <a href="#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=I [...]
+<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · <a href="Classes.html#O">O</a> · P · Q · R · <a href="#S">S</a> · T · <a href="#U">U</a> · V · W · X · Y · Z</div><table border=0 cellspacing=0 cellpadding= [...]
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt299"><div class=CClass>The OpenLayers.Spherical namespace includes utility functions for calculations on the basis of a spherical earth (ignoring ellipsoidal effects), which is accurate enough for most purposes.</div></div><!--END_ND_TOOLTIPS-->
+
+
 <!--START_ND_TOOLTIPS-->
 <!--END_ND_TOOLTIPS-->
 
@@ -21,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Constants.html b/doc/devdocs/index/Constants.html
index 0c7dfa8..ccc90a1 100644
--- a/doc/devdocs/index/Constants.html
+++ b/doc/devdocs/index/Constants.html
@@ -11,77 +11,73 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constant Index</div><div class=INavigationBar>$#! · 0-9 · A · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · G · H · <a href="#I">I</a> · J · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · N · <a href="#O">O</a> · P · Q · <a href="#R">R</a> · [...]
+<div id=Index><div class=IPageTitle>Constant Index</div><div class=INavigationBar>$#! · 0-9 · A · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · E · <a href="#F">F</a> · G · H · <a href="#I">I</a> · J · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · N · <a href="#O">O</a> · P · Q · <a href="#R">R</a> · <a href="#S">S</ [...]
 <!--START_ND_TOOLTIPS-->
 <div class=CToolTip id="tt1"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt2"><div class=CConstant>{Array(String)} supported events</div></div><div class=CToolTip id="tt3"><div class=CConstant>{String} A substring of the navigator.userAgent property. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt4"><div class=CConstant>{Integer} 5. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt4"><div class=CConstant>{Boolean} True if canvas 2d is supported.</div></div><div class=CToolTip id="tt5"><div class=CConstant>{Integer} 5. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt5"><div class=CConstant>{Object} Default configuration for all requests.</div></div><div class=CToolTip id="tt6"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt7"><div class=CConstant>{Object} Default layers properties.</div></div><div class=CToolTip id="tt8"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs</div></div><div class=CToolTip id="tt9"><div class=CConstant> [...]
+<div class=CToolTip id="tt6"><div class=CConstant>{Object} Default configuration for all requests.</div></div><div class=CToolTip id="tt7"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt8"><div class=CConstant>{Object} Default layers properties.</div></div><div class=CToolTip id="tt9"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs</div></div><div class=CToolTip id="tt10"><div class=CConstant [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt22"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt23"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt24"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt25"><div class=CConstant>{Array(String)} Supported application event types. </div></div><div class=CToolTip id="tt26"><div c [...]
+<div class=CToolTip id="tt23"><div class=CConstant>{Object} Hashtable of parameter key/value pairs which describe the folder structure for tiles as configured in the mapguide serverconfig.ini section [TileServiceProperties]</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt32"><div class=CConstant>{Object} Hashtable of parameter key/value pairs which describe the folder structure for tiles as configured in the mapguide serverconfig.ini section [TileServiceProperties]</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt24"><div class=CConstant>Mixin for tiles that use form-encoded POST requests to get images from remote services. </div></div><div class=CToolTip id="tt25"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt26"><div class=CConstant>{Object} Constant inches per unit -- borrowed from MapServer mapscale.c derivation of nautical miles from http://en.wikipedia.org/wiki/Nautical_mile Includes the full set  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt33"><div class=CConstant>Mixin for tiles that use form-encoded POST requests to get images from remote services. </div></div><div class=CToolTip id="tt34"><div class=CConstant>{Object} Simple hash map to convert format to extension.</div></div><div class=CToolTip id="tt35"><div class=CConstant>{Object} Constant inches per unit -- borrowed from MapServer mapscale.c derivation of nautical miles from http://en.wikipedia.org/wiki/Nautical_mile Includes the full set  [...]
+<div class=CToolTip id="tt28"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt29"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt30"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt31"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt32"><div class=CConstant>keydown, keypress, keyup</div></div><div class=CToolTip id="tt33"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt34"><div class=CConstant>{int}</div></d [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt38"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt39"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt40"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt41"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt42"><div class=CConstant>keydown, keypress, keyup</div></div><div class=CToolTip id="tt43"><div class=CConstant>{int}</div></div><div class=CToolTip id="tt44"><div class=CConstant>{int}</div></d [...]
+<div class=CToolTip id="tt39"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt40"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt41"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt42"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt43"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt44"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt45"><div class=CConstant>{Object}</div>< [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt48"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt49"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt50"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt51"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt52"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt53"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt54"><div class=CConstant>{Object}</div>< [...]
+<div class=CToolTip id="tt52"><div class=CConstant>{Integer} Firefox has a limitation where values larger or smaller than about 15000 in an SVG document lock the browser up. </div></div><div class=CToolTip id="tt53"><div class=CConstant>{Integer} 21</div></div><div class=CToolTip id="tt54"><div class=CConstant>{Integer} 19</div></div><div class=CToolTip id="tt55"><div class=CConstant>{Integer} 17</div></div><div class=CToolTip id="tt56"><div class=CConstant>{Integer} 0</div></div><div cl [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt60"><div class=CConstant>{Integer} Firefox has a limitation where values larger or smaller than about 15000 in an SVG document lock the browser up. </div></div><div class=CToolTip id="tt61"><div class=CConstant>{Integer} 21</div></div><div class=CToolTip id="tt62"><div class=CConstant>{Integer} 17</div></div><div class=CToolTip id="tt63"><div class=CConstant>{Integer} 19</div></div><div class=CToolTip id="tt64"><div class=CConstant>{Integer} 17</div></div><div c [...]
+<div class=CToolTip id="tt63"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt73"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt64"><div class=CConstant>{Integer} Constant used to make the control work in reshape mode</div></div><div class=CToolTip id="tt65"><div class=CConstant>{Integer} Constant used to make the control work in resize mode</div></div><div class=CToolTip id="tt66"><div class=CConstant>{Array} The properties that are used for calculating resolutions information.</div></div><div class=CToolTip id="tt67"><div class=CConstant>{Array(Float)} Hardcode these resolutions so tha [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt74"><div class=CConstant>{Integer} Constant used to make the control work in reshape mode</div></div><div class=CToolTip id="tt75"><div class=CConstant>{Integer} Constant used to make the control work in resize mode</div></div><div class=CToolTip id="tt76"><div class=CConstant>{Array} The properties that are used for calculating resolutions information.</div></div><div class=CToolTip id="tt77"><div class=CConstant>{Array(Float)} Hardcode these resolutions so tha [...]
+<div class=CToolTip id="tt71"><div class=CConstant>Enumeration for service types</div></div><div class=CToolTip id="tt72"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><div class=CToolTip id="tt73"><div class=CConstant>TODO: remove this in 3.0 when we stop supporting build profiles that include OpenLayers.js</div></div><div class=CToolTip id="tt74"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt82"><div class=CConstant>Enumeration for service types</div></div><div class=CToolTip id="tt83"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for untiled layer</div></div><div class=CToolTip id="tt84"><div class=CConstant>TODO: remove this in 3.0 when we stop supporting build profiles that include OpenLayers.js</div></div><div class=CToolTip id="tt85"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and  [...]
+<div class=CToolTip id="tt78"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt79"><div class=CConstant>{Integer} 256 Default tile height (unless otherwise specified)</div></div><div class=CToolTip id="tt80"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for tiled layer</div></div><div class=CToolTip id="tt81"><div class=CConstant>{Integer} 256 Default  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt89"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt90"><div class=CConstant>{Integer} 256 Default tile height (unless otherwise specified)</div></div><div class=CToolTip id="tt91"><div class=CConstant>{Object} Hashtable of default parameter key/value pairs for tiled layer</div></div><div class=CToolTip id="tt92"><div class=CConstant>{Integer} 256 Default  [...]
+<div class=CToolTip id="tt82"><div class=CConstant>{Float} Used to hash URL param strings for multi-WMS server selection. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt93"><div class=CConstant>{Float} Used to hash URL param strings for multi-WMS server selection. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt83"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v2.</div></div><div class=CToolTip id="tt84"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v3.</div></div><div class=CToolTip id="tt85"><div class=CConstant>{String} 1.0.0</div></div><div class=CToolTip id="tt86"><div class=CConstant>{String} 1.1.0</div></div><div class=CToolTip id="tt87"><div class=CConstant>{String} 0.3.1</div></div><div  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt94"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v2.</div></div><div class=CToolTip id="tt95"><div class=CConstant>Mixin providing functionality specific to the Google Maps API v3. </div></div><div class=CToolTip id="tt96"><div class=CConstant>{String} 1.0.0</div></div><div class=CToolTip id="tt97"><div class=CConstant>{String} 1.1.0</div></div><div class=CToolTip id="tt98"><div class=CConstant>{String} 0.3.1</div></div><div [...]
+<div class=CToolTip id="tt97"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt108"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt98"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt109"><div class=CConstant>{Integer}</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt110"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt99"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><!--END_ND_TOOLTIPS-->
 
 </div><!--Index-->
 
@@ -89,10 +85,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Constructor.html b/doc/devdocs/index/Constructor.html
index 2cf24dd..6b09dd3 100644
--- a/doc/devdocs/index/Constructor.html
+++ b/doc/devdocs/index/Constructor.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · <a href="#J">J</a> · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · <a href="#N">N</a [...]
+<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="#C">C</a> · <a href="#D">D</a> · <a href="#E">E</a> · <a href="#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="#I">I</a> · <a href="#J">J</a> · <a href="#K">K</a> · <a href="#L">L</a> · <a href="#M">M</a> · <a href="#N">N</a [...]
 <!--START_ND_TOOLTIPS-->
 <div class=CToolTip id="tt1"><div class=CConstructor>Create a new ArcGIS93Rest layer object.</div></div><div class=CToolTip id="tt2"><div class=CConstructor>Creates a new instance of this class</div></div><div class=CToolTip id="tt3"><div class=CConstructor>Create a new ArcIMS layer object.</div></div><div class=CToolTip id="tt4"><div class=CConstructor>Create a new parser/writer for ArcXML. </div></div><div class=CToolTip id="tt5"><div class=CConstructor>Create a new parser for Atom.</d [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt6"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt7"><div class=CConstructor>Create a new BBOX strategy.</div></div><div class=CToolTip id="tt8"><div class=CConstructor>Create a new Bing layer.</div></div><div class=CToolTip id="tt9"><div class=CConstructor>Construct a new bounds object.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt6"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt7"><div class=CConstructor>Create a new BBOX strategy.</div></div><div class=CToolTip id="tt8"><div class=CConstructor>Create a new Bing layer.</div></div><div class=CToolTip id="tt9"><div class=CConstructor>Construct a new bounds object. </div></div><div class=CToolTip id="tt10"><div class=CConstructor>Construct a buttonclick event type. </div></di [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CConstructor>Base class used to construct all other classes. </div></div><div class=CToolTip id="tt11"><div class=CConstructor>Create a new click handler.</div></div><div class=CToolTip id="tt12"><div class=CConstructor>Create a new clustering strategy.</div></div><div class=CToolTip id="tt13"><div class=CConstructor>Creates a Geometry Collection -- a list of geoms.</div></div><div class=CToolTip id="tt14"><div class=CConstructor>Creates a compari [...]
+<div class=CToolTip id="tt11"><div class=CConstructor>Create a new click handler.</div></div><div class=CToolTip id="tt12"><div class=CConstructor>Create a new clustering strategy.</div></div><div class=CToolTip id="tt13"><div class=CConstructor>Creates a Geometry Collection -- a list of geoms.</div></div><div class=CToolTip id="tt14"><div class=CConstructor>Creates a comparison rule.</div></div><div class=CToolTip id="tt15"><div class=CConstructor>Create a new parser for Context documen [...]
 
 
 <!--START_ND_TOOLTIPS-->
@@ -45,31 +45,31 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt45"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt46"><div class=CConstructor>Create a new image layer</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt45"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt46"><div class=CConstructor>Create a new image layer</div></div><div class=CToolTip id="tt47"><div class=CConstructor>Constructor for a new OpenLayers.Tile.Image instance.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt47"><div class=CConstructor>Create a new parser for JSON.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt48"><div class=CConstructor>Create a new parser for JSON.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt48"><div class=CConstructor>Returns a new keyboard handler.</div></div><div class=CToolTip id="tt49"><div class=CConstructor>Create a new parser for KML.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt49"><div class=CConstructor>Returns a new keyboard handler.</div></div><div class=CToolTip id="tt50"><div class=CConstructor>Create a new parser for KML.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt50"><div class=CConstructor>Create a symbolizer for rendering lines.</div></div><div class=CToolTip id="tt51"><div class=CConstructor>Linear rings are constructed with an array of points. </div></div><div class=CToolTip id="tt52"><div class=CConstructor>Create a new LineString geometry</div></div><div class=CToolTip id="tt53"><div class=CConstructor>Creates a logical filter (And, Or, Not).</div></div><div class=CToolTip id="tt54"><div class=CConstructor>Create a [...]
+<div class=CToolTip id="tt51"><div class=CConstructor>Create a symbolizer for rendering lines.</div></div><div class=CToolTip id="tt52"><div class=CConstructor>Linear rings are constructed with an array of points. </div></div><div class=CToolTip id="tt53"><div class=CConstructor>Create a new LineString geometry</div></div><div class=CToolTip id="tt54"><div class=CConstructor>Creates a logical filter (And, Or, Not).</div></div><div class=CToolTip id="tt55"><div class=CConstructor>Create a [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt55"><div class=CConstructor>Constructor for a new OpenLayers.Map instance. </div></div><div class=CToolTip id="tt56"><div class=CConstructor>Create a new Mapguide layer, either tiled or untiled.</div></div><div class=CToolTip id="tt57"><div class=CConstructor>Create a new MapServer layer object</div></div><div class=CToolTip id="tt58"><div class=CConstructor>Create a Markers layer.</div></div><div class=CToolTip id="tt59"><div class=CConstructor>Create a new mod [...]
+<div class=CToolTip id="tt56"><div class=CConstructor>Constructor for a new OpenLayers.Map instance. </div></div><div class=CToolTip id="tt57"><div class=CConstructor>Create a new Mapguide layer, either tiled or untiled.</div></div><div class=CToolTip id="tt58"><div class=CConstructor>Create a new MapServer layer object</div></div><div class=CToolTip id="tt59"><div class=CConstructor>Create a Markers layer.</div></div><div class=CToolTip id="tt60"><div class=CConstructor>Create a new mod [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt63"><div class=CConstructor>Create a new navigation control</div></div><div class=CToolTip id="tt64"><div class=CConstructor>Add our two mousedefaults controls.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt64"><div class=CConstructor>Create a new navigation control</div></div><div class=CToolTip id="tt65"><div class=CConstructor>Add our two mousedefaults controls.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt65"><div class=CConstructor>Create a new parser for OGC exception reports.</div></div><div class=CToolTip id="tt66"><div class=CConstructor>Create a new parser for OSM.</div></div><div class=CToolTip id="tt67"><div class=CConstructor>Create a new overview map</div></div><div class=CToolTip id="tt68"><div class=CConstructor>Create a new parser for OWSCommon.</div></div><div class=CToolTip id="tt69"><div class=CConstructor>Create a new parser for OWS Context docum [...]
+<div class=CToolTip id="tt66"><div class=CConstructor>Create a new parser for OGC exception reports.</div></div><div class=CToolTip id="tt67"><div class=CConstructor>Base class used to construct all other classes. </div></div><div class=CToolTip id="tt68"><div class=CConstructor>Create a new parser for OSM.</div></div><div class=CToolTip id="tt69"><div class=CConstructor>Create a new overview map</div></div><div class=CToolTip id="tt70"><div class=CConstructor>Create a new parser for OWS [...]
 
 </div><!--Index-->
 
@@ -77,10 +77,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Constructor2.html b/doc/devdocs/index/Constructor2.html
index cafa4c3..0982e80 100644
--- a/doc/devdocs/index/Constructor2.html
+++ b/doc/devdocs/index/Constructor2.html
@@ -11,29 +11,29 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
+<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt70"><div class=CConstructor>Create a new paging strategy.</div></div><div class=CToolTip id="tt71"><div class=CConstructor>Control which handles the panning (in any of the cardinal directions) of the map by a set px distance.</div></div><div class=CToolTip id="tt72"><div class=CConstructor>Create a new control panel.</div></div><div class=CToolTip id="tt73"><div class=CConstructor>Add the four directional pan buttons.</div></div><div class=CToolTip id="tt74"><di [...]
+<div class=CToolTip id="tt72"><div class=CConstructor>Create a new paging strategy.</div></div><div class=CToolTip id="tt73"><div class=CConstructor>Control which handles the panning (in any of the cardinal directions) of the map by a set px distance.</div></div><div class=CToolTip id="tt74"><div class=CConstructor>Create a new control panel.</div></div><div class=CToolTip id="tt75"><div class=CConstructor>Add the four directional pan buttons.</div></div><div class=CToolTip id="tt76"><di [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt90"><div class=CConstructor>Create a symbolizer for rendering rasters.</div></div><div class=CToolTip id="tt91"><div class=CConstructor>Create a new Refresh strategy.</div></div><div class=CToolTip id="tt92"><div class=CConstructor>Create a new regular polygon handler.</div></div><div class=CToolTip id="tt93"><div class=CConstructor>Create a new root container for multiple vector layer. </div></div><div class=CToolTip id="tt94"><div class=CConstructor>Creates a  [...]
+<div class=CToolTip id="tt92"><div class=CConstructor>Create a symbolizer for rendering rasters.</div></div><div class=CToolTip id="tt93"><div class=CConstructor>Create a new Refresh strategy.</div></div><div class=CToolTip id="tt94"><div class=CConstructor>Create a new regular polygon handler.</div></div><div class=CToolTip id="tt95"><div class=CConstructor>Create a new root container for multiple vector layer. </div></div><div class=CToolTip id="tt96"><div class=CConstructor>Creates a  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt95"><div class=CConstructor>Create a new Save strategy.</div></div><div class=CToolTip id="tt96"><div class=CConstructor>Create a new scale line control.</div></div><div class=CToolTip id="tt97"><div class=CConstructor>A class for giving layers generic Script protocol.</div></div><div class=CToolTip id="tt98"><div class=CConstructor>Create a new control for selecting features.</div></div><div class=CToolTip id="tt99"><div class=CConstructor>Create an instance of [...]
+<div class=CToolTip id="tt97"><div class=CConstructor>Create a new Save strategy.</div></div><div class=CToolTip id="tt98"><div class=CConstructor>Create a new scale line control.</div></div><div class=CToolTip id="tt99"><div class=CConstructor>A class for giving layers generic Script protocol.</div></div><div class=CToolTip id="tt100"><div class=CConstructor>Create a new control for selecting features.</div></div><div class=CToolTip id="tt101"><div class=CConstructor>Create an instance  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt110"><div class=CConstructor>Create a new parser for TSV Text.</div></div><div class=CToolTip id="tt111"><div class=CConstructor>Create a text layer.</div></div><div class=CToolTip id="tt112"><div class=CConstructor>Create a symbolizer for rendering text labels.</div></div><div class=CToolTip id="tt113"><div class=CConstructor>Create a new read only TileCache layer.</div></div><div class=CToolTip id="tt114"><div class=CConstructor>Create a new navigation control [...]
+<div class=CToolTip id="tt112"><div class=CConstructor>Create a new parser for TSV Text.</div></div><div class=CToolTip id="tt113"><div class=CConstructor>Create a text layer.</div></div><div class=CToolTip id="tt114"><div class=CConstructor>Create a symbolizer for rendering text labels.</div></div><div class=CToolTip id="tt115"><div class=CConstructor>Constructor for a new OpenLayers.Tile instance.</div></div><div class=CToolTip id="tt116"><div class=CConstructor>Create a new read only  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt120"><div class=CConstructor>Create a new UTFGrid layer.</div></div><div class=CToolTip id="tt121"><div class=CConstructor>Constructor for a new OpenLayers.Tile.UTFGrid instance.</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt117"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt118"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt119"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt120"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id=" [...]
+<div class=CToolTip id="tt122"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt123"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt124"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt125"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id=" [...]
 
 </div><!--Index-->
 
@@ -41,10 +41,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Constructor3.html b/doc/devdocs/index/Constructor3.html
index 015622f..912095d 100644
--- a/doc/devdocs/index/Constructor3.html
+++ b/doc/devdocs/index/Constructor3.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
+<div id=Index><div class=IPageTitle>Constructor Index</div><div class=INavigationBar>$#! · 0-9 · <a href="Constructor.html#A">A</a> · <a href="Constructor.html#B">B</a> · <a href="Constructor.html#C">C</a> · <a href="Constructor.html#D">D</a> · <a href="Constructor.html#E">E</a> · <a href="Constructor.html#F">F</a> · <a href="Constructor.html#G">G</a> · <a href="Constructor.html#H">H</a> · <a href="Constructor.html#I"> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt152"><div class=CConstructor>Create a WFS feature.</div></div><div class=CToolTip id="tt153"><div class=CConstructor>Create a WFS-T formatter. </div></div><div class=CToolTip id="tt154"><div class=CConstructor>A class for giving layers WFS protocol.</div></div><div class=CToolTip id="tt155"><div class=CConstructor>Create a new parser for WFS capabilities.</div></div><div class=CToolTip id="tt156"><div class=CConstructor>Create a new parser for WFS DescribeFeatur [...]
+<div class=CToolTip id="tt159"><div class=CConstructor>Create a WFS feature.</div></div><div class=CToolTip id="tt160"><div class=CConstructor>Create a WFS-T formatter. </div></div><div class=CToolTip id="tt161"><div class=CConstructor>A class for giving layers WFS protocol.</div></div><div class=CToolTip id="tt162"><div class=CConstructor>Create a new parser for WFS capabilities.</div></div><div class=CToolTip id="tt163"><div class=CConstructor>Create a new parser for WFS DescribeFeatur [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt167"><div class=CConstructor>Create a new parser for XLS.</div></div><div class=CToolTip id="tt168"><div class=CConstructor>Construct an XML parser. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt174"><div class=CConstructor>Create a new parser for XLS.</div></div><div class=CToolTip id="tt175"><div class=CConstructor>Construct an XML parser. </div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
@@ -25,7 +25,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt169"><div class=CConstructor>Add the three zooming controls.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt176"><div class=CConstructor>Add the three zooming controls.</div></div><!--END_ND_TOOLTIPS-->
 
 </div><!--Index-->
 
@@ -33,10 +33,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Files.html b/doc/devdocs/index/Files.html
index 80bc7b5..47cb71c 100644
--- a/doc/devdocs/index/Files.html
+++ b/doc/devdocs/index/Files.html
@@ -11,7 +11,11 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · B · <a href="#C">C</a> · D · E · F · G · H · <a href="#I">I</a> · J · <a href="#K">K</a> · L · M · N · <a href="#O">O</a> · P · Q · R · <a href="#S">S</a> · T · U · <a href="#V">V</a> · <a href="#W">W</a> · [...]
+<div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! · 0-9 · <a href="#A">A</a> · B · <a href="#C">C</a> · <a href="#D">D</a> · E · F · G · H · <a href="#I">I</a> · J · <a href="#K">K</a> · L · M · N · <a href="#O">O</a> · P · Q · R · <a href="#S">S</a> · T · U · <a href="#V">V</a> · <a href="# [...]
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
 <!--START_ND_TOOLTIPS-->
 <!--END_ND_TOOLTIPS-->
 
@@ -49,10 +53,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions.html b/doc/devdocs/index/Functions.html
index 898cb19..4441e69 100644
--- a/doc/devdocs/index/Functions.html
+++ b/doc/devdocs/index/Functions.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> · 0-9 · <a href="#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9.html#I">I</a [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> · 0-9 · <a href="#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9.html#I">I</a [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>activeImg,</td></tr><tr><td></td><td class="PParamet [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>activeImg,</td></tr><tr><td></td><td class="PParamet [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request.</div></div><div class=CToolTip id="tt10"><div class=CFuncti [...]
+<div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request.</div></div><div class=CToolTip id="tt11"><div class=CFunct [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions10.html b/doc/devdocs/index/Functions10.html
index 8a64e7d..d007a09 100644
--- a/doc/devdocs/index/Functions10.html
+++ b/doc/devdocs/index/Functions10.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1149"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>layerToContext: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a layer context object given a wms layer object.</div></div><div clas [...]
+<div class=CToolTip id="tt1206"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>makeSameOrigin: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>If the tile does not have CORS image loading enabled and is from a different o [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions11.html b/doc/devdocs/index/Functions11.html
index cee1cb1..499a6b1 100644
--- a/doc/devdocs/index/Functions11.html
+++ b/doc/devdocs/index/Functions11.html
@@ -11,9 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1178"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mapDivClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Handle browser events</div></div><div class=CToolTip id="tt1179"><div class=CFunc [...]
+<div class=CToolTip id="tt1307"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">nextTrigger: function()</td></tr></table></blockquote>Restore the next state. </div></div><div class=CToolTip id="tt1308"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>nodeFactory: f [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1318"><div class=CFunction>Transform an object into a JSON string.</div></div><div class=CToolTip id="tt1319"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>observe: function(</td><td class="PParameter  prettyprint " nowrap>elementParam,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name,</t [...]
 
 </div><!--Index-->
 
@@ -21,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions12.html b/doc/devdocs/index/Functions12.html
index 372a532..ab4df34 100644
--- a/doc/devdocs/index/Functions12.html
+++ b/doc/devdocs/index/Functions12.html
@@ -11,13 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1279"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">nextTrigger: function()</td></tr></table></blockquote>Restore the next state. </div></div><div class=CToolTip id="tt1280"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>nodeFactory: f [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1290"><div class=CFunction>Transform an object into a JSON string.</div></div><div class=CToolTip id="tt1291"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>observe: function(</td><td class="PParameter  prettyprint " nowrap>elementParam,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>name,</t [...]
+<div class=CToolTip id="tt1370"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>page: function(</td><td class="PParameter  prettyprint " nowrap>start,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Display the p [...]
 
 </div><!--Index-->
 
@@ -25,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions13.html b/doc/devdocs/index/Functions13.html
index f4242b1..ac20c5e 100644
--- a/doc/devdocs/index/Functions13.html
+++ b/doc/devdocs/index/Functions13.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1338"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>page: function(</td><td class="PParameter  prettyprint " nowrap>start,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Display the p [...]
+<div class=CToolTip id="tt1456"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>queuePotentialClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>This method is separated out largely to make testing easier (so we don&rs [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions14.html b/doc/devdocs/index/Functions14.html
index 2efdd00..f0c9297 100644
--- a/doc/devdocs/index/Functions14.html
+++ b/doc/devdocs/index/Functions14.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1426"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>queuePotentialClick: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>This method is separated out largely to make testing easier (so we don&rs [...]
+<div class=CToolTip id="tt1458"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.rad = function(</td><td class="PParameter  prettyprint " nowrap>x</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt1459"><div class=CFunction><blockquo [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions15.html b/doc/devdocs/index/Functions15.html
index ab9a5a7..d16ddf9 100644
--- a/doc/devdocs/index/Functions15.html
+++ b/doc/devdocs/index/Functions15.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1427"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.rad = function(</td><td class="PParameter  prettyprint " nowrap>x</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt1428"><div class=CFunction><blockquo [...]
+<div class=CToolTip id="tt1678"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.safeStopPropagation = function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="t [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions16.html b/doc/devdocs/index/Functions16.html
index 5120817..bdd1f59 100644
--- a/doc/devdocs/index/Functions16.html
+++ b/doc/devdocs/index/Functions16.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1666"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.safeStopPropagation = function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="t [...]
+<div class=CToolTip id="tt1870"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>testTarget: function(</td><td class="PParameter  prettyprint " nowrap>target,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>loc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></ [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions17.html b/doc/devdocs/index/Functions17.html
index 713f6b1..e2862e7 100644
--- a/doc/devdocs/index/Functions17.html
+++ b/doc/devdocs/index/Functions17.html
@@ -11,9 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1850"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>testTarget: function(</td><td class="PParameter  prettyprint " nowrap>target,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>loc</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></ [...]
+<div class=CToolTip id="tt1934"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cl [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1992"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>escapeChar</td><td class="PAfterPa [...]
 
 </div><!--Index-->
 
@@ -21,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions18.html b/doc/devdocs/index/Functions18.html
index c9bb815..c8d8070 100644
--- a/doc/devdocs/index/Functions18.html
+++ b/doc/devdocs/index/Functions18.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1912"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cl [...]
+<div class=CToolTip id="tt1996"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt1997"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><ta [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1970"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>value2regex: function(</td><td class="PParameter  prettyprint " nowrap>wildCard,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>singleChar,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>escapeChar</td><td class="PAfterPa [...]
+<div class=CToolTip id="tt2061"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>newNode,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nextNode</td><td class="PAfterParameters   [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions19.html b/doc/devdocs/index/Functions19.html
deleted file mode 100644
index 7ee4e2c..0000000
--- a/doc/devdocs/index/Functions19.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Function Index - OpenLayers</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1974"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt1975"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><ta [...]
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2039"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>newNode,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>nextNode</td><td class="PAfterParameters   [...]
-
-</div><!--Index-->
-
-
-<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/index/Functions2.html b/doc/devdocs/index/Functions2.html
index d208d5f..75618cc 100644
--- a/doc/devdocs/index/Functions2.html
+++ b/doc/devdocs/index/Functions2.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt107"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">baseLayerDraw: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt108"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>beforeSelectFeature: function(</td><td [...]
+<div class=CToolTip id="tt114"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">baseLayerDraw: function()</td></tr></table></blockquote></div></div><div class=CToolTip id="tt115"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>beforeSelectFeature: function(</td><td [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions3.html b/doc/devdocs/index/Functions3.html
index b097622..7b41c25 100644
--- a/doc/devdocs/index/Functions3.html
+++ b/doc/devdocs/index/Functions3.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt134"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>cacheFeatures: function(</td><td class="PParameter  prettyprint " nowrap>event</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Cache features before they are added to the layer.</div></div><div class=CTool [...]
+<div class=CToolTip id="tt147"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>cache: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds a tile to the cache. </div></div><div class=CToolTip id="tt148"><div class=CFunctio [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions4.html b/doc/devdocs/index/Functions4.html
index 2360c28..ab056e2 100644
--- a/doc/devdocs/index/Functions4.html
+++ b/doc/devdocs/index/Functions4.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt347"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>widthFactor</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></d [...]
+<div class=CToolTip id="tt369"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>widthFactor</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></d [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions5.html b/doc/devdocs/index/Functions5.html
index 135091e..41f38b2 100644
--- a/doc/devdocs/index/Functions5.html
+++ b/doc/devdocs/index/Functions5.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt644"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>c,</td></tr><tr><td></td><td class="PParameter  prettypr [...]
+<div class=CToolTip id="tt667"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>c,</td></tr><tr><td></td><td class="PParameter  prettypr [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions6.html b/doc/devdocs/index/Functions6.html
index 4e94200..d6bb632 100644
--- a/doc/devdocs/index/Functions6.html
+++ b/doc/devdocs/index/Functions6.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt690"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>failure: function (</td><td class="PParameter  prettyprint " nowrap>error</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>method called on browser’s geolocation failure</div></div><div class=CToolTip [...]
+<div class=CToolTip id="tt713"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>failure: function (</td><td class="PParameter  prettyprint " nowrap>error</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>method called on browser’s geolocation failure</div></div><div class=CToolTip [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions7.html b/doc/devdocs/index/Functions7.html
index 767d23b..1a0e601 100644
--- a/doc/devdocs/index/Functions7.html
+++ b/doc/devdocs/index/Functions7.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="#G">G</a> · <a href="Functions8.html#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt724"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>geolocate: function (</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Activates the control.</div></div><div class=CToolTip id="tt725"><div class=CF [...]
+<div class=CToolTip id="tt749"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>geolocate: function (</td><td class="PParameter  prettyprint " nowrap>position</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Activates the control.</div></div><div class=CToolTip id="tt750"><div class=CF [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions8.html b/doc/devdocs/index/Functions8.html
index fc9d307..0d768ba 100644
--- a/doc/devdocs/index/Functions8.html
+++ b/doc/devdocs/index/Functions8.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="#H">H</a> · <a href="Functions9 [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="#H">H</a> · <a href="Functions9 [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1053"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handle: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt1054"><div class=CFunction><blockquote><table bo [...]
+<div class=CToolTip id="tt1083"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handle: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt1084"><div class=CFunction><blockquote><table bo [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Functions9.html b/doc/devdocs/index/Functions9.html
index 2702892..8ade0e2 100644
--- a/doc/devdocs/index/Functions9.html
+++ b/doc/devdocs/index/Functions9.html
@@ -11,9 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar><a href="Functions.html#Symbols">$#!</a> · 0-9 · <a href="Functions.html#A">A</a> · <a href="Functions2.html#B">B</a> · <a href="Functions3.html#C">C</a> · <a href="Functions4.html#D">D</a> · <a href="Functions5.html#E">E</a> · <a href="Functions6.html#F">F</a> · <a href="Functions7.html#G">G</a> · <a href="Functions8.html#H">H</a> · <a h [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1083"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt1084"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">iconOff: function()</td></tr></table></blockquote>Internal use, for use only with “controls[i].events.on/un”.</div></div><div class=CToolTip id="tt1085"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpad [...]
+<div class=CToolTip id="tt1114"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt1115"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">iconOff: function()</td></tr></table></blockquote>Internal use, for use only with “controls[i].events.on/un”.</div></div><div class=CToolTip id="tt1116"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpad [...]
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1179"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>layerToContext: function(</td><td class="PParameter  prettyprint " nowrap>layer</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Create a layer context object given a wms layer object.</div></div><div clas [...]
 
 </div><!--Index-->
 
@@ -21,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General.html b/doc/devdocs/index/General.html
index d54d626..decfa68 100644
--- a/doc/devdocs/index/General.html
+++ b/doc/devdocs/index/General.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> · 0-9 · <a href="#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a href="Gener [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> · 0-9 · <a href="#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a href="Gener [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>activeImg,</td></tr><tr><td></td><td class="PParamet [...]
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>_addButton:function(</td><td class="PParameter  prettyprint " nowrap>id,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>img,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>activeImg,</td></tr><tr><td></td><td class="PParamet [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request.</div></div><div class=CToolTip id="tt11"><div class=CFunct [...]
+<div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>abort: function(</td><td class="PParameter  prettyprint " nowrap>response</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Abort an ongoing request.</div></div><div class=CToolTip id="tt12"><div class=CFunct [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General10.html b/doc/devdocs/index/General10.html
index 1431b36..1fbbe45 100644
--- a/doc/devdocs/index/General10.html
+++ b/doc/devdocs/index/General10.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1751"><div class=CConstructor>Create a new parser for JSON.</div></div><div class=CToolTip id="tt1752"><div class=CProperty>{OpenLayers.Format.JSON}</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1829"><div class=CProperty>{Object} Stores the parsed JSON tile data structure.</div></div><div class=CToolTip id="tt1830"><div class=CConstructor>Create a new parser for JSON.</div></div><div class=CToolTip id="tt1831"><div class=CProperty>{OpenLayers.Format.JSON}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1753"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt1754"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt1755"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it  [...]
+<div class=CToolTip id="tt1832"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt1833"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt1834"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it  [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General11.html b/doc/devdocs/index/General11.html
index 6fc08e1..6d3e723 100644
--- a/doc/devdocs/index/General11.html
+++ b/doc/devdocs/index/General11.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1772"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt1773"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1774"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1775"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1776"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1777"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt1778 [...]
+<div class=CToolTip id="tt1855"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt1856"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1857"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1858"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1859"><div class=CConstant>{Object}</div></div><div class=CToolTip id="tt1860"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt1861 [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General12.html b/doc/devdocs/index/General12.html
index 42c2f0a..920abe5 100644
--- a/doc/devdocs/index/General12.html
+++ b/doc/devdocs/index/General12.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1891"><div class=CProperty>{OpenLayers.Map} this gets set in the addControl() function in OpenLayers.Map</div></div><div class=CToolTip id="tt1892"><div class=CProperty>{OpenLayers.Map}</div></div><div class=CToolTip id="tt1893"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt1894"><div class=CProperty>{OpenLayers.Map} the map this marker is at [...]
+<div class=CToolTip id="tt1979"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>makeSameOrigin: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>If the tile does not have CORS image loading enabled and is from a different o [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General13.html b/doc/devdocs/index/General13.html
index fd39a78..93f0ec4 100644
--- a/doc/devdocs/index/General13.html
+++ b/doc/devdocs/index/General13.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2085"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt2086"><div class=CProperty>{String} The name of this parser, this is the part of the CLASS_NAME except for “OpenLayers.Format.”</div></div><div class=CToolTip id="tt2087"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt2088"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt2089"><div class=CProperty>{String} [...]
+<div class=CToolTip id="tt2172"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt2173"><div class=CProperty>{String} The name of this parser, this is the part of the CLASS_NAME except for “OpenLayers.Format.”</div></div><div class=CToolTip id="tt2174"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt2175"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt2176"><div class=CProperty>{String} [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General14.html b/doc/devdocs/index/General14.html
index f8b9706..82a80d3 100644
--- a/doc/devdocs/index/General14.html
+++ b/doc/devdocs/index/General14.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2150"><div class=CProperty>{Object}  the code object issuing application events</div></div><div class=CToolTip id="tt2151"><div class=CFunction>Transform an object into a JSON string.</div></div><div class=CToolTip id="tt2152"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>observe: function(</td><td class="PPar [...]
+<div class=CToolTip id="tt2240"><div class=CProperty>{Object}  the code object issuing application events</div></div><div class=CToolTip id="tt2241"><div class=CFunction>Transform an object into a JSON string.</div></div><div class=CToolTip id="tt2242"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>observe: function(</td><td class="PPar [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General15.html b/doc/devdocs/index/General15.html
index 15a2a44..2485adf 100644
--- a/doc/devdocs/index/General15.html
+++ b/doc/devdocs/index/General15.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2520"><div class=CProperty>{int or OpenLayers.Bounds} An extra opportunity to specify internal padding of the content div inside the popup. </div></div><div class=CToolTip id="tt2521"><div class=CProperty>{OpenLayers.Bounds} Outside margin of the popup. </div></div><div class=CToolTip id="tt2522"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBefor [...]
+<div class=CToolTip id="tt2633"><div class=CProperty>{int or OpenLayers.Bounds} An extra opportunity to specify internal padding of the content div inside the popup. </div></div><div class=CToolTip id="tt2634"><div class=CProperty>{OpenLayers.Bounds} Outside margin of the popup. </div></div><div class=CToolTip id="tt2635"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBefor [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General16.html b/doc/devdocs/index/General16.html
index 07961c5..84d1b81 100644
--- a/doc/devdocs/index/General16.html
+++ b/doc/devdocs/index/General16.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2705"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt2706"><div class=CProperty>{Boolean} If true, filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt2707"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt2708"><div class=CF [...]
+<div class=CToolTip id="tt2820"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt2821"><div class=CProperty>{Boolean} If true, filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt2822"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt2823"><div class=CF [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General17.html b/doc/devdocs/index/General17.html
index 4df380b..c8892e2 100644
--- a/doc/devdocs/index/General17.html
+++ b/doc/devdocs/index/General17.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2709"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.rad = function(</td><td class="PParameter  prettyprint " nowrap>x</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2710"><div class=CProperty>{Float} O [...]
+<div class=CToolTip id="tt2826"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.rad = function(</td><td class="PParameter  prettyprint " nowrap>x</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt2827"><div class=CProperty>{Float} O [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General18.html b/doc/devdocs/index/General18.html
index aa15e04..9c76662 100644
--- a/doc/devdocs/index/General18.html
+++ b/doc/devdocs/index/General18.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3071"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.safeStopPropagation = function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="t [...]
+<div class=CToolTip id="tt3175"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>OpenLayers.Util.safeStopPropagation = function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><b>Deprecated</b>. </div></div><div class=CToolTip id="t [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General19.html b/doc/devdocs/index/General19.html
index 90ca2e1..17884d8 100644
--- a/doc/devdocs/index/General19.html
+++ b/doc/devdocs/index/General19.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3421"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt3422"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt3423"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div [...]
+<div class=CToolTip id="tt3540"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt3541"><div class=CProperty>{OpenLayers.Events} The events instance that the buttonclick event will be triggered on.</div></div><div class=CToolTip id="tt3542"><div class=CConstant>{Number} value for OpenLayers.Layer.PointTrack.dataFrom and OpenLayers.Layer.PointTrack.styleFrom</div></div><div class=CToolTip id="tt3543"><div class=CPrope [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General2.html b/doc/devdocs/index/General2.html
index 50dc6b9..4e0039b 100644
--- a/doc/devdocs/index/General2.html
+++ b/doc/devdocs/index/General2.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt154"><div class=CProperty>{OpenLayers.Tile} A clone of the tile used to create transition effects when the tile is moved or changes resolution.</div></div><div class=CToolTip id="tt155"><div class=CConstant>{String}</div></div><div class=CToolTip id="tt156"><div class=CProperty>{String} the background color used by the popup.</div></div><div class=CToolTip id="tt157"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt158"><div class=CConstructor> [...]
+<div class=CToolTip id="tt167"><div class=CProperty>{DOMElement} The back buffer.</div></div><div class=CToolTip id="tt168"><div class=CProperty>{Object} The top-left corner of the current back buffer. </div></div><div class=CToolTip id="tt169"><div class=CProperty>{Number} The resolution of the current back buffer. </div></div><div class=CToolTip id="tt170"><div class=CProperty>{Number} The id of the back buffer timer. </div></div><div class=CToolTip id="tt171"><div class=CConstant>{Str [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General20.html b/doc/devdocs/index/General20.html
index 7f6e89d..f47df38 100644
--- a/doc/devdocs/index/General20.html
+++ b/doc/devdocs/index/General20.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3572"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cl [...]
+<div class=CToolTip id="tt3701"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>un: function(</td><td class="PParameter  prettyprint " nowrap>object</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Convenience method for unregistering listeners with a common scope. </div></div><div cl [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General21.html b/doc/devdocs/index/General21.html
index de00ab0..a99fdc6 100644
--- a/doc/devdocs/index/General21.html
+++ b/doc/devdocs/index/General21.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3659"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt3660"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt3661"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt3662"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip  [...]
+<div class=CToolTip id="tt3796"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt3797"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt3798"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip id="tt3799"><div class=CConstructor>Instances of this class are not created directly. </div></div><div class=CToolTip  [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General22.html b/doc/devdocs/index/General22.html
index 93e0a47..2c14cdc 100644
--- a/doc/devdocs/index/General22.html
+++ b/doc/devdocs/index/General22.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3743"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt3744"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt3745"><div class=CProperty>{Boole [...]
+<div class=CToolTip id="tt3882"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt3883"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">warn: function()</td></tr></table></blockquote>Writes a message to the console with the visual “warning” icon and color coding and a hyperlink to the line where it was called.</div></div><div class=CToolTip id="tt3884"><div class=CProperty>{Boole [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General23.html b/doc/devdocs/index/General23.html
index 3a381d3..ee72b12 100644
--- a/doc/devdocs/index/General23.html
+++ b/doc/devdocs/index/General23.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3858"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt3859"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt3860"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt3861"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt3862"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt3863"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt3864"><div c [...]
+<div class=CToolTip id="tt4000"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt4001"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt4002"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt4003"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt4004"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt4005"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt4006"><div c [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3878"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt3879"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt3880"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt3881"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt3882"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><div cla [...]
+<div class=CToolTip id="tt4021"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt4022"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt4023"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt4024"><div class=CConstant>{Integer}</div></div><div class=CToolTip id="tt4025"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><div cla [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3885"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><div class=CToolTip id="tt3886"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
+<div class=CToolTip id="tt4028"><div class=CConstant>{Object} Base z-indexes for different classes of thing</div></div><div class=CToolTip id="tt4029"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>Z_ORDER: function(</td><td class="PParameter  prettyprint " nowrap>indexer,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowra [...]
 
 </div><!--Index-->
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General3.html b/doc/devdocs/index/General3.html
index 43afacc..49d6b28 100644
--- a/doc/devdocs/index/General3.html
+++ b/doc/devdocs/index/General3.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt216"><div class=CProperty>{Object} Cache for elements that should only be created once per map.</div></div><div class=CToolTip id="tt217"><div class=CProperty>{Array(OpenLayers.Feature.Vector)} List of currently cached features.</div></div><div class=CToolTip id="tt218"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "n [...]
+<div class=CToolTip id="tt240"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>cache: function(</td><td class="PParameter  prettyprint " nowrap>obj</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds a tile to the cache. </div></div><div class=CToolTip id="tt241"><div class=CPropert [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General4.html b/doc/devdocs/index/General4.html
index d1ab140..a883bb3 100644
--- a/doc/devdocs/index/General4.html
+++ b/doc/devdocs/index/General4.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt497"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>widthFactor</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></d [...]
+<div class=CToolTip id="tt544"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>dashStyle: function(</td><td class="PParameter  prettyprint " nowrap>style,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>widthFactor</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></d [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General5.html b/doc/devdocs/index/General5.html
index 22854af..44a91bd 100644
--- a/doc/devdocs/index/General5.html
+++ b/doc/devdocs/index/General5.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt922"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>c,</td></tr><tr><td></td><td class="PParameter  prettypr [...]
+<div class=CToolTip id="tt977"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>easeIn: function(</td><td class="PParameter  prettyprint " nowrap>t,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>b,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>c,</td></tr><tr><td></td><td class="PParameter  prettypr [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General6.html b/doc/devdocs/index/General6.html
index fc3ad44..416bc97 100644
--- a/doc/devdocs/index/General6.html
+++ b/doc/devdocs/index/General6.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1033"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>failure: function (</td><td class="PParameter  prettyprint " nowrap>error</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>method called on browser’s geolocation failure</div></div><div class=CToolTi [...]
+<div class=CToolTip id="tt1096"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>failure: function (</td><td class="PParameter  prettyprint " nowrap>error</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>method called on browser’s geolocation failure</div></div><div class=CToolTi [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General7.html b/doc/devdocs/index/General7.html
index dfcf509..810bc31 100644
--- a/doc/devdocs/index/General7.html
+++ b/doc/devdocs/index/General7.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="#G">G</a> · <a href="General8.html#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1169"><div class=CProperty>{Boolean} Calculate geodesic metrics instead of planar metrics. </div></div><div class=CToolTip id="tt1170"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt1171"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt1172"><div class=CConstructor>Create a new parser for GeoJSON.</div></div><div class=CToolTip id="tt1173"><div class=CFunction><blockqu [...]
+<div class=CToolTip id="tt1238"><div class=CProperty>{Boolean} Calculate geodesic metrics instead of planar metrics. </div></div><div class=CToolTip id="tt1239"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt1240"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt1241"><div class=CConstructor>Create a new parser for GeoJSON.</div></div><div class=CToolTip id="tt1242"><div class=CFunction><blockqu [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General8.html b/doc/devdocs/index/General8.html
index d723d8d..8961a8d 100644
--- a/doc/devdocs/index/General8.html
+++ b/doc/devdocs/index/General8.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="#H">H</a> · <a href="General9.html#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1547"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt1548"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handle: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div> [...]
+<div class=CToolTip id="tt1623"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt1624"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>handle: function(</td><td class="PParameter  prettyprint " nowrap>evt</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote></div> [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/General9.html b/doc/devdocs/index/General9.html
index ee11805..cdaaed6 100644
--- a/doc/devdocs/index/General9.html
+++ b/doc/devdocs/index/General9.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="#I">I</a> · <a  [...]
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> · 0-9 · <a href="General.html#A">A</a> · <a href="General2.html#B">B</a> · <a href="General3.html#C">C</a> · <a href="General4.html#D">D</a> · <a href="General5.html#E">E</a> · <a href="General6.html#F">F</a> · <a href="General7.html#G">G</a> · <a href="General8.html#H">H</a> · <a href="#I">I</a> · <a  [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1610"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt1611"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt1612"><div class=CProperty>{OpenLayers.Icon} The icon used by this marker.</div></div><div class=CToolTip id="tt1613"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt1614"><div class=CFunction><blockquote><table border [...]
+<div class=CToolTip id="tt1688"><div class=CFunction>Alias for OpenLayers.Lang.translate. </div></div><div class=CToolTip id="tt1689"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt1690"><div class=CProperty>{OpenLayers.Icon} The icon used by this marker.</div></div><div class=CToolTip id="tt1691"><div class=CConstructor>Creates an icon, which is an image tag in a div.</div></div><div class=CToolTip id="tt1692"><div class=CFunction><blockquote><table border [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties.html b/doc/devdocs/index/Properties.html
index 9b8416c..b4c86d5 100644
--- a/doc/devdocs/index/Properties.html
+++ b/doc/devdocs/index/Properties.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Properties7.html#I">I</a> &middo [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> · 0-9 · <a href="#A">A</a> · <a href="#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Properties7.html#I">I</a> &middo [...]
 <!--START_ND_TOOLTIPS-->
 <div class=CToolTip id="tt1"><div class=CProperty>{Boolean}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2"><div class=CProperty>{Boolean} The control is active (read-only). </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt4"><div class=CProperty>{Boolean} The control is active.</div></div><div class=CToolTip id="tt5"><div class=CProperty>{Integer}</div></div><div class=CToolTip id="tt6"><div class=CProperty>{Object} stores the active state of this panel’s controls.</div></div><div class=CToolTip id= [...]
+<div class=CToolTip id="tt2"><div class=CProperty>{Boolean} The control is active (read-only). </div></div><div class=CToolTip id="tt3"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt4"><div class=CProperty>{Boolean} The control is active.</div></div><div class=CToolTip id="tt5"><div class=CProperty>{Integer}</div></div><div class=CToolTip id="tt6"><div class=CProperty>{Object} stores the active state of this panel’s controls.</div></div><div class=CToolTip id= [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt43"><div class=CProperty>{OpenLayers.Tile} A clone of the tile used to create transition effects when the tile is moved or changes resolution.</div></div><div class=CToolTip id="tt44"><div class=CProperty>{String} the background color used by the popup.</div></div><div class=CToolTip id="tt45"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt46"><div class=CProperty>{OpenLayers.Layer} The currently selected base layer. </div></div><div class=CT [...]
+<div class=CToolTip id="tt49"><div class=CProperty>{DOMElement} The back buffer.</div></div><div class=CToolTip id="tt50"><div class=CProperty>{Object} The top-left corner of the current back buffer. </div></div><div class=CToolTip id="tt51"><div class=CProperty>{Number} The resolution of the current back buffer. </div></div><div class=CToolTip id="tt52"><div class=CProperty>{Number} The id of the back buffer timer. </div></div><div class=CToolTip id="tt53"><div class=CProperty>{String}  [...]
 
 </div><!--Index-->
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties10.html b/doc/devdocs/index/Properties10.html
index 9be2ced..5074767 100644
--- a/doc/devdocs/index/Properties10.html
+++ b/doc/devdocs/index/Properties10.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt673"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt674"><div class=CProperty>{String} The name of this parser, this is the part of the CLASS_NAME except for “OpenLayers.Format.”</div></div><div class=CToolTip id="tt675"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt676"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt677"><div class=CProperty>{String} name [...]
+<div class=CToolTip id="tt740"><div class=CProperty>{String} Name of the function.</div></div><div class=CToolTip id="tt741"><div class=CProperty>{String} The name of this parser, this is the part of the CLASS_NAME except for “OpenLayers.Format.”</div></div><div class=CToolTip id="tt742"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt743"><div class=CProperty>{String} Layer name. </div></div><div class=CToolTip id="tt744"><div class=CProperty>{String} The  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt725"><div class=CProperty>{Object}  the code object issuing application events</div></div><div class=CToolTip id="tt726"><div class=CProperty>{Object} A hashtable cache of the event observers. </div></div><div class=CToolTip id="tt727"><div class=CProperty>{OpenLayers.Pixel} distance in pixels to offset the image when being rendered</div></div><div class=CToolTip id="tt728"><div class=CProperty>{Object} Hash with “x” and “y” properties</d [...]
+<div class=CToolTip id="tt795"><div class=CProperty>{Object}  the code object issuing application events</div></div><div class=CToolTip id="tt796"><div class=CProperty>{DOMelement|String} The DOM element to handle keys for. </div></div><div class=CToolTip id="tt797"><div class=CProperty>{DOMElement|String} The DOM element on which we listen for key events. </div></div><div class=CToolTip id="tt798"><div class=CProperty>{Object} A hashtable cache of the event observers. </div></div><div c [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties11.html b/doc/devdocs/index/Properties11.html
index 1eb6690..0385bf7 100644
--- a/doc/devdocs/index/Properties11.html
+++ b/doc/devdocs/index/Properties11.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt756"><div class=CProperty>{int or OpenLayers.Bounds} An extra opportunity to specify internal padding of the content div inside the popup. </div></div><div class=CToolTip id="tt757"><div class=CProperty>{OpenLayers.Bounds} Outside margin of the popup. </div></div><div class=CToolTip id="tt758"><div class=CProperty>{Boolean} The strategy is currently changing pages.</div></div><div class=CToolTip id="tt759"><div class=CProperty>{Integer} The number of steps to be [...]
+<div class=CToolTip id="tt830"><div class=CProperty>{int or OpenLayers.Bounds} An extra opportunity to specify internal padding of the content div inside the popup. </div></div><div class=CToolTip id="tt831"><div class=CProperty>{OpenLayers.Bounds} Outside margin of the popup. </div></div><div class=CToolTip id="tt832"><div class=CProperty>{Boolean} The strategy is currently changing pages.</div></div><div class=CToolTip id="tt833"><div class=CProperty>{Integer} The number of steps to be [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt833"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt834"><div class=CProperty>{Boolean} If true, filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt835"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt911"><div class=CProperty>{String} Value of the csw:Query element, used when writing a csw:GetRecords document.</div></div><div class=CToolTip id="tt912"><div class=CProperty>{Boolean} If true, filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt913"><div class=CProperty>{Boolean} Filter out hidden layers when searching the map for layers to query. </div></div><div class=CToolTip id="tt914"><div class=CPrope [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties12.html b/doc/devdocs/index/Properties12.html
index faf7b74..7bf231c 100644
--- a/doc/devdocs/index/Properties12.html
+++ b/doc/devdocs/index/Properties12.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt836"><div class=CProperty>{Float} Optional radius in map units of the regular polygon. </div></div><div class=CToolTip id="tt837"><div class=CProperty>{OpenLayers.Feature.Vector} A handle for rotating/resizing a feature.</div></div><div class=CToolTip id="tt838"><div class=CProperty>{Float} The ratio of the feature relative to the ratio the time the feature was set. </div></div><div class=CToolTip id="tt839"><div class=CProperty>{Float} Used only when in single- [...]
+<div class=CToolTip id="tt915"><div class=CProperty>{Float} Optional radius in map units of the regular polygon. </div></div><div class=CToolTip id="tt916"><div class=CProperty>{OpenLayers.Feature.Vector} A handle for rotating/resizing a feature.</div></div><div class=CToolTip id="tt917"><div class=CProperty>{Float} The ratio of the feature relative to the ratio the time the feature was set. </div></div><div class=CToolTip id="tt918"><div class=CProperty>{Float} Used only when in single- [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties13.html b/doc/devdocs/index/Properties13.html
index e9d705c..a5a7b3a 100644
--- a/doc/devdocs/index/Properties13.html
+++ b/doc/devdocs/index/Properties13.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt946"><div class=CProperty>{Boolean} Whether to save the feature state (OpenLayers.State) into the database, defaults to true.</div></div><div class=CToolTip id="tt947"><div class=CProperty>{Boolean} If set to true, the active state of this panel’s controls will be stored on panel deactivation, and restored on reactivation. </div></div><div class=CToolTip id="tt948"><div class=CProperty>{Float} The scale of the feature, relative to the scale the time the fe [...]
+<div class=CToolTip id="tt1032"><div class=CProperty>{Boolean} Whether to save the feature state (OpenLayers.State) into the database, defaults to true.</div></div><div class=CToolTip id="tt1033"><div class=CProperty>{Boolean} If set to true, the active state of this panel’s controls will be stored on panel deactivation, and restored on reactivation. </div></div><div class=CToolTip id="tt1034"><div class=CProperty>{Float} The scale of the feature, relative to the scale the time the [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties14.html b/doc/devdocs/index/Properties14.html
index 662af1b..31dac26 100644
--- a/doc/devdocs/index/Properties14.html
+++ b/doc/devdocs/index/Properties14.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1090"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt1091"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div class=CToolTip id="tt1092"><div class=CProperty>{Integer} The maximum size of the grid in pixels on the map</div></div><div class=CToolTip id="tt1093"><div class [...]
+<div class=CToolTip id="tt1182"><div class=CProperty>Name of the database table into which Features should be saved.</div></div><div class=CToolTip id="tt1183"><div class=CProperty>{OpenLayers.Events} The events instance that the buttonclick event will be triggered on.</div></div><div class=CToolTip id="tt1184"><div class=CProperty>{OpenLayers.Filter} Optional filter that will be evaluated to determine if a feature from the target layer is eligible for splitting.</div></div><div class=CT [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1168"><div class=CProperty>{String} The layer map units. </div></div><div class=CToolTip id="tt1169"><div class=CProperty>{?}</div></div><div class=CToolTip id="tt1170"><div class=CProperty>{String} The map units. </div></div><div class=CToolTip id="tt1171"><div class=CProperty>{Object} hash of features, keyed by feature.id, that the renderer failed to draw</div></div><div class=CToolTip id="tt1172"><div class=CProperty>{Array} Array with browsers, which should  [...]
+<div class=CToolTip id="tt1267"><div class=CProperty>{String} The layer map units. </div></div><div class=CToolTip id="tt1268"><div class=CProperty>{String} The map units. </div></div><div class=CToolTip id="tt1269"><div class=CProperty>{Object} hash of features, keyed by feature.id, that the renderer failed to draw</div></div><div class=CToolTip id="tt1270"><div class=CProperty>{Array} Array with browsers, which should use the HTTP-GET protocol instead of HTTP-POST for fetching tiles fr [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties15.html b/doc/devdocs/index/Properties15.html
index 1690d0e..48286ee 100644
--- a/doc/devdocs/index/Properties15.html
+++ b/doc/devdocs/index/Properties15.html
@@ -11,25 +11,25 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1196"><div class=CProperty>{Number} or {String} comparison value for binary comparisons. </div></div><div class=CToolTip id="tt1197"><div class=CProperty>{OpenLayers.Bounds || OpenLayers.Geometry} The bounds or geometry to be used by the filter. </div></div><div class=CToolTip id="tt1198"><div class=CProperty>{Boolean} Should be calculated automatically. </div></div><div class=CToolTip id="tt1199"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip  [...]
+<div class=CToolTip id="tt1301"><div class=CProperty>{Number} or {String} comparison value for binary comparisons. </div></div><div class=CToolTip id="tt1302"><div class=CProperty>{OpenLayers.Bounds || OpenLayers.Geometry} The bounds or geometry to be used by the filter. </div></div><div class=CToolTip id="tt1303"><div class=CProperty>{Boolean} Should be calculated automatically. </div></div><div class=CToolTip id="tt1304"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1227"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt1228"><div class=CProperty>{Boolean} If true, position will be update regularly.</div></div><div class=CToolTip id="tt1229"><div class=CProperty>{Object} Cache to use for storing parsed results from OpenLayers.Format.WFSDescribeFeatureType.read. </div></div><div class=CToolTip id="tt1230"><div class=CProperty>{function}</div></div><div class=CToolTip id="tt1231"><div class=CProperty>{ [...]
+<div class=CToolTip id="tt1332"><div class=CProperty>{Number} width</div></div><div class=CToolTip id="tt1333"><div class=CProperty>{Boolean} If true, position will be update regularly.</div></div><div class=CToolTip id="tt1334"><div class=CProperty>{Object} Cache to use for storing parsed results from OpenLayers.Format.WFSDescribeFeatureType.read. </div></div><div class=CToolTip id="tt1335"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt1336"><div class=CProperty>{fu [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1262"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1263"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt1264"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt1265"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt1266"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt1267"><div class=CProperty>{XMLDom} If this browser uses ActiveX, this will be set to  [...]
+<div class=CToolTip id="tt1370"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1371"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt1372"><div class=CProperty>{Number} The x coordinate</div></div><div class=CToolTip id="tt1373"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt1374"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt1375"><div class=CProperty>{XMLDom} If this browser uses ActiveX, this will be set to  [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1279"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1280"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt1281"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt1282"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><div class=CToolTip id="tt1283"><div class=CProperty>{Object} Members in the yx ob [...]
+<div class=CToolTip id="tt1388"><div class=CProperty>{float}</div></div><div class=CToolTip id="tt1389"><div class=CProperty>{Float}</div></div><div class=CToolTip id="tt1390"><div class=CProperty>{Number} The y coordinate</div></div><div class=CToolTip id="tt1391"><div class=CProperty>{Object} Members in the yx object are used to determine if a CRS URN corresponds to a CRS with y,x axis order. </div></div><div class=CToolTip id="tt1392"><div class=CProperty>{Object} Members in the yx ob [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1285"><div class=CProperty>{Number} The zIndex determines the rendering order for a symbolizer. </div></div><div class=CToolTip id="tt1286"><div class=CProperty>{Integer} The current zoom level of the map</div></div><div class=CToolTip id="tt1287"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt1288"><div class=CProperty>{OpenLayers.Control.ZoomBox}</div></div><div class=CToolTip id="tt1289"><div class=CProperty>{Boolean} Whether the user  [...]
+<div class=CToolTip id="tt1394"><div class=CProperty>{Number} The zIndex determines the rendering order for a symbolizer. </div></div><div class=CToolTip id="tt1395"><div class=CProperty>{int}</div></div><div class=CToolTip id="tt1396"><div class=CProperty>{Integer} The current zoom level of the map</div></div><div class=CToolTip id="tt1397"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt1398"><div class=CProperty>{OpenLayers.Control.ZoomBox}</div></div><div class [...]
 
 </div><!--Index-->
 
@@ -37,10 +37,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties2.html b/doc/devdocs/index/Properties2.html
index 3bd0ed0..5ba7eee 100644
--- a/doc/devdocs/index/Properties2.html
+++ b/doc/devdocs/index/Properties2.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt71"><div class=CProperty>{Object} Cache for elements that should only be created once per map.</div></div><div class=CToolTip id="tt72"><div class=CProperty>{Array(OpenLayers.Feature.Vector)} List of currently cached features.</div></div><div class=CToolTip id="tt73"><div class=CProperty>{Boolean} The filter is currently caching features.</div></div><div class=CToolTip id="tt74"><div class=CProperty>{OpenLayers.Pixel} Function to calculate the offset (based on t [...]
+<div class=CToolTip id="tt81"><div class=CProperty>{Object} Cache for elements that should only be created once per map.</div></div><div class=CToolTip id="tt82"><div class=CProperty>{Array(OpenLayers.Feature.Vector)} List of currently cached features.</div></div><div class=CToolTip id="tt83"><div class=CProperty>{Object} Internal cache of calculated symbol extents.</div></div><div class=CToolTip id="tt84"><div class=CProperty>{Boolean} The filter is currently caching features.</div></di [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties3.html b/doc/devdocs/index/Properties3.html
index 31ce5be..d8f9678 100644
--- a/doc/devdocs/index/Properties3.html
+++ b/doc/devdocs/index/Properties3.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt131"><div class=CProperty>{Object}</div></div><div class=CToolTip id="tt132"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt133"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt134"><div class=CProperty>{Array(OpenLayers.Layer)}</div></div><div class=CToolTip id="tt135"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt136"><div class=CPrope [...]
+<div class=CToolTip id="tt155"><div class=CProperty>{Object}</div></div><div class=CToolTip id="tt156"><div class=CProperty>{Object} When keepData is true, this is the parsed string sent to read.</div></div><div class=CToolTip id="tt157"><div class=CProperty>{Object} The data returned in the response by the server. </div></div><div class=CToolTip id="tt158"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt159"><div class=CProperty>{OpenLayers.Layer.PointTrack.TARGET_NOD [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties4.html b/doc/devdocs/index/Properties4.html
index c1790ac..d8af77f 100644
--- a/doc/devdocs/index/Properties4.html
+++ b/doc/devdocs/index/Properties4.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt240"><div class=CProperty>{<OpenLayers.Easing>(Function)} Easing equation used for the animation Defaultly set to OpenLayers.Easing.Expo.easeOut</div></div><div class=CToolTip id="tt241"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt242"><div class=CProperty>{Boolean} Allow splits given intersection of edges only. </div></div><div class=CToolTip id="tt243"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt244"> [...]
+<div class=CToolTip id="tt270"><div class=CProperty>{<OpenLayers.Easing>(Function)} Easing equation used for the animation Defaultly set to OpenLayers.Easing.Expo.easeOut</div></div><div class=CToolTip id="tt271"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt272"><div class=CProperty>{Boolean} Allow splits given intersection of edges only. </div></div><div class=CToolTip id="tt273"><div class=CProperty>{DOMElement}</div></div><div class=CToolTip id="tt274"> [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties5.html b/doc/devdocs/index/Properties5.html
index 520af64..ade9253 100644
--- a/doc/devdocs/index/Properties5.html
+++ b/doc/devdocs/index/Properties5.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> · <a href="Pro [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt292"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt293"><div class=CProperty>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  </div></div><div class=CToolTip id="tt294"><div class=CProperty>{OpenLayers.Feature.Vector}</div></div><div class=CToolTip id="tt295"><div class=CProperty>{OpenLayers.Feature.Vector} Feature currently available for modification.</div>< [...]
+<div class=CToolTip id="tt340"><div class=CProperty>{Boolean}</div></div><div class=CToolTip id="tt341"><div class=CProperty>{Boolean} Should OpenLayers allow events on the map to fall through to other elements on the page, or should it swallow them?  </div></div><div class=CToolTip id="tt342"><div class=CProperty>{OpenLayers.Feature.Vector}</div></div><div class=CToolTip id="tt343"><div class=CProperty>{OpenLayers.Feature.Vector} Feature currently available for modification.</div>< [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties6.html b/doc/devdocs/index/Properties6.html
index d329cf2..4072c18 100644
--- a/doc/devdocs/index/Properties6.html
+++ b/doc/devdocs/index/Properties6.html
@@ -11,13 +11,13 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="Properties7.html#I" [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="#G">G</a> · <a href="#H">H</a> · <a href="Properties7.html#I" [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt384"><div class=CProperty>{Boolean} Calculate geodesic metrics instead of planar metrics. </div></div><div class=CToolTip id="tt385"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt386"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt387"><div class=CProperty>{Object} The geolocation engine, as a property to be possibly mocked.</div></div><div class=CToolTip id="tt388"> [...]
+<div class=CToolTip id="tt436"><div class=CProperty>{Boolean} Calculate geodesic metrics instead of planar metrics. </div></div><div class=CToolTip id="tt437"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt438"><div class=CProperty>{Boolean} Use geodesic measurement. </div></div><div class=CToolTip id="tt439"><div class=CProperty>{Object} The geolocation engine, as a property to be possibly mocked.</div></div><div class=CToolTip id="tt440"> [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt422"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt423"><div class=CProperty>{OpenLayers.Handler} null</div></div><div class=CToolTip id="tt424"><div class=CProperty>{OpenLayers.Handler.Path} The temporary sketch handler created if no source layer is provided.</div></div><div class=CToolTip id="tt425"><div class=CProperty>{Object} Reference to the OpenLayers.Handler for this control</div></div><div class=CToolTip id="tt426"><div class [...]
+<div class=CToolTip id="tt476"><div class=CProperty>{Number} height</div></div><div class=CToolTip id="tt477"><div class=CProperty>{OpenLayers.Handler} null</div></div><div class=CToolTip id="tt478"><div class=CProperty>{OpenLayers.Handler.Path} The temporary sketch handler created if no source layer is provided.</div></div><div class=CToolTip id="tt479"><div class=CProperty>{Object} Reference to the OpenLayers.Handler for this control</div></div><div class=CToolTip id="tt480"><div class [...]
 
 </div><!--Index-->
 
@@ -25,10 +25,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties7.html b/doc/devdocs/index/Properties7.html
index 38da96b..cc1dd19 100644
--- a/doc/devdocs/index/Properties7.html
+++ b/doc/devdocs/index/Properties7.html
@@ -11,17 +11,17 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt452"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt453"><div class=CProperty>{OpenLayers.Icon} The icon used by this marker.</div></div><div class=CToolTip id="tt454"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt455"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt456"><div class=CProperty>{String} A unique identifier for this geometry.</div></div><div class=CToolTip id="tt457"><div class=C [...]
+<div class=CToolTip id="tt507"><div class=CProperty>{OpenLayers.Icon}. </div></div><div class=CToolTip id="tt508"><div class=CProperty>{OpenLayers.Icon} The icon used by this marker.</div></div><div class=CToolTip id="tt509"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt510"><div class=CProperty>{String}</div></div><div class=CToolTip id="tt511"><div class=CProperty>{String} A unique identifier for this geometry.</div></div><div class=CToolTip id="tt512"><div class=C [...]
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt520"><div class=CProperty>{OpenLayers.Format.JSON}</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt576"><div class=CProperty>{Object} Stores the parsed JSON tile data structure.</div></div><div class=CToolTip id="tt577"><div class=CProperty>{OpenLayers.Format.JSON}</div></div><!--END_ND_TOOLTIPS-->
 
 
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt521"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt522"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt523"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it alw [...]
+<div class=CToolTip id="tt578"><div class=CProperty>{Object} Maintain a reference (data) to the most recently read data. </div></div><div class=CToolTip id="tt579"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it always fits in the available map space. </div></div><div class=CToolTip id="tt580"><div class=CProperty>{Boolean} If panMapIfOutOfView is false, and this property is true, contrain the popup such that it alw [...]
 
 </div><!--Index-->
 
@@ -29,10 +29,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties8.html b/doc/devdocs/index/Properties8.html
index f18dd74..0cd5aeb 100644
--- a/doc/devdocs/index/Properties8.html
+++ b/doc/devdocs/index/Properties8.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt528"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt529"><div class=CProperty>{String} the format of the labels, default = ‘dm’. </div></div><div class=CToolTip id="tt530"><div class=CProperty>{Boolean} Should the graticule lines be labelled?. </div></div><div class=CToolTip id="tt531"><div class=CProperty>{symbolizer} the symbolizer used to render labels</div></div><div class=CToolTip id="tt532"><div class [...]
+<div class=CToolTip id="tt588"><div class=CProperty>{String} The text for the label.</div></div><div class=CToolTip id="tt589"><div class=CProperty>{String} the format of the labels, default = ‘dm’. </div></div><div class=CToolTip id="tt590"><div class=CProperty>{Boolean} Should the graticule lines be labelled?. </div></div><div class=CToolTip id="tt591"><div class=CProperty>{symbolizer} the symbolizer used to render labels</div></div><div class=CToolTip id="tt592"><div class [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/index/Properties9.html b/doc/devdocs/index/Properties9.html
index e6e7232..5c54a35 100644
--- a/doc/devdocs/index/Properties9.html
+++ b/doc/devdocs/index/Properties9.html
@@ -11,9 +11,9 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar><a href="Properties.html#Symbols">$#!</a> · 0-9 · <a href="Properties.html#A">A</a> · <a href="Properties.html#B">B</a> · <a href="Properties2.html#C">C</a> · <a href="Properties3.html#D">D</a> · <a href="Properties4.html#E">E</a> · <a href="Properties5.html#F">F</a> · <a href="Properties6.html#G">G</a> · <a href="Properties6.html#H">H</a> &midd [...]
 <!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt601"><div class=CProperty>{OpenLayers.Map} this gets set in the addControl() function in OpenLayers.Map</div></div><div class=CToolTip id="tt602"><div class=CProperty>{OpenLayers.Map}</div></div><div class=CToolTip id="tt603"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt604"><div class=CProperty>{OpenLayers.Map} the map this marker is attach [...]
+<div class=CToolTip id="tt667"><div class=CProperty>{OpenLayers.Map} this gets set in the addControl() function in OpenLayers.Map</div></div><div class=CToolTip id="tt668"><div class=CProperty>{OpenLayers.Map}</div></div><div class=CToolTip id="tt669"><div class=CProperty>{OpenLayers.Map} This variable is set when the layer is added to the map, via the accessor function setMap().</div></div><div class=CToolTip id="tt670"><div class=CProperty>{OpenLayers.Map} the map this marker is attach [...]
 
 </div><!--Index-->
 
@@ -21,10 +21,10 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
 
 
-<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent30')">OpenLayers</a><div class=MGroupContent id=MGroupContent30><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MFile><a href="../files/OpenLayers/Ajax-js.html">Ajax</a></div></div><div class=MEntry><div class=MGroup><a href="javas [...]
+<div id=Menu><div class=MTitle>OpenLayers<div class=MSubTitle>JavaScript Mapping Library</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent32')">OpenLayers</a><div class=MGroupContent id=MGroupContent32><div class=MEntry><div class=MFile><a href="../files/OpenLayers-js.html">OpenLayers</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">BaseTypes</a><div class=MGroupContent id=MGroupContent1><div c [...]
 var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
 --></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value=" [...]
-HideAllBut([31], 32);// --></script></div><!--Menu-->
+HideAllBut([33], 34);// --></script></div><!--Menu-->
 
 
 <div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
diff --git a/doc/devdocs/javascript/searchdata.js b/doc/devdocs/javascript/searchdata.js
index 1724571..66350a7 100644
--- a/doc/devdocs/javascript/searchdata.js
+++ b/doc/devdocs/javascript/searchdata.js
@@ -95,7 +95,7 @@ var indexSectionsWithContent = {
       "A": true,
       "B": false,
       "C": true,
-      "D": false,
+      "D": true,
       "E": false,
       "F": false,
       "G": false,
@@ -126,7 +126,7 @@ var indexSectionsWithContent = {
       "B": true,
       "C": true,
       "D": true,
-      "E": true,
+      "E": false,
       "F": true,
       "G": false,
       "H": false,
@@ -170,7 +170,7 @@ var indexSectionsWithContent = {
       "P": false,
       "Q": false,
       "R": false,
-      "S": false,
+      "S": true,
       "T": false,
       "U": true,
       "V": false,
diff --git a/doc/devdocs/search/ClassesO.html b/doc/devdocs/search/ClassesO.html
index 9be5e71..15027b1 100644
--- a/doc/devdocs/search/ClassesO.html
+++ b/doc/devdocs/search/ClassesO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OpenLayers><div class=IEntry><a href="../files/OpenLayers-js.html#OpenLayers" target=_parent class=ISymbol>OpenLayers</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax><div class=IEntry><a href="../files/OpenLayers/Ajax-js.html#OpenLayers.Ajax" target=_parent class=ISymbol>OpenLayers.Ajax</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax_p [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OpenLayers><div class=IEntry><a href="../files/OpenLayers-js.html#OpenLayers" target=_parent class=ISymbol>OpenLayers</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Ajax" target=_parent class=ISymbol>OpenLayers.Ajax</a></div></div><div class=SRResult id=SR_OpenLayers_perAjax_perBas [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ClassesS.html b/doc/devdocs/search/ClassesS.html
new file mode 100644
index 0000000..01acf6a
--- /dev/null
+++ b/doc/devdocs/search/ClassesS.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Spherical><div class=IEntry><a href="../files/OpenLayers/Spherical-js.html#Spherical" target=_parent class=ISymbol>Spherical</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/search/ConstantsC.html b/doc/devdocs/search/ConstantsC.html
index 9cd097d..ec54ff0 100644
--- a/doc/devdocs/search/ConstantsC.html
+++ b/doc/devdocs/search/ConstantsC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CORNER_undSIZE><div class=IEntry><a href="../files/OpenLayers/Popup/AnchoredBubble-js.html#OpenLayers.Popup.AnchoredBubble.CORNER_SIZE" target=_parent class=ISymbol>CORNER_SIZE</a>, <span class=IParent>OpenLayers.<wbr>Popup.<wbr>AnchoredBubble</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matc [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CANVAS_undSUPPORTED><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.CANVAS_SUPPORTED" target=_parent class=ISymbol>CANVAS_SUPPORTED</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_CORNER_undSIZE><div class=IEntry><a href="../files/OpenLayers/Popup/AnchoredBubble-js.html#OpenLayers.Popup.AnchoredBubble.CORNER_SIZE" ta [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsD.html b/doc/devdocs/search/ConstantsD.html
index 6a40c20..f720b82 100644
--- a/doc/devdocs/search/ConstantsD.html
+++ b/doc/devdocs/search/ConstantsD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dataFrom><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" target=_parent class=ISymbol>dataFrom</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>OpenLayers.<wbr>Layer.<wbr>PointTrack</span></div></div><div class=SRResult id=SR_DEFAULT_undCONFIG><div cla [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dataFrom><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTrack.OpenLayers.Layer.PointTrack.dataFrom" target=_parent class=ISymbol>dataFrom</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>PointTrack.<wbr>OpenLayers.<wbr>Layer.<wbr>PointTrack</span></div></div><div class=SRResult id=SR_DEFAULT_undCONFIG><div cla [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsE.html b/doc/devdocs/search/ConstantsE.html
deleted file mode 100644
index 813ed30..0000000
--- a/doc/devdocs/search/ConstantsE.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version 1.52 -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_EVENT_undTYPES><div class=IEntry><a href="javascript:searchResults.Toggle('SR_EVENT_undTYPES')" class=ISymbol>EVENT_TYPES</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.EVENT_TYPES" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Control/DrawFeature-js.html#OpenLayers.Control.DrawFe [...]
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/search/ConstantsI.html b/doc/devdocs/search/ConstantsI.html
index b7d5f10..85e665e 100644
--- a/doc/devdocs/search/ConstantsI.html
+++ b/doc/devdocs/search/ConstantsI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_IFrame><div class=IEntry><a href="../files/OpenLayers/Tile/Image/IFrame-js.html#OpenLayers.Tile.Image.IFrame" target=_parent class=ISymbol>IFrame</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>Image</span></div></div><div class=SRResult id=SR_IMAGE_undEXTENSIONS><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js.html#OpenLayers.Layer.KaMap [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_IFrame><div class=IEntry><a href="../files/OpenLayers/Tile/Image/IFrame-js.html#OpenLayers.Tile.Image.IFrame" target=_parent class=ISymbol>IFrame</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>Image</span></div></div><div class=SRResult id=SR_IMAGE_undEXTENSIONS><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js.html#OpenLayers.Layer.KaMap [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsK.html b/doc/devdocs/search/ConstantsK.html
index 429a385..4af0fb4 100644
--- a/doc/devdocs/search/ConstantsK.html
+++ b/doc/devdocs/search/ConstantsK.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KEY_undBACKSPACE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_BACKSPACE" target=_parent class=ISymbol>KEY_BACKSPACE</a>, <span class=IParent>OpenLayers.<wbr>Event</span></div></div><div class=SRResult id=SR_KEY_undDELETE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_DELETE" target=_par [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KEY_undBACKSPACE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_BACKSPACE" target=_parent class=ISymbol>KEY_BACKSPACE</a>, <span class=IParent>OpenLayers.<wbr>Event</span></div></div><div class=SRResult id=SR_KEY_undDELETE><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.KEY_DELETE" target=_par [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsL.html b/doc/devdocs/search/ConstantsL.html
index 31eb0b3..08283ba 100644
--- a/doc/devdocs/search/ConstantsL.html
+++ b/doc/devdocs/search/ConstantsL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABEL_ALIGN</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/Canvas-js.html#OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas.LABEL_ALIGN" target=_parent class=IParent>OpenLayers.<wbr>Renderer.<wbr>Canvas.<wbr>OpenLayers.<wbr>Renderer [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABEL_ALIGN</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/Canvas-js.html#OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas.LABEL_ALIGN" target=_parent class=IParent>OpenLayers.<wbr>Renderer.<wbr>Canvas.<wbr>OpenLayers.<wbr>Renderer [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsM.html b/doc/devdocs/search/ConstantsM.html
index 020948c..f595631 100644
--- a/doc/devdocs/search/ConstantsM.html
+++ b/doc/devdocs/search/ConstantsM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_MAX_undPIXEL><div class=IEntry><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.MAX_PIXEL" target=_parent class=ISymbol>MAX_PIXEL</a>, <span class=IParent>OpenLayers.<wbr>Renderer.SVG</span></div></div><div class=SRResult id=SR_MAX_undZOOM_undLEVEL><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MAX_undZOOM_undLEVEL')"  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_MAX_undPIXEL><div class=IEntry><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.MAX_PIXEL" target=_parent class=ISymbol>MAX_PIXEL</a>, <span class=IParent>OpenLayers.<wbr>Renderer.SVG</span></div></div><div class=SRResult id=SR_MAX_undZOOM_undLEVEL><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MAX_undZOOM_undLEVEL')"  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsR.html b/doc/devdocs/search/ConstantsR.html
index 1e12290..ce6a86a 100644
--- a/doc/devdocs/search/ConstantsR.html
+++ b/doc/devdocs/search/ConstantsR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_RESHAPE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#OpenLayers.Control.ModifyFeature.RESHAPE" target=_parent class=ISymbol>RESHAPE</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>ModifyFeature</span></div></div><div class=SRResult id=SR_RESIZE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#O [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_RESHAPE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#OpenLayers.Control.ModifyFeature.RESHAPE" target=_parent class=ISymbol>RESHAPE</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>ModifyFeature</span></div></div><div class=SRResult id=SR_RESIZE><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js.html#O [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstantsS.html b/doc/devdocs/search/ConstantsS.html
index 9470712..9ffbedc 100644
--- a/doc/devdocs/search/ConstantsS.html
+++ b/doc/devdocs/search/ConstantsS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_serviceTypes><div class=IEntry><a href="../files/OpenLayers/Format/Context-js.html#OpenLayers.Format.Context.OpenLayers.Format.Context.serviceTypes" target=_parent class=ISymbol>serviceTypes</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>Context.<wbr>OpenLayers.<wbr>Format.<wbr>Context</span></div></div><div class=SRResult id=SR_SINGLE_undTILE_undPARAMS [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_serviceTypes><div class=IEntry><a href="../files/OpenLayers/Format/Context-js.html#OpenLayers.Format.Context.OpenLayers.Format.Context.serviceTypes" target=_parent class=ISymbol>serviceTypes</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>Context.<wbr>OpenLayers.<wbr>Format.<wbr>Context</span></div></div><div class=SRResult id=SR_SINGLE_undTILE_undPARAMS [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorB.html b/doc/devdocs/search/ConstructorB.html
index 6a52d73..8bb7fd2 100644
--- a/doc/devdocs/search/ConstructorB.html
+++ b/doc/devdocs/search/ConstructorB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Base><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Base')" class=ISymbol>Base</a><div class=ISubIndex><a href="../files/OpenLayers/Ajax-js.html#OpenLayers.Ajax.Base.OpenLayers.Ajax.Base" target=_parent class=IParent>OpenLayers.<wbr>Ajax.<wbr>Base.<wbr>OpenLayers.Ajax</a><a href="../files/OpenLayers/Format/GML/Base-js.html#OpenLayers.Format.GM [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Base><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Base')" class=ISymbol>Base</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Ajax.Base.OpenLayers.Ajax.Base" target=_parent class=IParent>OpenLayers.<wbr>Ajax.<wbr>Base.<wbr>OpenLayers.Ajax</a><a href="../files/OpenLayers/Format/GML/Base-js.html#OpenLayers.Format.GML.Bas [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorC.html b/doc/devdocs/search/ConstructorC.html
index a5f54dc..2c39af6 100644
--- a/doc/devdocs/search/ConstructorC.html
+++ b/doc/devdocs/search/ConstructorC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Canvas><div class=IEntry><a href="../files/OpenLayers/Renderer/Canvas-js.html#OpenLayers.Renderer.Canvas.OpenLayers.Renderer.Canvas" target=_parent class=ISymbol>Canvas</a>, <span class=IParent>OpenLayers.<wbr>Renderer.<wbr>Canvas.<wbr>OpenLayers.<wbr>Renderer</span></div></div><div class=SRResult id=SR_Class><div class=IEntry><a href="../files/OpenLayers/Bas [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CacheRead><div class=IEntry><a href="../files/OpenLayers/Control/CacheRead-js.html#OpenLayers.Control.CacheRead.OpenLayers.Control.CacheRead" target=_parent class=ISymbol>CacheRead</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>CacheRead.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_CacheWrite><div class=IEntry><a href="../fi [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorG.html b/doc/devdocs/search/ConstructorG.html
index 63825f3..2b01242 100644
--- a/doc/devdocs/search/ConstructorG.html
+++ b/doc/devdocs/search/ConstructorG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_GeoJSON><div class=IEntry><a href=".. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_GeoJSON><div class=IEntry><a href="../files/OpenLayers/F [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorI.html b/doc/devdocs/search/ConstructorI.html
index 61c751d..67c1e34 100644
--- a/doc/devdocs/search/ConstructorI.html
+++ b/doc/devdocs/search/ConstructorI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Icon><div class=IEntry><a href="../files/OpenLayers/Icon-js.html#OpenLayers.Icon.OpenLayers.Icon" target=_parent class=ISymbol>Icon</a>, <span class=IParent>OpenLayers.<wbr>Icon.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_Image><div class=IEntry><a href="../files/OpenLayers/Layer/Image-js.html#OpenLayers.Layer.Image.OpenLayers.Layer.Image" tar [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Icon><div class=IEntry><a href="../files/OpenLayers/Icon-js.html#OpenLayers.Icon.OpenLayers.Icon" target=_parent class=ISymbol>Icon</a>, <span class=IParent>OpenLayers.<wbr>Icon.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_Image><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Image')" class=ISymbol>Image</a><div class=ISubIndex>< [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorM.html b/doc/devdocs/search/ConstructorM.html
index 5920cde..81ef9b1 100644
--- a/doc/devdocs/search/ConstructorM.html
+++ b/doc/devdocs/search/ConstructorM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Map><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.OpenLayers.Map" target=_parent class=ISymbol>Map</a>, <span class=IParent>OpenLayers.<wbr>Map.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_MapGuide><div class=IEntry><a href="../files/OpenLayers/Layer/MapGuide-js.html#OpenLayers.Layer.MapGuide.OpenLayers.Layer.MapGuid [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Map><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.OpenLayers.Map" target=_parent class=ISymbol>Map</a>, <span class=IParent>OpenLayers.<wbr>Map.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_MapGuide><div class=IEntry><a href="../files/OpenLayers/Layer/MapGuide-js.html#OpenLayers.Layer.MapGuide.OpenLayers.Layer.MapGuid [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorN.html b/doc/devdocs/search/ConstructorN.html
index 0409548..1e93f85 100644
--- a/doc/devdocs/search/ConstructorN.html
+++ b/doc/devdocs/search/ConstructorN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Navigation><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.OpenLayers.Control.Navigation" target=_parent class=ISymbol>Navigation</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Navigation.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_NavigationHistory><div class=IEntry>< [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Navigation><div class=IEntry><a href="../files/OpenLayers/Control/Navigation-js.html#OpenLayers.Control.Navigation.OpenLayers.Control.Navigation" target=_parent class=ISymbol>Navigation</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Navigation.<wbr>OpenLayers.<wbr>Control</span></div></div><div class=SRResult id=SR_NavigationHistory><div class=IEntry>< [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorO.html b/doc/devdocs/search/ConstructorO.html
index d0686ca..aaf416d 100644
--- a/doc/devdocs/search/ConstructorO.html
+++ b/doc/devdocs/search/ConstructorO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OGCExceptionReport><div class=IEntry><a href="../files/OpenLayers/Format/OGCExceptionReport-js.html#OpenLayers.Format.OGCExceptionReport.OpenLayers.Format.OGCExceptionReport" target=_parent class=ISymbol>OGCExceptionReport</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport.<wbr>OpenLayers.<wbr>Format</span></div></div><div class=SRResult  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OGCExceptionReport><div class=IEntry><a href="../files/OpenLayers/Format/OGCExceptionReport-js.html#OpenLayers.Format.OGCExceptionReport.OpenLayers.Format.OGCExceptionReport" target=_parent class=ISymbol>OGCExceptionReport</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OGCExceptionReport.<wbr>OpenLayers.<wbr>Format</span></div></div><div class=SRResult  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorP.html b/doc/devdocs/search/ConstructorP.html
index 726d6f0..b87785f 100644
--- a/doc/devdocs/search/ConstructorP.html
+++ b/doc/devdocs/search/ConstructorP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Paging><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.OpenLayers.Strategy.Paging" target=_parent class=ISymbol>Paging</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Pan><div class=IEntry><a href="../files/OpenLayers/Contr [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Paging><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.OpenLayers.Strategy.Paging" target=_parent class=ISymbol>Paging</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Pan><div class=IEntry><a href="../files/OpenLayers/Contr [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorR.html b/doc/devdocs/search/ConstructorR.html
index f9e7c38..f209db9 100644
--- a/doc/devdocs/search/ConstructorR.html
+++ b/doc/devdocs/search/ConstructorR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Raster><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Raster-js.html#OpenLayers.Symbolizer.Raster.OpenLayers.Symbolizer.Raster" target=_parent class=ISymbol>Raster</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.<wbr>Raster.<wbr>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_Rectangle><div class=IEntry><a href="../files/ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Raster><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Raster-js.html#OpenLayers.Symbolizer.Raster.OpenLayers.Symbolizer.Raster" target=_parent class=ISymbol>Raster</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.<wbr>Raster.<wbr>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_Rectangle><div class=IEntry><a href="../files/ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorS.html b/doc/devdocs/search/ConstructorS.html
index 17fa78e..a266ee9 100644
--- a/doc/devdocs/search/ConstructorS.html
+++ b/doc/devdocs/search/ConstructorS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.OpenLayers.Strategy.Save" target=_parent class=ISymbol>Save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Save.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Scale><div class=IEntry><a href="../files/OpenLayers/Control/Scale-j [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.OpenLayers.Strategy.Save" target=_parent class=ISymbol>Save</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Save.<wbr>OpenLayers.<wbr>Strategy</span></div></div><div class=SRResult id=SR_Scale><div class=IEntry><a href="../files/OpenLayers/Control/Scale-j [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorT.html b/doc/devdocs/search/ConstructorT.html
index f7409d6..af4af3d 100644
--- a/doc/devdocs/search/ConstructorT.html
+++ b/doc/devdocs/search/ConstructorT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Text><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Text')" class=ISymbol>Text</a><div class=ISubIndex><a href="../files/OpenLayers/Format/Text-js.html#OpenLayers.Format.Text.OpenLayers.Format.Text" target=_parent class=IParent>OpenLayers.<wbr>Format.<wbr>Text.<wbr>OpenLayers.<wbr>Format</a><a href="../files/OpenLayers/Layer/Text-js.html#OpenL [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Text><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Text')" class=ISymbol>Text</a><div class=ISubIndex><a href="../files/OpenLayers/Format/Text-js.html#OpenLayers.Format.Text.OpenLayers.Format.Text" target=_parent class=IParent>OpenLayers.<wbr>Format.<wbr>Text.<wbr>OpenLayers.<wbr>Format</a><a href="../files/OpenLayers/Layer/Text-js.html#OpenL [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorU.html b/doc/devdocs/search/ConstructorU.html
index c218c54..1f44cd3 100644
--- a/doc/devdocs/search/ConstructorU.html
+++ b/doc/devdocs/search/ConstructorU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Untiled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Untiled')" class=ISymbol>Untiled</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/MapServer/Untiled-js.html#OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled.<wbr>OpenLayers.<wbr>L [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Untiled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Untiled')" class=ISymbol>Untiled</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Layer.MapServer.Untiled.OpenLayers.Layer.MapServer.Untiled" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>MapServer.<wbr>Untiled.<wbr>OpenLayers.<wbr>Layer.<wbr>MapServer</a>< [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorV.html b/doc/devdocs/search/ConstructorV.html
index d179af9..25c2b0c 100644
--- a/doc/devdocs/search/ConstructorV.html
+++ b/doc/devdocs/search/ConstructorV.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorW.html b/doc/devdocs/search/ConstructorW.html
index eb697d9..307f525 100644
--- a/doc/devdocs/search/ConstructorW.html
+++ b/doc/devdocs/search/ConstructorW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WCSGetCoverage><div class=IEntry><a href="../files/OpenLayers/Format/WCSGetCoverage-js.html#OpenLayers.Format.WCSGetCoverage_version_1.1.0.OpenLayers.Format.WCSGetCoverage" target=_parent class=ISymbol>WCSGetCoverage</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.<wbr>1.0.<wbr>OpenLayers.<wbr>Format</span></div></div><div class= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WCSGetCoverage><div class=IEntry><a href="../files/OpenLayers/Format/WCSGetCoverage-js.html#OpenLayers.Format.WCSGetCoverage_version_1.1.0.OpenLayers.Format.WCSGetCoverage" target=_parent class=ISymbol>WCSGetCoverage</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>WCSGetCoverage version 1.<wbr>1.0.<wbr>OpenLayers.<wbr>Format</span></div></div><div class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/ConstructorY.html b/doc/devdocs/search/ConstructorY.html
index 2ced573..ebb1ba3 100644
--- a/doc/devdocs/search/ConstructorY.html
+++ b/doc/devdocs/search/ConstructorY.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Yahoo><div class=IEntry><a href="../files/OpenLayers/Layer/Yahoo-js.html#OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo" target=_parent class=ISymbol>Yahoo</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>Yahoo.<wbr>OpenLayers.<wbr>Layer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches< [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Yahoo><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Layer.Yahoo.OpenLayers.Layer.Yahoo" target=_parent class=ISymbol>Yahoo</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>Yahoo.<wbr>OpenLayers.<wbr>Layer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FilesA.html b/doc/devdocs/search/FilesA.html
index 7a1c64b..8fc8110 100644
--- a/doc/devdocs/search/FilesA.html
+++ b/doc/devdocs/search/FilesA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Ajax_perjs><div class=IEntry><a href="../files/OpenLayers/Ajax-js.html#Ajax.js" target=_parent class=ISymbol>Ajax.js</a></div></div><div class=SRResult id=SR_ArcGISCache_perjs><div class=IEntry><a href="../files/OpenLayers/Layer/ArcGISCache-js.html#ArcGISCache.js" target=_parent class=ISymbol>ArcGISCache.js</a></div></div></table><div class=SRStatus id=Search [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ArcGISCache_perjs><div class=IEntry><a href="../files/OpenLayers/Layer/ArcGISCache-js.html#ArcGISCache.js" target=_parent class=ISymbol>ArcGISCache.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FilesD.html b/doc/devdocs/search/FilesD.html
new file mode 100644
index 0000000..c25e0b4
--- /dev/null
+++ b/doc/devdocs/search/FilesD.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!--  Generated by Natural Docs, version 1.52 -->
+<!--  http://www.naturaldocs.org  -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_deprecated_perjs><div class=IEntry><a href="../files/deprecated-js.html#deprecated.js" target=_parent class=ISymbol>deprecated.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/doc/devdocs/search/FilesW.html b/doc/devdocs/search/FilesW.html
index 32359c8..838f597 100644
--- a/doc/devdocs/search/FilesW.html
+++ b/doc/devdocs/search/FilesW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WFSDescribeFeatureType_perjs><div class=IEntry><a href="../files/OpenLayers/Format/WFSDescribeFeatureType-js.html#WFSDescribeFeatureType.js" target=_parent class=ISymbol>WFSDescribeFeatureType.js</a></div></div><div class=SRResult id=SR_WFST_perjs><div class=IEntry><a href="../files/OpenLayers/Format/WFST-js.html#WFST.js" target=_parent class=ISymbol>WFST.js< [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WFST_perjs><div class=IEntry><a href="../files/OpenLayers/Format/WFST-js.html#WFST.js" target=_parent class=ISymbol>WFST.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsA.html b/doc/devdocs/search/FunctionsA.html
index bd9b78a..3a955f8 100644
--- a/doc/devdocs/search/FunctionsA.html
+++ b/doc/devdocs/search/FunctionsA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_abort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_abort')" class=ISymbol>abort</a><div class=ISubIndex><a href="../files/OpenLayers/Protocol-js.html#OpenLayers.Protocol.abort" target=_parent class=IParent>OpenLayers.<wbr>Protocol</a><a href="../files/OpenLayers/Protocol/HTTP-js.html#OpenLayers.Protocol.HTTP.abort" target=_parent class=IPare [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_abort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_abort')" class=ISymbol>abort</a><div class=ISubIndex><a href="../files/OpenLayers/Protocol-js.html#OpenLayers.Protocol.abort" target=_parent class=IParent>OpenLayers.<wbr>Protocol</a><a href="../files/OpenLayers/Protocol/HTTP-js.html#OpenLayers.Protocol.HTTP.abort" target=_parent class=IPare [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsB.html b/doc/devdocs/search/FunctionsB.html
index 42fb1bd..df53b4e 100644
--- a/doc/devdocs/search/FunctionsB.html
+++ b/doc/devdocs/search/FunctionsB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_baseLayerDraw><div class=IEntry><a href="../files/OpenLayers/Control/OverviewMap-js.html#OpenLayers.Control.OverviewMap.baseLayerDraw" target=_parent class=ISymbol>baseLayerDraw</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>OverviewMap</span></div></div><div class=SRResult id=SR_beforeSelectFeature><div class=IEntry><a href="../files/OpenLayers/Contro [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_baseLayerDraw><div class=IEntry><a href="../files/OpenLayers/Control/OverviewMap-js.html#OpenLayers.Control.OverviewMap.baseLayerDraw" target=_parent class=ISymbol>baseLayerDraw</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>OverviewMap</span></div></div><div class=SRResult id=SR_beforeSelectFeature><div class=IEntry><a href="../files/OpenLayers/Contro [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsC.html b/doc/devdocs/search/FunctionsC.html
index ab05194..df7ed1f 100644
--- a/doc/devdocs/search/FunctionsC.html
+++ b/doc/devdocs/search/FunctionsC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cacheFeatures><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cacheFeatures')" class=ISymbol>cacheFeatures</a><div class=ISubIndex><a href="../files/OpenLayers/Strategy/Cluster-js.html#OpenLayers.Strategy.Cluster.cacheFeatures" target=_parent class=IParent>OpenLayers.<wbr>Strategy.<wbr>Cluster</a><a href="../files/OpenLayers/Strategy/Paging-js. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cache><div class=IEntry><a href="../files/OpenLayers/Control/CacheWrite-js.html#OpenLayers.Control.CacheWrite.cache" target=_parent class=ISymbol>cache</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>CacheWrite</span></div></div><div class=SRResult id=SR_cacheFeatures><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cacheFeatures')" class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsD.html b/doc/devdocs/search/FunctionsD.html
index 40f1e19..25fe9c7 100644
--- a/doc/devdocs/search/FunctionsD.html
+++ b/doc/devdocs/search/FunctionsD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dashStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashStyle')" class=ISymbol>dashStyle</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.dashStyle" target=_parent class=IParent>OpenLayers.<wbr>Renderer.SVG</a><a href="../files/OpenLayers/Renderer/SVG2-js.html#OpenLayers.Renderer.SVG2.dashS [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dashStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashStyle')" class=ISymbol>dashStyle</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.dashStyle" target=_parent class=IParent>OpenLayers.<wbr>Renderer.SVG</a><a href="../files/deprecated-js.html#OpenLayers.Renderer.SVG2.dashStyle" target=_ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsE.html b/doc/devdocs/search/FunctionsE.html
index 59688f8..c32facb 100644
--- a/doc/devdocs/search/FunctionsE.html
+++ b/doc/devdocs/search/FunctionsE.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easeIn><div class=IEntry><a href="javascript:searchResults.Toggle('SR_easeIn')" class=ISymbol>easeIn</a><div class=ISubIndex><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Expo.easeIn" target=_parent class=IParent>OpenLayers.<wbr>Easing.Expo</a><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Linear.easeIn" target=_parent class=IPare [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easeIn><div class=IEntry><a href="javascript:searchResults.Toggle('SR_easeIn')" class=ISymbol>easeIn</a><div class=ISubIndex><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Expo.easeIn" target=_parent class=IParent>OpenLayers.<wbr>Easing.Expo</a><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Linear.easeIn" target=_parent class=IPare [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsF.html b/doc/devdocs/search/FunctionsF.html
index bcf6549..7d8cfd4 100644
--- a/doc/devdocs/search/FunctionsF.html
+++ b/doc/devdocs/search/FunctionsF.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_failure><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.failure" target=_parent class=ISymbol>failure</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Geolocate</span></div></div><div class=SRResult id=SR_False><div class=IEntry><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Function.False" [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_failure><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.failure" target=_parent class=ISymbol>failure</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Geolocate</span></div></div><div class=SRResult id=SR_False><div class=IEntry><a href="../files/OpenLayers/BaseTypes-js.html#OpenLayers.Function.False" [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsG.html b/doc/devdocs/search/FunctionsG.html
index 5e61884..c067e4c 100644
--- a/doc/devdocs/search/FunctionsG.html
+++ b/doc/devdocs/search/FunctionsG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geolocate><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.geolocate" target=_parent class=ISymbol>geolocate</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Geolocate</span></div></div><div class=SRResult id=SR_geometry><div class=IEntry><a href="../files/OpenLayers/Format/GeoJSON-js.html#OpenLayers.F [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geolocate><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.geolocate" target=_parent class=ISymbol>geolocate</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Geolocate</span></div></div><div class=SRResult id=SR_geometry><div class=IEntry><a href="../files/OpenLayers/Format/GeoJSON-js.html#OpenLayers.F [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsH.html b/doc/devdocs/search/FunctionsH.html
index e956516..bcd3915 100644
--- a/doc/devdocs/search/FunctionsH.html
+++ b/doc/devdocs/search/FunctionsH.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_handle><div class=IEntry><a href="../files/OpenLayers/Handler/Feature-js.html#OpenLayers.Handler.Feature.handle" target=_parent class=ISymbol>handle</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>Feature</span></div></div><div class=SRResult id=SR_handleAdd><div class=IEntry><a href="../files/OpenLayers/Strategy/Filter-js.html#OpenLayers.Strategy.Filte [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_handle><div class=IEntry><a href="../files/OpenLayers/Handler/Feature-js.html#OpenLayers.Handler.Feature.handle" target=_parent class=ISymbol>handle</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>Feature</span></div></div><div class=SRResult id=SR_handleAdd><div class=IEntry><a href="../files/OpenLayers/Strategy/Filter-js.html#OpenLayers.Strategy.Filte [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsI.html b/doc/devdocs/search/FunctionsI.html
index cf5c7bd..8c21130 100644
--- a/doc/devdocs/search/FunctionsI.html
+++ b/doc/devdocs/search/FunctionsI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_iconOff><div class=IEntry><a href="../files/OpenLayers/Control/Panel-js.html#OpenLayers.Control.Panel.iconOff" target=_pare [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_iconOff><div class=IEntry><a href="../files/OpenLayers/Control/Panel-js.html#OpenLayers.Control.Panel.iconOff" target=_pare [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsL.html b/doc/devdocs/search/FunctionsL.html
index d3fb9d8..5beb8ae 100644
--- a/doc/devdocs/search/FunctionsL.html
+++ b/doc/devdocs/search/FunctionsL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_layerToContext><div class=IEntry><a href="../files/OpenLayers/Format/WMC-js.html#OpenLayers.Format.WMC.layerToContext" target=_parent class=ISymbol>layerToContext</a>, <span class=IParent>OpenLayers.<wbr>Format.WMC</span></div></div><div class=SRResult id=SR_leaveMode><div class=IEntry><a href="../files/OpenLayers/Control/MouseToolbar-js.html#OpenLayers.Contr [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_layerToContext><div class=IEntry><a href="../files/OpenLayers/Format/WMC-js.html#OpenLayers.Format.WMC.layerToContext" target=_parent class=ISymbol>layerToContext</a>, <span class=IParent>OpenLayers.<wbr>Format.WMC</span></div></div><div class=SRResult id=SR_leaveMode><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Control.MouseToolbar.leave [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsM.html b/doc/devdocs/search/FunctionsM.html
index 257b3c2..0ef15bd 100644
--- a/doc/devdocs/search/FunctionsM.html
+++ b/doc/devdocs/search/FunctionsM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_mapDivClick><div class=IEntry><a href="../files/OpenLayers/Control/OverviewMap-js.html#OpenLayers.Control.OverviewMap.mapDivClick" target=_parent class=ISymbol>mapDivClick</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>OverviewMap</span></div></div><div class=SRResult id=SR_markerClick><div class=IEntry><a href="../files/OpenLayers/Layer/GeoRSS-js.html [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeSameOrigin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeSameOrigin')" class=ISymbol>makeSameOrigin</a><div class=ISubIndex><a href="../files/OpenLayers/Control/CacheWrite-js.html#OpenLayers.Control.CacheWrite.makeSameOrigin" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>CacheWrite</a><a href="../files/OpenLayers/Request-j [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsN.html b/doc/devdocs/search/FunctionsN.html
index baa2bc7..63e5858 100644
--- a/doc/devdocs/search/FunctionsN.html
+++ b/doc/devdocs/search/FunctionsN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_nextTrigger><div class=IEntry><a href="../files/OpenLayers/Control/NavigationHistory-js.html#OpenLayers.Control.NavigationHistory.nextTrigger" target=_parent class=ISymbol>nextTrigger</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>NavigationHistory</span></div></div><div class=SRResult id=SR_nodeFactory><div class=IEntry><a href="../files/OpenLayers/Re [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_nextTrigger><div class=IEntry><a href="../files/OpenLayers/Control/NavigationHistory-js.html#OpenLayers.Control.NavigationHistory.nextTrigger" target=_parent class=ISymbol>nextTrigger</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>NavigationHistory</span></div></div><div class=SRResult id=SR_nodeFactory><div class=IEntry><a href="../files/OpenLayers/Re [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsO.html b/doc/devdocs/search/FunctionsO.html
index 728bb52..c1d1df6 100644
--- a/doc/devdocs/search/FunctionsO.html
+++ b/doc/devdocs/search/FunctionsO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_object><div class=IEntry><a href="../files/OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON.serialize.object" target=_parent class=ISymbol>object</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>JSON.<wbr>serialize</span></div></div><div class=SRResult id=SR_observe><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.observ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_object><div class=IEntry><a href="../files/OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON.serialize.object" target=_parent class=ISymbol>object</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>JSON.<wbr>serialize</span></div></div><div class=SRResult id=SR_observe><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.observ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsP.html b/doc/devdocs/search/FunctionsP.html
index 4f81b67..b784e5c 100644
--- a/doc/devdocs/search/FunctionsP.html
+++ b/doc/devdocs/search/FunctionsP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_page><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.page" target=_parent class=ISymbol>page</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging</span></div></div><div class=SRResult id=SR_pageCount><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.page [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_page><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.page" target=_parent class=ISymbol>page</a>, <span class=IParent>OpenLayers.<wbr>Strategy.<wbr>Paging</span></div></div><div class=SRResult id=SR_pageCount><div class=IEntry><a href="../files/OpenLayers/Strategy/Paging-js.html#OpenLayers.Strategy.Paging.page [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsQ.html b/doc/devdocs/search/FunctionsQ.html
index 4b613a6..c98e4e4 100644
--- a/doc/devdocs/search/FunctionsQ.html
+++ b/doc/devdocs/search/FunctionsQ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_queuePotentialClick><div class=IEntry><a href="../files/OpenLayers/Handler/Click-js.html#OpenLayers.Handler.Click.queuePotentialClick" target=_parent class=ISymbol>queuePotentialClick</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>Click</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matc [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_queuePotentialClick><div class=IEntry><a href="../files/OpenLayers/Handler/Click-js.html#OpenLayers.Handler.Click.queuePotentialClick" target=_parent class=ISymbol>queuePotentialClick</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>Click</span></div></div><div class=SRResult id=SR_queueTileDraw><div class=IEntry><a href="../files/OpenLayers/Layer/Grid-j [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsR.html b/doc/devdocs/search/FunctionsR.html
index 317b859..4d75e68 100644
--- a/doc/devdocs/search/FunctionsR.html
+++ b/doc/devdocs/search/FunctionsR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_rad><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.rad" target=_parent class=ISymbol>rad</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_raiseLayer><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.raiseLayer" target=_parent class=ISymbol>raiseLayer</a>, <span class=IParent>OpenLayers.Map</sp [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_rad><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.rad" target=_parent class=ISymbol>rad</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_raiseLayer><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.raiseLayer" target=_parent class=ISymbol>raiseLayer</a>, <span class=IParent>OpenLayers.Map</sp [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsS.html b/doc/devdocs/search/FunctionsS.html
index abe76ad..1ef1f9d 100644
--- a/doc/devdocs/search/FunctionsS.html
+++ b/doc/devdocs/search/FunctionsS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_safeStopPropagation><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.safeStopPropagation" target=_parent class=ISymbol>safeStopPropagation</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_parent class=ISymbo [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_safeStopPropagation><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Util.safeStopPropagation" target=_parent class=ISymbol>safeStopPropagation</a>, <span class=IParent>OpenLayers.Util</span></div></div><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_pa [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsSymbols.html b/doc/devdocs/search/FunctionsSymbols.html
index 39e2f4c..6765dcd 100644
--- a/doc/devdocs/search/FunctionsSymbols.html
+++ b/doc/devdocs/search/FunctionsSymbols.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__undaddButton><div class=IEntry><a href="javascript:searchResults.Toggle('SR__undaddButton')" class=ISymbol>_addButton</a><div class=ISubIndex><a href="../files/OpenLayers/Control/MouseToolbar-js.html#OpenLayers.Control.MouseToolbar._addButton" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>MouseToolbar</a><a href="../files/OpenLayers/Control/PanZo [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__undaddButton><div class=IEntry><a href="javascript:searchResults.Toggle('SR__undaddButton')" class=ISymbol>_addButton</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Control.MouseToolbar._addButton" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>MouseToolbar</a><a href="../files/OpenLayers/Control/PanZoom-js.html#OpenLayers [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsT.html b/doc/devdocs/search/FunctionsT.html
index eb9e234..1bf23e9 100644
--- a/doc/devdocs/search/FunctionsT.html
+++ b/doc/devdocs/search/FunctionsT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_testTarget><div class=IEntry><a href="../files/OpenLayers/Control/Snapping-js.html#OpenLayers.Control.Snapping.testTarget" target=_parent class=ISymbol>testTarget</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Snapping</span></div></div><div class=SRResult id=SR_time><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.time [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_testTarget><div class=IEntry><a href="../files/OpenLayers/Control/Snapping-js.html#OpenLayers.Control.Snapping.testTarget" target=_parent class=ISymbol>testTarget</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Snapping</span></div></div><div class=SRResult id=SR_time><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.time [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsU.html b/doc/devdocs/search/FunctionsU.html
index 9925d1f..768d8a5 100644
--- a/doc/devdocs/search/FunctionsU.html
+++ b/doc/devdocs/search/FunctionsU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_undo')" class=ISymbol>undo</a><div class=ISubIndex><a href="../files/OpenLayers/Co [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_undo')" class=ISymbol>undo</a><div class=ISubIndex><a href="../files/OpenLayers/Co [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsW.html b/doc/devdocs/search/FunctionsW.html
index f0c31e2..baa3472 100644
--- a/doc/devdocs/search/FunctionsW.html
+++ b/doc/devdocs/search/FunctionsW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>OpenLayers.<wbr>Console</span></div></div><div class=SRResult id=SR_WFST><div class=IEntry><a href="../files/OpenLayers/Format/WFST-js.html#OpenLayers.Format.WFST" target=_parent class=ISymbol>WFST</a>, <span  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>OpenLayers.<wbr>Console</span></div></div><div class=SRResult id=SR_WFST><div class=IEntry><a href="../files/OpenLayers/Format/WFST-js.html#OpenLayers.Format.WFST" target=_parent class=ISymbol>WFST</a>, <span  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/FunctionsZ.html b/doc/devdocs/search/FunctionsZ.html
index 0086209..2fbf3f3 100644
--- a/doc/devdocs/search/FunctionsZ.html
+++ b/doc/devdocs/search/FunctionsZ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Z_undORDER><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER" target=_parent class=ISymbol>Z_ORDER</a>, <span class=IParent>OpenLayers.<wbr>ElementsIndexer.<wbr>IndexingMethods</span></div></div><div class=SRResult id=SR_Z_undORDER_undDRAWING_undORDER><div class=IEntry><a href="../files [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Z_undORDER><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER" target=_parent class=ISymbol>Z_ORDER</a>, <span class=IParent>OpenLayers.<wbr>ElementsIndexer.<wbr>IndexingMethods</span></div></div><div class=SRResult id=SR_Z_undORDER_undDRAWING_undORDER><div class=IEntry><a href="../files [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralA.html b/doc/devdocs/search/GeneralA.html
index a4e2510..be6f522 100644
--- a/doc/devdocs/search/GeneralA.html
+++ b/doc/devdocs/search/GeneralA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_abort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_abort')" class=ISymbol>abort</a><div class=ISubIndex><a href="../files/OpenLayers/Protocol-js.html#OpenLayers.Protocol.abort" target=_parent class=IParent>OpenLayers.<wbr>Protocol</a><a href="../files/OpenLayers/Protocol/HTTP-js.html#OpenLayers.Protocol.HTTP.abort" target=_parent class=IPare [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_abort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_abort')" class=ISymbol>abort</a><div class=ISubIndex><a href="../files/OpenLayers/Protocol-js.html#OpenLayers.Protocol.abort" target=_parent class=IParent>OpenLayers.<wbr>Protocol</a><a href="../files/OpenLayers/Protocol/HTTP-js.html#OpenLayers.Protocol.HTTP.abort" target=_parent class=IPare [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralB.html b/doc/devdocs/search/GeneralB.html
index 5bc0181..975e52a 100644
--- a/doc/devdocs/search/GeneralB.html
+++ b/doc/devdocs/search/GeneralB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_backBufferTile><div class=IEntry><a href="../files/OpenLayers/Tile/Image-js.html#OpenLayers.Tile.Image.backBufferTile" target=_parent class=ISymbol>backBufferTile</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>Image</span></div></div><div class=SRResult id=SR_BACKGROUND_undID_undSUFFIX><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.ht [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_backBuffer><div class=IEntry><a href="../files/OpenLayers/Layer/Grid-js.html#OpenLayers.Layer.Grid.backBuffer" target=_parent class=ISymbol>backBuffer</a>, <span class=IParent>OpenLayers.<wbr>Layer.Grid</span></div></div><div class=SRResult id=SR_backBufferLonLat><div class=IEntry><a href="../files/OpenLayers/Layer/Grid-js.html#OpenLayers.Layer.Grid.backBuffe [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralC.html b/doc/devdocs/search/GeneralC.html
index 6140776..23f63f3 100644
--- a/doc/devdocs/search/GeneralC.html
+++ b/doc/devdocs/search/GeneralC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cache><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cache')" class=ISymbol>cache</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/Google-js.html#OpenLayers.Layer.Google.OpenLayers.Layer.Google.cache" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>Google.<wbr>OpenLayers.<wbr>Layer.<wbr>Google</a><a href="../files/OpenLayers/ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cache><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cache')" class=ISymbol>cache</a><div class=ISubIndex><a href="../files/OpenLayers/Control/CacheWrite-js.html#OpenLayers.Control.CacheWrite.cache" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>CacheWrite</a><a href="../files/OpenLayers/Layer/Google-js.html#OpenLayers.Layer.Google. [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralD.html b/doc/devdocs/search/GeneralD.html
index 4b13d18..60c43f1 100644
--- a/doc/devdocs/search/GeneralD.html
+++ b/doc/devdocs/search/GeneralD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dashStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashStyle')" class=ISymbol>dashStyle</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.dashStyle" target=_parent class=IParent>OpenLayers.<wbr>Renderer.SVG</a><a href="../files/OpenLayers/Renderer/SVG2-js.html#OpenLayers.Renderer.SVG2.dashS [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dashStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashStyle')" class=ISymbol>dashStyle</a><div class=ISubIndex><a href="../files/OpenLayers/Renderer/SVG-js.html#OpenLayers.Renderer.SVG.dashStyle" target=_parent class=IParent>OpenLayers.<wbr>Renderer.SVG</a><a href="../files/deprecated-js.html#OpenLayers.Renderer.SVG2.dashStyle" target=_ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralE.html b/doc/devdocs/search/GeneralE.html
index 7007574..013be65 100644
--- a/doc/devdocs/search/GeneralE.html
+++ b/doc/devdocs/search/GeneralE.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easeIn><div class=IEntry><a href="javascript:searchResults.Toggle('SR_easeIn')" class=ISymbol>easeIn</a><div class=ISubIndex><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Expo.easeIn" target=_parent class=IParent>OpenLayers.<wbr>Easing.Expo</a><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Linear.easeIn" target=_parent class=IPare [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easeIn><div class=IEntry><a href="javascript:searchResults.Toggle('SR_easeIn')" class=ISymbol>easeIn</a><div class=ISubIndex><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Expo.easeIn" target=_parent class=IParent>OpenLayers.<wbr>Easing.Expo</a><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Easing.Linear.easeIn" target=_parent class=IPare [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralF.html b/doc/devdocs/search/GeneralF.html
index 7870650..1ac8669 100644
--- a/doc/devdocs/search/GeneralF.html
+++ b/doc/devdocs/search/GeneralF.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_failure><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.failure" target=_parent class=ISymbol>failure</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Geolocate</span></div></div><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=I [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_failure><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.failure" target=_parent class=ISymbol>failure</a>, <span class=IParent>OpenLayers.<wbr>Control.<wbr>Geolocate</span></div></div><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=I [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralG.html b/doc/devdocs/search/GeneralG.html
index 7971e0c..f414c29 100644
--- a/doc/devdocs/search/GeneralG.html
+++ b/doc/devdocs/search/GeneralG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_geodesic><div class=IEntry><a href="j [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Gears><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.Gears.OpenLayers.Protocol.SQL.Gears" target=_parent class=ISymbol>Gears</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears.<wbr>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_geodesic><div class=IEntry><a href="javascript:searchRes [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralH.html b/doc/devdocs/search/GeneralH.html
index cf10fd1..4539427 100644
--- a/doc/devdocs/search/GeneralH.html
+++ b/doc/devdocs/search/GeneralH.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_handle><div class=IEntry><a href="../files/OpenLayers/Handler/Feature-js.html#OpenLayers.Handler.Feature.handle" target=_parent class=ISymbol>handle</a>,  [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_handle><div class=IEntry><a href="../files/OpenLayers/Handler/Feature-js.html#OpenLayers.Handler.Feature.handle" target=_parent class=ISymbol>handle</a>,  [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralI.html b/doc/devdocs/search/GeneralI.html
index 12b7498..66c9d52 100644
--- a/doc/devdocs/search/GeneralI.html
+++ b/doc/devdocs/search/GeneralI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_icon><div class=IEntry><a href="javascript:searchResults.Toggle('SR_icon')" class=ISymbol>icon</a><div class=ISubIndex><a h [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_i18n><div class=IEntry><a href="../files/OpenLayers/Lang-js.html#OpenLayers.Lang.OpenLayers.i18n" target=_parent class=ISymbol>i18n</a>, <span class=IParent>OpenLayers.<wbr>Lang.<wbr>OpenLayers</span></div></div><div class=SRResult id=SR_icon><div class=IEntry><a href="javascript:searchResults.Toggle('SR_icon')" class=ISymbol>icon</a><div class=ISubIndex><a h [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralJ.html b/doc/devdocs/search/GeneralJ.html
index 144270b..f99b997 100644
--- a/doc/devdocs/search/GeneralJ.html
+++ b/doc/devdocs/search/GeneralJ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_JSON><div class=IEntry><a href="../files/OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON.OpenLayers.Format.JSON" target=_parent class=ISymbol>JSON</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>JSON.<wbr>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_jsonParser><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-j [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_json><div class=IEntry><a href="../files/OpenLayers/Tile/UTFGrid-js.html#OpenLayers.Tile.UTFGrid.json" target=_parent class=ISymbol>json</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>UTFGrid</span></div></div><div class=SRResult id=SR2_JSON><div class=IEntry><a href="../files/OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON.OpenLayers.Format.JSON" t [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralK.html b/doc/devdocs/search/GeneralK.html
index d887447..4966a36 100644
--- a/doc/devdocs/search/GeneralK.html
+++ b/doc/devdocs/search/GeneralK.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KaMap><div class=IEntry><a href="../files/OpenLayers/Layer/KaMap-js.html#OpenLayers.Layer.KaMap.OpenLayers.Layer.KaMap" target=_parent class=ISymbol>KaMap</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>KaMap.<wbr>OpenLayers.<wbr>Layer</span></div></div><div class=SRResult id=SR_KaMapCache><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_KaMap><div class=IEntry><a href="../files/OpenLayers/Layer/KaMap-js.html#OpenLayers.Layer.KaMap.OpenLayers.Layer.KaMap" target=_parent class=ISymbol>KaMap</a>, <span class=IParent>OpenLayers.<wbr>Layer.<wbr>KaMap.<wbr>OpenLayers.<wbr>Layer</span></div></div><div class=SRResult id=SR_KaMapCache><div class=IEntry><a href="../files/OpenLayers/Layer/KaMapCache-js [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralL.html b/doc/devdocs/search/GeneralL.html
index 97b1241..f5dcd75 100644
--- a/doc/devdocs/search/GeneralL.html
+++ b/doc/devdocs/search/GeneralL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABE [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_LABEL_undALIGN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undALIGN')" class=ISymbol>LABE [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralM.html b/doc/devdocs/search/GeneralM.html
index f0b1c35..67ffdc7 100644
--- a/doc/devdocs/search/GeneralM.html
+++ b/doc/devdocs/search/GeneralM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_map><div class=IEntry><a href="javascript:searchResults.Toggle('SR_map')" class=ISymbol>map</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.map" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.map" target=_parent class=IParent>OpenLayers.<wbr>Handle [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeSameOrigin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeSameOrigin')" class=ISymbol>makeSameOrigin</a><div class=ISubIndex><a href="../files/OpenLayers/Control/CacheWrite-js.html#OpenLayers.Control.CacheWrite.makeSameOrigin" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>CacheWrite</a><a href="../files/OpenLayers/Request-j [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralN.html b/doc/devdocs/search/GeneralN.html
index 6a2fb51..7e4d9cb 100644
--- a/doc/devdocs/search/GeneralN.html
+++ b/doc/devdocs/search/GeneralN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Format/XML/VersionedOGC-js.html#OpenLayers.Format.XML.Vers [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Format/XML/VersionedOGC-js.html#OpenLayers.Format.XML.Vers [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralO.html b/doc/devdocs/search/GeneralO.html
index 2661e71..3b22597 100644
--- a/doc/devdocs/search/GeneralO.html
+++ b/doc/devdocs/search/GeneralO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_object><div class=IEntry><a href="javascript:searchResults.Toggle('SR_object')" class=ISymbol>object</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.object" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON.serialize.object" target=_parent class= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_object><div class=IEntry><a href="javascript:searchResults.Toggle('SR_object')" class=ISymbol>object</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.object" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Format/JSON-js.html#OpenLayers.Format.JSON.serialize.object" target=_parent class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralP.html b/doc/devdocs/search/GeneralP.html
index 8ab2577..29ac164 100644
--- a/doc/devdocs/search/GeneralP.html
+++ b/doc/devdocs/search/GeneralP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_padding><div class=IEntry><a href="../files/OpenLayers/Popup-js.html#OpenLayers.Popup.padding" target=_parent class=ISymbol>padding</a>, <span class=IParent>OpenLayers.<wbr>Popup</span></div></div><div class=SRResult id=SR_paddingForPopups><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.paddingForPopups" target=_parent class=ISymbol> [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_padding><div class=IEntry><a href="../files/OpenLayers/Popup-js.html#OpenLayers.Popup.padding" target=_parent class=ISymbol>padding</a>, <span class=IParent>OpenLayers.<wbr>Popup</span></div></div><div class=SRResult id=SR_paddingForPopups><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.paddingForPopups" target=_parent class=ISymbol> [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralQ.html b/doc/devdocs/search/GeneralQ.html
index 0e49bdd..5c95336 100644
--- a/doc/devdocs/search/GeneralQ.html
+++ b/doc/devdocs/search/GeneralQ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Query><div class=IEntry><a href="../files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html#OpenLayers.Format.CSWGetRecords.v2_0_2.Query" target=_parent class=ISymbol>Query</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</span></div></div><div class=SRResult id=SR_queryVisible><div class=IEntry><a href="javascript:searchResults.Tog [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Query><div class=IEntry><a href="../files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html#OpenLayers.Format.CSWGetRecords.v2_0_2.Query" target=_parent class=ISymbol>Query</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</span></div></div><div class=SRResult id=SR_queryVisible><div class=IEntry><a href="javascript:searchResults.Tog [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralR.html b/doc/devdocs/search/GeneralR.html
index 648f600..c68c3fb 100644
--- a/doc/devdocs/search/GeneralR.html
+++ b/doc/devdocs/search/GeneralR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_rad><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.rad" target=_parent class=ISymbol>rad</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class= [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_rad><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.rad" target=_parent class=ISymbol>rad</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class= [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralS.html b/doc/devdocs/search/GeneralS.html
index c8ea5af..f3bcf47 100644
--- a/doc/devdocs/search/GeneralS.html
+++ b/doc/devdocs/search/GeneralS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_safeStopPropagation><div class=IEntry><a href="../files/OpenLayers/Util-js.html#Util.safeStopPropagation" target=_parent class=ISymbol>safeStopPropagation</a>, <span class=IParent>Util</span></div></div><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_parent class=ISymbo [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_safeStopPropagation><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Util.safeStopPropagation" target=_parent class=ISymbol>safeStopPropagation</a>, <span class=IParent>OpenLayers.Util</span></div></div><div class=SRResult id=SR_save><div class=IEntry><a href="../files/OpenLayers/Strategy/Save-js.html#OpenLayers.Strategy.Save.save" target=_pa [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralSymbols.html b/doc/devdocs/search/GeneralSymbols.html
index 49342d0..78f13f7 100644
--- a/doc/devdocs/search/GeneralSymbols.html
+++ b/doc/devdocs/search/GeneralSymbols.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__undaddButton><div class=IEntry><a href="javascript:searchResults.Toggle('SR__undaddButton')" class=ISymbol>_addButton</a><div class=ISubIndex><a href="../files/OpenLayers/Control/MouseToolbar-js.html#OpenLayers.Control.MouseToolbar._addButton" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>MouseToolbar</a><a href="../files/OpenLayers/Control/PanZo [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__undaddButton><div class=IEntry><a href="javascript:searchResults.Toggle('SR__undaddButton')" class=ISymbol>_addButton</a><div class=ISubIndex><a href="../files/deprecated-js.html#OpenLayers.Control.MouseToolbar._addButton" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>MouseToolbar</a><a href="../files/OpenLayers/Control/PanZoom-js.html#OpenLayers [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralT.html b/doc/devdocs/search/GeneralT.html
index 21f1153..9e2d03c 100644
--- a/doc/devdocs/search/GeneralT.html
+++ b/doc/devdocs/search/GeneralT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_TARGET_undNODE><div class=IEntry><a href="../files/OpenLayers/Layer/PointTrack-js.html#OpenLayers.Layer.PointTr [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_target><div class=IEntry><a href="../files/OpenLayers/Events/buttonclick-js.html#OpenLayers.Events.buttonclick.target" targe [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralU.html b/doc/devdocs/search/GeneralU.html
index e2de23f..ea81a93 100644
--- a/doc/devdocs/search/GeneralU.html
+++ b/doc/devdocs/search/GeneralU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_undo')" class=ISymbol>undo</a><div class=ISubIndex><a href="../files/OpenLayers/Co [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_un><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.un" target=_parent class=ISymbol>un</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_undo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_undo')" class=ISymbol>undo</a><div class=ISubIndex><a href="../files/OpenLayers/Co [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralV.html b/doc/devdocs/search/GeneralV.html
index 379c836..7cad17a 100644
--- a/doc/devdocs/search/GeneralV.html
+++ b/doc/devdocs/search/GeneralV.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_v0_und3_und1><div class=IEntry><a href="../files/OpenLayers/Format/OWSContext/v0_3_1-js.html#OpenLayers.Format.OWSContext.v0_3_1.OpenLayers.Format.OWSContext.v0_3_1" target=_parent class=ISymbol>v0_3_1</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>OWSContext.<wbr>v0_3_1.<wbr>OpenLayers.<wbr>Format.<wbr>OWSContext</span></div></div><div class=SRResult i [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralW.html b/doc/devdocs/search/GeneralW.html
index fbabb21..b69ec72 100644
--- a/doc/devdocs/search/GeneralW.html
+++ b/doc/devdocs/search/GeneralW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>Op [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/OpenLayers/Console-js.html#OpenLayers.Console.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>Op [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralX.html b/doc/devdocs/search/GeneralX.html
index 83fd171..0261625 100644
--- a/doc/devdocs/search/GeneralX.html
+++ b/doc/devdocs/search/GeneralX.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_x><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x')" class=ISymbol>x</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.x" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/OpenLayers/Geometry/Rectangle-js.html#OpenLayers.Geometry.Rectangle.x" target=_paren [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_x><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x')" class=ISymbol>x</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.x" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/deprecated-js.html#OpenLayers.Geometry.Rectangle.x" target=_parent class=IParent>Ope [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralY.html b/doc/devdocs/search/GeneralY.html
index 96cc3c2..74558f8 100644
--- a/doc/devdocs/search/GeneralY.html
+++ b/doc/devdocs/search/GeneralY.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.y" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/OpenLayers/Geometry/Rectangle-js.html#OpenLayers.Geometry.Rectangle.y" target=_paren [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.y" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/deprecated-js.html#OpenLayers.Geometry.Rectangle.y" target=_parent class=IParent>Ope [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/GeneralZ.html b/doc/devdocs/search/GeneralZ.html
index fef84c4..2ab423e 100644
--- a/doc/devdocs/search/GeneralZ.html
+++ b/doc/devdocs/search/GeneralZ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Z_undINDEX_undBASE><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.Z_INDEX_BASE" target=_parent class=ISymbol>Z_INDEX_BASE</a>, <span class=IParent>OpenLayers.Map</span></div></div><div class=SRResult id=SR_Z_undORDER><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndexer.IndexingMethods.Z [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Z_undINDEX_undBASE><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.Z_INDEX_BASE" target=_parent class=ISymbol>Z_INDEX_BASE</a>, <span class=IParent>OpenLayers.Map</span></div></div><div class=SRResult id=SR_Z_undORDER><div class=IEntry><a href="../files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndexer.IndexingMethods.Z [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesA.html b/doc/devdocs/search/PropertiesA.html
index accaba4..3abea20 100644
--- a/doc/devdocs/search/PropertiesA.html
+++ b/doc/devdocs/search/PropertiesA.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_active><div class=IEntry><a href="javascript:searchResults.Toggle('SR_active')" class=ISymbol>active</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.active" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.active" target=_parent class=IParent>OpenLay [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_active><div class=IEntry><a href="javascript:searchResults.Toggle('SR_active')" class=ISymbol>active</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.active" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.active" target=_parent class=IParent>OpenLay [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesB.html b/doc/devdocs/search/PropertiesB.html
index aa55040..9a8efd3 100644
--- a/doc/devdocs/search/PropertiesB.html
+++ b/doc/devdocs/search/PropertiesB.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_backBufferTile><div class=IEntry><a href="../files/OpenLayers/Tile/Image-js.html#OpenLayers.Tile.Image.backBufferTile" target=_parent class=ISymbol>backBufferTile</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>Image</span></div></div><div class=SRResult id=SR_backgroundColor><div class=IEntry><a href="../files/OpenLayers/Popup-js.html#OpenLayers.Popup.bac [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_backBuffer><div class=IEntry><a href="../files/OpenLayers/Layer/Grid-js.html#OpenLayers.Layer.Grid.backBuffer" target=_parent class=ISymbol>backBuffer</a>, <span class=IParent>OpenLayers.<wbr>Layer.Grid</span></div></div><div class=SRResult id=SR_backBufferLonLat><div class=IEntry><a href="../files/OpenLayers/Layer/Grid-js.html#OpenLayers.Layer.Grid.backBuffe [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesC.html b/doc/devdocs/search/PropertiesC.html
index df4f3d0..51d8079 100644
--- a/doc/devdocs/search/PropertiesC.html
+++ b/doc/devdocs/search/PropertiesC.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cache><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cache')" class=ISymbol>cache</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/Google-js.html#OpenLayers.Layer.Google.OpenLayers.Layer.Google.cache" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>Google.<wbr>OpenLayers.<wbr>Layer.<wbr>Google</a><a href="../files/OpenLayers/ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cache><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cache')" class=ISymbol>cache</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/Google-js.html#OpenLayers.Layer.Google.OpenLayers.Layer.Google.cache" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>Google.<wbr>OpenLayers.<wbr>Layer.<wbr>Google</a><a href="../files/OpenLayers/ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesD.html b/doc/devdocs/search/PropertiesD.html
index 267adf4..2286332 100644
--- a/doc/devdocs/search/PropertiesD.html
+++ b/doc/devdocs/search/PropertiesD.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="javascript:searchResults.Toggle('SR_data')" class=ISymbol>data</a><div class=ISubIndex><a href="../files/OpenLayers/Feature-js.html#OpenLayers.Feature.data" target=_parent class=IParent>OpenLayers.<wbr>Feature</a><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.data" target=_parent class=IParent>OpenLayers.<wbr>For [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="javascript:searchResults.Toggle('SR_data')" class=ISymbol>data</a><div class=ISubIndex><a href="../files/OpenLayers/Feature-js.html#OpenLayers.Feature.data" target=_parent class=IParent>OpenLayers.<wbr>Feature</a><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.data" target=_parent class=IParent>OpenLayers.<wbr>For [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesE.html b/doc/devdocs/search/PropertiesE.html
index db0b492..cec2d41 100644
--- a/doc/devdocs/search/PropertiesE.html
+++ b/doc/devdocs/search/PropertiesE.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easing><div class=IEntry><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Tween.easing" target=_parent class=ISymbol>easing</a>, <span class=IParent>OpenLayers.<wbr>Tween</span></div></div><div class=SRResult id=SR_eBottom><div class=IEntry><a href="../files/OpenLayers/Control/ScaleLine-js.html#OpenLayers.Control.ScaleLine.eBottom" target=_parent class=I [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_easing><div class=IEntry><a href="../files/OpenLayers/Tween-js.html#OpenLayers.Tween.easing" target=_parent class=ISymbol>easing</a>, <span class=IParent>OpenLayers.<wbr>Tween</span></div></div><div class=SRResult id=SR_eBottom><div class=IEntry><a href="../files/OpenLayers/Control/ScaleLine-js.html#OpenLayers.Control.ScaleLine.eBottom" target=_parent class=I [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesF.html b/doc/devdocs/search/PropertiesF.html
index 82c35ed..66af38c 100644
--- a/doc/devdocs/search/PropertiesF.html
+++ b/doc/devdocs/search/PropertiesF.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=ISymbol>fallThrough</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.fallThrough" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.fallThrough" target=_parent class=I [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fallThrough><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fallThrough')" class=ISymbol>fallThrough</a><div class=ISubIndex><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.fallThrough" target=_parent class=IParent>OpenLayers.<wbr>Events</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.fallThrough" target=_parent class=I [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesG.html b/doc/devdocs/search/PropertiesG.html
index a5c39a7..3097ef8 100644
--- a/doc/devdocs/search/PropertiesG.html
+++ b/doc/devdocs/search/PropertiesG.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geodesic><div class=IEntry><a href="javascript:searchResults.Toggle('SR_geodesic')" class=ISymbol>geodesic</a><div class=ISubIndex><a href="../files/OpenLayers/Control/Measure-js.html#OpenLayers.Control.Measure.geodesic" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>Measure</a><a href="../files/OpenLayers/Control/Scale-js.html#OpenLayers.Control.S [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geodesic><div class=IEntry><a href="javascript:searchResults.Toggle('SR_geodesic')" class=ISymbol>geodesic</a><div class=ISubIndex><a href="../files/OpenLayers/Control/Measure-js.html#OpenLayers.Control.Measure.geodesic" target=_parent class=IParent>OpenLayers.<wbr>Control.<wbr>Measure</a><a href="../files/OpenLayers/Control/Scale-js.html#OpenLayers.Control.S [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesH.html b/doc/devdocs/search/PropertiesH.html
index 58ded17..4cd3b9e 100644
--- a/doc/devdocs/search/PropertiesH.html
+++ b/doc/devdocs/search/PropertiesH.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_handler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_handler')" class=ISymbol>handler</a><div class=ISubIndex><a href="../files/OpenLaye [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.h" target=_parent class=ISymbol>h</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_handler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_handler')" class=ISymbol>handler</a><div class=ISubIndex><a href="../files/OpenLaye [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesI.html b/doc/devdocs/search/PropertiesI.html
index 529dd53..0c28c21 100644
--- a/doc/devdocs/search/PropertiesI.html
+++ b/doc/devdocs/search/PropertiesI.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_icon><div class=IEntry><a href="javascript:searchResults.Toggle('SR_icon')" class=ISymbol>icon</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/GeoRSS-js.html#OpenLayers.Layer.GeoRSS.icon" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>GeoRSS</a><a href="../files/OpenLayers/Marker-js.html#OpenLayers.Marker.icon" target=_parent class=IParent [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_icon><div class=IEntry><a href="javascript:searchResults.Toggle('SR_icon')" class=ISymbol>icon</a><div class=ISubIndex><a href="../files/OpenLayers/Layer/GeoRSS-js.html#OpenLayers.Layer.GeoRSS.icon" target=_parent class=IParent>OpenLayers.<wbr>Layer.<wbr>GeoRSS</a><a href="../files/OpenLayers/Marker-js.html#OpenLayers.Marker.icon" target=_parent class=IParent [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesJ.html b/doc/devdocs/search/PropertiesJ.html
index bdbf8dd..4f801f6 100644
--- a/doc/devdocs/search/PropertiesJ.html
+++ b/doc/devdocs/search/PropertiesJ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jsonParser><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-js.html#OpenLayers.Protocol.SQL.Gears.jsonParser" target=_parent class=ISymbol>jsonParser</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</di [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_json><div class=IEntry><a href="../files/OpenLayers/Tile/UTFGrid-js.html#OpenLayers.Tile.UTFGrid.json" target=_parent class=ISymbol>json</a>, <span class=IParent>OpenLayers.<wbr>Tile.<wbr>UTFGrid</span></div></div><div class=SRResult id=SR_jsonParser><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.Gears.jsonParser" target=_paren [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesK.html b/doc/devdocs/search/PropertiesK.html
index 66850ee..1c61391 100644
--- a/doc/devdocs/search/PropertiesK.html
+++ b/doc/devdocs/search/PropertiesK.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keepData><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.keepData" target=_parent class=ISymbol>keepData</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_keepInMap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_keepInMap')" class=ISymbol>keepInMap</a><div class=ISubInde [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keepData><div class=IEntry><a href="../files/OpenLayers/Format-js.html#OpenLayers.Format.keepData" target=_parent class=ISymbol>keepData</a>, <span class=IParent>OpenLayers.<wbr>Format</span></div></div><div class=SRResult id=SR_keepInMap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_keepInMap')" class=ISymbol>keepInMap</a><div class=ISubInde [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesL.html b/doc/devdocs/search/PropertiesL.html
index 1d0f195..db71e44 100644
--- a/doc/devdocs/search/PropertiesL.html
+++ b/doc/devdocs/search/PropertiesL.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_labelFormat><div class=IEntry><a href="../files/OpenLayers/Control/Graticule-js.html#OpenLayers.Control.Graticule. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="../files/OpenLayers/Symbolizer/Text-js.html#OpenLayers.Symbolizer.Text.label" target=_parent class=ISymbol>label</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer.Text</span></div></div><div class=SRResult id=SR_labelFormat><div class=IEntry><a href="../files/OpenLayers/Control/Graticule-js.html#OpenLayers.Control.Graticule. [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesM.html b/doc/devdocs/search/PropertiesM.html
index 9957ee7..f4699f7 100644
--- a/doc/devdocs/search/PropertiesM.html
+++ b/doc/devdocs/search/PropertiesM.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_map><div class=IEntry><a href="javascript:searchResults.Toggle('SR_map')" class=ISymbol>map</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.map" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.map" target=_parent class=IParent>OpenLayers.<wbr>Handle [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_map><div class=IEntry><a href="javascript:searchResults.Toggle('SR_map')" class=ISymbol>map</a><div class=ISubIndex><a href="../files/OpenLayers/Control-js.html#OpenLayers.Control.map" target=_parent class=IParent>OpenLayers.<wbr>Control</a><a href="../files/OpenLayers/Handler-js.html#OpenLayers.Handler.map" target=_parent class=IParent>OpenLayers.<wbr>Handle [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesN.html b/doc/devdocs/search/PropertiesN.html
index f97ca03..dba8daa 100644
--- a/doc/devdocs/search/PropertiesN.html
+++ b/doc/devdocs/search/PropertiesN.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Format/XML/VersionedOGC-js.html#OpenLayers.Format.XML.Vers [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Function-js.html#OpenLayers.Filter.Function.name" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Function</a><a href="../files/OpenLayers/Format/XML/VersionedOGC-js.html#OpenLayers.Format.XML.Vers [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesO.html b/doc/devdocs/search/PropertiesO.html
index 84a99f8..0a5dbd6 100644
--- a/doc/devdocs/search/PropertiesO.html
+++ b/doc/devdocs/search/PropertiesO.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_object><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.object" target=_parent class=ISymbol>object</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_observers><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Event.observers" target=_parent class=ISymbol>observers [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_object><div class=IEntry><a href="../files/OpenLayers/Events-js.html#OpenLayers.Events.object" target=_parent class=ISymbol>object</a>, <span class=IParent>OpenLayers.<wbr>Events</span></div></div><div class=SRResult id=SR_observeElement><div class=IEntry><a href="javascript:searchResults.Toggle('SR_observeElement')" class=ISymbol>observeElement</a><div class [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesP.html b/doc/devdocs/search/PropertiesP.html
index fe2b2ee..e0994da 100644
--- a/doc/devdocs/search/PropertiesP.html
+++ b/doc/devdocs/search/PropertiesP.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_padding><div class=IEntry><a href="../files/OpenLayers/Popup-js.html#OpenLayers.Popup.padding" target=_parent class=ISymbol>padding</a>, <span class=IParent>OpenLayers.<wbr>Popup</span></div></div><div class=SRResult id=SR_paddingForPopups><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.paddingForPopups" target=_parent class=ISymbol> [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_padding><div class=IEntry><a href="../files/OpenLayers/Popup-js.html#OpenLayers.Popup.padding" target=_parent class=ISymbol>padding</a>, <span class=IParent>OpenLayers.<wbr>Popup</span></div></div><div class=SRResult id=SR_paddingForPopups><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.paddingForPopups" target=_parent class=ISymbol> [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesQ.html b/doc/devdocs/search/PropertiesQ.html
index 3062734..c81b892 100644
--- a/doc/devdocs/search/PropertiesQ.html
+++ b/doc/devdocs/search/PropertiesQ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Query><div class=IEntry><a href="../files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html#OpenLayers.Format.CSWGetRecords.v2_0_2.Query" target=_parent class=ISymbol>Query</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</span></div></div><div class=SRResult id=SR_queryVisible><div class=IEntry><a href="javascript:searchResults.Tog [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Query><div class=IEntry><a href="../files/OpenLayers/Format/CSWGetRecords/v2_0_2-js.html#OpenLayers.Format.CSWGetRecords.v2_0_2.Query" target=_parent class=ISymbol>Query</a>, <span class=IParent>OpenLayers.<wbr>Format.<wbr>CSWGetRecords.<wbr>v2_0_2</span></div></div><div class=SRResult id=SR_queryVisible><div class=IEntry><a href="javascript:searchResults.Tog [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesR.html b/doc/devdocs/search/PropertiesR.html
index 613975a..0c0d129 100644
--- a/doc/devdocs/search/PropertiesR.html
+++ b/doc/devdocs/search/PropertiesR.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</span></div></div><div class=SRResult id=SR_radiusHandle><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js. [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="../files/OpenLayers/Handler/RegularPolygon-js.html#OpenLayers.Handler.RegularPolygon.radius" target=_parent class=ISymbol>radius</a>, <span class=IParent>OpenLayers.<wbr>Handler.<wbr>RegularPolygon</span></div></div><div class=SRResult id=SR_radiusHandle><div class=IEntry><a href="../files/OpenLayers/Control/ModifyFeature-js. [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesS.html b/doc/devdocs/search/PropertiesS.html
index 0ee8542..637db9b 100644
--- a/doc/devdocs/search/PropertiesS.html
+++ b/doc/devdocs/search/PropertiesS.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_saveFeatureState><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL/Gears-js.html#OpenLayers.Protocol.SQL.Gears.saveFeatureState" target=_parent class=ISymbol>saveFeatureState</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</span></div></div><div class=SRResult id=SR_saveState><div class=IEntry><a href="../files/OpenLayers/Contr [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_saveFeatureState><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.Gears.saveFeatureState" target=_parent class=ISymbol>saveFeatureState</a>, <span class=IParent>OpenLayers.<wbr>Protocol.<wbr>SQL.<wbr>Gears</span></div></div><div class=SRResult id=SR_saveState><div class=IEntry><a href="../files/OpenLayers/Control/Panel-js.html#Op [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesSymbols.html b/doc/devdocs/search/PropertiesSymbols.html
index a3c9d85..30bc726 100644
--- a/doc/devdocs/search/PropertiesSymbols.html
+++ b/doc/devdocs/search/PropertiesSymbols.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__undcomplete><div class=IEntry><a href="../files/OpenLayers/Ajax-js.html#OpenLayers.Ajax.Request._complete" target=_parent class=ISymbol>_complete</a>, <span class=IParent>OpenLayers.<wbr>Ajax.<wbr>Request</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__undcomplete><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Ajax.Request._complete" target=_parent class=ISymbol>_complete</a>, <span class=IParent>OpenLayers.<wbr>Ajax.<wbr>Request</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesT.html b/doc/devdocs/search/PropertiesT.html
index 54b6c5f..2507e29 100644
--- a/doc/devdocs/search/PropertiesT.html
+++ b/doc/devdocs/search/PropertiesT.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/OpenLayers/Protocol/SQL-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_targetFilter><div class=IEntry><a href="../files/OpenLayers/Control/Split-js.html#OpenLayers.Control.Split.targ [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tableName><div class=IEntry><a href="../files/deprecated-js.html#OpenLayers.Protocol.SQL.tableName" target=_parent class=ISymbol>tableName</a>, <span class=IParent>OpenLayers.<wbr>Protocol.SQL</span></div></div><div class=SRResult id=SR_target><div class=IEntry><a href="../files/OpenLayers/Events/buttonclick-js.html#OpenLayers.Events.buttonclick.target" targe [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesU.html b/doc/devdocs/search/PropertiesU.html
index 4531f73..fb2faa2 100644
--- a/doc/devdocs/search/PropertiesU.html
+++ b/doc/devdocs/search/PropertiesU.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_units><div class=IEntry><a href="javascript:searchResults.Toggle('SR_units')" class=ISymbol>units</a><div class=ISubIndex><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.units" target=_parent class=IParent>OpenLayers.<wbr>Layer</a><a href="../files/OpenLayers/Layer/KaMap-js.html#OpenLayers.Layer.KaMap.units" target=_parent class=IParent>OpenLayers [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_units><div class=IEntry><a href="javascript:searchResults.Toggle('SR_units')" class=ISymbol>units</a><div class=ISubIndex><a href="../files/OpenLayers/Layer-js.html#OpenLayers.Layer.units" target=_parent class=IParent>OpenLayers.<wbr>Layer</a><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.units" target=_parent class=IParent>OpenLayers.Map</a></div></ [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesV.html b/doc/devdocs/search/PropertiesV.html
index 19d9beb..45bfdfe 100644
--- a/doc/devdocs/search/PropertiesV.html
+++ b/doc/devdocs/search/PropertiesV.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_value><div class=IEntry><a href="javascript:searchResults.Toggle('SR_value')" class=ISymbol>value</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Comparison-js.html#OpenLayers.Filter.Comparison.value" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Comparison</a><a href="../files/OpenLayers/Filter/Spatial-js.html#OpenLayers.Filter.Spatial [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_value><div class=IEntry><a href="javascript:searchResults.Toggle('SR_value')" class=ISymbol>value</a><div class=ISubIndex><a href="../files/OpenLayers/Filter/Comparison-js.html#OpenLayers.Filter.Comparison.value" target=_parent class=IParent>OpenLayers.<wbr>Filter.<wbr>Comparison</a><a href="../files/OpenLayers/Filter/Spatial-js.html#OpenLayers.Filter.Spatial [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesW.html b/doc/devdocs/search/PropertiesW.html
index e962467..dd2c883 100644
--- a/doc/devdocs/search/PropertiesW.html
+++ b/doc/devdocs/search/PropertiesW.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_watch><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.watch" target=_parent class=ISymbol>watch</a>, [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w><div class=IEntry><a href="../files/OpenLayers/BaseTypes/Size-js.html#OpenLayers.Size.w" target=_parent class=ISymbol>w</a>, <span class=IParent>OpenLayers.Size</span></div></div><div class=SRResult id=SR_watch><div class=IEntry><a href="../files/OpenLayers/Control/Geolocate-js.html#OpenLayers.Control.Geolocate.watch" target=_parent class=ISymbol>watch</a>, [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesX.html b/doc/devdocs/search/PropertiesX.html
index 9dd3c6c..7feaa01 100644
--- a/doc/devdocs/search/PropertiesX.html
+++ b/doc/devdocs/search/PropertiesX.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_x><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x')" class=ISymbol>x</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.x" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/OpenLayers/Geometry/Rectangle-js.html#OpenLayers.Geometry.Rectangle.x" target=_paren [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_x><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x')" class=ISymbol>x</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.x" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/deprecated-js.html#OpenLayers.Geometry.Rectangle.x" target=_parent class=IParent>Ope [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesY.html b/doc/devdocs/search/PropertiesY.html
index fddd1f8..a3eaf5f 100644
--- a/doc/devdocs/search/PropertiesY.html
+++ b/doc/devdocs/search/PropertiesY.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.y" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/OpenLayers/Geometry/Rectangle-js.html#OpenLayers.Geometry.Rectangle.y" target=_paren [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.y" target=_parent class=IParent>OpenLayers.<wbr>Geometry.<wbr>Point</a><a href="../files/deprecated-js.html#OpenLayers.Geometry.Rectangle.y" target=_parent class=IParent>Ope [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/devdocs/search/PropertiesZ.html b/doc/devdocs/search/PropertiesZ.html
index b596c69..ce7231d 100644
--- a/doc/devdocs/search/PropertiesZ.html
+++ b/doc/devdocs/search/PropertiesZ.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 
 
 
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zIndex><div class=IEntry><a href="../files/OpenLayers/Symbolizer-js.html#OpenLayers.Symbolizer.zIndex" target=_parent class=ISymbol>zIndex</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/OpenLayers/Map-js.html#OpenLayers.Map.zoom" target=_parent class=ISymbol>zoom</a>, <s [...]
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zIndex><div class=IEntry><a href="../files/OpenLayers/Symbolizer-js.html#OpenLayers.Symbolizer.zIndex" target=_parent class=ISymbol>zIndex</a>, <span class=IParent>OpenLayers.<wbr>Symbolizer</span></div></div><div class=SRResult id=SR_zoom><div class=IEntry><a href="javascript:searchResults.Toggle('SR_zoom')" class=ISymbol>zoom</a><div class=ISubIndex><a href [...]
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
 var searchResults = new SearchResults("searchResults", "HTML");
diff --git a/doc/readme.txt b/doc/readme.txt
deleted file mode 100644
index d02540a..0000000
--- a/doc/readme.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Automatically generated OpenLayers API documentation is online:
-
-  http://dev.openlayers.org/apidocs
-
-More information on documentation is available from:
-
-  http://trac.openlayers.org/wiki/Documentation
diff --git a/doc/walkthru.html b/doc/walkthru.html
deleted file mode 100644
index b135e63..0000000
--- a/doc/walkthru.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<html>
-<head>
-<title>OpenLayers examples walkthrough</title>
-<style type="text/css">
-    a { color:blue; text-decoration: none; }
-    a:hover { text-decoration: underline; }
-</style>
-<base href="http://openlayers.org/dev/examples/">
-</head>
-<body style="font-family: sans-serif">
-<h1><pre style="font-size: larger"><ol></pre></h1>
-<p>API documentation: <a href="http://dev.openlayers.org/docs/">http://dev.openlayers.org/docs/</a></p>
-<p>Examples: <a href="http://dev.openlayers.org/examples/">http://openlayers.org/dev/examples/</a></p>
-<h2>Maps</h2>
-<ol>
-    <li><a href="../examples/lite.html">Basic example</a></li>
-    <li><a href="../examples/layerswitcher.html">Layer switcher (aka legend)</a></li>
-    <li><a href="../examples/example.html">Base layers versus overlays</a></li>
-    <li><a href="../examples/multiserver.html">Multiple WMS mirrors</a></li>
-    <li><a href="../examples/fullScreen.html">Full screen map</a></li>
-    <li><a href="../examples/wrapDateLine.html">Wrapping the date line</a></li>
-    <li><a href="../examples/projected-map.html">Other cartographic projections</a></li>
-    <li><a href="../examples/layer-opacity.html">Translucent overlays</a></li>
-</ol>
-
-<h2>Raster Layers</h2>
-<ol>
-    <li><a href="../examples/wms-untiled.html">Untiled WMS layer</a></li>
-    <li><a href="../examples/kamap.html">Ka-Map layer</a></li>
-    <li><a href="../examples/mapserver.html">MapServer layer</a></li>
-    <li><a href="../examples/worldwind.html">Worldwind layer</a></li>
-    <li><a href="../examples/tms.html">TMS layer</a></li>
-    <li><a href="../examples/image-layer.html">Image layer</a></li>
-    <li><a href="../examples/google.html">Google layer</a></li>
-    <li><a href="../examples/ve.html">VirtualEarth layer</a></li>
-    <li><a href="../examples/spherical-mercator.html">Spherical Mercator ("EPSG:900913")</a></li>
-    <li><a href="http://tilecache.org/">TileCache</a></li>
-</ol>
-
-<h2>Marker Layers</h2>
-<ol>
-    <li><a href="../examples/markers.html">Markers</a></li>
-    <li><a href="../examples/markerResize.html">Changing marker properties dynamically</a></li>
-    <li><a href="../examples/popups.html">Popups</a></li>
-    <li><a href="../examples/georss.html">GeoRSS</a> (<a href="georss.xml">example data</a>)</a></li>
-    <li><a href="../examples/georss-markers.html">GeoRSS with custom markers</a></li>
-    <li><a href="../examples/wfs.html">Point layer from WFS</a></li>
-    <li><a href="../examples/getfeatureinfo.html">WFS GetFeatureInfo example</a></li>
-</ol>
-
-<h2>Events and Controls</h2>
-<ol>
-    <li><a href="../examples/navtoolbar.html">Navigation tools on the map</a></li>
-    <li><a href="../examples/navtoolbar-outsidemap.html">Navigation toolbar off the map</a></li>
-    <li><a href="../examples/mouse-position.html">Tracking the mouse position</a></li>
-    <li><a href="../examples/overview.html">Overview map</a></li>
-    <li><a href="../examples/attribution.html">Layer attribution</a></li>
-    <li><a href="../examples/controls.html">Full range of controls</a></li>
-    <li><a href="../examples/custom-control.html">Custom controls #1</a></li>
-    <li><a href="../examples/custom-control.html">Custom controls #2</a></li>
-    <li><a href="../examples/custom-style.html">Custom control styles</a></li>
-    <li><a href="../examples/click.html">Trapping click events</a></li>
-    <li><a href="../examples/layerLoadMonitoring.html">Tracking map events</a></li>
-</ol>
-
-<h2>Vector Layers</h2>
-<ol>
-    <li><a href="../examples/vector-features.html">Generating features in JavaScript</a></li>
-    <li><a href="../examples/gml-layer.html">Loading features from GML</a></li>
-    <li><a href="../examples/kml-layer.html">Loading features from KML</a></li>
-    <li><a href="../examples/gml-serialize.html">Serializing features to GML</a></li>
-    <li><a href="../examples/vector-formats.html">Serializing to other formats</a></li>
-    <li><a href="../examples/select-feature.html">Selecting features</a></li>
-    <li><a href="../examples/select-feature-openpopup.html">Attaching popups to features</a></li>
-</ol>
-
-<h2>Editing Tools</h2>
-<ol>
-    <li><a href="../examples/draw-feature.html">Drawing features</a></li>
-    <li><a href="../examples/editingtoolbar.html">Editing toolbar</a> (<a href="editingtoolbar-outside.html">outside the map</a>)</li>
-    <li><a href="../examples/regular-polygons.html">Creating regular polygons</a></li>
-    <li><a href="../examples/modify-feature.html">Modifying features</a></li>
-    <li><a href="../examples/resize-features.html">Resizing features</a></li>
-    <li><a href="../examples/rotate-features.html">Rotating features</a></li>
-    <li><a href="../examples/wfs-t.html">Transactional WFS example</a></li>
-    <li><a href="http://featureserver.org/">FeatureServer</a></li>
-</ol>
-
-<h2>Testing</h2>
-<ol>
-    <li><a href="../tests/run-tests.html">Test.AnotherWay suite</a></li>
-</ol>
-
-<h1><pre style="font-size: larger"></ol></pre></h1>
-</body>
-</html>
diff --git a/doc_config/Data/ClassHierarchy.nd b/doc_config/Data/ClassHierarchy.nd
index 11ddf9f..0cb6547 100644
Binary files a/doc_config/Data/ClassHierarchy.nd and b/doc_config/Data/ClassHierarchy.nd differ
diff --git a/doc_config/Data/ConfigFileInfo.nd b/doc_config/Data/ConfigFileInfo.nd
index 3c05ca5..37c0092 100644
Binary files a/doc_config/Data/ConfigFileInfo.nd and b/doc_config/Data/ConfigFileInfo.nd differ
diff --git a/doc_config/Data/FileInfo.nd b/doc_config/Data/FileInfo.nd
index e2d9524..4c8d2b1 100644
--- a/doc_config/Data/FileInfo.nd
+++ b/doc_config/Data/FileInfo.nd
@@ -1,317 +1,313 @@
 1.52
 JavaScript
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js	1308251785	1	OpenLayers.Format.CSWGetRecords.v2_0_2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Vector/RootContainer.js	1294069180	1	OpenLayers.Layer.Vector.RootContainer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Graticule.js	1308946332	1	OpenLayers.Control.Graticule
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/OverviewMap.js	1298622650	1	OpenLayers.Control.OverviewMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Style2.js	1294249365	1	OpenLayers.Style2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Pixel.js	1298640899	1	OpenLayers.Pixel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML/v2.js	1308251785	1	OpenLayers.Format.GML.v2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebug.js	1202500315	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebug.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMS.js	1309678404	1	OpenLayers.Layer.WMS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomBox.js	1294069180	1	OpenLayers.Control.ZoomBox
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Feature/Vector.js	1309774702	1	OpenLayers.Feature.Vector
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Icon.js	1294249365	1	OpenLayers.Icon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/it.js	1312531137	1	OpenLayers.Lang["it"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC/v1_0_0.js	1302127591	1	OpenLayers.Format.WMC.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/MousePosition.js	1299508428	1	OpenLayers.Control.MousePosition
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/ArcXML/Features.js	1294069180	1	OpenLayers.Format.ArcXML.Features
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/SVG.js	1307358131	1	OpenLayers.Renderer.SVG
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Logical.js	1294069180	1	OpenLayers.Filter.Logical
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Color.js	1299496812	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Color.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/FixedZoomLevels.js	1308424314	1	OpenLayers.Layer.FixedZoomLevels
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetRecords.js	1309411359	1	OpenLayers.Format.CSWGetRecords
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes.js	1312381930	1	OpenLayers Base Types
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google/v3.js	1315064268	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google/v3.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/br.js	1312531137	1	OpenLayers.Lang["br"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XML.js	1308425609	1	OpenLayers.Format.XML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Style.js	1302201931	1	OpenLayers.Style
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomPanel.js	1294069180	1	OpenLayers.Control.ZoomPanel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/GML.js	1294069180	1	OpenLayers.Layer.GML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SOS.js	1294069180	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SOS.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WKT.js	1310056862	1	OpenLayers.Format.WKT
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC/v1.js	1308251785	1	OpenLayers.Format.WMC.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/FeatureId.js	1301424567	1	OpenLayers.Filter.FeatureId
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SQL.js	1294069180	1	OpenLayers.Protocol.SQL
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Button.js	1294069180	1	OpenLayers.Control.Button
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/LonLat.js	1311932195	1	OpenLayers.LonLat
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PanZoomBar.js	1301400326	1	OpenLayers.Control.PanZoomBar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomIn.js	1294069180	1	OpenLayers.Control.ZoomIn
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/VirtualEarth.js	1298644074	1	OpenLayers.Layer.VirtualEarth
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy.js	1294249365	1	OpenLayers.Strategy
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ru.js	1312531137	1	OpenLayers.Lang["ru"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/en.js	1312531137	1	OpenLayers.Lang["en"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter.js	1309858954	1	OpenLayers.Format.Filter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tween.js	1294249365	1	OpenLayers.Tween
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Element.js	1298880356	1	OpenLayers.Element
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Cluster.js	1299509306	1	OpenLayers.Strategy.Cluster
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Polygon.js	1294069180	1	OpenLayers.Symbolizer.Polygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/MouseDefaults.js	1301834834	1	OpenLayers.Control.MouseDefaults
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/SelectFeature.js	1311932729	1	OpenLayers.Control.SelectFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML/v3.js	1310738859	1	OpenLayers.Format.GML.v3
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/AnchoredBubble.js	1294249365	1	OpenLayers.Popup.AnchoredBubble
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1.js	1294069180	1	OpenLayers.Format.WMSCapabilities.v1_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetDomain.js	1309411359	1	OpenLayers.Format.CSWGetDomain
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/TransformFeature.js	1304926617	1	OpenLayers.Control.TransformFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/KeyboardDefaults.js	1299601896	1	OpenLayers.Control.KeyboardDefaults
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CQL.js	1296256510	1	OpenLayers.Format.CQL
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Line.js	1294069180	1	OpenLayers.Symbolizer.Line
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Text.js	1294069180	1	OpenLayers.Symbolizer.Text
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/KML.js	1312811516	1	OpenLayers.Format.KML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/da-DK.js	1312531137	1	OpenLayers.Lang["da-DK"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Kinetic.js	1298463233	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Kinetic.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomOut.js	1294069180	1	OpenLayers.Control.ZoomOut
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSExecute.js	1308756001	1	OpenLayers.Format.WPSExecute version 1.0.0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Date.js	1312382120	1	OpenLayers.Date
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/te.js	1308946332	1	OpenLayers.Lang["te"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/vi.js	1312531137	1	OpenLayers.Lang["vi"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/lt.js	1312531137	1	OpenLayers.Lang["lt"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Save.js	1294069180	1	OpenLayers.Strategy.Save
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST.js	1294069180	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSGetFeatureInfo.js	1301391847	1	OpenLayers.Format.WMSGetFeatureInfo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter/v1_0_0.js	1309341217	1	OpenLayers.Format.Filter.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/el.js	1308946332	1	OpenLayers.Lang["el"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/NG.js	1310404035	1	OpenLayers.Renderer.NG
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/HTTPRequest.js	1314228754	1	OpenLayers.Layer.HTTPRequest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/es.js	1312531137	1	OpenLayers.Lang["es"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WCSGetCoverage.js	1309883200	1	OpenLayers.Format.WCSGetCoverage version 1.1.0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol.js	1307725942	1	OpenLayers.Protocol
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Point.js	1294069180	1	OpenLayers.Symbolizer.Point
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/id.js	1312531137	1	OpenLayers.Lang["id"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_3.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_3
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSDescribeFeatureType.js	1299507212	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSDescribeFeatureType.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMTS.js	1308251785	1	OpenLayers.Layer.WMTS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/Image.js	1308251785	1	OpenLayers.Tile.Image
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/fr.js	1312531137	1	OpenLayers.Lang["fr"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Spatial.js	1294069180	1	OpenLayers.Filter.Spatial
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/sk.js	1312531137	1	OpenLayers.Lang["sk"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Point.js	1309812492	1	OpenLayers.Handler.Point
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/EventPane.js	1307100529	1	OpenLayers.Layer.EventPane
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/gsw.js	1312531137	1	OpenLayers.Lang["gsw"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Projection.js	1298881158	1	OpenLayers.Projection
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Atom.js	1308251785	1	OpenLayers.Format.Atom
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML.js	1308251785	1	OpenLayers.Format.GML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang.js	1294249365	1	OpenLayers.Lang
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Curve.js	1294069180	1	OpenLayers.Geometry.Curve
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/TouchNavigation.js	1308724245	1	OpenLayers.Control.TouchNavigation
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js	1299507212	1	OpenLayers.Format.SOSGetFeatureOfInterest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Drag.js	1301834834	1	OpenLayers.Handler.Drag
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/JSON.js	1299507212	1	OpenLayers.Format.JSON
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Markers.js	1312965697	1	OpenLayers.Layer.Markers
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SQL/Gears.js	1308251785	1	OpenLayers.Protocol.SQL.Gears
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Navigation.js	1304929715	1	OpenLayers.Control.Navigation
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST/v1_0_0.js	1309341217	1	OpenLayers.Format.WFST.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Request.js	1300366897	1	OpenLayers.Request
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/fi.js	1312530680	1	OpenLayers.Lang["fi"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer.js	1312965697	1	OpenLayers.Layer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Grid.js	1309811687	1	OpenLayers.Layer.Grid
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/bg.js	1308946332	1	OpenLayers.Lang["bg"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Feature/WFS.js	1294069180	1	OpenLayers.Feature.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js	1298013267	1	OpenLayers.Format.WMTSCapabilities.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcIMS.js	1298880725	1	OpenLayers.Layer.ArcIMS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFS.js	1294069180	1	OpenLayers.Format.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/is.js	1312530680	1	OpenLayers.Lang["is"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers.js	1315754186	1	OpenLayers
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/QueryStringFilter.js	1301426533	1	OpenLayers.Format.QueryStringFilter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Comparison.js	1302031403	1	OpenLayers.Filter.Comparison
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SLD/v1.js	1308251785	1	OpenLayers.Format.SLD.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Rule.js	1294249365	1	OpenLayers.Rule
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/TMS.js	1309390224	1	OpenLayers.Layer.TMS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MapGuide.js	1309678404	1	OpenLayers.Layer.MapGuide
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Events.js	1305100940	1	OpenLayers.Event
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities.js	1309858954	1	OpenLayers.Format.WMSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMS/Post.js	1294069180	1	OpenLayers.Layer.WMS.Post
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS/v1_0_0.js	1294069180	1	OpenLayers.Protocol.WFS.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Polygon.js	1294069180	1	OpenLayers.Geometry.Polygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MultiMap.js	1297862474	1	OpenLayers.Layer.MultiMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/WMSGetFeatureInfo.js	1308251785	1	OpenLayers.Control.WMSGetFeatureInfo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Marker.js	1294249365	1	OpenLayers.Marker
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GeoRSS.js	1308251785	1	OpenLayers.Format.GeoRSS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/HTTP.js	1302158978	1	OpenLayers.Protocol.HTTP
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/gl.js	1312531137	1	OpenLayers.Lang["gl"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/fur.js	1308946332	1	OpenLayers.Lang["fur"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSCapabilities.js	1309858954	1	OpenLayers.Format.SOSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Surface.js	1294069180	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Surface.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/BBOX.js	1308939709	1	OpenLayers.Strategy.BBOX
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XML/VersionedOGC.js	1309858954	1	OpenLayers.Format.XML.VersionedOGC
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nds.js	1312531137	1	OpenLayers.Lang["nds"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSGetObservation.js	1299507212	1	OpenLayers.Format.SOSGetObservation
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nb.js	1312531137	1	OpenLayers.Lang["nb"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/Anchored.js	1294069180	1	OpenLayers.Popup.Anchored
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Image.js	1294069180	1	OpenLayers.Layer.Image
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/Script.js	1314228754	1	OpenLayers.Protocol.Script
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Polygon.js	1308337156	1	OpenLayers.Handler.Polygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/pt-BR.js	1312531137	1	OpenLayers.Lang["pt-br"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Paging.js	1299509306	1	OpenLayers.Strategy.Paging
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Feature.js	1301494633	1	OpenLayers.Feature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/WFS.js	1294069180	1	OpenLayers.Tile.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Bing.js	1308722650	1	OpenLayers.Layer.Bing
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XLS/v1_1_0.js	1301493331	1	OpenLayers.Format.XLS.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/MultiPoint.js	1294069180	1	OpenLayers.Geometry.MultiPoint
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ar.js	1308946332	1	OpenLayers.Lang["ar"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/SOS/v1_0_0.js	1294069180	1	OpenLayers.Protocol.SOS.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/LineString.js	1308337156	1	OpenLayers.Geometry.LineString
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ja.js	1312531137	1	OpenLayers.Lang["ja"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/DrawFeature.js	1308337156	1	OpenLayers.Control.DrawFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/Image/IFrame.js	1308652107	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile/Image/IFrame.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSCapabilities.js	1309858954	1	OpenLayers.Format.WPSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/readme.txt	1181603869	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/readme.txt
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js	1299601176	1	OpenLayers.Format.WFSCapabilities/v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/Elements.js	1307086062	1	OpenLayers.ElementsIndexer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/hsb.js	1312531137	1	OpenLayers.Lang["hsb"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Refresh.js	1299509306	1	OpenLayers.Strategy.Refresh
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Util.js	1312810994	1	Util
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MapServer.js	1309678404	1	OpenLayers.Layer.MapServer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/VML.js	1307358131	1	OpenLayers.Renderer.VML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GPX.js	1298881158	1	OpenLayers.Format.GPX
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nl.js	1312531137	1	OpenLayers.Lang["nl"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/NavToolbar.js	1305011357	1	OpenLayers.Control.NavToolbar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/km.js	1308946332	1	OpenLayers.Lang["km"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/oc.js	1312531137	1	OpenLayers.Lang["oc"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/SingleFile.js	1315754186	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/SingleFile.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Yahoo.js	1294069180	1	OpenLayers.Layer.Yahoo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js	1294069180	1	OpenLayers.Format.WMSDescribeLayer.v1_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_1_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	1307725942	1	OpenLayers.Format.OWSCommon.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control.js	1310668608	1	OpenLayers.Control
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Class.js	1312807427	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Class.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon.js	1309858954	1	OpenLayers.Format.OWSCommon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Snapping.js	1298881158	1	OpenLayers.Control.Snapping
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ZoomToMaxExtent.js	1294069180	1	OpenLayers.Control.ZoomToMaxExtent
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Geolocate.js	1298623948	1	OpenLayers.Control.Geolocate
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ModifyFeature.js	1314228754	1	OpenLayers.Control.ModifyFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer/Raster.js	1294069180	1	OpenLayers.Symbolizer.Raster
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter/Function.js	1300376848	1	OpenLayers.Filter.Function
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Pan.js	1296658857	1	OpenLayers.Control.Pan
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/Canvas.js	1312386426	1	OpenLayers.Renderer.Canvas
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ca.js	1312531137	1	OpenLayers.Lang["ca"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Marker/Box.js	1294069180	1	OpenLayers.Marker.Box
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WFS.js	1312965697	1	OpenLayers.Layer.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/MultiLineString.js	1294069180	1	OpenLayers.Geometry.MultiLineString
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup.js	1311666540	1	OpenLayers.Popup
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/MultiPolygon.js	1294069180	1	OpenLayers.Geometry.MultiPolygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Permalink.js	1308946332	1	OpenLayers.Control.Permalink
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SLD.js	1309858954	1	OpenLayers.Format.SLD
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/LinearRing.js	1308337156	1	OpenLayers.Geometry.LinearRing
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Boxes.js	1294069180	1	OpenLayers.Layer.Boxes
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/GeoRSS.js	1294069180	1	OpenLayers.Layer.GeoRSS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGIS93Rest.js	1298880725	1	OpenLayers.Layer.ArcGIS93Rest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Feature.js	1308722650	1	OpenLayers.Handler.Feature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GeoJSON.js	1308556072	1	OpenLayers.Format.GeoJSON
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry.js	1308251785	1	OpenLayers.Geometry
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Measure.js	1298538049	1	OpenLayers.Control.Measure
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Map.js	1314228754	1	OpenLayers.Map
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS/v1.js	1312809779	1	OpenLayers.Protocol.WFS.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/FramedCloud.js	1294249365	1	OpenLayers.Popup.FramedCloud
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/hu.js	1312531137	1	OpenLayers.Lang["hu"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PanZoom.js	1299474171	1	OpenLayers.Control.PanZoom
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Point.js	1294069180	1	OpenLayers.Geometry.Point
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/KaMap.js	1299623293	1	OpenLayers.Layer.KaMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/ArcXML.js	1308251785	1	OpenLayers.Format.ArcXML
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ScaleLine.js	1299508428	1	OpenLayers.Control.ScaleLine
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	1308736475	1	OpenLayers.Format.OWSCommon.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/DragPan.js	1306760116	1	OpenLayers.Control.DragPan
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Collection.js	1308337156	1	OpenLayers.Geometry.Collection
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/SLDSelect.js	1300797041	1	OpenLayers.Control.SLDSelect
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Vector.js	1311599626	1	OpenLayers.Layer.Vector
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMTSCapabilities.js	1309858954	1	OpenLayers.Format.WMTSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/nn.js	1308946332	1	OpenLayers.Lang["nn"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer.js	1308251785	1	OpenLayers.Renderer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSDescribeProcess.js	1314228754	1	OpenLayers.Format.WPSDescribeProcess
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js	1294069180	1	OpenLayers.Format.SOSCapabilities.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Corner.js	1294249365	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Rico/Corner.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/zh-CN.js	1312531137	1	OpenLayers.Lang["zh-CN"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Split.js	1298881158	1	OpenLayers.Control.Split
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter/v1_1_0.js	1309341217	1	OpenLayers.Format.Filter.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Path.js	1308337156	1	OpenLayers.Handler.Path
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC/v1_1_0.js	1301937314	1	OpenLayers.Format.WMC.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/TileCache.js	1308251785	1	OpenLayers.Layer.TileCache
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Box.js	1307360630	1	OpenLayers.Handler.Box
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js	1308251785	1	OpenLayers.Format.CSWGetDomain.v2_0_2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Filter/v1.js	1301649071	1	OpenLayers.Format.Filter.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Panel.js	1308251785	1	OpenLayers.Control.Panel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/MouseToolbar.js	1301834834	1	OpenLayers.Control.MouseToolbar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PanPanel.js	1296658857	1	OpenLayers.Control.PanPanel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Text.js	1294069180	1	OpenLayers.Format.Text
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Text.js	1294069180	1	OpenLayers.Layer.Text
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OGCExceptionReport.js	1309870390	1	OpenLayers.Format.OGCExceptionReport
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Click.js	1311766593	1	OpenLayers.Handler.Click
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/StyleMap.js	1294249365	1	OpenLayers.StyleMap
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/SLD/v1_0_0.js	1294069180	1	OpenLayers.Format.SLD.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGISCache.js	1314228754	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/ArcGISCache.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler.js	1294249365	1	OpenLayers.Handler
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/MapServer/Untiled.js	1294069180	1	OpenLayers.Layer.MapServer.Untiled
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/SphericalMercator.js	1297689039	1	OpenLayers.Layer.SphericalMercator
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/DragFeature.js	1311451922	1	OpenLayers.Control.DragFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/ArgParser.js	1299508428	1	OpenLayers.Control.ArgParser
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/KaMapCache.js	1308251785	1	OpenLayers.Layer.KaMapCache
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XLS/v1.js	1308251785	1	OpenLayers.Format.XLS.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSDescribeLayer.js	1309858954	1	OpenLayers.Format.WMSDescribeLayer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WorldWind.js	1311948039	1	OpenLayers.Layer.WorldWind
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/GetFeature.js	1308251785	1	OpenLayers.Control.GetFeature
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/EditingToolbar.js	1305011357	1	OpenLayers.Control.EditingToolbar
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/cs-CZ.js	1312531137	1	OpenLayers.Lang["cs-CZ"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Bounds.js	1311932195	1	OpenLayers.Bounds
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSContext/v0_3_1.js	1308251785	1	OpenLayers.Format.OWSContext.v0_3_1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js	1294069180	1	OpenLayers.Format.WMSCapabilities/v1_3_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Pinch.js	1311766593	1	OpenLayers.Handler.Pinch
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Filter.js	1294249365	1	OpenLayers.Filter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST/v1.js	1311602460	1	OpenLayers.Format.WFST.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Geometry/Rectangle.js	1298881158	1	OpenLayers.Geometry.Rectangle
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities.js	1309858954	1	OpenLayers.Format.WFSCapabilities
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Tile.js	1312788666	1	OpenLayers.Tile
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Ajax.js	1312386914	1	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Ajax.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Fixed.js	1299509306	1	OpenLayers.Strategy.Fixed
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/pt.js	1312531137	1	OpenLayers.Lang["pt"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Scale.js	1308946332	1	OpenLayers.Control.Scale
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/GML/Base.js	1310738859	1	OpenLayers.Format.GML.Base
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OSM.js	1308251785	1	OpenLayers.Format.OSM
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js	1304495335	1	OpenLayers.Format.WFSCapabilities/v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Popup/Framed.js	1294069180	1	OpenLayers.Popup.Framed
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/XYZ.js	1308251785	1	OpenLayers.Layer.XYZ
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Gears/gears_init.js	1221231425	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Gears/gears_init.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/en-CA.js	1283310391	1	OpenLayers.Lang["en-CA"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/XLS.js	1309858954	1	OpenLayers.Format.XLS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/BaseTypes/Size.js	1311932282	1	OpenLayers.Size
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Hover.js	1301834834	1	OpenLayers.Handler.Hover
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSContext.js	1309858954	1	OpenLayers.Format.OWSContext
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Request/XMLHttpRequest.js	1292235246	1	OpenLayers.Request.XMLHttpRequest
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/RegularPolygon.js	1308689633	1	OpenLayers.Handler.RegularPolygon
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/io.js	1308946332	1	OpenLayers.Lang["io"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/MouseWheel.js	1294069180	1	OpenLayers.Handler.MouseWheel
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/LayerSwitcher.js	1308946332	1	OpenLayers.Control.LayerSwitcher
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/be-tarask.js	1312531137	1	OpenLayers.Lang["be-tarask"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/zh-TW.js	1312531137	1	OpenLayers.Lang["zh-TW"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS.js	1312809779	1	OpenLayers.Protocol.WFS
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Symbolizer.js	1294249365	1	OpenLayers.Symbolizer
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Strategy/Filter.js	1301516364	1	OpenLayers.Strategy.Filter
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/PinchZoom.js	1299808406	1	OpenLayers.Control.PinchZoom
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFST/v1_1_0.js	1309341217	1	OpenLayers.Format.WFST.v1_1_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/PointTrack.js	1300801558	1	OpenLayers.Layer.PointTrack
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/Context.js	1309858954	1	OpenLayers.Format.Context
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/de.js	1312531137	1	OpenLayers.Lang["de"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/PointGrid.js	1308334720	1	OpenLayers.Layer.PointGrid
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/hr.js	1312531137	1	OpenLayers.Lang["hr"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1.js	1312779036	1	OpenLayers.Format.WMSCapabilities.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ia.js	1312531137	1	OpenLayers.Lang["ia"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebugx.js	1298652019	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/firebugx.js
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/sv-SE.js	1312531137	1	OpenLayers.Lang["sv"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Zoomify.js	1308251785	1	OpenLayers.Layer.Zoomify
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/OWSCommon/v1.js	1308736475	1	OpenLayers.Format.OWSCommon.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Handler/Keyboard.js	1294069180	1	OpenLayers.handler.Keyboard
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/NavigationHistory.js	1294069180	1	OpenLayers.Control.NavigationHistory
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/WMS/Untiled.js	1294069180	1	OpenLayers.Layer.WMS.Untiled
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Lang/ksh.js	1312531137	1	OpenLayers.Lang["ksh"]
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/WMTSGetFeatureInfo.js	1308251785	1	OpenLayers.Control.WMTSGetFeatureInfo
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js	1295873033	1	OpenLayers.Format.WMSCapabilities/v1_1_1_WMSC
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Renderer/SVG2.js	1310404035	1	OpenLayers.Renderer.SVG2
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format.js	1294249365	1	OpenLayers.Format
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Console.js	1298881158	1	OpenLayers.Console
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/license.txt	1181603869	0	/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/Firebug/license.txt
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js	1308736475	1	OpenLayers.Format.WPSCapabilities.v1_0_0
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Layer/Google.js	1294069180	1	OpenLayers.Layer.Google
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WFSCapabilities/v1.js	1294069180	1	OpenLayers.Format.WFSCapabilities.v1
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Format/WMC.js	1309858954	1	OpenLayers.Format.WMC
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Control/Attribution.js	1299508428	1	OpenLayers.Control.Attribution
-/home/crschmidt/openlayers/tools/OpenLayers-2.11/lib/OpenLayers/Protocol/WFS/v1_1_0.js	1294069180	1	OpenLayers.Protocol.WFS.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/MultiLineString.js	1340830591	1	OpenLayers.Geometry.MultiLineString
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/cs-CZ.js	1340830591	1	OpenLayers.Lang["cs-CZ"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Pan.js	1340830591	1	OpenLayers.Control.Pan
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/KaMap.js	1340830591	1	OpenLayers.Layer.KaMap
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Scale.js	1340830591	1	OpenLayers.Control.Scale
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/FixedZoomLevels.js	1340830591	1	OpenLayers.Layer.FixedZoomLevels
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/SelectFeature.js	1340830591	1	OpenLayers.Control.SelectFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.WPSCapabilities.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ModifyFeature.js	1340830591	1	OpenLayers.Control.ModifyFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tween.js	1340830591	1	OpenLayers.Tween
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Style.js	1340830591	1	OpenLayers.Style
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD.js	1340830591	1	OpenLayers.Format.SLD
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/Framed.js	1340830591	1	OpenLayers.Popup.Framed
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Marker/Box.js	1340830591	1	OpenLayers.Marker.Box
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1.js	1340830591	1	OpenLayers.Format.WMSCapabilities.v1_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetDomain.js	1340830591	1	OpenLayers.Format.CSWGetDomain
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy.js	1340830591	1	OpenLayers.Strategy
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS/v1.js	1340830591	1	OpenLayers.Protocol.WFS.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/HTTPRequest.js	1340830591	1	OpenLayers.Layer.HTTPRequest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Geolocate.js	1340830591	1	OpenLayers.Control.Geolocate
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup.js	1340830591	1	OpenLayers.Popup
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/HTTP.js	1340830591	1	OpenLayers.Protocol.HTTP
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/zh-CN.js	1340830591	1	OpenLayers.Lang["zh-CN"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/CSW.js	1340830591	1	OpenLayers.Protocol.CSW
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/DragPan.js	1340830591	1	OpenLayers.Control.DragPan
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Events/buttonclick.js	1340830591	1	OpenLayers.Events.buttonclick
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.WMTSCapabilities.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format.js	1340830591	1	OpenLayers.Format
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GeoJSON.js	1340830591	1	OpenLayers.Format.GeoJSON
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/gl.js	1340830591	1	OpenLayers.Lang["gl"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/QueryStringFilter.js	1340830591	1	OpenLayers.Format.QueryStringFilter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Keyboard.js	1340830591	1	OpenLayers.handler.Keyboard
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ca.js	1340830591	1	OpenLayers.Lang["ca"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/OverviewMap.js	1340830591	1	OpenLayers.Control.OverviewMap
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSCapabilities.js	1340830591	1	OpenLayers.Format.SOSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control.js	1340830591	1	OpenLayers.Control
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST/v1_1_0.js	1340830591	1	OpenLayers.Format.WFST.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/PointTrack.js	1340830591	1	OpenLayers.Layer.PointTrack
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/Elements.js	1340830591	1	OpenLayers.ElementsIndexer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Icon.js	1340830591	1	OpenLayers.Icon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/WMTS.js	1340830591	1	OpenLayers.Layer.WMTS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Path.js	1340830591	1	OpenLayers.Handler.Path
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/TMS.js	1340830591	1	OpenLayers.Layer.TMS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGISCache.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGISCache.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nl.js	1340830591	1	OpenLayers.Lang["nl"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OGCExceptionReport.js	1340830591	1	OpenLayers.Format.OGCExceptionReport
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Grid.js	1340830591	1	OpenLayers.Layer.Grid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/SOS.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/SOS.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ru.js	1340830591	1	OpenLayers.Lang["ru"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1.js	1340830591	1	OpenLayers.Format.WMSCapabilities.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon/v1.js	1340830591	1	OpenLayers.Format.OWSCommon.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/Image.js	1340830591	1	OpenLayers.Tile.Image
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomPanel.js	1340830591	1	OpenLayers.Control.ZoomPanel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/da-DK.js	1340830591	1	OpenLayers.Lang["da-DK"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS.js	1340830591	1	OpenLayers.Protocol.WFS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/NavigationHistory.js	1340830591	1	OpenLayers.Control.NavigationHistory
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Boxes.js	1340830591	1	OpenLayers.Layer.Boxes
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/MousePosition.js	1340830591	1	OpenLayers.Control.MousePosition
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC.js	1340830591	1	OpenLayers.Format.WMC
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	1340830591	1	OpenLayers.Format.OWSCommon.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/Image/IFrame.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/Image/IFrame.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/Anchored.js	1340830591	1	OpenLayers.Popup.Anchored
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS/v1_1_0.js	1340830591	1	OpenLayers.Protocol.WFS.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ScaleLine.js	1340830591	1	OpenLayers.Control.ScaleLine
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Bounds.js	1340830591	1	OpenLayers.Bounds
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Save.js	1340830591	1	OpenLayers.Strategy.Save
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/vi.js	1340830591	1	OpenLayers.Lang["vi"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Snapping.js	1340830591	1	OpenLayers.Control.Snapping
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang.js	1340830591	1	OpenLayers.Lang
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon.js	1340830591	1	OpenLayers.Format.OWSCommon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/es.js	1340830591	1	OpenLayers.Lang["es"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Events.js	1340830591	1	OpenLayers.Event
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers.js	1340830591	1	OpenLayers
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/PointGrid.js	1340830591	1	OpenLayers.Layer.PointGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/SphericalMercator.js	1340830591	1	OpenLayers.Layer.SphericalMercator
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/bg.js	1340830591	1	OpenLayers.Lang["bg"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSContext/v0_3_1.js	1340830591	1	OpenLayers.Format.OWSContext.v0_3_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Vector.js	1340830591	1	OpenLayers.Layer.Vector
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_3.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_3
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PanZoom.js	1340830591	1	OpenLayers.Control.PanZoom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD/v1.js	1340830591	1	OpenLayers.Format.SLD.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/WFS/v1_0_0.js	1340830591	1	OpenLayers.Protocol.WFS.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/fur.js	1340830591	1	OpenLayers.Lang["fur"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/de.js	1340830591	1	OpenLayers.Lang["de"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/GetFeature.js	1340830591	1	OpenLayers.Control.GetFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFS.js	1340830591	1	OpenLayers.Format.WFS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Attribution.js	1340830591	1	OpenLayers.Control.Attribution
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities.js	1340830591	1	OpenLayers.Format.WFSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomOut.js	1340830591	1	OpenLayers.Control.ZoomOut
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes.js	1340830591	1	OpenLayers Base Types
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/TransformFeature.js	1340830591	1	OpenLayers.Control.TransformFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Atom.js	1340830591	1	OpenLayers.Format.Atom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/id.js	1340830591	1	OpenLayers.Lang["id"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry.js	1340830591	1	OpenLayers.Geometry
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/UTFGrid.js	1340830591	1	OpenLayers.Control.UTFGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Refresh.js	1340830591	1	OpenLayers.Strategy.Refresh
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Permalink.js	1340830591	1	OpenLayers.Control.Permalink
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/CSW/v2_0_2.js	1340830591	1	OpenLayers.Protocol.CSW.v2_0_2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/SOS/v1_0_0.js	1340830591	1	OpenLayers.Protocol.SOS.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/oc.js	1340830591	1	OpenLayers.Lang["oc"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_3_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/BBOX.js	1340830591	1	OpenLayers.Strategy.BBOX
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/pt.js	1340830591	1	OpenLayers.Lang["pt"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSCapabilities.js	1340830591	1	OpenLayers.Format.WPSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD/v1_0_0_GeoServer.js	1340830591	1	OpenLayers.Format.SLD/v1_0_0_GeoServer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/SLDSelect.js	1340830591	1	OpenLayers.Control.SLDSelect
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Map.js	1340830591	1	OpenLayers.Map
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer.js	1340830591	1	OpenLayers.Symbolizer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/MapServer.js	1340830591	1	OpenLayers.Layer.MapServer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Style2.js	1340830591	1	OpenLayers.Style2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcGIS93Rest.js	1340830591	1	OpenLayers.Layer.ArcGIS93Rest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/UTFGrid.js	1340830591	1	OpenLayers.Layer.UTFGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSDescribeProcess.js	1340830591	1	OpenLayers.Format.WPSDescribeProcess
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/hr.js	1340830591	1	OpenLayers.Lang["hr"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomBox.js	1340830591	1	OpenLayers.Control.ZoomBox
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMTSCapabilities.js	1340830591	1	OpenLayers.Format.WMTSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter/v1_1_0.js	1340830591	1	OpenLayers.Format.Filter.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/en-CA.js	1340830591	1	OpenLayers.Lang["en-CA"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Marker.js	1340830591	1	OpenLayers.Marker
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSContext.js	1340830591	1	OpenLayers.Format.OWSContext
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities/v1.js	1340830591	1	OpenLayers.Format.WFSCapabilities.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/StyleMap.js	1340830591	1	OpenLayers.StyleMap
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XLS/v1_1_0.js	1340830591	1	OpenLayers.Format.XLS.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Console.js	1340830591	1	OpenLayers.Console
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Box.js	1340830591	1	OpenLayers.Handler.Box
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/OSM.js	1340830591	1	OpenLayers.Layer.OSM
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GeoRSS.js	1340830591	1	OpenLayers.Format.GeoRSS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/gsw.js	1340830591	1	OpenLayers.Lang["gsw"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/LinearRing.js	1340830591	1	OpenLayers.Geometry.LinearRing
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSGetObservation.js	1340830591	1	OpenLayers.Format.SOSGetObservation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Comparison.js	1340830591	1	OpenLayers.Filter.Comparison
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Spherical.js	1340830591	1	Spherical
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ar.js	1340830591	1	OpenLayers.Lang["ar"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Collection.js	1340830591	1	OpenLayers.Geometry.Collection
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WCSGetCoverage.js	1340830591	1	OpenLayers.Format.WCSGetCoverage version 1.1.0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter.js	1340830591	1	OpenLayers.Filter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PanPanel.js	1340830591	1	OpenLayers.Control.PanPanel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google.js	1340830591	1	OpenLayers.Layer.Google
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/KaMapCache.js	1340830591	1	OpenLayers.Layer.KaMapCache
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Polygon.js	1340830591	1	OpenLayers.Geometry.Polygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Split.js	1340830591	1	OpenLayers.Control.Split
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/JSON.js	1340830591	1	OpenLayers.Format.JSON
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Image.js	1340830591	1	OpenLayers.Layer.Image
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Click.js	1340830591	1	OpenLayers.Handler.Click
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Spatial.js	1340830591	1	OpenLayers.Filter.Spatial
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Pinch.js	1340830591	1	OpenLayers.Handler.Pinch
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Function.js	1340830591	1	OpenLayers.Filter.Function
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/FramedCloud.js	1340830591	1	OpenLayers.Popup.FramedCloud
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Kinetic.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Kinetic.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter/v1_0_0.js	1340830591	1	OpenLayers.Format.Filter.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomToMaxExtent.js	1340830591	1	OpenLayers.Control.ZoomToMaxExtent
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OSM.js	1340830591	1	OpenLayers.Format.OSM
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetRecords.js	1340830591	1	OpenLayers.Format.CSWGetRecords
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/EventPane.js	1340830591	1	OpenLayers.Layer.EventPane
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js	1340830591	1	OpenLayers.Format.WMSDescribeLayer.v1_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol/Script.js	1340830591	1	OpenLayers.Protocol.Script
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Zoom.js	1340830591	1	OpenLayers.Control.Zoom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Context.js	1340830591	1	OpenLayers.Format.Context
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Line.js	1340830591	1	OpenLayers.Symbolizer.Line
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/it.js	1340830591	1	OpenLayers.Lang["it"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/lt.js	1340830591	1	OpenLayers.Lang["lt"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/DragFeature.js	1340830591	1	OpenLayers.Control.DragFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML.js	1340830591	1	OpenLayers.Format.GML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSDescribeFeatureType.js	1340830591	1	OpenLayers.Format.WFSDescribeFeatureType
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google/v3.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Google/v3.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/zh-TW.js	1340830591	1	OpenLayers.Lang["zh-TW"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	1340830591	1	OpenLayers.Format.OWSCommon.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/hsb.js	1340830591	1	OpenLayers.Lang["hsb"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js	1340830591	1	OpenLayers.Format.WFSCapabilities/v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/WMSGetFeatureInfo.js	1340830591	1	OpenLayers.Control.WMSGetFeatureInfo
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Measure.js	1340830591	1	OpenLayers.Control.Measure
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/pl.js	1340830591	1	OpenLayers.Lang["pl"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CQL.js	1340830591	1	OpenLayers.Format.CQL
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Size.js	1340830591	1	OpenLayers.Size
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Text.js	1340830591	1	OpenLayers.Symbolizer.Text
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_1_1_WMSC
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js	1340830591	1	OpenLayers.Format.CSWGetRecords.v2_0_2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/hu.js	1340830591	1	OpenLayers.Lang["hu"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST/v1_0_0.js	1340830591	1	OpenLayers.Format.WFST.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/EditingToolbar.js	1340830591	1	OpenLayers.Control.EditingToolbar
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Hover.js	1340830591	1	OpenLayers.Handler.Hover
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/MultiPolygon.js	1340830591	1	OpenLayers.Geometry.MultiPolygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Text.js	1340830591	1	OpenLayers.Layer.Text
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/GeoRSS.js	1340830591	1	OpenLayers.Layer.GeoRSS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Request.js	1340830591	1	OpenLayers.Request
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ArgParser.js	1340830591	1	OpenLayers.Control.ArgParser
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Cluster.js	1340830591	1	OpenLayers.Strategy.Cluster
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/LineString.js	1340830591	1	OpenLayers.Geometry.LineString
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/en.js	1340830591	1	OpenLayers.Lang["en"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/el.js	1340830591	1	OpenLayers.Lang["el"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSDescribeLayer.js	1340830591	1	OpenLayers.Format.WMSDescribeLayer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Projection.js	1340830591	1	OpenLayers.Projection
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js	1340830591	1	OpenLayers.Format.CSWGetDomain.v2_0_2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Curve.js	1340830591	1	OpenLayers.Geometry.Curve
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Date.js	1340830591	1	OpenLayers.Date
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/RegularPolygon.js	1340830591	1	OpenLayers.Handler.RegularPolygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/ArcIMS.js	1340830591	1	OpenLayers.Layer.ArcIMS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/deprecated.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/deprecated.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/CacheRead.js	1340830591	1	OpenLayers.Control.CacheRead
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebugx.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebugx.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Markers.js	1340830591	1	OpenLayers.Layer.Markers
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WKT.js	1340830591	1	OpenLayers.Format.WKT
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/FeatureId.js	1340830591	1	OpenLayers.Filter.FeatureId
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/license.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/license.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/VML.js	1340830591	1	OpenLayers.Renderer.VML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Paging.js	1340830591	1	OpenLayers.Strategy.Paging
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/ZoomIn.js	1340830591	1	OpenLayers.Control.ZoomIn
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ksh.js	1340830591	1	OpenLayers.Lang["ksh"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GPX.js	1340830591	1	OpenLayers.Format.GPX
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Corner.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Corner.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler.js	1340830591	1	OpenLayers.Handler
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/pt-BR.js	1340830591	1	OpenLayers.Lang["pt-br"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/MapGuide.js	1340830591	1	OpenLayers.Layer.MapGuide
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Polygon.js	1340830591	1	OpenLayers.Symbolizer.Polygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XLS.js	1340830591	1	OpenLayers.Format.XLS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Feature.js	1340830591	1	OpenLayers.Handler.Feature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML/v3.js	1340830591	1	OpenLayers.Format.GML.v3
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/MouseWheel.js	1340830591	1	OpenLayers.Handler.MouseWheel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/te.js	1340830591	1	OpenLayers.Lang["te"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/br.js	1340830591	1	OpenLayers.Lang["br"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Filter.js	1340830591	1	OpenLayers.Strategy.Filter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Class.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Class.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_1_1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/be-tarask.js	1340830591	1	OpenLayers.Lang["be-tarask"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/Point.js	1340830591	1	OpenLayers.Geometry.Point
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Graticule.js	1340830591	1	OpenLayers.Control.Graticule
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/KeyboardDefaults.js	1340830591	1	OpenLayers.Control.KeyboardDefaults
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/ArcXML/Features.js	1340830591	1	OpenLayers.Format.ArcXML.Features
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer.js	1340830591	1	OpenLayers.Renderer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/fr.js	1340830591	1	OpenLayers.Lang["fr"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/ArcXML.js	1340830591	1	OpenLayers.Format.ArcXML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/is.js	1340830591	1	OpenLayers.Lang["is"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile.js	1340830591	1	OpenLayers.Tile
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/SingleFile.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/SingleFile.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XML/VersionedOGC.js	1340830591	1	OpenLayers.Format.XML.VersionedOGC
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/km.js	1340830591	1	OpenLayers.Lang["km"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Tile/UTFGrid.js	1340830591	1	OpenLayers.Tile.UTFGrid
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Point.js	1340830591	1	OpenLayers.Symbolizer.Point
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML/v2.js	1340830591	1	OpenLayers.Format.GML.v2
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/LonLat.js	1340830591	1	OpenLayers.LonLat
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/TouchNavigation.js	1340830591	1	OpenLayers.Control.TouchNavigation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/DrawFeature.js	1340830591	1	OpenLayers.Control.DrawFeature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Feature/Vector.js	1340830591	1	OpenLayers.Feature.Vector
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ia.js	1340830591	1	OpenLayers.Lang["ia"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XLS/v1.js	1340830591	1	OpenLayers.Format.XLS.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter.js	1340830591	1	OpenLayers.Format.Filter
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/CacheWrite.js	1340830591	1	OpenLayers.Control.CacheWrite
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC/v1.js	1340830591	1	OpenLayers.Format.WMC.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Polygon.js	1340830591	1	OpenLayers.Handler.Polygon
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Button.js	1340830591	1	OpenLayers.Control.Button
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js	1340830591	1	OpenLayers.Format.SOSGetFeatureOfInterest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Pixel.js	1340830591	1	OpenLayers.Pixel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/NavToolbar.js	1340830591	1	OpenLayers.Control.NavToolbar
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Filter/v1.js	1340830591	1	OpenLayers.Format.Filter.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/sv-SE.js	1340830591	1	OpenLayers.Lang["sv"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Drag.js	1340830591	1	OpenLayers.Handler.Drag
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Request/XMLHttpRequest.js	1340830591	1	OpenLayers.Request.XMLHttpRequest
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Color.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Rico/Color.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Strategy/Fixed.js	1340830591	1	OpenLayers.Strategy.Fixed
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/KML.js	1340830591	1	OpenLayers.Format.KML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Feature.js	1340830591	1	OpenLayers.Feature
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Util.js	1340830591	1	Util
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/Canvas.js	1340830591	1	OpenLayers.Renderer.Canvas
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PanZoomBar.js	1340830591	1	OpenLayers.Control.PanZoomBar
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebug.js	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/firebug.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSGetFeatureInfo.js	1340830591	1	OpenLayers.Format.WMSGetFeatureInfo
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/PinchZoom.js	1340830591	1	OpenLayers.Control.PinchZoom
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST.js	1340830591	1	/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST.js
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Rule.js	1340830591	1	OpenLayers.Rule
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC/v1_0_0.js	1340830591	1	OpenLayers.Format.WMC.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js	1340830591	1	OpenLayers.Format.WMSCapabilities/v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.WFSCapabilities/v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Popup/AnchoredBubble.js	1340830591	1	OpenLayers.Popup.AnchoredBubble
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMSCapabilities.js	1340830591	1	OpenLayers.Format.WMSCapabilities
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Bing.js	1340830591	1	OpenLayers.Layer.Bing
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer.js	1340830591	1	OpenLayers.Layer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Protocol.js	1340830591	1	OpenLayers.Protocol
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Filter/Logical.js	1340830591	1	OpenLayers.Filter.Logical
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/BaseTypes/Element.js	1340830591	1	OpenLayers.Element
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/WMS.js	1340830591	1	OpenLayers.Layer.WMS
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/sk.js	1340830591	1	OpenLayers.Lang["sk"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nb.js	1340830591	1	OpenLayers.Lang["nb"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js	1340830591	1	OpenLayers.Format.SOSCapabilities.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/WorldWind.js	1340830591	1	OpenLayers.Layer.WorldWind
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WMC/v1_1_0.js	1340830591	1	OpenLayers.Format.WMC.v1_1_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Geometry/MultiPoint.js	1340830591	1	OpenLayers.Geometry.MultiPoint
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Zoomify.js	1340830591	1	OpenLayers.Layer.Zoomify
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/Vector/RootContainer.js	1340830591	1	OpenLayers.Layer.Vector.RootContainer
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Handler/Point.js	1340830591	1	OpenLayers.Handler.Point
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/LayerSwitcher.js	1340830591	1	OpenLayers.Control.LayerSwitcher
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nds.js	1340830591	1	OpenLayers.Lang["nds"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/TileCache.js	1340830591	1	OpenLayers.Layer.TileCache
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Layer/XYZ.js	1340830591	1	OpenLayers.Layer.XYZ
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Animation.js	1340830591	1	OpenLayers.Animation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/GML/Base.js	1340830591	1	OpenLayers.Format.GML.Base
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/io.js	1340830591	1	OpenLayers.Lang["io"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/readme.txt	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/readme.txt
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Navigation.js	1340830591	1	OpenLayers.Control.Navigation
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/ja.js	1340830591	1	OpenLayers.Lang["ja"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/WMTSGetFeatureInfo.js	1340830591	1	OpenLayers.Control.WMTSGetFeatureInfo
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/Text.js	1340830591	1	OpenLayers.Format.Text
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/nn.js	1340830591	1	OpenLayers.Lang["nn"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Control/Panel.js	1340830591	1	OpenLayers.Control.Panel
+/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/license.txt	1340830591	0	/tmp/openlayers/tools/OpenLayers-2.12/lib/Firebug/license.txt
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WPSExecute.js	1340830591	1	OpenLayers.Format.WPSExecute version 1.0.0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/SLD/v1_0_0.js	1340830591	1	OpenLayers.Format.SLD.v1_0_0
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Renderer/SVG.js	1340830591	1	OpenLayers.Renderer.SVG
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/WFST/v1.js	1340830591	1	OpenLayers.Format.WFST.v1
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Format/XML.js	1340830591	1	OpenLayers.Format.XML
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Lang/fi.js	1340830591	1	OpenLayers.Lang["fi"]
+/tmp/openlayers/tools/OpenLayers-2.12/lib/OpenLayers/Symbolizer/Raster.js	1340830591	1	OpenLayers.Symbolizer.Raster
diff --git a/doc_config/Data/ImageFileInfo.nd b/doc_config/Data/ImageFileInfo.nd
index c9df45b..3db5561 100644
Binary files a/doc_config/Data/ImageFileInfo.nd and b/doc_config/Data/ImageFileInfo.nd differ
diff --git a/doc_config/Data/ImageReferenceTable.nd b/doc_config/Data/ImageReferenceTable.nd
index 49ffcc0..7fce56c 100644
Binary files a/doc_config/Data/ImageReferenceTable.nd and b/doc_config/Data/ImageReferenceTable.nd differ
diff --git a/doc_config/Data/IndexInfo.nd b/doc_config/Data/IndexInfo.nd
index 14f94d5..23bbd8d 100644
Binary files a/doc_config/Data/IndexInfo.nd and b/doc_config/Data/IndexInfo.nd differ
diff --git a/doc_config/Data/PreviousMenuState.nd b/doc_config/Data/PreviousMenuState.nd
index 549adae..02f7ff0 100644
Binary files a/doc_config/Data/PreviousMenuState.nd and b/doc_config/Data/PreviousMenuState.nd differ
diff --git a/doc_config/Data/PreviousSettings.nd b/doc_config/Data/PreviousSettings.nd
index 3513012..36cccaa 100644
Binary files a/doc_config/Data/PreviousSettings.nd and b/doc_config/Data/PreviousSettings.nd differ
diff --git a/doc_config/Data/SymbolTable.nd b/doc_config/Data/SymbolTable.nd
index 3780690..e3e51a4 100644
Binary files a/doc_config/Data/SymbolTable.nd and b/doc_config/Data/SymbolTable.nd differ
diff --git a/doc_config/Menu.txt b/doc_config/Menu.txt
index 475cb6a..5bb3aaa 100644
--- a/doc_config/Menu.txt
+++ b/doc_config/Menu.txt
@@ -48,7 +48,6 @@ SubTitle: JavaScript Mapping Library
 Group: OpenLayers  {
 
    File: OpenLayers  (no auto-title, OpenLayers.js)
-   File: Ajax  (no auto-title, OpenLayers/Ajax.js)
 
    Group: BaseTypes  {
 
@@ -62,63 +61,65 @@ Group: OpenLayers  {
       File: Size  (no auto-title, OpenLayers/BaseTypes/Size.js)
       }  # Group: BaseTypes
 
-   File: Console  (no auto-title, OpenLayers/Console.js)
-
    Group: Control  {
 
       File: Control  (no auto-title, OpenLayers/Control.js)
-      File: ArgParser  (no auto-title, OpenLayers/Control/ArgParser.js)
-      File: Attribution  (no auto-title, OpenLayers/Control/Attribution.js)
-      File: Button  (no auto-title, OpenLayers/Control/Button.js)
-      File: DragFeature  (no auto-title, OpenLayers/Control/DragFeature.js)
-      File: DragPan  (no auto-title, OpenLayers/Control/DragPan.js)
-      File: DrawFeature  (no auto-title, OpenLayers/Control/DrawFeature.js)
-      File: EditingToolbar  (no auto-title, OpenLayers/Control/EditingToolbar.js)
-      File: Geolocate  (no auto-title, OpenLayers/Control/Geolocate.js)
-      File: GetFeature  (no auto-title, OpenLayers/Control/GetFeature.js)
-      File: Graticule  (no auto-title, OpenLayers/Control/Graticule.js)
-      File: KeyboardDefaults  (no auto-title, OpenLayers/Control/KeyboardDefaults.js)
-      File: LayerSwitcher  (no auto-title, OpenLayers/Control/LayerSwitcher.js)
-      File: Measure  (no auto-title, OpenLayers/Control/Measure.js)
-      File: ModifyFeature  (no auto-title, OpenLayers/Control/ModifyFeature.js)
-      File: MouseDefaults  (no auto-title, OpenLayers/Control/MouseDefaults.js)
-      File: MousePosition  (no auto-title, OpenLayers/Control/MousePosition.js)
-      File: MouseToolbar  (no auto-title, OpenLayers/Control/MouseToolbar.js)
-      File: Navigation  (no auto-title, OpenLayers/Control/Navigation.js)
-      File: NavigationHistory  (no auto-title, OpenLayers/Control/NavigationHistory.js)
-      File: NavToolbar  (no auto-title, OpenLayers/Control/NavToolbar.js)
-      File: OverviewMap  (no auto-title, OpenLayers/Control/OverviewMap.js)
-      File: Pan  (no auto-title, OpenLayers/Control/Pan.js)
-      File: Panel  (no auto-title, OpenLayers/Control/Panel.js)
-      File: PanPanel  (no auto-title, OpenLayers/Control/PanPanel.js)
-      File: PanZoom  (no auto-title, OpenLayers/Control/PanZoom.js)
-      File: PanZoomBar  (no auto-title, OpenLayers/Control/PanZoomBar.js)
-      File: Permalink  (no auto-title, OpenLayers/Control/Permalink.js)
-      File: PinchZoom  (no auto-title, OpenLayers/Control/PinchZoom.js)
-      File: Scale  (no auto-title, OpenLayers/Control/Scale.js)
-      File: ScaleLine  (no auto-title, OpenLayers/Control/ScaleLine.js)
-      File: SelectFeature  (no auto-title, OpenLayers/Control/SelectFeature.js)
-      File: SLDSelect  (no auto-title, OpenLayers/Control/SLDSelect.js)
-      File: Snapping  (no auto-title, OpenLayers/Control/Snapping.js)
-      File: Split  (no auto-title, OpenLayers/Control/Split.js)
-      File: TouchNavigation  (no auto-title, OpenLayers/Control/TouchNavigation.js)
-      File: TransformFeature  (no auto-title, OpenLayers/Control/TransformFeature.js)
-      File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMSGetFeatureInfo.js)
-      File: WMTSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMTSGetFeatureInfo.js)
-      File: ZoomBox  (no auto-title, OpenLayers/Control/ZoomBox.js)
-      File: ZoomIn  (no auto-title, OpenLayers/Control/ZoomIn.js)
-      File: ZoomOut  (no auto-title, OpenLayers/Control/ZoomOut.js)
-      File: ZoomPanel  (no auto-title, OpenLayers/Control/ZoomPanel.js)
-      File: ZoomToMaxExtent  (no auto-title, OpenLayers/Control/ZoomToMaxExtent.js)
-      }  # Group: Control
 
-   File: Events  (no auto-title, OpenLayers/Events.js)
+      Group: Control  {
+
+         File: ArgParser  (no auto-title, OpenLayers/Control/ArgParser.js)
+         File: Attribution  (no auto-title, OpenLayers/Control/Attribution.js)
+         File: Button  (no auto-title, OpenLayers/Control/Button.js)
+         File: CacheRead  (OpenLayers/Control/CacheRead.js)
+         File: CacheWrite  (OpenLayers/Control/CacheWrite.js)
+         File: DragFeature  (no auto-title, OpenLayers/Control/DragFeature.js)
+         File: DragPan  (no auto-title, OpenLayers/Control/DragPan.js)
+         File: DrawFeature  (no auto-title, OpenLayers/Control/DrawFeature.js)
+         File: EditingToolbar  (no auto-title, OpenLayers/Control/EditingToolbar.js)
+         File: Geolocate  (no auto-title, OpenLayers/Control/Geolocate.js)
+         File: GetFeature  (no auto-title, OpenLayers/Control/GetFeature.js)
+         File: Graticule  (no auto-title, OpenLayers/Control/Graticule.js)
+         File: KeyboardDefaults  (no auto-title, OpenLayers/Control/KeyboardDefaults.js)
+         File: LayerSwitcher  (no auto-title, OpenLayers/Control/LayerSwitcher.js)
+         File: Measure  (no auto-title, OpenLayers/Control/Measure.js)
+         File: ModifyFeature  (no auto-title, OpenLayers/Control/ModifyFeature.js)
+         File: MousePosition  (no auto-title, OpenLayers/Control/MousePosition.js)
+         File: Navigation  (no auto-title, OpenLayers/Control/Navigation.js)
+         File: NavigationHistory  (no auto-title, OpenLayers/Control/NavigationHistory.js)
+         File: NavToolbar  (no auto-title, OpenLayers/Control/NavToolbar.js)
+         File: OverviewMap  (no auto-title, OpenLayers/Control/OverviewMap.js)
+         File: Pan  (no auto-title, OpenLayers/Control/Pan.js)
+         File: Panel  (no auto-title, OpenLayers/Control/Panel.js)
+         File: PanPanel  (no auto-title, OpenLayers/Control/PanPanel.js)
+         File: PanZoom  (no auto-title, OpenLayers/Control/PanZoom.js)
+         File: PanZoomBar  (no auto-title, OpenLayers/Control/PanZoomBar.js)
+         File: Permalink  (no auto-title, OpenLayers/Control/Permalink.js)
+         File: PinchZoom  (no auto-title, OpenLayers/Control/PinchZoom.js)
+         File: Scale  (no auto-title, OpenLayers/Control/Scale.js)
+         File: ScaleLine  (no auto-title, OpenLayers/Control/ScaleLine.js)
+         File: SelectFeature  (no auto-title, OpenLayers/Control/SelectFeature.js)
+         File: SLDSelect  (no auto-title, OpenLayers/Control/SLDSelect.js)
+         File: Snapping  (no auto-title, OpenLayers/Control/Snapping.js)
+         File: Split  (no auto-title, OpenLayers/Control/Split.js)
+         File: TouchNavigation  (no auto-title, OpenLayers/Control/TouchNavigation.js)
+         File: TransformFeature  (no auto-title, OpenLayers/Control/TransformFeature.js)
+         File: UTFGrid  (OpenLayers/Control/UTFGrid.js)
+         File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMSGetFeatureInfo.js)
+         File: WMTSGetFeatureInfo  (no auto-title, OpenLayers/Control/WMTSGetFeatureInfo.js)
+         File: Zoom  (OpenLayers/Control/Zoom.js)
+         File: ZoomBox  (no auto-title, OpenLayers/Control/ZoomBox.js)
+         File: ZoomIn  (no auto-title, OpenLayers/Control/ZoomIn.js)
+         File: ZoomOut  (no auto-title, OpenLayers/Control/ZoomOut.js)
+         File: ZoomPanel  (no auto-title, OpenLayers/Control/ZoomPanel.js)
+         File: ZoomToMaxExtent  (no auto-title, OpenLayers/Control/ZoomToMaxExtent.js)
+         }  # Group: Control
+
+      }  # Group: Control
 
    Group: Feature  {
 
       File: Feature  (no auto-title, OpenLayers/Feature.js)
       File: Vector  (no auto-title, OpenLayers/Feature/Vector.js)
-      File: WFS  (no auto-title, OpenLayers/Feature/WFS.js)
       }  # Group: Feature
 
    Group: Filter  {
@@ -134,6 +135,15 @@ Group: OpenLayers  {
    Group: Format  {
 
       File: Format  (no auto-title, OpenLayers/Format.js)
+      File: ArcXML  (no auto-title, OpenLayers/Format/ArcXML.js)
+      File: ArcXML.Features  (no auto-title, OpenLayers/Format/ArcXML/Features.js)
+      File: Atom  (no auto-title, OpenLayers/Format/Atom.js)
+      File: Context  (no auto-title, OpenLayers/Format/Context.js)
+      File: CQL  (no auto-title, OpenLayers/Format/CQL.js)
+      File: CSWGetDomain  (no auto-title, OpenLayers/Format/CSWGetDomain.js)
+      File: CSWGetDomain.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetDomain/v2_0_2.js)
+      File: CSWGetRecords  (no auto-title, OpenLayers/Format/CSWGetRecords.js)
+      File: CSWGetRecords.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetRecords/v2_0_2.js)
 
       Group: Filter  {
 
@@ -154,10 +164,39 @@ Group: OpenLayers  {
       Group: SLD  {
 
          File: SLD  (no auto-title, OpenLayers/Format/SLD.js)
+         File: SLD/v1_0_0_GeoServer  (OpenLayers/Format/SLD/v1_0_0_GeoServer.js)
          File: v1  (no auto-title, OpenLayers/Format/SLD/v1.js)
          File: v1_0_0  (no auto-title, OpenLayers/Format/SLD/v1_0_0.js)
          }  # Group: SLD
 
+      File: GeoJSON  (no auto-title, OpenLayers/Format/GeoJSON.js)
+      File: GeoRSS  (no auto-title, OpenLayers/Format/GeoRSS.js)
+      File: GPX  (no auto-title, OpenLayers/Format/GPX.js)
+      File: JSON  (no auto-title, OpenLayers/Format/JSON.js)
+      File: KML  (no auto-title, OpenLayers/Format/KML.js)
+      File: OGCExceptionReport  (no auto-title, OpenLayers/Format/OGCExceptionReport.js)
+      File: OSM  (no auto-title, OpenLayers/Format/OSM.js)
+
+      Group: OWSCommon  {
+
+         File: OWSCommon  (no auto-title, OpenLayers/Format/OWSCommon.js)
+         File: v1  (no auto-title, OpenLayers/Format/OWSCommon/v1.js)
+         File: v1_0_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_0_0.js)
+         File: v1_1_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_1_0.js)
+         }  # Group: OWSCommon
+
+      File: OWSContext  (no auto-title, OpenLayers/Format/OWSContext.js)
+      File: OWSContext.v0_3_1  (no auto-title, OpenLayers/Format/OWSContext/v0_3_1.js)
+      File: QueryStringFilter  (no auto-title, OpenLayers/Format/QueryStringFilter.js)
+      File: SOSCapabilities  (no auto-title, OpenLayers/Format/SOSCapabilities.js)
+      File: SOSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/SOSCapabilities/v1_0_0.js)
+      File: SOSGetFeatureOfInterest  (no auto-title, OpenLayers/Format/SOSGetFeatureOfInterest.js)
+      File: SOSGetObservation  (no auto-title, OpenLayers/Format/SOSGetObservation.js)
+      File: Text  (no auto-title, OpenLayers/Format/Text.js)
+      File: VersionedOGC  (OpenLayers/Format/XML/VersionedOGC.js)
+      File: WCSGetCoverage version 1.1.0  (no auto-title, OpenLayers/Format/WCSGetCoverage.js)
+      File: WFS  (no auto-title, OpenLayers/Format/WFS.js)
+
       Group: WFSCapabilities  {
 
          File: WFSCapabilities  (no auto-title, OpenLayers/Format/WFSCapabilities.js)
@@ -200,59 +239,19 @@ Group: OpenLayers  {
          File: v1_1  (no auto-title, OpenLayers/Format/WMSDescribeLayer/v1_1.js)
          }  # Group: WMSDescribeLayer
 
-      Group: Format  {
-
-         File: ArcXML  (no auto-title, OpenLayers/Format/ArcXML.js)
-         File: ArcXML.Features  (no auto-title, OpenLayers/Format/ArcXML/Features.js)
-         File: Atom  (no auto-title, OpenLayers/Format/Atom.js)
-         File: Context  (no auto-title, OpenLayers/Format/Context.js)
-         File: CQL  (no auto-title, OpenLayers/Format/CQL.js)
-         File: CSWGetDomain  (no auto-title, OpenLayers/Format/CSWGetDomain.js)
-         File: CSWGetDomain.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetDomain/v2_0_2.js)
-         File: CSWGetRecords  (no auto-title, OpenLayers/Format/CSWGetRecords.js)
-         File: CSWGetRecords.v2_0_2  (no auto-title, OpenLayers/Format/CSWGetRecords/v2_0_2.js)
-         File: GeoJSON  (no auto-title, OpenLayers/Format/GeoJSON.js)
-         File: GeoRSS  (no auto-title, OpenLayers/Format/GeoRSS.js)
-         File: GPX  (no auto-title, OpenLayers/Format/GPX.js)
-         File: JSON  (no auto-title, OpenLayers/Format/JSON.js)
-         File: KML  (no auto-title, OpenLayers/Format/KML.js)
-         File: OGCExceptionReport  (no auto-title, OpenLayers/Format/OGCExceptionReport.js)
-         File: OSM  (no auto-title, OpenLayers/Format/OSM.js)
-         File: OWSCommon  (no auto-title, OpenLayers/Format/OWSCommon.js)
-
-         Group: OWSCommon  {
-
-            File: v1  (no auto-title, OpenLayers/Format/OWSCommon/v1.js)
-            File: v1_0_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_0_0.js)
-            File: v1_1_0  (no auto-title, OpenLayers/Format/OWSCommon/v1_1_0.js)
-            }  # Group: OWSCommon
-
-         File: OWSContext  (no auto-title, OpenLayers/Format/OWSContext.js)
-         File: OWSContext.v0_3_1  (no auto-title, OpenLayers/Format/OWSContext/v0_3_1.js)
-         File: QueryStringFilter  (no auto-title, OpenLayers/Format/QueryStringFilter.js)
-         File: SOSCapabilities  (no auto-title, OpenLayers/Format/SOSCapabilities.js)
-         File: SOSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/SOSCapabilities/v1_0_0.js)
-         File: SOSGetFeatureOfInterest  (no auto-title, OpenLayers/Format/SOSGetFeatureOfInterest.js)
-         File: SOSGetObservation  (no auto-title, OpenLayers/Format/SOSGetObservation.js)
-         File: Text  (no auto-title, OpenLayers/Format/Text.js)
-         File: VersionedOGC  (OpenLayers/Format/XML/VersionedOGC.js)
-         File: WCSGetCoverage version 1.1.0  (no auto-title, OpenLayers/Format/WCSGetCoverage.js)
-         File: WFS  (no auto-title, OpenLayers/Format/WFS.js)
-         File: WFSDescribeFeatureType  (no auto-title, OpenLayers/Format/WFSDescribeFeatureType.js)
-         File: WKT  (no auto-title, OpenLayers/Format/WKT.js)
-         File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Format/WMSGetFeatureInfo.js)
-         File: WMTSCapabilities  (no auto-title, OpenLayers/Format/WMTSCapabilities.js)
-         File: WMTSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WMTSCapabilities/v1_0_0.js)
-         File: WPSCapabilities  (no auto-title, OpenLayers/Format/WPSCapabilities.js)
-         File: WPSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WPSCapabilities/v1_0_0.js)
-         File: WPSDescribeProcess  (no auto-title, OpenLayers/Format/WPSDescribeProcess.js)
-         File: WPSExecute version 1.0.0  (no auto-title, OpenLayers/Format/WPSExecute.js)
-         File: XLS  (no auto-title, OpenLayers/Format/XLS.js)
-         File: XLS.v1  (no auto-title, OpenLayers/Format/XLS/v1.js)
-         File: XLS.v1_1_0  (no auto-title, OpenLayers/Format/XLS/v1_1_0.js)
-         File: XML  (no auto-title, OpenLayers/Format/XML.js)
-         }  # Group: Format
-
+      File: WFSDescribeFeatureType  (no auto-title, OpenLayers/Format/WFSDescribeFeatureType.js)
+      File: WKT  (no auto-title, OpenLayers/Format/WKT.js)
+      File: WMSGetFeatureInfo  (no auto-title, OpenLayers/Format/WMSGetFeatureInfo.js)
+      File: WMTSCapabilities  (no auto-title, OpenLayers/Format/WMTSCapabilities.js)
+      File: WMTSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WMTSCapabilities/v1_0_0.js)
+      File: WPSCapabilities  (no auto-title, OpenLayers/Format/WPSCapabilities.js)
+      File: WPSCapabilities.v1_0_0  (no auto-title, OpenLayers/Format/WPSCapabilities/v1_0_0.js)
+      File: WPSDescribeProcess  (no auto-title, OpenLayers/Format/WPSDescribeProcess.js)
+      File: WPSExecute version 1.0.0  (no auto-title, OpenLayers/Format/WPSExecute.js)
+      File: XLS  (no auto-title, OpenLayers/Format/XLS.js)
+      File: XLS.v1  (no auto-title, OpenLayers/Format/XLS/v1.js)
+      File: XLS.v1_1_0  (no auto-title, OpenLayers/Format/XLS/v1_1_0.js)
+      File: XML  (no auto-title, OpenLayers/Format/XML.js)
       }  # Group: Format
 
    Group: Geometry  {
@@ -267,7 +266,6 @@ Group: OpenLayers  {
       File: MultiPolygon  (no auto-title, OpenLayers/Geometry/MultiPolygon.js)
       File: Point  (no auto-title, OpenLayers/Geometry/Point.js)
       File: Polygon  (no auto-title, OpenLayers/Geometry/Polygon.js)
-      File: Rectangle  (no auto-title, OpenLayers/Geometry/Rectangle.js)
       }  # Group: Geometry
 
    Group: Handler  {
@@ -287,9 +285,6 @@ Group: OpenLayers  {
       File: RegularPolygon  (no auto-title, OpenLayers/Handler/RegularPolygon.js)
       }  # Group: Handler
 
-   File: Icon  (no auto-title, OpenLayers/Icon.js)
-   File: Kinetic  (no auto-title, OpenLayers/Kinetic.js)
-
    Group: Lang  {
 
       File: Lang  (no auto-title, OpenLayers/Lang.js)
@@ -327,6 +322,7 @@ Group: OpenLayers  {
       File: nl  (no auto-title, OpenLayers/Lang/nl.js)
       File: nn  (no auto-title, OpenLayers/Lang/nn.js)
       File: oc  (no auto-title, OpenLayers/Lang/oc.js)
+      File: pl  (no auto-title, OpenLayers/Lang/pl.js)
       File: pt  (no auto-title, OpenLayers/Lang/pt.js)
       File: pt-BR  (no auto-title, OpenLayers/Lang/pt-BR.js)
       File: ru  (no auto-title, OpenLayers/Lang/ru.js)
@@ -341,48 +337,45 @@ Group: OpenLayers  {
    Group: Layer  {
 
       File: Layer  (no auto-title, OpenLayers/Layer.js)
-      File: ArcGISCache.js  (no auto-title, OpenLayers/Layer/ArcGISCache.js)
-      File: ArcGIS93Rest  (no auto-title, OpenLayers/Layer/ArcGIS93Rest.js)
-      File: ArcIMS  (no auto-title, OpenLayers/Layer/ArcIMS.js)
-      File: Bing  (no auto-title, OpenLayers/Layer/Bing.js)
-      File: Boxes  (no auto-title, OpenLayers/Layer/Boxes.js)
-      File: EventPane  (no auto-title, OpenLayers/Layer/EventPane.js)
-      File: FixedZoomLevels  (no auto-title, OpenLayers/Layer/FixedZoomLevels.js)
-      File: GeoRSS  (no auto-title, OpenLayers/Layer/GeoRSS.js)
-      File: GML  (no auto-title, OpenLayers/Layer/GML.js)
-      File: Google  (no auto-title, OpenLayers/Layer/Google.js)
-      File: Google.v3  (no auto-title, OpenLayers/Layer/Google/v3.js)
-      File: Grid  (no auto-title, OpenLayers/Layer/Grid.js)
-      File: HTTPRequest  (no auto-title, OpenLayers/Layer/HTTPRequest.js)
-      File: Image  (no auto-title, OpenLayers/Layer/Image.js)
-      File: KaMap  (no auto-title, OpenLayers/Layer/KaMap.js)
-      File: KaMapCache  (no auto-title, OpenLayers/Layer/KaMapCache.js)
-      File: MapGuide  (no auto-title, OpenLayers/Layer/MapGuide.js)
-      File: MapServer  (no auto-title, OpenLayers/Layer/MapServer.js)
-      File: MapServer.Untiled  (no auto-title, OpenLayers/Layer/MapServer/Untiled.js)
-      File: Markers  (no auto-title, OpenLayers/Layer/Markers.js)
-      File: MultiMap  (no auto-title, OpenLayers/Layer/MultiMap.js)
-      File: PointGrid  (no auto-title, OpenLayers/Layer/PointGrid.js)
-      File: PointTrack  (no auto-title, OpenLayers/Layer/PointTrack.js)
-      File: SphericalMercator  (no auto-title, OpenLayers/Layer/SphericalMercator.js)
-      File: Text  (no auto-title, OpenLayers/Layer/Text.js)
-      File: TileCache  (no auto-title, OpenLayers/Layer/TileCache.js)
-      File: TMS  (no auto-title, OpenLayers/Layer/TMS.js)
-      File: Vector  (no auto-title, OpenLayers/Layer/Vector.js)
-      File: Vector.RootContainer  (no auto-title, OpenLayers/Layer/Vector/RootContainer.js)
-      File: VirtualEarth  (no auto-title, OpenLayers/Layer/VirtualEarth.js)
-      File: WFS  (no auto-title, OpenLayers/Layer/WFS.js)
-      File: WMS  (no auto-title, OpenLayers/Layer/WMS.js)
-      File: WMS.Untiled  (no auto-title, OpenLayers/Layer/WMS/Untiled.js)
-      File: WMS.Post  (no auto-title, OpenLayers/Layer/WMS/Post.js)
-      File: WMTS  (no auto-title, OpenLayers/Layer/WMTS.js)
-      File: WorldWind  (no auto-title, OpenLayers/Layer/WorldWind.js)
-      File: XYZ  (no auto-title, OpenLayers/Layer/XYZ.js)
-      File: Yahoo  (no auto-title, OpenLayers/Layer/Yahoo.js)
-      File: Zoomify  (no auto-title, OpenLayers/Layer/Zoomify.js)
-      }  # Group: Layer
 
-   File: Map  (no auto-title, OpenLayers/Map.js)
+      Group: Layer  {
+
+         File: ArcGISCache.js  (no auto-title, OpenLayers/Layer/ArcGISCache.js)
+         File: ArcGIS93Rest  (no auto-title, OpenLayers/Layer/ArcGIS93Rest.js)
+         File: ArcIMS  (no auto-title, OpenLayers/Layer/ArcIMS.js)
+         File: Bing  (no auto-title, OpenLayers/Layer/Bing.js)
+         File: Boxes  (no auto-title, OpenLayers/Layer/Boxes.js)
+         File: EventPane  (no auto-title, OpenLayers/Layer/EventPane.js)
+         File: FixedZoomLevels  (no auto-title, OpenLayers/Layer/FixedZoomLevels.js)
+         File: GeoRSS  (no auto-title, OpenLayers/Layer/GeoRSS.js)
+         File: Google  (no auto-title, OpenLayers/Layer/Google.js)
+         File: Google.v3  (no auto-title, OpenLayers/Layer/Google/v3.js)
+         File: Grid  (no auto-title, OpenLayers/Layer/Grid.js)
+         File: HTTPRequest  (no auto-title, OpenLayers/Layer/HTTPRequest.js)
+         File: Image  (no auto-title, OpenLayers/Layer/Image.js)
+         File: KaMap  (no auto-title, OpenLayers/Layer/KaMap.js)
+         File: KaMapCache  (no auto-title, OpenLayers/Layer/KaMapCache.js)
+         File: MapGuide  (no auto-title, OpenLayers/Layer/MapGuide.js)
+         File: MapServer  (no auto-title, OpenLayers/Layer/MapServer.js)
+         File: Markers  (no auto-title, OpenLayers/Layer/Markers.js)
+         File: PointGrid  (no auto-title, OpenLayers/Layer/PointGrid.js)
+         File: PointTrack  (no auto-title, OpenLayers/Layer/PointTrack.js)
+         File: SphericalMercator  (no auto-title, OpenLayers/Layer/SphericalMercator.js)
+         File: Text  (no auto-title, OpenLayers/Layer/Text.js)
+         File: TileCache  (no auto-title, OpenLayers/Layer/TileCache.js)
+         File: TMS  (no auto-title, OpenLayers/Layer/TMS.js)
+         File: Vector  (no auto-title, OpenLayers/Layer/Vector.js)
+         File: Vector.RootContainer  (no auto-title, OpenLayers/Layer/Vector/RootContainer.js)
+         File: WMS  (no auto-title, OpenLayers/Layer/WMS.js)
+         File: WMTS  (no auto-title, OpenLayers/Layer/WMTS.js)
+         File: WorldWind  (no auto-title, OpenLayers/Layer/WorldWind.js)
+         File: XYZ  (no auto-title, OpenLayers/Layer/XYZ.js)
+         File: Zoomify  (no auto-title, OpenLayers/Layer/Zoomify.js)
+         File: OSM  (OpenLayers/Layer/OSM.js)
+         File: UTFGrid  (OpenLayers/Layer/UTFGrid.js)
+         }  # Group: Layer
+
+      }  # Group: Layer
 
    Group: Marker  {
 
@@ -399,18 +392,19 @@ Group: OpenLayers  {
       File: FramedCloud  (no auto-title, OpenLayers/Popup/FramedCloud.js)
       }  # Group: Popup
 
-   File: Projection  (no auto-title, OpenLayers/Projection.js)
-
    Group: Protocol  {
 
       File: Protocol  (no auto-title, OpenLayers/Protocol.js)
-      File: HTTP  (no auto-title, OpenLayers/Protocol/HTTP.js)
 
-      Group: SQL  {
+      Group: Protocol  {
 
-         File: SQL  (no auto-title, OpenLayers/Protocol/SQL.js)
-         File: Gears  (no auto-title, OpenLayers/Protocol/SQL/Gears.js)
-         }  # Group: SQL
+         File: CSW  (OpenLayers/Protocol/CSW.js)
+         File: CSW.v2_0_2  (OpenLayers/Protocol/CSW/v2_0_2.js)
+         File: HTTP  (no auto-title, OpenLayers/Protocol/HTTP.js)
+         File: Script  (no auto-title, OpenLayers/Protocol/Script.js)
+         File: SOS.DEFAULTS  (no auto-title, OpenLayers/Protocol/SOS.js)
+         File: SOS.v1_0_0  (no auto-title, OpenLayers/Protocol/SOS/v1_0_0.js)
+         }  # Group: Protocol
 
       Group: WFS  {
 
@@ -420,9 +414,6 @@ Group: OpenLayers  {
          File: v1_1_0  (no auto-title, OpenLayers/Protocol/WFS/v1_1_0.js)
          }  # Group: WFS
 
-      File: Script  (no auto-title, OpenLayers/Protocol/Script.js)
-      File: SOS.DEFAULTS  (no auto-title, OpenLayers/Protocol/SOS.js)
-      File: SOS.v1_0_0  (no auto-title, OpenLayers/Protocol/SOS/v1_0_0.js)
       }  # Group: Protocol
 
    Group: Renderer  {
@@ -430,9 +421,7 @@ Group: OpenLayers  {
       File: Renderer  (no auto-title, OpenLayers/Renderer.js)
       File: Canvas  (no auto-title, OpenLayers/Renderer/Canvas.js)
       File: ElementsIndexer  (no auto-title, OpenLayers/Renderer/Elements.js)
-      File: NG  (no auto-title, OpenLayers/Renderer/NG.js)
       File: SVG  (no auto-title, OpenLayers/Renderer/SVG.js)
-      File: SVG2  (no auto-title, OpenLayers/Renderer/SVG2.js)
       File: VML  (no auto-title, OpenLayers/Renderer/VML.js)
       }  # Group: Renderer
 
@@ -442,9 +431,6 @@ Group: OpenLayers  {
       File: XMLHttpRequest  (no auto-title, OpenLayers/Request/XMLHttpRequest.js)
       }  # Group: Request
 
-   File: SingleFile.js  (no auto-title, OpenLayers/SingleFile.js)
-   File: Rule  (no auto-title, OpenLayers/Rule.js)
-
    Group: Strategy  {
 
       File: Strategy  (no auto-title, OpenLayers/Strategy.js)
@@ -457,10 +443,6 @@ Group: OpenLayers  {
       File: Save  (no auto-title, OpenLayers/Strategy/Save.js)
       }  # Group: Strategy
 
-   File: Style  (no auto-title, OpenLayers/Style.js)
-   File: Style2  (no auto-title, OpenLayers/Style2.js)
-   File: StyleMap  (no auto-title, OpenLayers/StyleMap.js)
-
    Group: Symbolizer  {
 
       File: Symbolizer  (no auto-title, OpenLayers/Symbolizer.js)
@@ -476,11 +458,31 @@ Group: OpenLayers  {
       File: Tile  (no auto-title, OpenLayers/Tile.js)
       File: Image  (no auto-title, OpenLayers/Tile/Image.js)
       File: Image.IFrame  (no auto-title, OpenLayers/Tile/Image/IFrame.js)
-      File: WFS  (no auto-title, OpenLayers/Tile/WFS.js)
+      File: UTFGrid  (OpenLayers/Tile/UTFGrid.js)
       }  # Group: Tile
 
-   File: Tween  (no auto-title, OpenLayers/Tween.js)
-   File: Util  (no auto-title, OpenLayers/Util.js)
+   File: Deprecated  (no auto-title, deprecated.js)
+
+   Group: OpenLayers  {
+
+      File: Console  (no auto-title, OpenLayers/Console.js)
+      File: Events  (no auto-title, OpenLayers/Events.js)
+      File: Icon  (no auto-title, OpenLayers/Icon.js)
+      File: Kinetic  (no auto-title, OpenLayers/Kinetic.js)
+      File: Map  (no auto-title, OpenLayers/Map.js)
+      File: Projection  (no auto-title, OpenLayers/Projection.js)
+      File: Rule  (no auto-title, OpenLayers/Rule.js)
+      File: SingleFile.js  (no auto-title, OpenLayers/SingleFile.js)
+      File: Style  (no auto-title, OpenLayers/Style.js)
+      File: Style2  (no auto-title, OpenLayers/Style2.js)
+      File: StyleMap  (no auto-title, OpenLayers/StyleMap.js)
+      File: Tween  (no auto-title, OpenLayers/Tween.js)
+      File: Util  (no auto-title, OpenLayers/Util.js)
+      File: Spherical  (no auto-title, OpenLayers/Spherical.js)
+      File: Animation  (OpenLayers/Animation.js)
+      File: Events.buttonclick  (OpenLayers/Events/buttonclick.js)
+      }  # Group: OpenLayers
+
    }  # Group: OpenLayers
 
 Group: Index  {
diff --git a/examples/KMLParser.html b/examples/KMLParser.html
index a6ec027..7b36ec3 100644
--- a/examples/KMLParser.html
+++ b/examples/KMLParser.html
@@ -10,7 +10,7 @@
     <script type="text/javascript">
         function parseData(req) {
           g =  new OpenLayers.Format.KML({extractStyles: true});
-          html = ""
+          html = "";
           features = g.read(req.responseText);
           for(var feat in features) {
             html += "Feature: Geometry: "+ features[feat].geometry+",";
@@ -18,7 +18,7 @@
             for (var j in features[feat].attributes) {
                 html += "<li>Attribute "+j+":"+features[feat].attributes[j]+"</li>";
             }
-                html += "</ul>"
+                html += "</ul>";
                 html += "<ul>";
             for (var j in features[feat].style) {
                 html += "<li>Style "+j+":"+features[feat].style[j]+"</li>";
diff --git a/examples/WMSDescribeLayerParser.html b/examples/WMSDescribeLayerParser.html
index 0e62465..d1c63e7 100644
--- a/examples/WMSDescribeLayerParser.html
+++ b/examples/WMSDescribeLayerParser.html
@@ -10,7 +10,7 @@
     <script type="text/javascript">
         function parseData(req) {
           format = new OpenLayers.Format.WMSDescribeLayer();
-          html = "<br>"
+          html = "<br>";
           resp = format.read(req.responseText);
           for(var i = 0; i < resp.length; i++) {
             html += "Layer: typeName: "+ resp[i].typeName+",";
diff --git a/examples/accessible-click-control.html b/examples/accessible-click-control.html
new file mode 100644
index 0000000..c8d97cd
--- /dev/null
+++ b/examples/accessible-click-control.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>Accessible Custom Click Control</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">
+        <style type="text/css">
+            a {
+                text-decoration: none;
+                font-size: 1.2em;
+            }
+            a em {
+                font-style: normal;
+                font-weight: normal;
+                text-decoration: underline;
+            }
+            a:hover {
+                text-decoration: underline;
+            }
+            a.api {
+                font-size:1em;
+                text-decoration:underline;
+            }
+            a.accesskey {
+                color: white;
+            }
+            a.accesskey:focus {
+                color: #436976;
+            }
+            a.zoom {
+                padding-right: 20px;
+            }
+        </style>
+        <script src="../lib/Firebug/firebug.js"></script>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="accessible-click-control.js"></script>
+    </head>
+    <body onload="init()">
+        <h1 id="title">An accessible click control implementation</h1>
+    
+        <div id="tags">
+            click, control, accessibility
+        </div>
+
+        <a class="accesskey"
+           href=""
+           accesskey="1"
+           onclick="document.getElementById('map').focus();return false;">
+           Jump to map
+        </a>
+
+        <div id="map" class="smallmap" tabindex="0"></div>
+
+        <p id="desc">
+            Demonstrate the KeyboardDefaults control as well as a control that
+            allows clicking on the map using the keyboard.
+            First focus the map (using tab key or mouse), then press the 'i'
+            key to activate the query control. You can then move the point
+            using arrow keys. Press 'RETURN' to get the coordinate. Press 'i'
+            again to deactivate the control.
+        </p>
+
+    </body>
+</html>
diff --git a/examples/accessible-click-control.js b/examples/accessible-click-control.js
new file mode 100644
index 0000000..328e0da
--- /dev/null
+++ b/examples/accessible-click-control.js
@@ -0,0 +1,199 @@
+var map, navigationControl, queryControl; 
+
+function init(){
+    map = new OpenLayers.Map('map', {controls: []});
+    var layer = new OpenLayers.Layer.WMS(
+        "OpenLayers WMS",
+        "http://vmap0.tiles.osgeo.org/wms/vmap0",
+        {layers: 'basic'}
+    );
+    map.addLayers([layer]);
+
+    navigationControl = new OpenLayers.Control.KeyboardDefaults({
+        observeElement: 'map'
+    });
+    map.addControl(navigationControl);
+    
+    queryControl = new OpenLayers.Control.KeyboardClick({
+        observeElement: 'map'
+    });
+    map.addControl(queryControl);
+
+    map.zoomToMaxExtent();
+}
+
+/**
+ * Class: OpenLayers.Control.KeyboardClick
+ *
+ * A custom control that (a) adds a vector point that can be moved using the
+ * arrow keys of the keyboard, and (b) displays a browser alert window when the
+ * RETURN key is pressed. The control can be activated/deactivated using the
+ * "i" key. When activated the control deactivates any KeyboardDefaults control
+ * in the map so that the map is not moved when the arrow keys are pressed.
+ *
+ * This control relies on the OpenLayers.Handler.KeyboardPoint custom handler.
+ */
+OpenLayers.Control.KeyboardClick = OpenLayers.Class(OpenLayers.Control, {
+    initialize: function(options) {
+        OpenLayers.Control.prototype.initialize.apply(this, [options]);
+        var observeElement = this.observeElement || document;
+        this.handler = new OpenLayers.Handler.KeyboardPoint(this, {
+            done: this.onClick,
+            cancel: this.deactivate
+        }, {
+            observeElement: observeElement
+        });
+        OpenLayers.Event.observe(
+            observeElement,
+            "keydown",
+            OpenLayers.Function.bindAsEventListener(
+                function(evt) {
+                    if (evt.keyCode == 73) { // "i"
+                        if (this.active) {
+                            this.deactivate();
+                        } else {
+                            this.activate();
+                        }
+                    }
+                },
+                this
+            )
+        );
+    },
+
+    onClick: function(geometry) {
+        alert("You clicked near " + geometry.x + " N, " +
+                                    geometry.y + " E");
+    },
+
+    activate: function() {
+        if(!OpenLayers.Control.prototype.activate.apply(this, arguments)) {
+            return false;
+        }
+        // deactivate any KeyboardDefaults control
+        var keyboardDefaults = this.map.getControlsByClass(
+                'OpenLayers.Control.KeyboardDefaults')[0];
+        if (keyboardDefaults) {
+            keyboardDefaults.deactivate();
+        }
+        return true;
+    },
+
+    deactivate: function() {
+        if(!OpenLayers.Control.prototype.deactivate.apply(this, arguments)) {
+            return false;
+        }
+        // reactivate any KeyboardDefaults control
+        var keyboardDefaults = this.map.getControlsByClass(
+                'OpenLayers.Control.KeyboardDefaults')[0];
+        if (keyboardDefaults) {
+            keyboardDefaults.activate();
+        }
+        return true;
+    }
+});
+
+/**
+ * Class: OpenLayers.Handler.KeyboardPoint
+ *
+ * A custom handler that displays a vector point that can be moved
+ * using the arrow keys of the keyboard.
+ */
+OpenLayers.Handler.KeyboardPoint = OpenLayers.Class(OpenLayers.Handler, {
+    
+    KEY_EVENTS: ["keydown"],
+
+
+    initialize: function(control, callbacks, options) {
+        OpenLayers.Handler.prototype.initialize.apply(this, arguments);
+        // cache the bound event listener method so it can be unobserved later
+        this.eventListener = OpenLayers.Function.bindAsEventListener(
+            this.handleKeyEvent, this
+        );
+    },
+
+    activate: function() {
+        if(!OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
+            return false;
+        }
+        this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME);
+        this.map.addLayer(this.layer);
+        this.observeElement = this.observeElement || document;
+        for (var i=0, len=this.KEY_EVENTS.length; i<len; i++) {
+            OpenLayers.Event.observe(
+                this.observeElement, this.KEY_EVENTS[i], this.eventListener);
+        }
+        if(!this.point) {
+            this.createFeature();
+        }
+        return true;
+    },
+
+    deactivate: function() {
+        if (!OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {
+            return false;
+        }
+        for (var i=0, len=this.KEY_EVENTS.length; i<len; i++) {
+            OpenLayers.Event.stopObserving(
+                this.observeElement, this.KEY_EVENTS[i], this.eventListener);
+        }
+        this.map.removeLayer(this.layer);
+        this.destroyFeature();
+        return true;
+    },
+
+    handleKeyEvent: function (evt) {
+        switch(evt.keyCode) {
+            case OpenLayers.Event.KEY_LEFT:
+                this.modifyFeature(-3, 0);
+                break;
+            case OpenLayers.Event.KEY_RIGHT: 
+                this.modifyFeature(3, 0);
+                break;
+            case OpenLayers.Event.KEY_UP:
+                this.modifyFeature(0, 3);
+                break;
+            case OpenLayers.Event.KEY_DOWN:
+                this.modifyFeature(0, -3);
+                break;
+            case OpenLayers.Event.KEY_RETURN:
+                this.callback('done', [this.point.geometry.clone()]);
+                break;
+            case OpenLayers.Event.KEY_ESC:
+                this.callback('cancel');
+                break;
+        }
+    },
+
+    modifyFeature: function(lon, lat) {
+        if(!this.point) {
+            this.createFeature();
+        }
+        var resolution = this.map.getResolution();
+        this.point.geometry.x = this.point.geometry.x + lon * resolution;
+        this.point.geometry.y = this.point.geometry.y + lat * resolution;
+        this.callback("modify", [this.point.geometry, this.point, false]);
+        this.point.geometry.clearBounds();
+        this.drawFeature();
+    },
+
+    createFeature: function() {
+        var center = this.map.getCenter();
+        var geometry = new OpenLayers.Geometry.Point(
+            center.lon, center.lat
+        );
+        this.point = new OpenLayers.Feature.Vector(geometry);
+        this.callback("create", [this.point.geometry, this.point]);
+        this.point.geometry.clearBounds();
+        this.layer.addFeatures([this.point], {silent: true});
+    },
+
+    destroyFeature: function() {
+        this.layer.destroyFeatures([this.point]);
+        this.point = null;
+    },
+
+    drawFeature: function() {
+        this.layer.drawFeature(this.point, this.style);
+    }
+});
diff --git a/examples/accessible-panel.html b/examples/accessible-panel.html
new file mode 100644
index 0000000..d46d4fb
--- /dev/null
+++ b/examples/accessible-panel.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>Custom and accessible panel</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">
+
+        .olControlPanel button {
+          position: relative;
+          display: block;
+          margin: 2px;
+          border: 1px solid;
+          padding: 0 5px;
+          border-radius: 4px;
+          height: 35px;
+          background-color: white;
+          float: left;
+          overflow: visible; /* needed to remove padding from buttons in IE */
+        }
+        .olControlPanel button span {
+          padding-left: 25px;
+        }
+        .olControlPanel button span:first-child {
+          padding-left: 0;
+          display: block;
+          position: absolute;
+          left: 2px;
+        }
+        .olControlPanel .olControlDrawFeatureItemActive span:first-child { 
+          background-image: url("../theme/default/img/draw_line_on.png");
+          height: 22px;
+          width: 24px;
+          top: 5px;
+        }
+        .olControlPanel .olControlDrawFeatureItemInactive span:first-child { 
+          background-image: url("../theme/default/img/draw_line_off.png");
+          height: 22px;
+          width: 24px;
+          top: 5px;
+        }
+        .olControlPanel .olControlZoomBoxItemInactive span:first-child { 
+          background-image: url("../img/drag-rectangle-off.png");
+          height: 29px;
+          width: 29px;
+          top: 2px;
+        }
+        .olControlPanel .olControlZoomBoxItemActive span:first-child { 
+          background-image: url("../img/drag-rectangle-on.png");
+          height: 29px;
+          width: 29px;
+          top: 2px;
+        }
+        .olControlPanel .olControlZoomToMaxExtentItemInactive span:first-child { 
+          background-image: url("../img/zoom-world-mini.png");
+          height: 18px;
+          width: 18px;
+          top: 8px;
+        }
+        .olControlPanel .navHistory span:first-child {
+           background-image: url("../theme/default/img/navigation_history.png");
+           height: 24px;
+           width: 24px;
+           top: 4px;
+        }
+        .olControlPanel .navHistoryPreviousItemActive span:first-child { 
+          background-position: 0 0;
+        }
+        .olControlPanel .navHistoryPreviousItemInactive span:first-child { 
+           background-position: 0 -24px;
+        }
+        .olControlPanel .navHistoryNextItemActive span:first-child { 
+           background-position: -24px 0;
+        }
+        .olControlPanel .navHistoryNextItemInactive span:first-child { 
+           background-position: -24px -24px;
+        }
+        
+    </style>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="accessible-panel.js"></script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">Custom and accessible panel</h1>
+    <div id="tags">
+        panels, CSS, style, accessibility, button
+    </div>
+    <p id="shortdesc">
+      Create a custom and accessible panel, styled entirely with
+      CSS.
+    </p>  
+    <div id="panel"></div>
+    <div id="map" class="smallmap"></div>
+
+    <div id="docs">
+
+      <p>An accessible panel:
+
+      <ul>
+      <li>The buttons are actual HTML buttons. You can therefore
+      use the TAB key to give the focus to the panel's buttons, and the "ENTER"
+      key to activate or trigger the corresponding control.</li>
+      <li>The buttons include text and titles (displayed when a button
+      is hovered).</li>
+      <li>If you remove colors from the page (for example using FireFox's <a
+          href="https://addons.mozilla.org/en-US/firefox/addon/no-color/">No
+          Color extension</a>) the buttons are still visible, and
+          accessible using the keyboard.</li>
+      </ul>
+      </p>
+
+      <p>By default a panel creates buttons as divs. In this example the
+      <code>createControlMarkup</code> panel function is overridden to create
+      a more accessible markup for the buttons.  See the <a
+          href="accessible-panel.js" target="_blank"> accessible-panel.js
+          source</a> to see how this is done.</p>
+
+      <p>Note: in IE 8, when a button is pressed its content shifts by 1 pixel.
+      This is a <a
+          href="http://labs.findsubstance.com/2009/05/21/ie8-form-button-with-background-image-on-click-css-bug/">known
+          IE8 bug</a>, with known workarounds. No workaround is applied in this
+      example though.</p>
+
+    </div>
+
+  </body>
+</html>
diff --git a/examples/accessible-panel.js b/examples/accessible-panel.js
new file mode 100644
index 0000000..f982fc6
--- /dev/null
+++ b/examples/accessible-panel.js
@@ -0,0 +1,64 @@
+var lon = 5;
+var lat = 40;
+var zoom = 5;
+var map, layer;
+
+function init() {
+    map = new OpenLayers.Map( 'map', { controls: [] } );
+    layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
+            "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
+    map.addLayer(layer);
+
+    vlayer = new OpenLayers.Layer.Vector( "Editable" );
+    map.addLayer(vlayer);
+    
+    zb = new OpenLayers.Control.ZoomBox({
+        title: "Zoom box: zoom clicking and dragging",
+        text: "Zoom"
+    });
+
+    var panel = new OpenLayers.Control.Panel({
+        defaultControl: zb,
+        createControlMarkup: function(control) {
+            var button = document.createElement('button'),
+                iconSpan = document.createElement('span'),
+                textSpan = document.createElement('span');
+            iconSpan.innerHTML = ' ';
+            button.appendChild(iconSpan);
+            if (control.text) {
+                textSpan.innerHTML = control.text;
+            }
+            button.appendChild(textSpan);
+            return button;
+        }
+    });
+
+    panel.addControls([
+        zb,
+        new OpenLayers.Control.DrawFeature(vlayer, OpenLayers.Handler.Path,
+            {title:'Draw a feature', text: 'Draw'}),
+        new OpenLayers.Control.ZoomToMaxExtent({
+            title:"Zoom to the max extent",
+            text: "World"
+        }) 
+    ]);
+    
+    nav = new OpenLayers.Control.NavigationHistory({
+        previousOptions: {
+            title: "Go to previous map position",
+            text: "Prev"
+        },
+        nextOptions: {
+            title: "Go to next map position",
+            text: "Next"
+        },
+        displayClass: "navHistory"
+    });
+    // parent control must be added to the map
+    map.addControl(nav);
+    panel.addControls([nav.next, nav.previous]);
+    
+    map.addControl(panel);
+
+    map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
+}
diff --git a/examples/accessible.html b/examples/accessible.html
index d9b8a77..36236d5 100644
--- a/examples/accessible.html
+++ b/examples/accessible.html
@@ -31,13 +31,26 @@
                 font-size:1em;
                 text-decoration:underline;
             }
+            a.accesskey {
+                color: white;
+            }
+            a.accesskey:focus {
+                color: #436976;
+            }
+            a.zoom {
+                padding-right: 20px;
+            }
         </style>
         <script src="../lib/OpenLayers.js"></script>
         <script type="text/javascript">
             var map = null;
             function init(){
                 var options = {
-                    controls: [new OpenLayers.Control.KeyboardDefaults()]
+                    controls: [
+                        new OpenLayers.Control.KeyboardDefaults({
+                            observeElement: 'map'
+                        })
+                    ]
                 };
                 map = new OpenLayers.Map('map', options);
                 var wms = new OpenLayers.Layer.WMS(
@@ -57,31 +70,37 @@
             keyboard, pan, panning, zoom, zooming, accesskey
         </div>        
 
+        <a class="accesskey"
+           href=""
+           accesskey="1"
+           onclick="document.getElementById('map').focus(); return false;">
+           Go to map
+        </a>
+
         <p id="shortdesc">
-            Demonstrate how to use the KeyboardDefaults option parameter for layer types.
+            Demonstrate the KeyboardDefaults control and how to use links
+            with Access Keys to navigate the map with the keyboard.
         </p>
 
+        <a class="zoom"
+           href="javascript: void map.zoomIn();"
+           accesskey="i">
+            zoom <em>i</em>n</a>
+        <a class="zoom"
+           href="javascript: void map.zoomOut();"
+           accesskey="o">
+            zoom <em>o</em>ut</a>
+
         <table>
             <tbody>
                 <tr>
-                    <td>
-                        <a href="javascript: void map.zoomOut();"
-                           accesskey="o">
-                            zoom <em>o</em>ut
-                        </a>
-                    </td>
+                    <td> </td>
                     <td>
                         <a href="javascript: void map.pan(0, -map.getSize().h / 4);"
                            accesskey="n">
                             pan <em>n</em>orth
                         </a>
                     </td>
-                    <td>
-                        <a href="javascript: void map.zoomIn();"
-                           accesskey="i">
-                            zoom <em>i</em>n
-                        </a>
-                    </td>
                 </tr>
                 <tr>
                     <td>
@@ -90,7 +109,7 @@
                             pan <em>w</em>est
                         </a>
                     </td>
-                    <td id="map" class="smallmap"></td>
+                    <td id="map" class="smallmap" tabindex="0"></td>
                     <td>
                         <a href="javascript: void map.pan(map.getSize().w / 4, 0);"
                            accesskey="e">
@@ -113,9 +132,9 @@
 
         <div id="docs">
             <p>Navigate the map in one of three ways:</p>
-                <ul>
-                    <li>Click on the named links to zoom and pan</li>
-                    <li>Use following keys to pan and zoom:
+                <ol>
+                    <li>Use Access Key "1" (alt + 1) to focus the map element, and
+                        use following keys to pan and zoom:
                         <ul>
                             <li>+ (zoom in)</li>
                             <li>- (zoom out)</li>
@@ -124,8 +143,12 @@
                             <li>left-arrow (pan east)</li>
                             <li>right-arrow (pan west)</li>
                         </ul>
+                        See <a href=http://en.wikipedia.org/wiki/Access_key>wikipedia</a> for
+                        more detail about Access Keys.
                     </li>
-                    <li>If access keys work for links in your browser, use:
+                    <li>Navigate to pan and zoom links using the "tab" key, and
+                        press "enter" to pan and zoom</li>
+                    <li>If Access Keys work for links in your browser, use:
                         <ul>
                             <li>i (zoom in)</li>
                             <li>o (zoom out)</li>
@@ -135,7 +158,7 @@
                             <li>w (pan west)</li>
                         </ul>
                     </li>
-                </ul>
+                </ol>
             <p>
 
             This is an example of using alternate methods to control panning and zooming.  This approach uses map.pan() and map.zoom().  You'll note that to pan, additional math is necessary along with map.size() in order to set the distance to pan.
diff --git a/examples/all-overlays-google.html b/examples/all-overlays-google.html
index 55fa828..3b7790e 100644
--- a/examples/all-overlays-google.html
+++ b/examples/all-overlays-google.html
@@ -8,14 +8,14 @@
         <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&sensor=false"></script>
         <script src="../lib/OpenLayers.js"></script>
         <script src="all-overlays-google.js"></script>
     </head>
     <body onload="init()">
         <h1 id="title">All Overlays with Google and OSM</h1>
         <div id="tags">
-            overlay, baselayer, google, osm, openstreetmap
+            overlay, baselayer, google, osm, openstreetmap, light
         </div>
         <p id="shortdesc">
             Using the Google and OSM layers as overlays.
diff --git a/examples/all-overlays.html b/examples/all-overlays.html
index cecda0e..49e138e 100644
--- a/examples/all-overlays.html
+++ b/examples/all-overlays.html
@@ -61,7 +61,7 @@
     <body onload="init()">
         <h1 id="title">OpenLayers Overlays Only Example</h1>
         <div id="tags">
-            overlay, baselayer
+            overlay, baselayer, light
         </div> 
         <p id="shortdesc">
             Demonstrates a map with overlays only.
diff --git a/examples/animator.js b/examples/animator.js
index abe5403..5ed0f0c 100644
--- a/examples/animator.js
+++ b/examples/animator.js
@@ -131,14 +131,14 @@ Animator.prototype = {
 		str += ">";
 		return str;
 	}
-}
+};
 // merge the properties of two objects
 Animator.applyDefaults = function(defaults, prefs) {
 	prefs = prefs || {};
 	var prop, result = {};
 	for (prop in defaults) result[prop] = prefs[prop] !== undefined ? prefs[prop] : defaults[prop];
 	return result;
-}
+};
 // make an array from any object
 Animator.makeArray = function(o) {
 	if (o == null) return [];
@@ -146,7 +146,7 @@ Animator.makeArray = function(o) {
 	var result = [];
 	for (var i=0; i<o.length; i++) result[i] = o[i];
 	return result;
-}
+};
 // convert a dash-delimited-property to a camelCaseProperty (c/o Prototype, thanks Sam!)
 Animator.camelize = function(string) {
 	var oStringList = string.split('-');
@@ -161,27 +161,27 @@ Animator.camelize = function(string) {
 		camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
 	}
 	return camelizedString;
-}
+};
 // syntactic sugar for creating CSSStyleSubjects
 Animator.apply = function(el, style, options) {
 	if (style instanceof Array) {
 		return new Animator(options).addSubject(new CSSStyleSubject(el, style[0], style[1]));
 	}
 	return new Animator(options).addSubject(new CSSStyleSubject(el, style));
-}
+};
 // make a transition function that gradually accelerates. pass a=1 for smooth
 // gravitational acceleration, higher values for an exaggerated effect
 Animator.makeEaseIn = function(a) {
 	return function(state) {
 		return Math.pow(state, a*2); 
 	}
-}
+};
 // as makeEaseIn but for deceleration
 Animator.makeEaseOut = function(a) {
 	return function(state) {
 		return 1 - Math.pow(1 - state, a*2); 
 	}
-}
+};
 // make a transition function that, like an object with momentum being attracted to a point,
 // goes past the target then returns
 Animator.makeElastic = function(bounces) {
@@ -189,7 +189,7 @@ Animator.makeElastic = function(bounces) {
 		state = Animator.tx.easeInOut(state);
 		return ((1-Math.cos(state * Math.PI * bounces)) * (1 - state)) + state; 
 	}
-}
+};
 // make an Attack Decay Sustain Release envelope that starts and finishes on the same level
 // 
 Animator.makeADSR = function(attackEnd, decayEnd, sustainEnd, sustainLevel) {
@@ -206,7 +206,7 @@ Animator.makeADSR = function(attackEnd, decayEnd, sustainEnd, sustainLevel) {
 		}
 		return sustainLevel * (1 - ((state - sustainEnd) / (1 - sustainEnd)));
 	}
-}
+};
 // make a transition function that, like a ball falling to floor, reaches the target and/
 // bounces back again
 Animator.makeBounce = function(bounces) {
@@ -215,7 +215,7 @@ Animator.makeBounce = function(bounces) {
 		state = fn(state); 
 		return state <= 1 ? state : 2-state;
 	}
-}
+};
  
 // pre-made transition functions to use with the 'transition' option
 Animator.tx = {
@@ -233,7 +233,7 @@ Animator.tx = {
 	veryElastic: Animator.makeElastic(3),
 	bouncy: Animator.makeBounce(1),
 	veryBouncy: Animator.makeBounce(3)
-}
+};
 
 // animates a pixel-based style property between two integer values
 function NumericalStyleSubject(els, property, from, to, units) {
@@ -271,7 +271,7 @@ NumericalStyleSubject.prototype = {
 	inspect: function() {
 		return "\t" + this.property + "(" + this.from + this.units + " to " + this.to + this.units + ")\n";
 	}
-}
+};
 
 // animates a colour based style property between two hex values
 function ColorStyleSubject(els, property, from, to) {
@@ -313,7 +313,7 @@ ColorStyleSubject.prototype = {
 	inspect: function() {
 		return "\t" + this.property + "(" + this.origFrom + " to " + this.origTo + ")\n";
 	}
-}
+};
 
 // return a properly formatted 6-digit hex colour spec, or false
 ColorStyleSubject.parseColor = function(string) {
@@ -336,14 +336,14 @@ ColorStyleSubject.parseColor = function(string) {
 		return '#' + match[1];
 	}
 	return false;
-}
+};
 // convert a number to a 2 digit hex string
 ColorStyleSubject.toColorPart = function(number) {
 	if (number > 255) number = 255;
 	var digits = number.toString(16);
 	if (number < 16) return '0' + digits;
 	return digits;
-}
+};
 ColorStyleSubject.parseColor.rgbRe = /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i;
 ColorStyleSubject.parseColor.hexRe = /^\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
 
@@ -367,7 +367,7 @@ DiscreteStyleSubject.prototype = {
 	inspect: function() {
 		return "\t" + this.property + "(" + this.from + " to " + this.to + " @ " + this.threshold + ")\n";
 	}
-}
+};
 
 // animates between two styles defined using CSS.
 // if style1 and style2 are present, animate between them, if only style1
@@ -482,7 +482,7 @@ CSSStyleSubject.prototype = {
 		}
 		return str;
 	}
-}
+};
 // get the current value of a css property, 
 CSSStyleSubject.getStyle = function(el, property){
 	var style;
@@ -497,7 +497,7 @@ CSSStyleSubject.getStyle = function(el, property){
 		style = el.currentStyle[property];
 	}
 	return style || el.style[property]
-}
+};
 
 
 CSSStyleSubject.ruleRe = /^\s*([a-zA-Z\-]+)\s*:\s*(\S(.+\S)?)\s*$/;
@@ -604,7 +604,7 @@ AnimatorChain.prototype = {
 			this.animators[this.current].seekTo(1);
 		}
 	}
-}
+};
 
 // an Accordion is a class that creates and controls a number of Animators. An array of elements is passed in,
 // and for each element an Animator and a activator button is created. When an Animator's activator button is
@@ -667,4 +667,4 @@ Accordion.prototype = {
 			document.location.hash = this.rememberanceTexts[section];
 		}
 	}
-}
+};
diff --git a/examples/arcgiscache_jsonp.html b/examples/arcgiscache_jsonp.html
index 282d636..5a92427 100644
--- a/examples/arcgiscache_jsonp.html
+++ b/examples/arcgiscache_jsonp.html
@@ -7,20 +7,17 @@
     <link rel="stylesheet" href="style.css" type="text/css">
 
     <script src="../lib/OpenLayers.js"></script>
-    <script src="../lib/OpenLayers/Layer/ArcGISCache.js" type="text/javascript"></script>
-    
-    <!-- This is to simplify making the JSONP request for this example -->
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
     
     <script type="text/javascript">
         var map,
             layerURL = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer";
         
         function init() {
-            var jsonp_url = layerURL + '?f=json&pretty=true&callback=?';
-            $.getJSON(jsonp_url, function(data) {                
-                initMap(data);
-            });
+            var jsonp = new OpenLayers.Protocol.Script();
+            jsonp.createRequest(layerURL, {
+                f: 'json', 
+                pretty: 'true'
+            }, initMap);
         }
 
         function initMap(layerInfo){
@@ -46,8 +43,7 @@
                 resolutions: baseLayer.resolutions,
                 numZoomLevels: baseLayer.numZoomLevels,
                 tileSize: baseLayer.tileSize,
-                displayProjection: baseLayer.displayProjection,
-                StartBounds: baseLayer.initialExtent                
+                displayProjection: baseLayer.displayProjection  
             });
             map.addLayers([baseLayer]);
             
@@ -93,7 +89,7 @@
         <p>
         This method automatically configures the layer using the capabilities object 
         generated by the server itself.  This page shows how to construct the url for the server capabilities object,
-        retrieve it using JSONP (and jQuery), and pass it in during construction.  Note that in this case, 
+        retrieve it using JSONP, and pass it in during construction.  Note that in this case, 
         the layer is constructed before the map.  This approach greatly simplifies the
         configuration of your map, and works best when all your tiles / overlays are similarly laid out.
         If you are using a live AGS map server for your layer, it can be helpful to check your
diff --git a/examples/attribution.html b/examples/attribution.html
index 328f342..1f4ce12 100644
--- a/examples/attribution.html
+++ b/examples/attribution.html
@@ -40,7 +40,7 @@
         <h1 id="title">Attribution Example</h1>
 
         <div id="tags">
-            copyright, watermark, logo, attribution
+            copyright, watermark, logo, attribution, light
         </div>
 
         <p id="shortdesc">
diff --git a/examples/bing-tiles-restrictedzoom.html b/examples/bing-tiles-restrictedzoom.html
index 992bd14..afbd6a9 100644
--- a/examples/bing-tiles-restrictedzoom.html
+++ b/examples/bing-tiles-restrictedzoom.html
@@ -2,7 +2,7 @@
 <html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <meta name="apple-mobile-web-app-capable" content="yes">
     <title>Basic Bing Tiles with a Subset of Resolutions Example</title>
     <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
diff --git a/examples/bing-tiles.html b/examples/bing-tiles.html
index dbc55d8..f3fe61d 100644
--- a/examples/bing-tiles.html
+++ b/examples/bing-tiles.html
@@ -20,7 +20,7 @@
     <h1 id="title">Basic Bing Tiles Example</h1>
 
     <div id="tags">
-        bing tiles
+        bing tiles, light
     </div>
 
     <div id="shortdesc">Use Bing with direct tile access</div>
diff --git a/examples/bing.html b/examples/bing.html
index 53ae68f..3f0c4cb 100644
--- a/examples/bing.html
+++ b/examples/bing.html
@@ -7,35 +7,37 @@
     <title>OpenLayers Bing Example</title>
     <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
     <link rel="stylesheet" href="style.css" type="text/css">
-    <script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us"></script>
 
     <script src="../lib/OpenLayers.js"></script>
     <script>
 
+        // API key for http://openlayers.org. Please get your own at
+        // http://bingmapsportal.com/ and use that instead.
+        var apiKey = "AqTGBsziZHIJYYxgivLBf0hVdrAk9mWO5cQcb8Yux8sW5M8c8opEC2lZqKR1ZZXf";
         var map;
- 
-        function init(){
-            // setting restrictedExtent so that we can use the 
-            // VirtualEarth-layers, see e.g. 
-            // http://dev.openlayers.org/apidocs/files/OpenLayers/Layer/VirtualEarth-js.html
-            var restrictedExtent = new OpenLayers.Bounds(-180, -90, 
-                180, 90);
-            
+
+        function init() {
             map = new OpenLayers.Map("map");
             
             map.addControl(new OpenLayers.Control.LayerSwitcher());
 
-            var shaded = new OpenLayers.Layer.VirtualEarth("Shaded", {
-                type: VEMapStyle.Shaded
+            var road = new OpenLayers.Layer.Bing({
+                name: "Road",
+                key: apiKey,
+                type: "Road"
             });
-            var hybrid = new OpenLayers.Layer.VirtualEarth("Hybrid", {
-                type: VEMapStyle.Hybrid
+            var hybrid = new OpenLayers.Layer.Bing({
+                name: "Hybrid",
+                key: apiKey,
+                type: "AerialWithLabels"
             });
-            var aerial = new OpenLayers.Layer.VirtualEarth("Aerial", {
-                type: VEMapStyle.Aerial
+            var aerial = new OpenLayers.Layer.Bing({
+                name: "Aerial",
+                key: apiKey,
+                type: "Aerial"
             });
 
-            map.addLayers([shaded, hybrid, aerial]);
+            map.addLayers([road, hybrid, aerial]);
 
             map.setCenter(new OpenLayers.LonLat(-110, 45), 3);
         }
@@ -46,7 +48,7 @@
     <h1 id="title">Bing Example</h1>
 
     <div id="tags">
-        Bing, Microsoft, Virtual Earth
+        Bing, Microsoft, Virtual Earth, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/boxes-vector.html b/examples/boxes-vector.html
index f3b5f01..d18dbbd 100644
--- a/examples/boxes-vector.html
+++ b/examples/boxes-vector.html
@@ -45,7 +45,7 @@
         <h1 id="title">Boxes Example Vector</h1>
 
         <div id="tags">
-            box, vector, annotation
+            box, vector, annotation, light
         </div>
 
         <p id="shortdesc">
diff --git a/examples/buffer.html b/examples/buffer.html
index 03beb12..77e88c4 100644
--- a/examples/buffer.html
+++ b/examples/buffer.html
@@ -28,7 +28,7 @@
                         "http://vmap0.tiles.osgeo.org/wms/vmap0",
                         {layers: 'basic'}, {'buffer':4} );
                 map.addLayer(layer);
-                map.addControl(new OpenLayers.Control.LayerSwitcher())
+                map.addControl(new OpenLayers.Control.LayerSwitcher());
                 map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
             }
         </script>
@@ -37,7 +37,7 @@
         <h1 id="title">Buffer Example</h1>
 
         <div id="tags">
-            buffer, performance, tile
+            buffer, performance, tile, light
         </div>
 
         <p id="shortdesc">
@@ -48,7 +48,7 @@
 
         <div id="docs">
             Use the buffer property to control how many tiles are included
-            outside the visible map area. Default is 2.
+            outside the visible map area. Default is 0.
         </div>
     </body>
 </html>
diff --git a/examples/cache-read.html b/examples/cache-read.html
new file mode 100644
index 0000000..1db6a69
--- /dev/null
+++ b/examples/cache-read.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers Cache Read 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 src="cache-read.js"></script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">Cache Read Example</h1>
+
+    <div id="tags">
+        mobile, local storage, persistence, cache, html5
+    </div>
+
+    <div id="shortdesc">Caching viewed tiles</div>
+
+    <div id="map" class="smallmap"></div>
+    <div id="status"></div>
+    <br>
+    <div id="docs">
+        <p>This example shows how to use the CacheRead control to fetch cached
+        tiles from the browser's Local Storage. As you pan and zoom the map,
+        you can see how the number of cache hits incrases as you browse regions
+        that are available in the cache.</p>
+        <p>To fill the cache with tiles, switch to the
+        <a href="cache-write.html">cache-write.html</a> example.</p>
+        <p>See <a href="cache-read.js">cache-read.js</a> for the source
+        code.</p>
+    </div>
+  </body>
+</html>
diff --git a/examples/cache-read.js b/examples/cache-read.js
new file mode 100644
index 0000000..1f79889
--- /dev/null
+++ b/examples/cache-read.js
@@ -0,0 +1,36 @@
+var map, cacheRead;
+function init() {
+    map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        layers: [
+            new OpenLayers.Layer.WMS("OSGeo", "http://vmap0.tiles.osgeo.org/wms/vmap0", {
+                layers: "basic"
+            }, {
+                eventListeners: {
+                    tileloaded: updateHits
+                }
+            })
+        ],
+        center: [0, 0],
+        zoom: 1
+    });
+    cacheRead = new OpenLayers.Control.CacheRead();
+    map.addControl(cacheRead);
+
+
+
+    // User interface
+    var status = document.getElementById("status"),
+        hits = 0;
+
+    // update the number of cached tiles and detect local storage support
+    function updateHits(evt) {
+        hits += evt.tile.url.substr(0, 5) === "data:";
+        if (window.localStorage) {
+            status.innerHTML = hits + " cache hits.";
+        } else {
+            status.innerHTML = "Local storage not supported. Try a different browser.";
+        }
+    }
+}
\ No newline at end of file
diff --git a/examples/cache-write.html b/examples/cache-write.html
new file mode 100644
index 0000000..a5ad4ea
--- /dev/null
+++ b/examples/cache-write.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers Cache Write 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>OpenLayers.Console = window.console || OpenLayers.Console;</script>
+    <script src="cache-write.js"></script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">Cache Write Example</h1>
+
+    <div id="tags">
+        mobile, local storage, persistence, cache, html5
+    </div>
+
+    <div id="shortdesc">Caching viewed tiles</div>
+
+    <div id="map" class="smallmap"></div>
+    <div>Cache status: <span id="status"></span></div>
+    <div><button id="clear">Clear cache</button></div>
+    <br>
+    <div id="docs">
+        <p>This example shows how to use the CacheWrite control to cache the
+        tiles. Caching is turned on, and as you pan and zoom the map, every
+        tile that is loaded is also copied to the browsers Local Storage.</p>
+        <p>To use the cached tiles, switch to the
+        <a href="cache-read.html">cache-read.html</a> example.</p>
+        <p>See <a href="cache-write.js">cache-write.js</a> for the source
+        code.</p>
+    </div>
+  </body>
+</html>
diff --git a/examples/cache-write.js b/examples/cache-write.js
new file mode 100644
index 0000000..8f4ec9e
--- /dev/null
+++ b/examples/cache-write.js
@@ -0,0 +1,48 @@
+// Use proxy to get same origin URLs for tiles that don't support CORS.
+OpenLayers.ProxyHost = "proxy.cgi?url=";
+
+var map, cacheWrite;
+
+function init() {
+    map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        layers: [
+            new OpenLayers.Layer.WMS("OSGeo", "http://vmap0.tiles.osgeo.org/wms/vmap0", {
+                layers: "basic"
+            }, {
+                eventListeners: {
+                    tileloaded: updateStatus
+                }
+            })
+        ],
+        center: [0, 0],
+        zoom: 1
+    });
+    cacheWrite = new OpenLayers.Control.CacheWrite({
+        autoActivate: true,
+        imageFormat: "image/jpeg",
+        eventListeners: {
+            cachefull: function() { status.innerHTML = "Cache full."; }
+        }
+    });
+    map.addControl(cacheWrite);
+
+
+
+    // User interface
+    var status = document.getElementById("status");
+    document.getElementById("clear").onclick = function() {
+        OpenLayers.Control.CacheWrite.clearCache();
+        updateStatus();
+    };
+
+    // update the number of cached tiles and detect local storage support
+    function updateStatus() {
+        if (window.localStorage) {
+            status.innerHTML = localStorage.length + " entries in cache.";
+        } else {
+            status.innerHTML = "Local storage not supported. Try a different browser.";
+        }
+    }
+}
\ No newline at end of file
diff --git a/examples/canvas-hit-detection.html b/examples/canvas-hit-detection.html
index 5148b70..2f86ea7 100644
--- a/examples/canvas-hit-detection.html
+++ b/examples/canvas-hit-detection.html
@@ -3,7 +3,7 @@
     <head>
         <title>OpenLayers Canvas Hit Detection Example</title>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0;">
+        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0">
         <meta name="apple-mobile-web-app-capable" content="yes">
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
         <link rel="stylesheet" href="style.css" type="text/css">
diff --git a/examples/canvas.js b/examples/canvas.js
index 6440c39..bb2f224 100644
--- a/examples/canvas.js
+++ b/examples/canvas.js
@@ -5,12 +5,7 @@ function init() {
     map = new OpenLayers.Map({
         div: "map",
         projection: new OpenLayers.Projection("EPSG:900913"),
-        displayProjection: new OpenLayers.Projection("EPSG:4326"),
-        units: "m",
-        maxResolution: 156543.0339,
-        maxExtent: new OpenLayers.Bounds(
-            -20037508, -20037508, 20037508, 20037508
-        )
+        displayProjection: new OpenLayers.Projection("EPSG:4326")
     });
 
     var g = new OpenLayers.Layer.Google("Google Layer", {
diff --git a/examples/click.html b/examples/click.html
index 98945c3..094ff29 100644
--- a/examples/click.html
+++ b/examples/click.html
@@ -70,7 +70,7 @@
 
         <div id="tags">
             click control, double, doubleclick, double-click, event, events, 
-            propagation
+            propagation, light
         </div>
 
         <p id="shortdesc">
diff --git a/examples/clientzoom.html b/examples/clientzoom.html
new file mode 100644
index 0000000..c32c7c1
--- /dev/null
+++ b/examples/clientzoom.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>OpenLayers Client Zoom 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/Firebug/firebug.js"></script>
+		<script src="../lib/OpenLayers.js"></script>
+        <script src="clientzoom.js"></script>
+        <style>
+            .olControlAttribution {
+                bottom: 5px;
+            }
+            #map {
+                width: 600px;
+                height: 400px;
+            }
+        </style>
+    </head>
+    <body onload="init();">
+        <h1 id="title">Client Zoom</h1>
+        <div id="tags">
+            client zoom continuous zooming
+        </div>
+        <p id="shortdesc">
+
+            This example demonstrates the <strong>"client zoom"</strong>
+            functionality, where OpenLayers stretches the layer div when the
+            resolution is not supported by that layer's tile service.
+
+        </p>
+
+        <div id="map"></div>
+
+        <div id="docs">
+
+            <p>
+
+            The map of this example is configured with 22 resolutions, while
+            the OSM tile server supports the first 19 resolutions only. When
+            the zoom level is 19, 20 or 21 "client zoom" is applied to the OSM
+            layer, i.e. the OSM layer div is stretched as necessary.  The map's
+            initial zoom is 18. So if you zoom in using the zoom bar's "+"
+            button you'll effectively trigger "client zoom".
+
+            </p>
+
+            <p>
+
+            For demonstration purpose the map of this example has
+            <code>fractionalZoom</code> set to true. So "client zoom" also
+            applies if you choose arbitrary zoom levels using the slider of the
+            zoom bar, or shift-drag boxes to zoom to arbitrary extents.
+            "client zoom" therefore allows continous zooming for tiled layers.
+
+            </p>
+
+            <p>
+
+            Enabling "client zoom" on a layer is done by passing
+            <code>serverResolutions</code> to the layer constructor.
+            <code>serverResolutions</code> is the list of resolutions supported
+            by the tile service. See the <a href="clientzoom.js"
+                target="_blank"> clientzoom.js source</a>.
+
+            </p>
+        </div>
+    </body>
+</html>
diff --git a/examples/clientzoom.js b/examples/clientzoom.js
new file mode 100644
index 0000000..30071ed
--- /dev/null
+++ b/examples/clientzoom.js
@@ -0,0 +1,39 @@
+var map;
+
+function init() {
+
+    map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        controls: [],
+        fractionalZoom: true
+    });
+
+    var osm = new OpenLayers.Layer.OSM(null, null, {
+        resolutions: [156543.03390625, 78271.516953125, 39135.7584765625,
+                      19567.87923828125, 9783.939619140625, 4891.9698095703125,
+                      2445.9849047851562, 1222.9924523925781, 611.4962261962891,
+                      305.74811309814453, 152.87405654907226, 76.43702827453613,
+                      38.218514137268066, 19.109257068634033, 9.554628534317017,
+                      4.777314267158508, 2.388657133579254, 1.194328566789627,
+                      0.5971642833948135, 0.25, 0.1, 0.05],
+        serverResolutions: [156543.03390625, 78271.516953125, 39135.7584765625,
+                            19567.87923828125, 9783.939619140625,
+                            4891.9698095703125, 2445.9849047851562,
+                            1222.9924523925781, 611.4962261962891,
+                            305.74811309814453, 152.87405654907226,
+                            76.43702827453613, 38.218514137268066,
+                            19.109257068634033, 9.554628534317017,
+                            4.777314267158508, 2.388657133579254,
+                            1.194328566789627, 0.5971642833948135],
+        transitionEffect: 'resize'
+    });
+
+    map.addLayers([osm]);
+    map.addControls([
+            new OpenLayers.Control.Navigation(),
+            new OpenLayers.Control.Attribution(),
+            new OpenLayers.Control.PanZoomBar()
+    ]);
+    map.setCenter(new OpenLayers.LonLat(659688.852138, 5710701.2962197), 18);
+}
diff --git a/examples/controls.html b/examples/controls.html
index 33169e0..36c8825 100644
--- a/examples/controls.html
+++ b/examples/controls.html
@@ -8,6 +8,16 @@
 
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
         <link rel="stylesheet" href="style.css" type="text/css">
+
+        <style>
+        /* round corners of layer switcher, and make it transparent */
+        .olControlLayerSwitcher .layersDiv {
+            border-radius: 10px 0 0 10px;
+            opacity: 0.75;
+            filter: alpha(opacity=75);
+        }
+        </style>
+
         <script src="../lib/OpenLayers.js"></script>
         <script type="text/javascript">
             var map;
diff --git a/examples/cql-format.js b/examples/cql-format.js
index 2119b1a..9b4a210 100644
--- a/examples/cql-format.js
+++ b/examples/cql-format.js
@@ -37,7 +37,7 @@ var map = new OpenLayers.Map({
 function loadFeatures(data) {
     var features = new OpenLayers.Format.GeoJSON().read(data);
     states.addFeatures(features);
-};
+}
 
 // update filter and redraw when form is submitted
 var cql = document.getElementById("cql");
diff --git a/examples/cross-origin-xml.html b/examples/cross-origin-xml.html
new file mode 100644
index 0000000..b811bf7
--- /dev/null
+++ b/examples/cross-origin-xml.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>OpenLayers Script Protocol XML Example</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <script src="../lib/OpenLayers.js"></script>
+    </head>
+    <body>
+        <h1 id="title">Script Protocol With XML</h1>
+        <div id="tags">
+            protocol, script, cross origin, xml, advanced
+        </div>
+        <p id="shortdesc">
+            Demonstrates how, with a custom parseFeatures method, the script protocol can be used with YQL for cross-origin loading of files in any of the XML formats supported by OpenLayers.
+        </p>
+        <div id="map" class="smallmap"></div>
+        <div id="docs">
+            <p>
+                YQL can wrap a jsonp callback around an XML file, which effectively means Yahoo's servers are acting as a proxy for cross-origin feature loading. This example uses a GPX file, but the same technique can be used for other formats such as KML.
+            </p>
+            <p>
+                View the <a href="cross-origin-xml.js" target="_blank">cross-origin-xml.js</a>
+                source to see how this is done
+            </p>
+        </div>
+        <script src="cross-origin-xml.js"></script>
+    </body>
+</html>
diff --git a/examples/cross-origin-xml.js b/examples/cross-origin-xml.js
new file mode 100644
index 0000000..a97cc1f
--- /dev/null
+++ b/examples/cross-origin-xml.js
@@ -0,0 +1,25 @@
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [
+        new OpenLayers.Layer.OSM(),
+        new OpenLayers.Layer.Vector("Vectors", {
+            projection: new OpenLayers.Projection("EPSG:4326"),
+            strategies: [new OpenLayers.Strategy.Fixed()],
+            protocol: new OpenLayers.Protocol.Script({
+                url: "http://query.yahooapis.com/v1/public/yql",
+                params: {
+                    q: "select * from xml where url='http://www.topografix.com/fells_loop.gpx'"
+                },
+                format: new OpenLayers.Format.GPX(),
+                parseFeatures: function(data) {
+                    return this.format.read(data.results[0]);
+                }
+            }),
+            eventListeners: {
+                "featuresadded": function () {
+                    this.map.zoomToExtent(this.getDataExtent());
+                }
+            }
+        })
+    ]
+});
diff --git a/examples/custom-control.html b/examples/custom-control.html
index 16b9e50..8688751 100644
--- a/examples/custom-control.html
+++ b/examples/custom-control.html
@@ -50,7 +50,7 @@
         <h1 id="title">Custom Control Example</h1>
 
         <div id="tags">
-            control, panel, rectangle
+            control, panel, rectangle, light
         </div>
 
         <p id="shortdesc">
diff --git a/examples/donut.js b/examples/donut.js
index 01ae57d..067be62 100644
--- a/examples/donut.js
+++ b/examples/donut.js
@@ -31,7 +31,7 @@ function updateOutput(event) {
 map.layers[1].events.on({
     sketchmodified: updateOutput,
     sketchcomplete: updateOutput
-})
+});
 
 // add behavior to UI elements
 function toggleControl(element) {
diff --git a/examples/doubleSetCenter.html b/examples/doubleSetCenter.html
deleted file mode 100644
index eb7ffa0..0000000
--- a/examples/doubleSetCenter.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-        <meta name="apple-mobile-web-app-capable" content="yes">
-        <title>OpenLayers Double Set Center Example</title>
-       
-        <script src="../lib/OpenLayers.js"></script>
-        <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">Double Set Center Example</h1>
-
-        <div id="tags">
-            center, centering, cleanup
-        </div>
-
-        <p id="shortdesc">
-            Demonstrate the behavior of two calls to set the center after instantiating the layer object.
-        </p>
-
-        <div id="map" class="smallmap"></div>
-    
-        <script defer="defer" type="text/javascript">
-            var map = new OpenLayers.Map('map');
-            var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "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));
-        </script>
-
-        <div id="docs"></div>
-    </body>
-</html>
-
diff --git a/examples/draw-feature.html b/examples/draw-feature.html
index d292794..f70e9ea 100644
--- a/examples/draw-feature.html
+++ b/examples/draw-feature.html
@@ -33,18 +33,27 @@
                 var pointLayer = new OpenLayers.Layer.Vector("Point Layer");
                 var lineLayer = new OpenLayers.Layer.Vector("Line Layer");
                 var polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer");
+                var boxLayer = new OpenLayers.Layer.Vector("Box layer");
 
-                map.addLayers([wmsLayer, pointLayer, lineLayer, polygonLayer]);
+                map.addLayers([wmsLayer, pointLayer, lineLayer, polygonLayer, boxLayer]);
                 map.addControl(new OpenLayers.Control.LayerSwitcher());
                 map.addControl(new OpenLayers.Control.MousePosition());
 
                 drawControls = {
                     point: new OpenLayers.Control.DrawFeature(pointLayer,
-                                OpenLayers.Handler.Point),
+                        OpenLayers.Handler.Point),
                     line: new OpenLayers.Control.DrawFeature(lineLayer,
-                                OpenLayers.Handler.Path),
+                        OpenLayers.Handler.Path),
                     polygon: new OpenLayers.Control.DrawFeature(polygonLayer,
-                                OpenLayers.Handler.Polygon)
+                        OpenLayers.Handler.Polygon),
+                    box: new OpenLayers.Control.DrawFeature(boxLayer,
+                        OpenLayers.Handler.RegularPolygon, {
+                            handlerOptions: {
+                                sides: 4,
+                                irregular: true
+                            }
+                        }
+                    )
                 };
 
                 for(var key in drawControls) {
@@ -80,11 +89,11 @@
         <h1 id="title">OpenLayers Draw Feature Example</h1>
 
         <div id="tags">
-            point, line, linestring, polygon, digitizing, geometry, draw, drag
+            point, line, linestring, polygon, box, digitizing, geometry, draw, drag
         </div>
 
         <p id="shortdesc">
-            Demonstrate on-screen digitizing tools for point, line, and polygon creation.
+            Demonstrate on-screen digitizing tools for point, line, polygon and box creation.
         </p>
 
         <div id="map" class="smallmap"></div>
@@ -108,6 +117,10 @@
                 <label for="polygonToggle">draw polygon</label>
             </li>
             <li>
+                <input type="radio" name="type" value="box" id="boxToggle" onclick="toggleControl(this);" />
+                <label for="boxToggle">draw box</label>
+            </li>
+            <li>
                 <input type="checkbox" name="allow-pan" value="allow-pan" id="allowPanCheckbox" checked=true onclick="allowPan(this);" />
                 <label for="allowPanCheckbox">allow pan while drawing</label>
             </li>
@@ -119,6 +132,8 @@
             Double-click to finish drawing.</p>
             <p>With the polygon drawing control active, click on the map to add the points that make up your
             polygon.  Double-click to finish drawing.</p>
+            <p>With the box drawing control active, click in the map and drag the mouse to get a rectangle. Release
+            the mouse to finish.</p>
             <p>With any drawing control active, paning the map can still be achieved.  Drag the map as
             usual for that.</p>
             <p>Hold down the shift key while drawing to activate freehand mode.  While drawing lines or polygons
diff --git a/examples/draw-undo-redo.html b/examples/draw-undo-redo.html
index 40ad3e2..6d5fa72 100644
--- a/examples/draw-undo-redo.html
+++ b/examples/draw-undo-redo.html
@@ -3,7 +3,7 @@
     <head>
         <title>OpenLayers Undo/Redo Drawing Methods</title>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0;">
+        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0">
         <meta name="apple-mobile-web-app-capable" content="yes">
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
         <link rel="stylesheet" href="style.css" type="text/css">
diff --git a/examples/editing-methods.html b/examples/editing-methods.html
index eeab916..5a28710 100644
--- a/examples/editing-methods.html
+++ b/examples/editing-methods.html
@@ -3,7 +3,7 @@
     <head>
         <title>OpenLayers Editing Methods</title>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0;">
+        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0">
         <meta name="apple-mobile-web-app-capable" content="yes">
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
         <link rel="stylesheet" href="style.css" type="text/css">
diff --git a/examples/editing-methods.js b/examples/editing-methods.js
index 6986a99..6c139a2 100644
--- a/examples/editing-methods.js
+++ b/examples/editing-methods.js
@@ -29,7 +29,7 @@ $("insertXY").onclick = function() {
     if (values != null) {
         draw.insertXY(values[0], values[1]);
     }
-}
+};
 $("insertDeltaXY").onclick = function() {
     var values = parseInput(
         window.prompt(
@@ -39,7 +39,7 @@ $("insertDeltaXY").onclick = function() {
     if (values != null) {
         draw.insertDeltaXY(values[0], values[1]);
     }
-}
+};
 $("insertDirectionLength").onclick = function() {
     var values = parseInput(
         window.prompt(
@@ -49,7 +49,7 @@ $("insertDirectionLength").onclick = function() {
     if (values != null) {
         draw.insertDirectionLength(values[0], values[1]);
     }
-}
+};
 $("insertDeflectionLength").onclick = function() {
     var values = parseInput(
         window.prompt(
@@ -59,13 +59,13 @@ $("insertDeflectionLength").onclick = function() {
     if (values != null) {
         draw.insertDeflectionLength(values[0], values[1]);
     }
-}
+};
 $("cancel").onclick = function() {
     draw.cancel();
-}
+};
 $("finishSketch").onclick = function() {
     draw.finishSketch();
-}
+};
 
 function parseInput(text) {
     var values = text.split(",");
@@ -80,4 +80,4 @@ function parseInput(text) {
         }
     }
     return values;
-}
\ No newline at end of file
+}
diff --git a/examples/example-list.html b/examples/example-list.html
index 2d3530f..3ac9120 100644
--- a/examples/example-list.html
+++ b/examples/example-list.html
@@ -64,7 +64,7 @@
             }
             .ex_classes{
                 font-size: .7em;
-                color: grey;
+                color: gray;
                 display: none;
             }
             #toc {
@@ -169,7 +169,7 @@
                     var words = text.split(/\W+/);
                     var scores = {};
                     for(var i=0; i<words.length; ++i) {
-                        var word = words[i].toLowerCase()
+                        var word = words[i].toLowerCase();
                         var dict = info.index[word];
                         var updateScores = function() {
                             for(exIndex in dict) {
@@ -185,7 +185,7 @@
                                     scores[exIndex][word] = count;
                                 }
                             }
-                        }
+                        };
                         if(dict) {
                             updateScores();
                         } else {
@@ -255,7 +255,7 @@
                 template = new jugl.Template("template");
                 target = document.getElementById("examples");
                 listExamples(info.examples);
-                document.getElementById("keywords").onkeyup = inputChange
+                document.getElementById("keywords").onkeyup = inputChange;
                 parseQuery();
             };
         </script>
diff --git a/examples/example.html b/examples/example.html
index 84a0bc3..cfaccb8 100644
--- a/examples/example.html
+++ b/examples/example.html
@@ -10,7 +10,7 @@
     </head>
     <body>
         <h1 id="title">OpenLayers Example</h1>
-        <div id="tags">simple, basic</div>
+        <div id="tags">simple, basic, light</div>
         <p id="shortdesc">
             Demonstrate a simple map with an overlay that includes layer switching controls.
         </p>
diff --git a/examples/filter-strategy.js b/examples/filter-strategy.js
index 9f8d394..da5656a 100644
--- a/examples/filter-strategy.js
+++ b/examples/filter-strategy.js
@@ -20,11 +20,11 @@ function startAnimation() {
             filter.lowerBoundary = currentDate;
             filter.upperBoundary = new Date(currentDate.getTime() + (span * 1000));
             filterStrategy.setFilter(filter);
-            currentDate = new Date(currentDate.getTime() + (step * 1000))
+            currentDate = new Date(currentDate.getTime() + (step * 1000));
         } else {
             stopAnimation(true);
         }
-    }
+    };
     animationTimer = window.setInterval(next, interval * 1000);
 }
 
diff --git a/examples/fullScreen.html b/examples/fullScreen.html
index 7a92deb..f5df04a 100644
--- a/examples/fullScreen.html
+++ b/examples/fullScreen.html
@@ -25,9 +25,8 @@
             }
         </style>
         <script src="../lib/OpenLayers.js"></script>
-        <script src="fullScreen.js"></script>
     </head>
-    <body onload="init()">
+    <body>
         <div id="map"></div>
 
           <div id="text">
@@ -38,7 +37,7 @@
               </div>
 
               <p id="shortdesc">
-                Demonstrate a map that fill the entire browser window.
+                Demonstrate a map that fills the entire browser window.
             </p>
 
             <div id="docs">
@@ -48,6 +47,7 @@
                 <a href="fullScreen.js" target="_blank">fullScreen.js source</a> 
                 to see how this is done.</p>
             </div>
+            <script src="fullScreen.js"></script>
         </div>
     </body>
 </html>
diff --git a/examples/fullScreen.js b/examples/fullScreen.js
index 93ed57a..dc8ed19 100644
--- a/examples/fullScreen.js
+++ b/examples/fullScreen.js
@@ -1,15 +1,30 @@
-var map;
-function init(){
-    map = new OpenLayers.Map('map');
+var urls = [
+    "http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",
+    "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png",
+    "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"
+];
 
-    var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-        "http://vmap0.tiles.osgeo.org/wms/vmap0",
-        {layers: 'basic'} );
-        var ol_wms_nobuffer = new OpenLayers.Layer.WMS( "OpenLayers WMS (no tile buffer)",
-        "http://vmap0.tiles.osgeo.org/wms/vmap0",
-        {layers: 'basic'}, {buffer: 0});
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [
+        new OpenLayers.Layer.XYZ("OSM (with buffer)", urls, {
+            transitionEffect: "resize", buffer: 2, sphericalMercator: true
+        }),
+        new OpenLayers.Layer.XYZ("OSM (without buffer)", urls, {
+            transitionEffect: "resize", buffer: 0, sphericalMercator: true
+        })
+    ],
+    controls: [
+        new OpenLayers.Control.Navigation({
+            dragPanOptions: {
+                enableKinetic: true
+            }
+        }),
+        new OpenLayers.Control.PanZoom(),
+        new OpenLayers.Control.Attribution()
+    ],
+    center: [0, 0],
+    zoom: 3
+});
 
-    map.addLayers([ol_wms, ol_wms_nobuffer]);
-    map.addControl(new OpenLayers.Control.LayerSwitcher());
-    map.setCenter(new OpenLayers.LonLat(0, 0), 6);
-}
+map.addControl(new OpenLayers.Control.LayerSwitcher());
diff --git a/examples/fusiontables.html b/examples/fusiontables.html
new file mode 100644
index 0000000..8c75d6c
--- /dev/null
+++ b/examples/fusiontables.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>OpenLayers Example For Reading Features From Google Fusion Tables</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <script src="../lib/OpenLayers.js"></script>
+    </head>
+    <body>
+        <h1 id="title">Reading Features From A Google Fusion Tables Table</h1>
+        <div id="tags">
+            protocol, script, fusion tables
+        </div>
+        <p id="shortdesc">
+            Demonstrates how, with a custom read method, the script protocol and GeoJSON format can be used to read features stored in a table on Google Fusion Tables.
+        </p>
+        <div id="map" class="smallmap"></div>
+        <div id="docs">
+            <p>
+                Google Fusion Tables can be used to store features, and access them using SQL-type commands over HTTP. Tables can be made public, in which case no authorization is needed to read them. Geometries can be stored in Location columns in KML format. The default output is a CSV dump of each table row/column selected. Multi-line CSV files are not easy to parse in Javascript, but by adding a jsonCallback parameter to the HTTP command, the output will be a JSON object with the geo [...]
+            </p>
+            <p>
+                View the <a href="fusiontables.js" target="_blank">fusiontables.js</a>
+                source to see how this is done. <a href="https://www.google.com/fusiontables/DataSource?docid=1g5DrXcdotCiO_yffkdW0zhuJk0a1i80SPvERHI8">Table used</a>
+            </p>
+        </div>
+        <script src="fusiontables.js"></script>
+    </body>
+</html>
diff --git a/examples/fusiontables.js b/examples/fusiontables.js
new file mode 100644
index 0000000..aec2d86
--- /dev/null
+++ b/examples/fusiontables.js
@@ -0,0 +1,46 @@
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [
+        new OpenLayers.Layer.OSM(),
+        new OpenLayers.Layer.Vector("Vectors", {
+            projection: new OpenLayers.Projection("EPSG:4326"),
+            strategies: [new OpenLayers.Strategy.Fixed()],
+            protocol: new OpenLayers.Protocol.Script({
+                url: "https://www.google.com/fusiontables/api/query",
+                params: {sql: "select * from 1g5DrXcdotCiO_yffkdW0zhuJk0a1i80SPvERHI8"},
+                format: new OpenLayers.Format.GeoJSON({
+                    ignoreExtraDims: true,
+                    read: function(json) {
+                        var row, feature, atts = {}, features = [];
+                        var cols = json.table.cols; // column names
+                        for (var i = 0; i < json.table.rows.length; i++) {
+                            row = json.table.rows[i];
+                            feature = new OpenLayers.Feature.Vector();
+                            atts = {};
+                            for (var j = 0; j < row.length; j++) {
+                                // 'location's are json objects, other types are strings
+                                if (typeof row[j] === "object") {
+                                    feature.geometry = this.parseGeometry(row[j]);
+                                } else {
+                                    atts[cols[j]] = row[j];
+                                }
+                            }
+                            feature.attributes = atts;
+                            // if no geometry, not much point in continuing with this row
+                            if (feature.geometry) {
+                                features.push(feature);
+                            }
+                        }
+                        return features;
+                    }
+                }),
+                callbackKey: "jsonCallback"
+            }),
+            eventListeners: {
+                "featuresadded": function () {
+                    this.map.zoomToExtent(this.getDataExtent());
+                }
+            }
+        })
+    ]
+});
diff --git a/examples/game-accel-ball.html b/examples/game-accel-ball.html
index 75aa146..40bb02d 100644
--- a/examples/game-accel-ball.html
+++ b/examples/game-accel-ball.html
@@ -74,7 +74,7 @@
     <div id="shortdesc">Simple acceleration demo; roll a vector feature around
     on a map. (Only tested on iOS 4.)</div>
 
-    <div id="map" width="100%" height="100%" style="background-color: grey"></div>
+    <div id="map" width="100%" height="100%" style="background-color: gray"></div>
     <div id="docs">
       <p>Demo works best when device is locked in portrait mode.</p> 
     </div>
diff --git a/examples/geojson.html b/examples/geojson.html
index 528dd3c..741add6 100644
--- a/examples/geojson.html
+++ b/examples/geojson.html
@@ -63,7 +63,7 @@
     <h1 id="title">GeoJSON Example</h1>
     
     <div id="tags">
-       JSON, GeoJSON
+       JSON, GeoJSON, light
     </div>
 
       <p id="shortdesc">
diff --git a/examples/georss-flickr.html b/examples/georss-flickr.html
index 94da994..5591b0c 100644
--- a/examples/georss-flickr.html
+++ b/examples/georss-flickr.html
@@ -50,21 +50,20 @@
             
             style.addRules([rule, elseRule]);
             
-            // Create a GML layer with GeoRSS format and a style map.
-            markerLayer = new OpenLayers.Layer.GML("Some images from Flickr",
-                                                   "xml/georss-flickr.xml", {
-                format: OpenLayers.Format.GeoRSS,
-                formatOptions: {
-                    // adds the thumbnail attribute to the feature
-                    createFeatureFromItem: function(item) {
-                        var feature = OpenLayers.Format.GeoRSS.prototype
-                                .createFeatureFromItem.apply(this, arguments);
-                        feature.attributes.thumbnail =
-                                this.getElementsByTagNameNS(
-                                item, "*", "thumbnail")[0].getAttribute("url");
-                        return feature;
-                    }
-                },
+            // Create a Vector layer with GeoRSS format and a style map.
+            markerLayer = new OpenLayers.Layer.Vector("Some images from Flickr", {
+                protocol: new OpenLayers.Protocol.HTTP({
+                    url: "xml/georss-flickr.xml",
+                    format: new OpenLayers.Format.GeoRSS({
+                        // adds the thumbnail attribute to the feature
+                        createFeatureFromItem: function(item) {
+                            var feature = OpenLayers.Format.GeoRSS.prototype.createFeatureFromItem.apply(this, arguments);
+                            feature.attributes.thumbnail = this.getElementsByTagNameNS(item, "*", "thumbnail")[0].getAttribute("url");
+                            return feature;
+                        }
+                    })
+                }),
+                strategies: [new OpenLayers.Strategy.Fixed()],
                 // Giving the style map keys for "default" and "select"
                 // rendering intent, to make the image larger when selected
                 styleMap: new OpenLayers.StyleMap({
diff --git a/examples/getfeatureinfo-control.html b/examples/getfeatureinfo-control.html
index 96993ff..cb0bec1 100644
--- a/examples/getfeatureinfo-control.html
+++ b/examples/getfeatureinfo-control.html
@@ -105,7 +105,7 @@
                 },
                 queryVisible: true
             })
-        }
+        };
 
         map.addLayers([political, roads, cities, water, highlightLayer]); 
         for (var i in infoControls) { 
diff --git a/examples/gml-layer.html b/examples/gml-layer.html
index eea465d..a87a5f3 100644
--- a/examples/gml-layer.html
+++ b/examples/gml-layer.html
@@ -20,7 +20,13 @@
                     "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"));
+            map.addLayer(new OpenLayers.Layer.Vector("GML", {
+                protocol: new OpenLayers.Protocol.HTTP({
+                    url: "gml/polygon.xml",
+                    format: new OpenLayers.Format.GML()
+                }),
+                strategies: [new OpenLayers.Strategy.Fixed()]
+            }));
         }
     </script>
   </head>
diff --git a/examples/google-reproject.html b/examples/google-reproject.html
deleted file mode 100644
index 1606e6e..0000000
--- a/examples/google-reproject.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers Google with Overlay Example</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <!-- this gmaps key generated for http://openlayers.org/dev/ -->
-    <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var map;
-
-        function init(){
-            map = new OpenLayers.Map('map');
-
-            var satellite = new OpenLayers.Layer.Google(
-                "Google Satellite" , {type: G_SATELLITE_MAP}
-            );
-
-            var wms = new OpenLayers.Layer.WMS(
-                "World Map",
-                "http://world.freemap.in/cgi-bin/mapserv",
-                {
-                    map: '/www/freemap.in/world/map/factbooktrans.map',
-                    transparent: 'TRUE',
-                    layers: 'factbook'
-                },
-                {'reproject': true}
-            );
-
-            map.addLayers([satellite, wms]);
-
-            map.setCenter(new OpenLayers.LonLat(10.205188,48.857593), 5);
-            map.addControl( new OpenLayers.Control.LayerSwitcher() );
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">Google with Overlay Example</h1>
-
-    <div id="tags">
-        Google, overlay, mercator, reproject, cleanup
-    </div>
-
-    <p id="shortdesc">
-        Demonstrate a Google basemap used with boundary overlay layer.
-    </p>
-
-    <div id="map" class="smallmap"></div>
-
-    <div id="docs">
-        <p>An overlay in a Geographic projection can be stretched to somewhat
-        line up with Google tiles (in a Mercator projection).  Results get
-        worse farther from the equator.  Use the "reproject" option on a
-        layer to get this behavior.  Use the sphericalMercator option on
-        a Google layer to get proper overlays (with other layers in
-        Spherical Mercator).</p>
-    </div>
-  </body>
-</html>
diff --git a/examples/google-static.html b/examples/google-static.html
new file mode 100644
index 0000000..d35efb0
--- /dev/null
+++ b/examples/google-static.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>OpenLayers Google (Static Maps API) Grid Layer 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">Google (Static Maps API) Grid Layer Example</h1>
+        <div id="tags">
+            Google, grid, static, GMaps, light
+        </div>
+        <p id="shortdesc">
+            Using the Google Static Maps API with a Grid Layer.
+        </p>
+        <div id="map" class="smallmap"></div>
+        <div id="docs">
+            <p>A Grid layer with a custom <code>getURL</code> method can be
+                used to request static maps for a specific extent and zoom
+                level. The Google Static Maps API is the most reliable way to
+                get Google base maps in OpenLayers. Note, however, that the
+                free version of this is limited to a map size of 640x640 pixels
+                (1280x1280 if the <code>scale=2</code> url parameter is used)
+                and 1000 page views per viewer per day. Every map center
+                or zoom level change increases the page view counter by 1.
+            </p>
+            <p>Look at the 
+            <a href="google-static.js" target="_blank">google-static.js
+                source</a> to see how this is done. See the
+                <a href="http://code.google.com/apis/maps/documentation/staticmaps/">Static Maps API V2 Developer Guide</a>
+                for details on the API. 
+        </div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="google-static.js"></script>
+    </body>
+</html>
diff --git a/examples/google-static.js b/examples/google-static.js
new file mode 100644
index 0000000..f984f1a
--- /dev/null
+++ b/examples/google-static.js
@@ -0,0 +1,61 @@
+var options = {
+    singleTile: true,
+    ratio: 1,
+    isBaseLayer: true,
+    wrapDateLine: true,
+    getURL: function() {
+        var center = this.map.getCenter().transform("EPSG:3857", "EPSG:4326"),
+            size = this.map.getSize();
+        return [
+            this.url, "&center=", center.lat, ",", center.lon,
+            "&zoom=", this.map.getZoom(), "&size=", size.w, "x", size.h
+        ].join("");
+    }
+};
+
+var map = new OpenLayers.Map({
+    div: "map",
+    projection: "EPSG:3857",
+    numZoomLevels: 22,
+    layers: [
+        new OpenLayers.Layer.Grid(
+            "Google Physical",
+            "http://maps.googleapis.com/maps/api/staticmap?sensor=false&maptype=terrain", 
+            null, options
+        ),
+        new OpenLayers.Layer.Grid(
+            "Google Streets",
+            "http://maps.googleapis.com/maps/api/staticmap?sensor=false&maptype=roadmap", 
+            null, options
+        ),
+        new OpenLayers.Layer.Grid(
+            "Google Hybrid",
+            "http://maps.googleapis.com/maps/api/staticmap?sensor=false&maptype=hybrid", 
+            null, options
+        ),
+        new OpenLayers.Layer.Grid(
+            "Google Satellite",
+            "http://maps.googleapis.com/maps/api/staticmap?sensor=false&maptype=satellite", 
+            null, options
+        ),
+        // the same layer again, but scaled to allow map sizes up to 1280x1280 pixels
+        new OpenLayers.Layer.Grid(
+            "Google Satellite (scale=2)",
+            "http://maps.googleapis.com/maps/api/staticmap?sensor=false&maptype=satellite&scale=2", 
+            null, OpenLayers.Util.applyDefaults({
+                getURL: function() {
+                    var center = this.map.getCenter().transform("EPSG:3857", "EPSG:4326"),
+                        size = this.map.getSize();
+                    return [
+                        this.url, "&center=", center.lat, ",", center.lon,
+                        "&zoom=", (this.map.getZoom() - 1),
+                        "&size=", Math.floor(size.w / 2), "x", Math.floor(size.h / 2)
+                    ].join("");
+                }
+            }, options)
+        )
+    ],
+    center: new OpenLayers.LonLat(10.2, 48.9).transform("EPSG:4326", "EPSG:3857"),
+    zoom: 5
+});
+map.addControl(new OpenLayers.Control.LayerSwitcher());
diff --git a/examples/google-v3-alloverlays.html b/examples/google-v3-alloverlays.html
index 10dcde4..d940266 100644
--- a/examples/google-v3-alloverlays.html
+++ b/examples/google-v3-alloverlays.html
@@ -8,14 +8,14 @@
         <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&sensor=false"></script>
         <script src="../lib/OpenLayers.js"></script>
         <script src="google-v3-alloverlays.js"></script>
     </head>
     <body onload="init()">
         <h1 id="title">Google (v3) allOverlays Layer Example</h1>
         <div id="tags">
-            Google, overlay
+            Google, overlay, light
         </div>
         <p id="shortdesc">
             Demonstrate use the Google Maps v3 API with allOverlays set to true on the map.
diff --git a/examples/google-v3.html b/examples/google-v3.html
index c074bb6..4365daf 100644
--- a/examples/google-v3.html
+++ b/examples/google-v3.html
@@ -8,14 +8,14 @@
         <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?v=3.5&sensor=false"></script>
+        <script src="http://maps.google.com/maps/api/js?v=3&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
+            Google, api key, apikey, light
         </div>
         <p id="shortdesc">
             Demonstrate use the Google Maps v3 API.
@@ -35,6 +35,17 @@
                 location, you must include the extra theme/default/google.css 
                 stylesheet.
             </p>
+            <p>
+                <strong>Note on Google Maps API versioning:</strong>
+                This example uses the "nightly" version of Google Maps
+                API. This is specified by using <code>v=3</code> in the
+                the Google Maps API URL. Production applications should use the
+                "release" or "frozen" versions of Google Maps
+                API. See the <code>OpenLayers.Layer.Google.v3</code> API
+                docs, and the
+                <a href="https://developers.google.com/maps/documentation/javascript/basics#Versioning">Versioning Section</a>
+                of the Google Maps API docs, for more details.
+            </p>
         </div>
     </body>
 </html>
diff --git a/examples/graphic-name.html b/examples/graphic-name.html
index 033f71a..a530f10 100644
--- a/examples/graphic-name.html
+++ b/examples/graphic-name.html
@@ -14,7 +14,7 @@
     <body onload="init();">
         <h1 id="title">Named Graphics Example</h1>
         <div id="tags">
-            vector, named graphic, star, cross, x, square, triangle, circle, style
+            vector, named graphic, star, cross, x, square, triangle, circle, style, light
         </div>
         <p id="shortdesc">
             Shows how to use well-known graphic names.
diff --git a/examples/graphic-name.js b/examples/graphic-name.js
index 9349ed2..654a4c9 100644
--- a/examples/graphic-name.js
+++ b/examples/graphic-name.js
@@ -5,6 +5,10 @@ OpenLayers.Renderer.symbol.church = [4, 0, 6, 0, 6, 4, 10, 4, 10, 6, 6, 6, 6, 14
 var map;
 
 function init(){
+    // allow testing of specific renderers via "?renderer=Canvas", etc
+    var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+    renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
     map = new OpenLayers.Map('map', {
         controls: []
     });
@@ -46,7 +50,8 @@ function init(){
     // Create a vector layer and give it your style map.
     var layer = new OpenLayers.Layer.Vector("Graphics", {
         styleMap: styles,
-        isBaseLayer: true
+        isBaseLayer: true,
+        renderers: renderer
     });
     layer.addFeatures(features);
     map.addLayer(layer);
diff --git a/examples/graticule.html b/examples/graticule.html
index 6f993ac..c5a116d 100644
--- a/examples/graticule.html
+++ b/examples/graticule.html
@@ -23,7 +23,7 @@
             }
         </style>
         <script src="../lib/OpenLayers.js"></script>
-        <script src="http://proj4js.org/lib/proj4js-compressed.js"></script>
+        <script src="http://svn.osgeo.org/metacrs/proj4js/trunk/lib/proj4js-compressed.js"></script>
         <script type="text/javascript">
             Proj4js.defs["EPSG:42304"]="+title=Atlas of Canada, LCC +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs";
             
@@ -93,7 +93,7 @@
         <h1 id="title">Graticule Example</h1>
 
         <div id="tags">
-          graticule, grid
+          graticule, grid, projection, proj4js, reproject, transform
         </div>
 
         <p id="shortdesc">
diff --git a/examples/gutter.html b/examples/gutter.html
index ea53854..1a98a5c 100644
--- a/examples/gutter.html
+++ b/examples/gutter.html
@@ -13,48 +13,43 @@
         }
     </style>
     <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 2;
-        var map;
-        window.onload = function() {
-            options = {maxExtent: new OpenLayers.Bounds(-73.5295, 41.2318,
-                                                        -69.9097, 42.8883),
-                       maxResolution: 0.0003}
-            map = new OpenLayers.Map('map', options);
-            var roads15 = new OpenLayers.Layer.WMS( "Roads (15px gutter)",
-                "http://boston.freemap.in/cgi-bin/mapserv?map=/www/freemap.in/boston/map/gmaps.map&",
-                {layers: 'roads_200_40'},
-                {gutter: 15});
-            var roads = new OpenLayers.Layer.WMS( "Roads (no gutter)",
-                "http://boston.freemap.in/cgi-bin/mapserv?map=/www/freemap.in/boston/map/gmaps.map&",
-                {layers: 'roads_200_40'});
-            map.addLayers([roads, roads15]);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.setCenter(new OpenLayers.LonLat(-71.848, 42.2), 0);
-        }
-    </script>
   </head>
   <body>
     <h1 id="title">Gutter Example</h1>
 
     <div id="tags">
-        gutter, quality, tile
+        gutter, quality, tile, light
     </div>
 
     <p id="shortdesc">
-        Demonstrates map tiling artifacts, and OpenLayer's facility for correcting this distortion.
+        Demonstrates OpenLayer's facility for dealing with tiling artifacts.
     </p>
 
     <div id="map" class="smallmap"></div>
 
     <div id="docs">
         <p class="caption">
-            When you render tiles with certain types of symbols, there are artifacts
-            at tile edges that make symbology not look continuous.  In the center of
-            the above map (when it first loads), the large orange road is split
-            vertically by a tile.  Open the layer switcher and change to the layer
-            with a 15 pixel gutter to see how the symbology looks nicer.
+            When you render tiles with certain types of symbols, some map
+            servers may render artifacts at tile edges that make symbology not
+            look continuous.  Look at the state abbreviations, open the layer
+            switcher and change to the layer with a 15 pixel gutter to see how
+            the symbology looks different (the server in this example doesn't
+            render such artifacts, so the client-side gutter won't make things
+            look nicer).
         </p>
     </div>
   </body>
+  <script type="text/javascript">
+      var map = new OpenLayers.Map('map');
+      var states15 = new OpenLayers.Layer.WMS( "States (15px gutter)",
+          "http://suite.opengeo.org/geoserver/wms",
+          {layers: 'usa:states'},
+          {gutter: 15, transitionEffect: "resize"});
+      var states = new OpenLayers.Layer.WMS( "States (no gutter)",
+          "http://suite.opengeo.org/geoserver/wms",
+          {layers: 'usa:states'});
+      map.addLayers([states, states15]);
+      map.addControl(new OpenLayers.Control.LayerSwitcher());
+      map.setCenter(new OpenLayers.LonLat(-71.848, 42.2), 5);
+  </script>
 </html>
diff --git a/examples/img/popupMatrix.jpg b/examples/img/popupMatrix.jpg
index fb09bc0..0f67368 100644
Binary files a/examples/img/popupMatrix.jpg and b/examples/img/popupMatrix.jpg differ
diff --git a/examples/kinetic.js b/examples/kinetic.js
index b61faa2..2daca16 100644
--- a/examples/kinetic.js
+++ b/examples/kinetic.js
@@ -1,7 +1,6 @@
 var map = new OpenLayers.Map({
     div: "map",
     resolutions: [0.087890625, 0.0439453125, 0.02197265625, 0.010986328125],
-    panDuration: 100,
     controls: [
         new OpenLayers.Control.Navigation(
             {dragPanOptions: {enableKinetic: true}}
diff --git a/examples/kml-pointtrack.js b/examples/kml-pointtrack.js
index 47836f2..7d48ce3 100644
--- a/examples/kml-pointtrack.js
+++ b/examples/kml-pointtrack.js
@@ -29,12 +29,13 @@ function init() {
                         var fid, points = [], feature;
                         for (var i=0, len=e.features.length; i<len; i++) {
                             feature = e.features[i];
-                            if (feature.fid !== fid || i === len-1) {
-                                fid = feature.fid;
+                            if ((fid && feature.fid !== fid) || i === len-1) {
                                 this.addNodes(points, {silent: true});
                                 points = [];
+                            } else {
+                                points.push(feature);
                             }
-                            points.push(feature);
+                            fid = feature.fid;
                         }
                         return false;
                     }
diff --git a/examples/late-render.html b/examples/late-render.html
index ed3f9da..8502e2a 100644
--- a/examples/late-render.html
+++ b/examples/late-render.html
@@ -29,7 +29,7 @@
     <h1 id="title">Late Rendering</h1>
 
     <div id="tags">
-        creation, render, div
+        creation, render, div, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/layer-opacity.html b/examples/layer-opacity.html
index 5fc76a8..555cc95 100644
--- a/examples/layer-opacity.html
+++ b/examples/layer-opacity.html
@@ -70,7 +70,7 @@
     <h1 id="title">Layer Opacity Example</h1>
 
     <div id="tags">
-        opacity, transparent, transparency
+        opacity, transparent, transparency, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/layerLoadMonitoring.html b/examples/layerLoadMonitoring.html
index a8a1768..f96d49c 100644
--- a/examples/layerLoadMonitoring.html
+++ b/examples/layerLoadMonitoring.html
@@ -71,7 +71,7 @@
             layer.logEvent = function(event) {
                 eventsLog.innerHTML += "<br>(" + getTimeStamp() + ") " +
                                        this.name + ": " + event;
-            }
+            };
 
             layer.events.register("loadstart", layer, function() {
                 this.logEvent("Load Start");
@@ -112,14 +112,14 @@
       <h1 id="title">Layer Load Monitoring Example</h1>
 
       <div id="tags">
-        monitor, loading
+        monitor, loading, light
       </div>
 
       <p id="shortdesc">
           Demonstrate a method for monitoring tile loading performance.
       </p>
 
-    <div id="map" style="float:left;"></div>
+    <div id="map" class="smallmap" style="float:left;"></div>
 
     <div id="controls">
         <div id="eventsLogID">
diff --git a/examples/layerswitcher.html b/examples/layerswitcher.html
index 5e3f6b5..791a4d0 100644
--- a/examples/layerswitcher.html
+++ b/examples/layerswitcher.html
@@ -42,7 +42,7 @@
     <h1 id="title">Layer Switcher Example</h1>
 
     <div id="tags">
-        tree, layerswitcher, reposition
+        tree, layerswitcher, reposition, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/light-basic.html b/examples/light-basic.html
new file mode 100644
index 0000000..634b450
--- /dev/null
+++ b/examples/light-basic.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>OpenLayers Light - Basic Popups</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <script src="../OpenLayers.light.debug.js"></script>
+        <script src="light-basic.js"></script>
+    </head>
+    <body onload="init()">
+        <h1 id="title">OpenLayers Light - Basic Popups</h1>
+        <div id="tags">
+            light, vector, feature, popup
+        </div>        
+        <p id="shortdesc">
+            A basic use case example using the OpenLayers.light version of the library.<br>
+            Shows popup info bubble when hovering over features on the map
+        </p>
+        
+        <div id="map" class="smallmap"></div>
+        
+        <div id="docs">
+            <p>
+                This example uses OpenLayers.light.js to display features and show
+                popup info bubbles when the feature is hovered over.
+            </p>
+                See the <a href="light-basic.js" target="_blank">
+                light-basic.js source</a> to see how this is done.
+            </p>
+        </div>
+    </body>
+</html>
diff --git a/examples/light-basic.js b/examples/light-basic.js
new file mode 100644
index 0000000..89465be
--- /dev/null
+++ b/examples/light-basic.js
@@ -0,0 +1,67 @@
+var map;
+
+function init() {
+    map = new OpenLayers.Map("map",{projection:"EPSG:3857"});
+
+    var osm = new OpenLayers.Layer.OSM();
+    var toMercator = OpenLayers.Projection.transforms['EPSG:4326']['EPSG:3857'];
+    var center = toMercator({x:-0.05,y:51.5});
+    
+    /**
+     * Create 5 random vector features.  Your features would typically be fetched
+     * from the server. The features are given an attribute named "foo".
+     * The value of this attribute is an integer that ranges from 0 to 100.
+     */   
+    var features = [];    
+    for(var i = 0; i < 5; i++) {
+        features[i] = new OpenLayers.Feature.Vector(
+                toMercator(new OpenLayers.Geometry.Point(
+                    -0.040 - 0.05*Math.random(),
+                    51.49 + 0.02*Math.random())), 
+                {
+                    foo : 100 * Math.random() | 0
+                }, {
+                    fillColor : '#008040',
+                    fillOpacity : 0.8,                    
+                    strokeColor : "#ee9900",
+                    strokeOpacity : 1,
+                    strokeWidth : 1,
+                    pointRadius : 8
+                });
+    }
+        
+    // create the layer with listeners to create and destroy popups
+    var vector = new OpenLayers.Layer.Vector("Points",{
+        eventListeners:{
+            'featureselected':function(evt){
+                var feature = evt.feature;
+                var popup = new OpenLayers.Popup.FramedCloud("popup",
+                    OpenLayers.LonLat.fromString(feature.geometry.toShortString()),
+                    null,
+                    "<div style='font-size:.8em'>Feature: " + feature.id +"<br>Foo: " + feature.attributes.foo+"</div>",
+                    null,
+                    true
+                );
+                feature.popup = popup;
+                map.addPopup(popup);
+            },
+            'featureunselected':function(evt){
+                var feature = evt.feature;
+                map.removePopup(feature.popup);
+                feature.popup.destroy();
+                feature.popup = null;
+            }
+        }
+    });
+    vector.addFeatures(features);
+
+    // create the select feature control
+    var selector = new OpenLayers.Control.SelectFeature(vector,{
+        hover:true,
+        autoActivate:true
+    }); 
+    
+    map.addLayers([osm, vector]);
+    map.addControl(selector);
+    map.setCenter(new OpenLayers.LonLat(center.x,center.y), 13);
+}
diff --git a/examples/mapbox.html b/examples/mapbox.html
new file mode 100644
index 0000000..4ccac14
--- /dev/null
+++ b/examples/mapbox.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>OpenLayers MapBox 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">Basic MapBox OSM Example</h1>
+        <div id="tags">mapbox xyz osm</div>
+
+        <div id="shortdesc">Shows how to use MapBox tiles in an OpenLayers map.</div>
+
+        <div id="map" class="smallmap"></div>
+
+        <div id="docs">
+            <p>This example demonstrates the use of an XYZ layer that accesses tiles from MapBox.</p>
+            <p>
+                See the <a href="mapbox.js" target="_blank">mapbox.js</a> source 
+                for details.  Make sure to read the <a href="http://mapbox.com/tos/">Terms of Service</a>
+                before using MapBox tiles in your application.
+            </p>
+        </div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="mapbox.js"></script>
+    </body>
+</html>
diff --git a/examples/mapbox.js b/examples/mapbox.js
new file mode 100644
index 0000000..134d0d8
--- /dev/null
+++ b/examples/mapbox.js
@@ -0,0 +1,35 @@
+var streets = new OpenLayers.Layer.XYZ(
+    "MapBox Streets",
+    [
+        "http://a.tiles.mapbox.com/v3/mapbox.mapbox-streets/${z}/${x}/${y}.png",
+        "http://b.tiles.mapbox.com/v3/mapbox.mapbox-streets/${z}/${x}/${y}.png",
+        "http://c.tiles.mapbox.com/v3/mapbox.mapbox-streets/${z}/${x}/${y}.png",
+        "http://d.tiles.mapbox.com/v3/mapbox.mapbox-streets/${z}/${x}/${y}.png"
+    ], {
+        attribution: "Tiles © <a href='http://mapbox.com/'>MapBox</a> | " + 
+            "Data © <a href='http://www.openstreetmap.org/'>OpenStreetMap</a> " +
+            "and contributors, CC-BY-SA",
+        sphericalMercator: true,
+        wrapDateLine: true,
+        transitionEffect: "resize",
+        buffer: 1,
+        numZoomLevels: 17
+    }
+);
+
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [streets],
+    controls: [
+        new OpenLayers.Control.Attribution(),
+        new OpenLayers.Control.Navigation({
+            dragPanOptions: {
+                enableKinetic: true
+            }
+        }),
+        new OpenLayers.Control.Zoom(),
+        new OpenLayers.Control.Permalink({anchor: true})
+    ],
+    center: [0, 0],
+    zoom: 1
+});
diff --git a/examples/mapguide.html b/examples/mapguide.html
index 5ecc8b2..e8ffd0b 100644
--- a/examples/mapguide.html
+++ b/examples/mapguide.html
@@ -54,10 +54,10 @@
             var params = {
               mapdefinition: 'Library://Samples/Sheboygan/MapsTiled/Sheboygan.MapDefinition',
               basemaplayergroupname: "Base Layer Group"
-            }
+            };
             var options = {
               singleTile: false 
-            }
+            };
             var layer = new OpenLayers.Layer.MapGuide( "MapGuide OS tiled layer", url, params, options );
             map.addLayer(layer);
             
diff --git a/examples/measure.html b/examples/measure.html
index ed3ea97..1cf61ad 100644
--- a/examples/measure.html
+++ b/examples/measure.html
@@ -70,12 +70,19 @@
             ]);
             var styleMap = new OpenLayers.StyleMap({"default": style});
             
+            // allow testing of specific renderers via "?renderer=Canvas", etc
+            var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+            renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
             measureControls = {
                 line: new OpenLayers.Control.Measure(
                     OpenLayers.Handler.Path, {
                         persist: true,
                         handlerOptions: {
-                            layerOptions: {styleMap: styleMap}
+                            layerOptions: {
+                                renderers: renderer,
+                                styleMap: styleMap
+                            }
                         }
                     }
                 ),
@@ -83,7 +90,10 @@
                     OpenLayers.Handler.Polygon, {
                         persist: true,
                         handlerOptions: {
-                            layerOptions: {styleMap: styleMap}
+                            layerOptions: {
+                                renderers: renderer,
+                                styleMap: styleMap
+                            }
                         }
                     }
                 )
diff --git a/examples/mm.html b/examples/mm.html
deleted file mode 100644
index 2fd524d..0000000
--- a/examples/mm.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>MultiMap</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 {
-            width: 100%;
-            height: 512px;
-            border: 1px solid black;
-        }
-    </style>
-
-
-    <!-- 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>
-    <script type="text/javascript">
-        var lon = 5;
-        var lat = 40;
-        var zoom = 5;
-        var map, mmlayer, layer;
-
-        function init(){
-            map = new OpenLayers.Map( 'map' , 
-            {controls:[new OpenLayers.Control.MouseDefaults()]});
-
-            mmlayer = new OpenLayers.Layer.MultiMap( "MultiMap");
-            map.addLayer(mmlayer);
-            
-            markers = new OpenLayers.Layer.Markers("markers");
-            map.addLayer(markers);
-
-            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
-            map.addControl( new OpenLayers.Control.LayerSwitcher() );
-            map.addControl( new OpenLayers.Control.PanZoomBar() );
-        }
-        
-        function add() {
-            
-            marker = new OpenLayers.Marker(new OpenLayers.LonLat(2, 41));
-            markers.addMarker(marker);
-        }
-
-        function remove() {
-            markers.removeMarker(marker);
-        }
-    </script>
-  </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>  
-    <div id="map" class="smallmap"></div>
-    <div style="background-color:green" onclick="add()"> click to add the marker to the map</div>
-    <div style="background-color:red" onclick="remove()"> click to remove the marker from the map</div>
-  </body>
-</html>
diff --git a/examples/mobile-base.js b/examples/mobile-base.js
index f320581..5440f93 100644
--- a/examples/mobile-base.js
+++ b/examples/mobile-base.js
@@ -15,7 +15,7 @@ var init = function (onSelectFeatureFunction) {
         styleMap: new OpenLayers.StyleMap({
             externalGraphic: "img/mobile-loc.png",
             graphicOpacity: 1.0,
-            graphicWith: 16,
+            graphicWidth: 16,
             graphicHeight: 26,
             graphicYOffset: -26
         })
@@ -41,12 +41,7 @@ var init = function (onSelectFeatureFunction) {
         div: "map",
         theme: null,
         projection: sm,
-        units: "m",
         numZoomLevels: 18,
-        maxResolution: 156543.0339,
-        maxExtent: new OpenLayers.Bounds(
-            -20037508.34, -20037508.34, 20037508.34, 20037508.34
-        ),
         controls: [
             new OpenLayers.Control.Attribution(),
             new OpenLayers.Control.TouchNavigation({
diff --git a/examples/mobile-drawing.html b/examples/mobile-drawing.html
index 18db95f..0cb9c52 100644
--- a/examples/mobile-drawing.html
+++ b/examples/mobile-drawing.html
@@ -5,7 +5,7 @@
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
         <meta name="apple-mobile-web-app-capable" content="yes">
-        <link rel="stylesheet" href="style.mobile.css" type="text/css">
+        <link rel="stylesheet" href="../theme/default/style.mobile.css" type="text/css">
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
         <script src="../lib/OpenLayers.js?mobile"></script>
         <script src="mobile-drawing.js"></script>
@@ -25,36 +25,6 @@
                 bottom: 5px;
                 right: 5px;
             }
-            div.olControlZoomPanel .olControlZoomInItemInactive,
-            div.olControlZoomPanel .olControlZoomOutItemInactive {
-                background: rgba(0,0,0,0.2);
-                position: absolute;
-            }
-            div.olControlZoomPanel .olControlZoomInItemInactive {
-                border-radius: 5px 5px 0 0;
-            }
-            div.olControlZoomPanel .olControlZoomOutItemInactive {
-                border-radius: 0 0 5px 5px ;
-                top: 37px;
-            }
-            div.olControlZoomPanel .olControlZoomOutItemInactive:after,
-            div.olControlZoomPanel .olControlZoomInItemInactive:after {
-                font-weight: bold;
-                content: '+';
-                font-size: 36px;
-                padding:  7px;
-                z-index: 2000;
-                color: #fff;
-                line-height: 1em;
-            }
-            div.olControlZoomPanel .olControlZoomOutItemInactive:after {
-                content: '–';
-                line-height: 0.9em;
-                padding: 0 8px;
-            }
-            div.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
-                display: none;
-            }
             .olControlEditingToolbar .olControlModifyFeatureItemInactive {
                 background-position: -1px -1px;
             }
diff --git a/examples/mobile-drawing.js b/examples/mobile-drawing.js
index 3de462b..869880e 100644
--- a/examples/mobile-drawing.js
+++ b/examples/mobile-drawing.js
@@ -41,15 +41,14 @@ function init() {
     map = new OpenLayers.Map({
         div: 'map',
         projection: 'EPSG:900913',
-        units: 'm',
         numZoomLevels: 18,
-        maxResolution: 156543.0339,
-        maxExtent: new OpenLayers.Bounds(
-            -20037508.34, -20037508.34, 20037508.34, 20037508.34
-        ),
         controls: [
-            new OpenLayers.Control.TouchNavigation(),
-            new OpenLayers.Control.ZoomPanel(),
+            new OpenLayers.Control.TouchNavigation({
+                dragPanOptions: {
+                    enableKinetic: true
+                }
+            }),
+            new OpenLayers.Control.Zoom(),
             toolbar
         ],
         layers: [osm, vector],
diff --git a/examples/mobile-jq.html b/examples/mobile-jq.html
index 040dbba..5e16caa 100644
--- a/examples/mobile-jq.html
+++ b/examples/mobile-jq.html
@@ -5,10 +5,10 @@
         <title>OpenLayers with jQuery Mobile</title>
         <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
         <meta name="apple-mobile-web-app-capable" content="yes">
-        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css">
-        <script src="http://code.jquery.com/jquery-1.5.min.js"></script>
-        <script src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
-        <link rel="stylesheet" href="style.mobile.css" type="text/css">
+        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css">
+        <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
+        <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
+        <link rel="stylesheet" href="../theme/default/style.mobile.css" type="text/css">
         <link rel="stylesheet" href="style.mobile-jq.css" type="text/css">
         <script src="../lib/OpenLayers.js?mobile"></script>
         <script src="mobile-base.js"></script>
diff --git a/examples/mobile-jq.js b/examples/mobile-jq.js
index a7ef681..1f61582 100644
--- a/examples/mobile-jq.js
+++ b/examples/mobile-jq.js
@@ -17,7 +17,7 @@ $(document).ready(function() {
             content.height(contentHeight);
         }
 
-        if (window.map) {
+        if (window.map && window.map instanceof OpenLayers.Map) {
             map.updateSize();
         } else {
             // initialize map
@@ -62,7 +62,7 @@ $(document).ready(function() {
             if ($('#query')[0].value === '') {
                 return;
             }
-            $.mobile.pageLoading();
+            $.mobile.showPageLoadingMsg();
 
             // Prevent form send
             e.preventDefault();
@@ -89,7 +89,7 @@ $(document).ready(function() {
                         .show();
                 });
                 $('#search_results').listview('refresh');
-                $.mobile.pageLoading(true);
+                $.mobile.hidePageLoadingMsg();
             });
         });
         // only listen to the first event triggered
diff --git a/examples/mobile-layers.html b/examples/mobile-layers.html
index 130f2a9..d258674 100644
--- a/examples/mobile-layers.html
+++ b/examples/mobile-layers.html
@@ -5,7 +5,7 @@
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <meta name="apple-mobile-web-app-capable" content="yes">
-    <link rel="stylesheet" href="style.mobile.css" type="text/css">
+    <link rel="stylesheet" href="../theme/default/style.mobile.css" type="text/css">
     <script src="../lib/OpenLayers.js?mobile"></script>
     <script src="mobile-layers.js"></script>
     <style>
@@ -39,42 +39,6 @@
             border-radius: 5px 0 0 0;
         }
 
-        div.olControlZoomPanel .olControlZoomInItemInactive,
-        div.olControlZoomPanel .olControlZoomOutItemInactive {
-            background: rgba(0, 0, 0, 0.2);
-            position: absolute;
-        }
-
-        div.olControlZoomPanel .olControlZoomInItemInactive {
-            border-radius: 5px 5px 0 0;
-        }
-
-        div.olControlZoomPanel .olControlZoomOutItemInactive {
-            border-radius: 0 0 5px 5px;
-            top: 37px;
-        }
-
-        div.olControlZoomPanel .olControlZoomOutItemInactive:after,
-        div.olControlZoomPanel .olControlZoomInItemInactive:after {
-            font-weight: bold;
-            content: '+';
-            font-size: 36px;
-            padding: 7px;
-            z-index: 2000;
-            color: #fff;
-            line-height: 1em;
-        }
-
-        div.olControlZoomPanel .olControlZoomOutItemInactive:after {
-            content: '–';
-            line-height: 0.9em;
-            padding: 0 8px;
-        }
-
-        div.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
-            display: none;
-        }
-
         #title, #tags, #shortdesc {
             display: none;
         }
diff --git a/examples/mobile-layers.js b/examples/mobile-layers.js
index 05e1f03..62c65e1 100644
--- a/examples/mobile-layers.js
+++ b/examples/mobile-layers.js
@@ -32,7 +32,7 @@ function init() {
                     enableKinetic: true
                 }
             }),
-            new OpenLayers.Control.ZoomPanel()
+            new OpenLayers.Control.Zoom()
         ]
     });
 
@@ -40,7 +40,7 @@ function init() {
         "http://vmap0.tiles.osgeo.org/wms/vmap0",
         {layers: 'basic'},
         {isBaseLayer: true, transitionEffect: 'resize'}
-    )
+    );
 
     var kml = new OpenLayers.Layer.Vector("KML", {
         projection: map.displayProjection,
diff --git a/examples/mobile-navigation.html b/examples/mobile-navigation.html
index 3d2ba59..6814a72 100644
--- a/examples/mobile-navigation.html
+++ b/examples/mobile-navigation.html
@@ -6,7 +6,7 @@
     <meta name="apple-mobile-web-app-capable" content="yes">
     <title>Mobile Navigation Example</title>
     <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.mobile.css" type="text/css" />
+    <link rel="stylesheet" href="../theme/default/style.mobile.css" type="text/css" />
     <link rel="stylesheet" href="style.css" type="text/css">
     <script type="text/javascript" src="../lib/OpenLayers.js?mobile"></script>
     <script type="text/javascript" src="mobile-navigation.js"></script>
@@ -38,7 +38,7 @@
         </p>
 
         <p>
-            The ZoomPanel control provides + and - buttons for zooming in and
+            The Zoom control provides + and - buttons for zooming in and
             out. These buttons should work on any device, and the zoom out
             button is especially needed for devices that don't support
             multi-touch.
diff --git a/examples/mobile-navigation.js b/examples/mobile-navigation.js
index ce08b49..3d4818a 100644
--- a/examples/mobile-navigation.js
+++ b/examples/mobile-navigation.js
@@ -5,19 +5,14 @@ function init() {
         div: "map",
         theme: null,
         projection: new OpenLayers.Projection("EPSG:900913"),
-        units: "m",
         numZoomLevels: 18,
-        maxResolution: 156543.0339,
-        maxExtent: new OpenLayers.Bounds(
-            -20037508.34, -20037508.34, 20037508.34, 20037508.34
-        ),
         controls: [
             new OpenLayers.Control.TouchNavigation({
                 dragPanOptions: {
                     enableKinetic: true
                 }
             }),
-            new OpenLayers.Control.ZoomPanel()
+            new OpenLayers.Control.Zoom()
         ],
         layers: [
             new OpenLayers.Layer.OSM("OpenStreetMap", null, {
diff --git a/examples/mobile-sencha.html b/examples/mobile-sencha.html
index f08efc4..3b491b2 100644
--- a/examples/mobile-sencha.html
+++ b/examples/mobile-sencha.html
@@ -6,9 +6,9 @@
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
         <title>OpenLayers with Sencha Touch</title>
         <script src="../lib/OpenLayers.js?mobile"></script>
-        <link rel="stylesheet" href="style.mobile.css" type="text/css">
-        <link rel="stylesheet" href="http://dev.sencha.com/deploy/touch/resources/css/sencha-touch.css">
-        <script src="http://dev.sencha.com/deploy/touch/sencha-touch.js"></script>
+        <link rel="stylesheet" href="../theme/default/style.mobile.css" type="text/css">
+        <link rel="stylesheet" href="http://cdn.sencha.io/touch/1.1.0/resources/css/sencha-touch.css">
+        <script src="http://cdn.sencha.io/touch/1.1.0/sencha-touch.js"></script>
         <script src="mobile-sencha.js"></script>
         <script src="mobile-base.js"></script>
         <style>
diff --git a/examples/mobile-wmts-vienna.css b/examples/mobile-wmts-vienna.css
new file mode 100644
index 0000000..741cd6d
--- /dev/null
+++ b/examples/mobile-wmts-vienna.css
@@ -0,0 +1,166 @@
+html, body, #map {
+    margin: 0;
+    height: 100%;
+    width: 100%;
+}
+#map {
+    cursor: move;
+}
+#title, #tags, #shortdesc {
+    display: none;
+}
+.olTileImage {
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+}
+div.olControlAttribution {
+    position: absolute;
+    font-size: 10px;
+    text-align: right;
+    color: #BFEFFF;
+    bottom: 0;
+    right: 0;
+    background: rgba(0,0,100,0.2);
+    font-family: Arial, Helvetica, sans-serif;
+    font-weight: bold;
+    padding: 2px 4px;
+    border-radius: 5px 0 0 0;
+}
+.olControlAttribution a {
+    font-weight: bold;
+    color: #BFEFFF;
+    text-decoration: none;
+}
+div.olControlZoomPanel {
+    height: 108px;
+    width: 36px;
+    position: absolute;
+    top: 20px;
+    left: inherit;
+    right: 20px;
+}
+div.olControlZoomPanel div {
+    cursor: pointer;
+    width: 36px;
+    height: 36px;
+    left: 0;
+    background-color: #ccc;
+    background-image: none;
+}
+div.olControlZoomPanel .olControlZoomInItemInactive,
+div.olControlZoomPanel .olControlZoomOutItemInactive {
+    top: 0;
+    background: rgba(0,0,100,0.4);
+    position: absolute;
+}
+div.olControlZoomPanel .olControlZoomInItemInactive {
+    border-radius: 5px 5px 0 0;
+}
+div.olControlZoomPanel .olControlZoomOutItemInactive {
+    border-radius: 0 0 5px 5px;
+    top: 37px;
+}
+div.olControlZoomPanel .olControlZoomOutItemInactive:after,
+div.olControlZoomPanel .olControlZoomInItemInactive:after {
+    font-weight: bold;
+    content: '+';
+    font-size: 36px;
+    padding:  7px;
+    z-index: 2000;
+    color: #BFEFFF;
+    line-height: 1em;
+}
+div.olControlZoomPanel .olControlZoomOutItemInactive:after {
+    content: '–';
+    line-height: 0.9em;
+    padding: 0 8px;
+}
+div.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
+    display: none;
+}
+div.olControlZoomPanel div.olControlGeolocateItemInactive,
+div.olControlZoomPanel div.olControlGeolocateItemActive {
+    position: absolute;
+    right: 20px;
+    top: 98px;
+    border-radius: 5px 5px 5px 5px;
+    background: #ccc url(img/locate.png) center no-repeat;
+    background-color: rgba(0,0,100,0.4);
+}
+div.olControlZoomPanel div.olControlGeolocateItemActive {
+    background-color: rgba(0,0,100,0.2);
+}
+div.olControlGeolocateItemInactive:after {
+    font-weight: bold;
+    font-size: 36px;
+    padding:  7px;
+    z-index: 2000;
+    color: #BFEFFF;
+    line-height: 1em;
+    background: none;
+}
+.layerPanel {
+    position: absolute;
+    top: 20px;
+    right: 82px;
+}
+div.layerPanel div {
+    display: inline;
+    margin-left: 5px;
+    cursor: pointer;
+}
+div.layerPanel div:after {
+    font-weight: bold;
+    font-size: 18px;
+    font-family: arial;
+    padding: 8px;
+    color: #BFEFFF;
+    line-height: 36px;
+    border-radius: 5px 5px 5px 5px;
+    background-color: #ccc;
+    background: rgba(0,0,100,0.4);
+}
+div.layerPanel div.labelButtonItemInactive:after,
+div.layerPanel div.labelButtonItemActive:after {
+    content: 'Labels';
+}
+:lang(de) div.layerPanel div.labelButtonItemInactive:after,
+:lang(de) div.layerPanel div.labelButtonItemActive:after {
+    content: 'Text';
+}
+div.layerPanel div.labelButtonItemActive:after {
+    text-decoration: underline;
+    background: rgba(0,0,100,0.2);
+}
+div.layerPanel div.aerialButtonItemInactive:after,
+div.layerPanel div.aerialButtonItemActive:after {
+    content: 'Aerial';
+    border-radius: 5px 0 0 5px;
+}
+:lang(de) div.layerPanel div.aerialButtonItemInactive:after,
+:lang(de) div.layerPanel div.aerialButtonItemActive:after {
+    content: 'Luftbild';
+}
+div.layerPanel div.aerialButtonItemActive:after {
+    text-decoration: underline;
+    background: rgba(0,0,100,0.2);
+}
+div.layerPanel div.mapButtonItemInactive:after,
+div.layerPanel div.mapButtonItemActive:after {
+    content: 'Map';
+    border-radius: 0 5px 5px 0;
+}
+:lang(de) div.layerPanel div.mapButtonItemInactive:after,
+:lang(de) div.layerPanel div.mapButtonItemActive:after {
+    content: 'Karte';
+}
+div.layerPanel div.mapButtonItemActive:after {
+    text-decoration: underline;
+    background: rgba(0,0,100,0.2);
+}
+div.layerPanel div.mapButtonItemInactive,
+div.layerPanel div.mapButtonItemActive {
+    margin-left: 1px;
+}
\ No newline at end of file
diff --git a/examples/mobile-wmts-vienna.html b/examples/mobile-wmts-vienna.html
new file mode 100644
index 0000000..d6d127c
--- /dev/null
+++ b/examples/mobile-wmts-vienna.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <title>City of Vienna WMTS with REST Encoding and Geolocate</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <meta name="apple-mobile-web-app-status-bar-style" content="black">
+        <link rel="stylesheet" href="mobile-wmts-vienna.css" type="text/css">
+    </head>
+    <body>
+        <h1 id="title">City of Vienna WMTS for Desktop and Mobile Devices</h1>
+        <div id="tags">
+            mobile, vienna, ogdwien, rest, restful, wmts, geolocate, permalink
+        </div>
+        <p id="shortdesc">
+            A full-screen map for both desktop and mobile devices. Uses
+            language dependent CSS content and the WMTSCapabilities format to
+            retrieve layers from the ogdwien open data initiative of the City
+            of Vienna. Also has a lightweight custom anchor permalink
+            functionality and uses the Geolocate control.
+        </p>
+        <div id="map"></div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="mobile-wmts-vienna.js"></script>
+    </body>
+</html>
diff --git a/examples/mobile-wmts-vienna.js b/examples/mobile-wmts-vienna.js
new file mode 100644
index 0000000..4257f74
--- /dev/null
+++ b/examples/mobile-wmts-vienna.js
@@ -0,0 +1,266 @@
+var map;
+
+(function() {
+    // Set document language for css content 
+    document.documentElement.lang = (navigator.userLanguage || navigator.language).split("-")[0];
+
+    // A panel for switching between Aerial and Map, and for turning labels
+    // on and off.
+    var layerPanel = new OpenLayers.Control.Panel({
+        displayClass: "layerPanel",
+        autoActivate: true
+    });
+    var aerialButton = new OpenLayers.Control({
+        type: OpenLayers.Control.TYPE_TOOL,
+        displayClass: "aerialButton",
+        eventListeners: {
+            activate: function() {
+                if (aerial) {map.setBaseLayer(aerial);}
+            }
+        }
+    });
+    var mapButton = new OpenLayers.Control({
+        type: OpenLayers.Control.TYPE_TOOL,
+        displayClass: "mapButton",
+        eventListeners: {
+            activate: function() {
+                if (fmzk) {map.setBaseLayer(fmzk);}
+            }
+        }
+    });
+    var labelButton = new OpenLayers.Control({
+        type: OpenLayers.Control.TYPE_TOGGLE,
+        displayClass: "labelButton",
+        eventListeners: {
+            activate: function() {
+                if (labels) {labels.setVisibility(true);}
+            },
+            deactivate: function() {
+                if (labels) {labels.setVisibility(false);}
+            }
+        }
+    });
+    layerPanel.addControls([aerialButton, mapButton, labelButton]);
+    
+    var zoomPanel = new OpenLayers.Control.ZoomPanel();
+    
+    // Geolocate control for the Locate button - the locationupdated handler
+    // draws a cross at the location and a circle showing the accuracy radius.
+    zoomPanel.addControls([
+        new OpenLayers.Control.Geolocate({
+            type: OpenLayers.Control.TYPE_TOGGLE,
+            geolocationOptions: {
+                enableHighAccuracy: false,
+                maximumAge: 0,
+                timeout: 7000
+            },
+            eventListeners: {
+                activate: function() {
+                    map.addLayer(vector);
+                },
+                deactivate: function() {
+                    map.removeLayer(vector);
+                    vector.removeAllFeatures();
+                },
+                locationupdated: function(e) {
+                    vector.removeAllFeatures();
+                    vector.addFeatures([
+                        new OpenLayers.Feature.Vector(e.point, null, {
+                            graphicName: 'cross',
+                            strokeColor: '#f00',
+                            strokeWidth: 2,
+                            fillOpacity: 0,
+                            pointRadius: 10
+                        }),
+                        new OpenLayers.Feature.Vector(
+                            OpenLayers.Geometry.Polygon.createRegularPolygon(
+                                new OpenLayers.Geometry.Point(e.point.x, e.point.y),
+                                e.position.coords.accuracy / 2, 50, 0
+                            ), null, {
+                                fillOpacity: 0.1,
+                                fillColor: '#000',
+                                strokeColor: '#f00',
+                                strokeOpacity: 0.6
+                            }
+                        )
+                    ]);
+                    map.zoomToExtent(vector.getDataExtent());
+                }
+            }
+        })
+    ]);
+
+    // Map with navigation controls optimized for touch devices
+    map = new OpenLayers.Map({
+        div: "map",
+        theme: null,
+        projection: "EPSG:3857",
+        units: "m",
+        maxExtent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34],
+        maxResolution: 156543.0339,
+        numZoomLevels: 20,
+        controls: [
+            new OpenLayers.Control.Navigation({
+                mouseWheelOptions: {
+                    cumulative: false,
+                    interval: 20
+                },
+                dragPanOptions: {
+                    enableKinetic: {
+                        deceleration: 0.02
+                    }
+                },
+                zoomBoxEnabled: false
+            }),
+            new OpenLayers.Control.Attribution(),
+            zoomPanel,
+            layerPanel
+        ],
+        eventListeners: {
+            moveend: function() {
+                // update anchor for permalinks
+                var ctr = map.getCenter();
+                window.location.hash = "x="+ctr.lon+"&y="+ctr.lat+"&z="+map.getZoom();
+            }
+        }
+    });
+    layerPanel.activateControl(mapButton);
+    layerPanel.activateControl(labelButton);
+
+    // Vector layer for the location cross and circle
+    var vector = new OpenLayers.Layer.Vector("Vector Layer");
+
+    // The WMTS layers we're going to add
+    var fmzk, aerial, labels;
+    
+    // zoom to initial extent or restore position from permalink
+    function zoomToInitialExtent() {
+        var extent = fmzk.tileFullExtent,
+            ctr = extent.getCenterLonLat(),
+            zoom = map.getZoomForExtent(extent, true),
+            params = OpenLayers.Util.getParameters("?"+window.location.hash.substr(1));
+        OpenLayers.Util.applyDefaults(params, {x:ctr.lon, y:ctr.lat, z:zoom});
+        map.setCenter(new OpenLayers.LonLat(params.x, params.y), params.z);
+    }
+
+    // Request capabilities and create layers
+    OpenLayers.ProxyHost = "proxy.cgi?url=";    
+    OpenLayers.Request.GET({
+        url: "http://maps.wien.gv.at/wmts/1.0.0/WMTSCapabilities.xml",
+        success: function(request) {
+            var format = new OpenLayers.Format.WMTSCapabilities();
+            var defaults = {
+                requestEncoding: "REST",
+                matrixSet: "google3857",
+                attribution: 'Datenquelle: Stadt Wien - <a href="http://data.wien.gv.at">data.wien.gv.at</a>'
+            };
+            var doc = request.responseText,
+                caps = format.read(doc);
+            fmzk = format.createLayer(caps, OpenLayers.Util.applyDefaults(
+                {layer:"fmzk", requestEncoding:"REST", transitionEffect:"resize"}, defaults
+            ));
+            aerial = format.createLayer(caps, OpenLayers.Util.applyDefaults(
+                {layer:"lb", requestEncoding:"REST", transitionEffect:"resize"}, defaults
+            ));
+            labels = format.createLayer(caps, OpenLayers.Util.applyDefaults(
+                {layer:"beschriftung", requestEncoding:"REST", isBaseLayer: false},
+                defaults
+            ));
+            map.addLayers([fmzk, aerial, labels]);
+            zoomToInitialExtent();
+        }
+    });
+    
+    // Instead of building the layers from the capabilities document, we could
+    // look at it ourselves and create the layers manually. If you want to try
+    // that, uncomment the following code and remove the "Request capabilities
+    // and create layers" block above.
+    /*
+    var extent = new OpenLayers.Bounds(1799448.394855, 6124949.74777, 1848250.442089, 6162571.828177);
+    var defaults = {
+        requestEncoding: "REST",
+        matrixSet: "google3857",
+        tileFullExtent: extent,
+        attribution: 'Datenquelle: Stadt Wien - <a href="http://data.wien.gv.at">data.wien.gv.at</a>'
+    };
+    fmzk = new OpenLayers.Layer.WMTS(OpenLayers.Util.applyDefaults({
+        url: "http://www.wien.gv.at/wmts/fmzk/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpeg",
+        layer: "fmzk",
+        style: "pastell",
+        transitionEffect: "resize"
+    },
+    defaults));
+    aerial = new OpenLayers.Layer.WMTS(OpenLayers.Util.applyDefaults({
+        url: "http://www.wien.gv.at/wmts/lb/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpeg",
+        layer: "lb",
+        style: "farbe",
+        transitionEffect: "resize"
+    },
+    defaults));
+    labels = new OpenLayers.Layer.WMTS(OpenLayers.Util.applyDefaults({
+        url: "http://www.wien.gv.at/wmts/beschriftung/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png",
+        layer: "beschriftung",
+        style: "normal",
+        transitionEffect: null,
+        isBaseLayer: false
+    },
+    defaults));
+    map.addLayers([fmzk, aerial, labels]);
+    zoomToInitialExtent();
+    */
+
+})();
+
+// Reliably hide the address bar on Android and iOS devices. From
+// http://blog.nateps.com/how-to-hide-the-address-bar-in-a-full-screen
+(function() {
+    var page = document.getElementById("map"),
+        ua = navigator.userAgent,
+        iphone = ~ua.indexOf('iPhone') || ~ua.indexOf('iPod'),
+        ipad = ~ua.indexOf('iPad'),
+        ios = iphone || ipad,
+        // Detect if this is running as a fullscreen app from the homescreen
+        fullscreen = window.navigator.standalone,
+        android = ~ua.indexOf('Android'),
+        lastWidth = 0;
+
+    if (android) {
+        // Android's browser adds the scroll position to the innerHeight, just to
+        // make this really fucking difficult. Thus, once we are scrolled, the
+        // page height value needs to be corrected in case the page is loaded
+        // when already scrolled down. The pageYOffset is of no use, since it always
+        // returns 0 while the address bar is displayed.
+        window.onscroll = function() {
+            page.style.height = window.innerHeight + 'px';
+        };
+    }
+    var setupScroll = window.onload = function() {
+        // Start out by adding the height of the location bar to the width, so that
+        // we can scroll past it
+        if (ios) {
+            // iOS reliably returns the innerWindow size for documentElement.clientHeight
+            // but window.innerHeight is sometimes the wrong value after rotating
+            // the orientation
+            var height = document.documentElement.clientHeight;
+            // Only add extra padding to the height on iphone / ipod, since the ipad
+            // browser doesn't scroll off the location bar.
+            if (iphone && !fullscreen) height += 60;
+            page.style.height = height + 'px';
+        } else if (android) {
+            // The stock Android browser has a location bar height of 56 pixels, but
+            // this very likely could be broken in other Android browsers.
+            page.style.height = (window.innerHeight + 56) + 'px';
+        }
+        // Scroll after a timeout, since iOS will scroll to the top of the page
+        // after it fires the onload event
+        setTimeout(scrollTo, 0, 0, 1);
+    };
+    (window.onresize = function() {
+        var pageWidth = page.offsetWidth;
+        // Android doesn't support orientation change, so check for when the width
+        // changes to figure out when the orientation changes
+        if (lastWidth == pageWidth) return;
+        lastWidth = pageWidth;
+        setupScroll();
+    })();
+})();
diff --git a/examples/mobile.html b/examples/mobile.html
index 708eb8b..b2685e0 100644
--- a/examples/mobile.html
+++ b/examples/mobile.html
@@ -5,7 +5,7 @@
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
         <meta name="apple-mobile-web-app-capable" content="yes">
-        <link rel="stylesheet" href="style.mobile.css" type="text/css">
+        <link rel="stylesheet" href="../theme/default/style.mobile.css" type="text/css">
         <script src="../lib/OpenLayers.js?mobile"></script>
         <script src="mobile.js"></script>
         <style>
@@ -35,36 +35,6 @@
                 padding       : 2px 4px;
                 border-radius : 5px 0 0 0;
             }
-            div.olControlZoomPanel .olControlZoomInItemInactive,
-            div.olControlZoomPanel .olControlZoomOutItemInactive {
-                background: rgba(0,0,0,0.2);
-                position: absolute;
-            }
-            div.olControlZoomPanel .olControlZoomInItemInactive {
-                border-radius: 5px 5px 0 0;
-            }
-            div.olControlZoomPanel .olControlZoomOutItemInactive {
-                border-radius: 0 0 5px 5px ;
-                top: 37px;
-            }
-            div.olControlZoomPanel .olControlZoomOutItemInactive:after ,
-            div.olControlZoomPanel .olControlZoomInItemInactive:after{
-                font-weight: bold;
-                content   : '+';
-                font-size : 36px;
-                padding:  7px;
-                z-index: 2000;
-                color     : #fff;
-                line-height: 1em;
-            }
-            div.olControlZoomPanel .olControlZoomOutItemInactive:after{
-                content: '–';
-                line-height: 0.9em;
-                padding: 0 8px;
-            }
-            div.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
-                display: none;
-            }
             #title, #tags, #shortdesc {
                 display: none;
             }
diff --git a/examples/mobile.js b/examples/mobile.js
index 094647a..9bbcb91 100644
--- a/examples/mobile.js
+++ b/examples/mobile.js
@@ -26,7 +26,7 @@ var init = function () {
                     enableKinetic: true
                 }
             }),
-            new OpenLayers.Control.ZoomPanel()
+            new OpenLayers.Control.Zoom()
         ],
         layers: [
             new OpenLayers.Layer.OSM("OpenStreetMap", null, {
diff --git a/examples/modify-feature.html b/examples/modify-feature.html
index 8cec230..cb19858 100644
--- a/examples/modify-feature.html
+++ b/examples/modify-feature.html
@@ -96,6 +96,7 @@
             if (rotate || drag) {
                 controls.modify.mode &= ~OpenLayers.Control.ModifyFeature.RESHAPE;
             }
+            controls.modify.createVertices = document.getElementById("createVertices").checked;
             var sides = parseInt(document.getElementById("sides").value);
             sides = Math.max(3, isNaN(sides) ? 0 : sides);
             controls.regular.handler.sides = sides;
@@ -162,6 +163,11 @@
                 <label for="modifyToggle">modify feature</label>
                 <ul>
                     <li>
+                        <input id="createVertices" type="checkbox" checked
+                               name="createVertices" onchange="update()" />
+                        <label for="createVertices">allow vertices creation</label>
+                    </li>
+                    <li>
                         <input id="rotate" type="checkbox"
                                name="rotate" onchange="update()" />
                         <label for="rotate">allow rotation</label>
diff --git a/examples/multimap-mercator.html b/examples/multimap-mercator.html
deleted file mode 100644
index 48b2dd9..0000000
--- a/examples/multimap-mercator.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>MultiMap SphericalMercator</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <!--[if lte IE 6]>
-        <link rel="stylesheet" href="../theme/default/ie6-style.css" type="text/css" />
-    <![endif]-->
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <style type="text/css">
-        #map {
-            width: 100%;
-            height: 512px;
-            border: 1px solid gray;
-        }
-    </style>
-
-
-    <!-- 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>
-    <script type="text/javascript">
- 
-        var map, ve, merc, vector;
-
-        function init(){
-            var options = {
-                projection: "EPSG:900913",
-                units: "m",
-                maxResolution: 156543.0339,
-                maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
-                                                 20037508, 20037508)
-            };
-            map = new OpenLayers.Map('map', options);
-
-            ve = new OpenLayers.Layer.MultiMap(
-                "multimap",
-                {'sphericalMercator': true}
-            ); 
-            merc = new OpenLayers.Layer.WMS("World Map",
-                                            "http://maps.opengeo.org/geowebcache/service/wms",
-                                            {'layers': 'bluemarble'},
-                                            {'opacity': 0.4,
-                                             'isBaseLayer': false,
-                                             'wrapDateLine': true});
-
-            // create a vector layer for drawing
-            vector = new OpenLayers.Layer.Vector("Editable Vectors");
-            
-            map.addLayers([ve, merc, vector]);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.addControl(new OpenLayers.Control.EditingToolbar(vector));
-            map.zoomToMaxExtent()
-        }
-        
-    </script>
-  </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
-      this time.
-    </p>  
-    <div id="map" class="smallmap"></div>
-  </body>
-</html>
diff --git a/examples/multiserver.html b/examples/multiserver.html
index 4b7654c..64a5a45 100644
--- a/examples/multiserver.html
+++ b/examples/multiserver.html
@@ -31,7 +31,7 @@
     <h1 id="title">Multiple Server URLS</h1>
 
   <div id="tags">
-    performance, multiple urls, request
+    performance, multiple urls, request, light
   </div>
   <p id="shortdesc">
       Load your tiles faster by pointing to the same server, but with different urls
diff --git a/examples/multitouch.html b/examples/multitouch.html
index 442b24a..0cab78a 100644
--- a/examples/multitouch.html
+++ b/examples/multitouch.html
@@ -5,7 +5,7 @@
    <title>Multitouch Test</title>
   </head>
   <body>
-   <div style="width:80%; height: 80%; border: 1px solid black; font-size: 5em;" id="box">
+   <div style="width:80%; height: 200px; border: 1px solid black; font-size: 5em;" id="box">
    </div>
    Touch inside the box. On a touch enabled browser, you will get the number
    of detected touch events. If the box is red, your browser does not support
diff --git a/examples/mvs.html b/examples/mvs.html
index e26b012..f3866f5 100644
--- a/examples/mvs.html
+++ b/examples/mvs.html
@@ -34,7 +34,7 @@ function runMVS() {
 
     // ----
     // TODO: Handle all this parsing better.
-    var safeArgs = {}
+    var safeArgs = {};
 
     var DEFAULT_LAT = 0;
     var DEFAULT_LON = 0;
diff --git a/examples/navigation-control.html b/examples/navigation-control.html
index 661c42c..a0c272e 100644
--- a/examples/navigation-control.html
+++ b/examples/navigation-control.html
@@ -26,7 +26,7 @@
     <h1 id="title">Navigation Control</h1>
 
     <div id="tags">
-        drag, move, zoom, navigate
+        drag, move, zoom, navigate, light
     </div>
 
     <div id="shortdesc">Demonstrate Navigation Control features</div>
diff --git a/examples/offline-storage.html b/examples/offline-storage.html
new file mode 100644
index 0000000..6a1ebd6
--- /dev/null
+++ b/examples/offline-storage.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers Offline Storage 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 {
+        bottom: 0;
+    }
+    </style>
+    <script src="../lib/OpenLayers.js"></script>
+    <script>OpenLayers.Console = window.console || OpenLayers.Console;</script>
+    <script src="offline-storage.js"></script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">Offline Storage Example</h1>
+
+    <div id="tags">
+        mobile, local storage, persistence, cache, html5
+    </div>
+
+    <div id="shortdesc">Caching viewed tiles</div>
+
+    <div id="map" class="smallmap"></div>
+    <div>Cache status: <span id="hits"></span> <span id="status"></span></div>
+    <div><input id="read" type="checkbox">Read from cache [<input id="tileloadstart" name="type" type="radio">try cache first] [<input id="tileerror" name="type" type="radio">try online first<sup>1</sup>]</div>
+    <div><input id="write" type="checkbox">Write to cache</div>
+    <div><button id="clear">Clear cached tiles</button><button id="seed">Seed current extent</button>
+    <br>
+    <p><sup>1</sup> <small>Disconnect your device from the network to test - only works for same origin layers.</small></p>
+    <br>
+    <div id="docs">
+        <p>This example shows how to use the CacheWrite control to cache tiles
+        that are being viewed in the browser's local storage, and how to use
+        the CacheRead control to use cached tiles when offline or on a slow
+        connection. See <a href="offline-storage.js">offline-storage.js</a>
+        for the source code.</p>
+    </div>
+  </body>
+</html>
diff --git a/examples/offline-storage.js b/examples/offline-storage.js
new file mode 100644
index 0000000..e0b5929
--- /dev/null
+++ b/examples/offline-storage.js
@@ -0,0 +1,199 @@
+// Use proxy to get same origin URLs for tiles that don't support CORS.
+OpenLayers.ProxyHost = "proxy.cgi?url=";
+
+var map, cacheWrite, cacheRead1, cacheRead2;
+
+function init() {
+    map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        layers: [
+            new OpenLayers.Layer.OSM("OpenStreetMap (CORS)", null, {
+                eventListeners: {
+                    tileloaded: updateStatus,
+                    loadend: detect
+                }
+            }),
+            new OpenLayers.Layer.WMS("OSGeo (same origin - proxied)", "http://vmap0.tiles.osgeo.org/wms/vmap0", {
+                layers: "basic"
+            }, {
+                eventListeners: {
+                    tileloaded: updateStatus
+                }
+            })
+        ],
+        center: [0, 0],
+        zoom: 1
+    });
+    // try cache before loading from remote resource
+    cacheRead1 = new OpenLayers.Control.CacheRead({
+        eventListeners: {
+            activate: function() {
+                cacheRead2.deactivate();
+            }
+        }
+    });
+    // try loading from remote resource and fall back to cache
+    cacheRead2 = new OpenLayers.Control.CacheRead({
+        autoActivate: false,
+        fetchEvent: "tileerror",
+        eventListeners: {
+            activate: function() {
+                cacheRead1.deactivate();
+            }
+        }
+    });
+    cacheWrite = new OpenLayers.Control.CacheWrite({
+        imageFormat: "image/jpeg",
+        eventListeners: {
+            cachefull: function() {
+                if (seeding) {
+                    stopSeeding();
+                }
+                status.innerHTML = "Cache full.";
+            }
+        }
+    });
+    var layerSwitcher = new OpenLayers.Control.LayerSwitcher();
+    map.addControls([cacheRead1, cacheRead2, cacheWrite, layerSwitcher]);
+    layerSwitcher.maximizeControl();
+
+
+    
+    // add UI and behavior
+    var status = document.getElementById("status"),
+        hits = document.getElementById("hits"),
+        cacheHits = 0,
+        seeding = false;
+    var read = document.getElementById("read");
+    read.checked = true;
+    read.onclick = toggleRead;
+    var write = document.getElementById("write");
+    write.checked = false;
+    write.onclick = toggleWrite;
+    document.getElementById("clear").onclick = clearCache;
+    var tileloadstart = document.getElementById("tileloadstart");
+    tileloadstart.checked = "checked";
+    tileloadstart.onclick = setType;
+    document.getElementById("tileerror").onclick = setType;
+    document.getElementById("seed").onclick = startSeeding;
+    
+    // detect what the browser supports
+    function detect(evt) {
+        // detection is only done once, so we remove the listener.
+        evt.object.events.unregister("loadend", null, detect);
+        var tile = map.baseLayer.grid[0][0];
+        try {
+            var canvasContext = tile.getCanvasContext();
+            if (canvasContext) {
+                // will throw an exception if CORS image requests are not supported
+                canvasContext.canvas.toDataURL();
+            } else {
+                status.innerHTML = "Canvas not supported. Try a different browser.";
+            }
+        } catch(e) {
+            // we remove the OSM layer if CORS image requests are not supported.
+            map.setBaseLayer(map.layers[1]);
+            evt.object.destroy();
+            layerSwitcher.destroy();
+        }
+    }
+
+    // update the number of cache hits and detect missing CORS support
+    function updateStatus(evt) {
+        if (window.localStorage) {
+            status.innerHTML = localStorage.length + " entries in cache.";
+        } else {
+            status.innerHTML = "Local storage not supported. Try a different browser.";
+        }
+        if (evt && evt.tile.url.substr(0, 5) === "data:") {
+            cacheHits++;
+        }
+        hits.innerHTML = cacheHits + " cache hits.";
+    }
+    
+    // turn the cacheRead controls on and off
+    function toggleRead() {
+        if (!this.checked) {
+            cacheRead1.deactivate();
+            cacheRead2.deactivate();
+        } else {
+            setType();
+        }
+    }
+    
+    // turn the cacheWrite control on and off
+    function toggleWrite() {
+        cacheWrite[cacheWrite.active ? "deactivate" : "activate"]();
+    }
+    
+    // clear all tiles from the cache
+    function clearCache() {
+        OpenLayers.Control.CacheWrite.clearCache();
+        updateStatus();
+    }
+    
+    // activate the cacheRead control that matches the desired fetch strategy
+    function setType() {
+        if (tileloadstart.checked) {
+            cacheRead1.activate();
+        } else {
+            cacheRead2.activate();
+        }
+    }
+    
+    // start seeding the cache
+    function startSeeding() {
+        var layer = map.baseLayer,
+            zoom = map.getZoom();
+        seeding = {
+            zoom: zoom,
+            extent: map.getExtent(),
+            center: map.getCenter(),
+            cacheWriteActive: cacheWrite.active,
+            buffer: layer.buffer,
+            layer: layer
+        };
+        // make sure the next setCenter triggers a load
+        map.zoomTo(zoom === layer.numZoomLevels-1 ? zoom - 1 : zoom + 1);
+        // turn on cache writing
+        cacheWrite.activate();
+        // turn off cache reading
+        cacheRead1.deactivate();
+        cacheRead2.deactivate();
+        
+        layer.events.register("loadend", null, seed);
+        
+        // start seeding
+        map.setCenter(seeding.center, zoom);
+    }
+    
+    // seed a zoom level based on the extent at the time startSeeding was called
+    function seed() {
+        var layer = seeding.layer;
+        var tileWidth = layer.tileSize.w;
+        var nextZoom = map.getZoom() + 1;
+        var extentWidth = seeding.extent.getWidth() / map.getResolutionForZoom(nextZoom);
+        // adjust the layer's buffer size so we don't have to pan
+        layer.buffer = Math.ceil((extentWidth / tileWidth - map.getSize().w / tileWidth) / 2);
+        map.zoomIn();
+        if (nextZoom === layer.numZoomLevels-1) {
+            stopSeeding();
+        }
+    }
+    
+    // stop seeding (when done or when cache is full)
+    function stopSeeding() {
+        // we're done - restore previous settings
+        seeding.layer.events.unregister("loadend", null, seed);
+        seeding.layer.buffer = seeding.buffer;
+        map.setCenter(seeding.center, seeding.zoom);
+        if (!seeding.cacheWriteActive) {
+            cacheWrite.deactivate();
+        }
+        if (read.checked) {
+            setType();
+        }
+        seeding = false;
+    }
+}
\ No newline at end of file
diff --git a/examples/ordering.html b/examples/ordering.html
index 7cb3f2b..f6fd1f4 100644
--- a/examples/ordering.html
+++ b/examples/ordering.html
@@ -100,7 +100,7 @@
                     graphicZIndex: useFirst ? FIRST_RED_Z_INDEX : SECOND_RED_Z_INDEX,
                     externalGraphic: "../img/marker.png",
                     pointRadius: 10
-                }
+                };
                 
                 indexFeatures.push(
                     point
@@ -177,7 +177,7 @@
         <h1 id="title">Z-Index/Y-Order Example</h1>
 
         <div id="tags">
-            stack, stacking, zindex, ordering
+            stack, stacking, zindex, ordering, light
         </div>
 
         <p id="shortdesc">
diff --git a/examples/osm-google.html b/examples/osm-google.html
index 3578246..066dadc 100644
--- a/examples/osm-google.html
+++ b/examples/osm-google.html
@@ -8,7 +8,7 @@
         <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?v=3.3&sensor=false"></script>
+        <script src="http://maps.google.com/maps/api/js?v=3&sensor=false"></script>
         <script src="../lib/OpenLayers.js"></script>
         <script src="osm-google.js"></script>
     </head>
@@ -18,7 +18,7 @@
             Demonstrate use of an OSM layer and a Google layer as base layers.
         </p>
         <div id="tags">
-            openstreetmap google
+            openstreetmap google light
         </div>
         <div id="map" class="smallmap"></div>
         <div id="docs">
diff --git a/examples/osm-google.js b/examples/osm-google.js
index 77d96d8..aaa8233 100644
--- a/examples/osm-google.js
+++ b/examples/osm-google.js
@@ -3,12 +3,7 @@ var map;
 function init() {
     map = new OpenLayers.Map({
         div: "map",
-        projection: new OpenLayers.Projection("EPSG:900913"),
-        units: "m",
-        maxResolution: 156543.0339,
-        maxExtent: new OpenLayers.Bounds(
-            -20037508, -20037508, 20037508, 20037508.34
-        )
+        projection: new OpenLayers.Projection("EPSG:900913")
     });
     
     var osm = new OpenLayers.Layer.OSM();            
diff --git a/examples/osm-grayscale.html b/examples/osm-grayscale.html
new file mode 100644
index 0000000..0ff3729
--- /dev/null
+++ b/examples/osm-grayscale.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers Grayscale OSM 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">
+        var map, layer;
+
+        function init() {
+            if (!OpenLayers.CANVAS_SUPPORTED) {
+                var unsupported = OpenLayers.Util.getElement('unsupported');
+                unsupported.innerHTML = 'Your browser does not support canvas, nothing to see here !';
+            }
+
+            layer = new OpenLayers.Layer.OSM('Simple OSM Map', null, {
+                eventListeners: {
+                    tileloaded: function(evt) {
+                        var ctx = evt.tile.getCanvasContext();
+                        if (ctx) {
+                            var imgd = ctx.getImageData(0, 0, evt.tile.size.w, evt.tile.size.h);
+                            var pix = imgd.data;
+                            for (var i = 0, n = pix.length; i < n; i += 4) {
+                                pix[i] = pix[i + 1] = pix[i + 2] = (3 * pix[i] + 4 * pix[i + 1] + pix[i + 2]) / 8;
+                            }
+                            ctx.putImageData(imgd, 0, 0);
+                            evt.tile.imgDiv.removeAttribute("crossorigin");
+                            evt.tile.imgDiv.src = ctx.canvas.toDataURL();
+                        }
+                    }
+                }
+            });
+
+            // If you get a security error because the tile are not
+            // from the same domain as this page, a simple Apache
+            // proxy can be created to workaround this issue:
+            //
+            // <Proxy *>
+            // Order deny,allow
+            // Allow from localhost
+            // </Proxy>
+            // ProxyPass /osm http://tile.openstreetmap.org/
+            //
+            // Then, in the layer definition above, replace null with '/osm/${z}/${x}/${y}.png'
+
+            map = new OpenLayers.Map('map', {
+                layers: [layer],
+                zoom: 3,
+                center: [-1081125, 6212801]
+            });
+        }
+    </script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">Grayscale OSM Example</h1>
+
+    <div id="tags">
+        openstreetmap canvas grayscale light
+    </div>
+
+    <div id="shortdesc">Show an OSM Map in grayscale</div>
+
+    <div id="map" class="smallmap"></div>
+
+    <div id="docs">
+        <p>This example shows an OSM layer where the tiles were
+        converted to grayscale
+        with <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html">canvas</a>.</p>
+        <p style="color:red;" id="unsupported"></p>
+    </div>
+
+  </body>
+</html>
diff --git a/examples/osm-layer.html b/examples/osm-layer.html
deleted file mode 100644
index 58f8158..0000000
--- a/examples/osm-layer.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers: OSM Layer</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <style>
-        #map {
-            height: 350px;
-        }
-    </style>
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var lon = 5;
-        var lat = 40;
-        var zoom = 5;
-        var map, layer, gml;
-        function export_vectors() {
-            var x = new OpenLayers.Format.XML();
-            var content = x.write(gml.renderer.rendererRoot);
-            $("vectors").value = content;
-            $("vectors").style.display = "block";
-            $("vectorlink").href = "data:image/svg+xml," + escape(content);
-            $("vectorlink").style.display="block";
-        }
-        function on_feature_hover(feature) {
-            var text ="<ul>";
-            var type ="way";
-            if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
-                type = "node";
-            }    
-            text += "<li>" + feature.osm_id + ": <a href='http://crschmidt.net/osm/attributes.html?type="+type+"&id="+feature.osm_id+"'>Edit</a>, <a href='http://www.openstreetmap.org/api/0.5/"+type + "/" + feature.osm_id + "'>API</a></li>";
-            for (var key in feature.attributes) {
-                text += "<li>" + key + ": " + feature.attributes[key] + "</li>";
-            }
-            text += "</ul>";
-            $("status").innerHTML = text;
-        }   
-        function clear_data() {
-            gml.destroyFeatures();
-        }
-        function new_data() {
-            if (!check_zoom()) { return; }
-            clear_data();
-            gml.loaded = false;
-            gml.url = "http://www.openstreetmap.org/api/0.5/map?bbox=" + map.getExtent().toBBOX();
-            $("status").innerHTML = "Loading more data...";
-            gml.loadGML();
-        }
-        function style_osm_feature(feature) {
-            feature.style = OpenLayers.Util.extend({'fill':'black'}, OpenLayers.Feature.Vector.style['default']);
-            if (feature.attributes.highway == "motorway") {
-                feature.style.strokeColor = "blue";
-                feature.style.strokeWidth = 5;
-            } else if (feature.attributes.highway == "primary") {
-                feature.style.strokeColor = "red";
-            } else if (feature.attributes.highway == "secondary") {
-                feature.style.strokeColor = "orange";
-            } else if (feature.attributes.highway) {
-                feature.style.strokeColor = "black";
-            }   
-        }
-        function check_zoom() { 
-            var zoom = map.getZoom();
-            if (zoom >= 11) { return true; }
-            if (zoom >= 9) { return confirm("Loading this amount of data may slow your browser. Are you sure you want to do this?"); }
-            $("status").innerHTML = "Area too large. Zoom in to load data. (Current zoom level: "+ zoom + ". Must be at zoom 9+.)";
-            return false;
-        }    
-        function init(){
-            OpenLayers.ProxyHost = "proxy.cgi?url=";
-            OpenLayers.Feature.Vector.style['default'].strokeWidth = 4;
-            OpenLayers.Feature.Vector.style['default'].cursor = 'pointer';
-            map = new OpenLayers.Map('map', {'maxResolution': 360/512/16, 'numZoomLevels':15, controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar() ]});
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.addControl(new OpenLayers.Control.Permalink());
-            layer = new OpenLayers.Layer.WMS( "OSM", 
-               [
-                 "http://t1.hypercube.telascience.org/tiles?",
-                 "http://t2.hypercube.telascience.org/tiles?",
-                 "http://t3.hypercube.telascience.org/tiles?",
-                 "http://t4.hypercube.telascience.org/tiles?"
-                 ], 
-                {layers: 'osm-4326', format: 'image/png' } );
-            map.addLayer(layer);
-            if (!map.getCenter()) { 
-                gml = new OpenLayers.Layer.GML("OSM", "osm/sutton_coldfield.osm", {format: OpenLayers.Format.OSM});
-                map.zoomToExtent(new OpenLayers.Bounds(-1.819072,52.549034,-1.814341,52.551582));
-            } else {
-                if (map.getZoom() >= 11) {
-                    gml = new OpenLayers.Layer.GML("OSM", "http://www.openstreetmap.org/api/0.5/map?bbox=" + map.getExtent().toBBOX(), {format: OpenLayers.Format.OSM});
-                } else {
-                    gml = new OpenLayers.Layer.GML("OSM", "xml/cambridgeport.osm", {format: OpenLayers.Format.OSM});
-                }    
-            }    
-            gml.events.register("loadstart", null, function() { $("status").innerHTML = "Loading..."; })
-            gml.events.register("loadend", null, function() { $("status").innerHTML = ""; })
-            map.addLayer(gml);
-            gml.preFeatureInsert = style_osm_feature; 
-            var sf = new OpenLayers.Control.SelectFeature(gml, {'onSelect': on_feature_hover});
-            map.addControl(sf);
-            sf.activate();
-        }
-    </script>
-  </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>
-       <li><a href="javascript:new_data();">Download current view</a></li>
-       <li><a href="javascript:clear_data();">Clear current data</a></li>
-       <li><a href="javascript:export_vectors();">Export Vector Data</a></li>
-      </ul>
-    <div id="status">Loading...</div>
-    </div>
-    <a id="vectorlink" href="" style="display:none">Display via data: URL (FF Only)</a>
-    <textarea id="vectors" style="display:none;width:100%" rows="10"></textarea>
-  </body>
-</html>
diff --git a/examples/osm.html b/examples/osm.html
index 519c396..ecd7c01 100644
--- a/examples/osm.html
+++ b/examples/osm.html
@@ -4,7 +4,7 @@
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers Basic Single WMS Example</title>
+    <title>OpenLayers Basic OSM 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>
@@ -27,7 +27,7 @@
     <h1 id="title">Basic OSM Example</h1>
 
     <div id="tags">
-        openstreetmap basic
+        openstreetmap basic light
     </div>
 
     <div id="shortdesc">Show a Simple OSM Map</div>
diff --git a/examples/outOfRangeMarkers.html b/examples/outOfRangeMarkers.html
deleted file mode 100644
index 7e64237..0000000
--- a/examples/outOfRangeMarkers.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>Using maxResolution to control overlays</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <style>
-        #map {
-            height: 350px;
-        }
-    </style>
-      <!-- this gmaps key generated for http://openlayers.org/dev/ -->
-    <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
-    <!-- Localhost key -->
-    <!-- <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTS6gjckBmeABOGXIUiOiZObZESPg'></script>-->
-  
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var map;
-        function init(){
-            
-            // Variables
-            map = new OpenLayers.Map('map', {
-                controls: [
-                    new OpenLayers.Control.PanZoomBar(),
-                    new OpenLayers.Control.LayerSwitcher({'ascending':false}),
-                    new OpenLayers.Control.MousePosition(),
-                    new OpenLayers.Control.Navigation()
-                ]
-            });
-            var lon = 35;
-            var lat = -6;
-            var zoom = 6;
-
-
-            // Map Layers
-            var GMapsSat = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_SATELLITE_MAP, 'maxZoomLevel':18} );
-            var GMapsHybr = new OpenLayers.Layer.Google( "Google Hybrid" , {type: G_HYBRID_TYPE, 'maxZoomLevel':18} );
-            var GMapsStreets = new OpenLayers.Layer.Google( "Google Steets" , {type: G_NORMAL_MAP, 'maxZoomLevel':18} );
-            var MarkersLayer2 = new OpenLayers.Layer.Text( "Region info", {location: "outOfRangeMarkers.txt", maxResolution: 0.02});
-
-            // Add Layers
-            map.addLayers([GMapsHybr, GMapsStreets, GMapsSat, MarkersLayer2]);            
-
-            // Visual
-            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
-            if (!map.getCenter()) map.zoomToMaxExtent();
-        }
-    </script>
- </head>
-
-
- <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.
-    </p>  
-    <div id="map" class="smallmap"></div>
-
-  </body>
-</html>
diff --git a/examples/outOfRangeMarkers.txt b/examples/outOfRangeMarkers.txt
deleted file mode 100644
index 6d88977..0000000
--- a/examples/outOfRangeMarkers.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-point	title	description	icon
--4.14,37.90	 	Kilimanjaro Beskrivning	http://www.villageografica.com/Africa-Webmap/img/marker-blue.png
--3.24,34.35	 	Shinyanga Beskrivning	http://www.villageografica.com/Africa-Webmap/img/marker-blue.png
diff --git a/examples/overviewmap.html b/examples/overviewmap.html
index 7ae1ee8..165c987 100644
--- a/examples/overviewmap.html
+++ b/examples/overviewmap.html
@@ -91,8 +91,7 @@
             maxExtent: new OpenLayers.Bounds(-8242894.927728, 4965204.031195,
                     -8227290.161511, 4994963.723637), 
             maxResolution: 116.24879860156216,
-            projection: "EPSG:900913",
-            units: "m"
+            projection: "EPSG:900913"
         };
 
         var map2 = new OpenLayers.Map('map2', mapOptions);
@@ -108,7 +107,7 @@
                                      20037508.34, 20037508.34)
             }),
             layers: [jplOverview]
-        }
+        };
         var overview2 = new OpenLayers.Control.OverviewMap(controlOptions);
         map2.addControl(overview2);
         
diff --git a/examples/panel.html b/examples/panel.html
index 685bdac..be9785c 100644
--- a/examples/panel.html
+++ b/examples/panel.html
@@ -16,14 +16,6 @@
           background-color:white;
         }
         
-        .olControlPanel .olControlMouseDefaultsItemActive { 
-          background-color: blue;
-          background-image: url("../theme/default/img/pan_on.png");
-        }
-        .olControlPanel .olControlMouseDefaultsItemInactive { 
-          background-color: orange;
-          background-image: url("../theme/default/img/pan_off.png");
-        }
         .olControlPanel .olControlDrawFeatureItemActive { 
           width:  22px;  
           height: 22px;
@@ -75,8 +67,6 @@
                 {title:"Zoom box: Selecting it you can zoom on an area by clicking and dragging."});
             var panel = new OpenLayers.Control.Panel({defaultControl: zb});
             panel.addControls([
-                new OpenLayers.Control.MouseDefaults(
-                    {title:'You can use the default mouse configuration'}), 
                 zb,
                 new OpenLayers.Control.DrawFeature(vlayer, OpenLayers.Handler.Path,
                     {title:'Draw a feature'}),
diff --git a/examples/point-grid.html b/examples/point-grid.html
index 4cff89d..8508fdb 100644
--- a/examples/point-grid.html
+++ b/examples/point-grid.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <meta name="apple-mobile-web-app-capable" content="yes">
     <title>OpenLayers Point Grid Example</title>
     <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
diff --git a/examples/point-grid.js b/examples/point-grid.js
index e3a29e8..e7b2e2e 100644
--- a/examples/point-grid.js
+++ b/examples/point-grid.js
@@ -13,7 +13,7 @@ var rotation = document.getElementById("rotation");
 rotation.value = String(points.rotation);
 rotation.onchange = function() {
     points.setRotation(Number(rotation.value));
-}
+};
 
 var dx = document.getElementById("dx");
 var dy = document.getElementById("dy");
@@ -21,13 +21,13 @@ dx.value = String(points.dx);
 dy.value = String(points.dy);
 dx.onchange = function() {
     points.setSpacing(Number(dx.value), Number(dy.value));
-}
+};
 dy.onchange = function() {
     points.setSpacing(Number(dx.value), Number(dy.value));
-}
+};
 
 var max = document.getElementById("max");
 max.value = String(points.maxFeatures);
 max.onchange = function() {
     points.setMaxFeatures(Number(max.value));
-}
+};
diff --git a/examples/popupMatrix.html b/examples/popupMatrix.html
index 4a2280e..213f580 100644
--- a/examples/popupMatrix.html
+++ b/examples/popupMatrix.html
@@ -44,22 +44,6 @@
             'maxSize': new OpenLayers.Size(100,100)
         });
 
-        //anchoredbubble
-    
-        AutoSizeAnchoredBubble = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, {
-            'autoSize': true
-        });
-
-        AutoSizeAnchoredBubbleMinSize = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, {
-            'autoSize': true, 
-            'minSize': new OpenLayers.Size(400,400)
-        });
-
-        AutoSizeAnchoredBubbleMaxSize = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, {
-            'autoSize': true, 
-            'maxSize': new OpenLayers.Size(100,100)
-        });
-
         //framed
 
         //disable the autosize for the purpose of our matrix
@@ -163,25 +147,25 @@
             //anchored popup bigger contents autosize
             ll = new OpenLayers.LonLat(5,20);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored popup bigger contents autosize closebox
             ll = new OpenLayers.LonLat(10,20);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
             //anchored popup wide short text contents autosize
             ll = new OpenLayers.LonLat(20,20);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored popup wide short text contents autosize closebox
             ll = new OpenLayers.LonLat(25,20);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
 
@@ -214,13 +198,13 @@
             //anchored popup wide long fixed contents autosize
             ll = new OpenLayers.LonLat(65,20);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img  src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img  src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored popup wide long fixed contents autosize closebox
             ll = new OpenLayers.LonLat(70,20);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img  src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img  src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
         //
@@ -282,305 +266,64 @@
             //anchored popup bigger contents autosize overflow
             ll = new OpenLayers.LonLat(5,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored popup bigger contents autosize closebox overflow
             ll = new OpenLayers.LonLat(10,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored popup wide short text contents autosize overflow
             ll = new OpenLayers.LonLat(20,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored popup wide short text contents autosize closebox overflow
             ll = new OpenLayers.LonLat(25,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
             //anchored popup wide short fixed contents autosize overflow
             ll = new OpenLayers.LonLat(35,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
+            popupContentHTML = '<img src="img/wideshort.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored popup wide short fixed contents autosize closebox overflow
             ll = new OpenLayers.LonLat(40,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
+            popupContentHTML = '<img src="img/wideshort.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored popup thin long fixed contents autosize overflow
             ll = new OpenLayers.LonLat(50,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
+            popupContentHTML = '<img src="img/thinlong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored popup thin long fixed contents autosize closebox overflow
             ll = new OpenLayers.LonLat(55,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
+            popupContentHTML = '<img src="img/thinlong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored popup wide long fixed contents autosize overflow
             ll = new OpenLayers.LonLat(65,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored popup wide long fixed contents autosize closebox overflow
             ll = new OpenLayers.LonLat(70,15);
             popupClass = AutoSizeAnchored;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-        //
-        //Bubble NO OVERFLOW
-        //
-
-            //anchored bubble popup small contents no autosize
-            var ll = new OpenLayers.LonLat(-55,5);
-            popupClass = OpenLayers.Popup.AnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false);
-
-            //anchored bubble popup small contents no autosize closebox
-            var ll = new OpenLayers.LonLat(-50,5);
-            popupClass = OpenLayers.Popup.AnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup small contents autosize
-            ll = new OpenLayers.LonLat(-40,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false);
-
-            //anchored bubble popup small contents autosize closebox
-            ll = new OpenLayers.LonLat(-35,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup small contents autosize minsize
-            ll = new OpenLayers.LonLat(-25,5);
-            popupClass = AutoSizeAnchoredBubbleMinSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false);
-
-            //anchored bubble popup small contents autosize minsize closebox
-            ll = new OpenLayers.LonLat(-20,5);
-            popupClass = AutoSizeAnchoredBubbleMinSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup small contents autosize maxsize
-            ll = new OpenLayers.LonLat(-10,5);
-            popupClass = AutoSizeAnchoredBubbleMaxSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false);
-
-            //anchored bubble popup small contents autosize maxsize closebox
-            ll = new OpenLayers.LonLat(-5,5);
-            popupClass = AutoSizeAnchoredBubbleMaxSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup bigger contents autosize closebox
-            ll = new OpenLayers.LonLat(5,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>' + samplePopupContentsHTML + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, false);
-
-            //anchored bubble popup bigger contents autosize closebox
-            ll = new OpenLayers.LonLat(10,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup wide short text contents autosize
-            ll = new OpenLayers.LonLat(20,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML);
-
-            //anchored bubble popup wide short text contents autosize closebox
-            ll = new OpenLayers.LonLat(25,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup wide short fixed contents autosize
-            ll = new OpenLayers.LonLat(35,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML);
-
-            //anchored bubble popup wide short fixed contents autosize closebox
-            ll = new OpenLayers.LonLat(40,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup thin long fixed contents autosize
-            ll = new OpenLayers.LonLat(50,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML);
-
-            //anchored bubble popup thin long fixed contents autosize closebox
-            ll = new OpenLayers.LonLat(55,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-
-            //anchored bubble popup wide long fixed contents autosize
-            ll = new OpenLayers.LonLat(65,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML);
-
-            //anchored bubble popup wide long fixed contents autosize closebox
-            ll = new OpenLayers.LonLat(70,5);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, true);
-
-          //
-          //Bubble OVERFLOW
-          //
-
-              //anchored bubble popup small contents no autosize
-            var ll = new OpenLayers.LonLat(-55,0);
-            popupClass = OpenLayers.Popup.AnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-              //anchored bubble popup small contents no autosize closebox
-            var ll = new OpenLayers.LonLat(-50,0);
-            popupClass = OpenLayers.Popup.AnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup small contents autosize
-            ll = new OpenLayers.LonLat(-40,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup small contents autosize closebox
-            ll = new OpenLayers.LonLat(-35,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup small contents autosize minsize
-            ll = new OpenLayers.LonLat(-25,0);
-            popupClass = AutoSizeAnchoredBubbleMinSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup small contents autosize minsize closebox
-            ll = new OpenLayers.LonLat(-20,0);
-            popupClass = AutoSizeAnchoredBubbleMinSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup small contents autosize maxsize
-            ll = new OpenLayers.LonLat(-10,0);
-            popupClass = AutoSizeAnchoredBubbleMaxSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup small contents autosize maxsize closebox
-            ll = new OpenLayers.LonLat(-5,0);
-            popupClass = AutoSizeAnchoredBubbleMaxSize;
-            popupContentHTML = '<img src="img/small.jpg"></img>';
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup bigger contents autosize closebox
-            ll = new OpenLayers.LonLat(5,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup bigger contents autosize closebox
-            ll = new OpenLayers.LonLat(10,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>closebox<br>overflow<br>' + samplePopupContentsHTML + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup wide short contents autosize overflow
-            ll = new OpenLayers.LonLat(20,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup wide short contents autosize closebox overflow
-            ll = new OpenLayers.LonLat(25,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>' 
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup wide short fixed contents autosize overflow
-            ll = new OpenLayers.LonLat(35,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup wide short fixed contents autosize closebox overflow
-            ll = new OpenLayers.LonLat(40,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup thin long fixed contents autosize overflow
-            ll = new OpenLayers.LonLat(50,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup thin long fixed contents autosize closebox overflow
-            ll = new OpenLayers.LonLat(55,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, true, true);
-
-
-            //anchored bubble popup wide long fixed contents autosize overflow
-            ll = new OpenLayers.LonLat(65,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
-            addMarker(ll, popupClass, popupContentHTML, false, true);
-
-            //anchored bubble popup wide long fixed contents autosize closebox overflow
-            ll = new OpenLayers.LonLat(70,0);
-            popupClass = AutoSizeAnchoredBubble;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
    //FRAMED
@@ -644,65 +387,65 @@
             //anchored bubble popup bigger contents autosize closebox
             ll = new OpenLayers.LonLat(5,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, false);
 
             //anchored bubble popup bigger contents autosize closebox
             ll = new OpenLayers.LonLat(10,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
 
             //anchored bubble popup wide short text contents autosize
             ll = new OpenLayers.LonLat(20,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored bubble popup wide short text contents autosize closebox
             ll = new OpenLayers.LonLat(25,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
 
             //anchored bubble popup wide short fixed contents autosize
             ll = new OpenLayers.LonLat(35,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
+            popupContentHTML = '<img src="img/wideshort.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored bubble popup wide short fixed contents autosize closebox
             ll = new OpenLayers.LonLat(40,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
+            popupContentHTML = '<img src="img/wideshort.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
 
             //anchored bubble popup thin long fixed contents autosize
             ll = new OpenLayers.LonLat(50,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
+            popupContentHTML = '<img src="img/thinlong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored bubble popup thin long fixed contents autosize closebox
             ll = new OpenLayers.LonLat(55,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
+            popupContentHTML = '<img src="img/thinlong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
 
             //anchored bubble popup wide long fixed contents autosize
             ll = new OpenLayers.LonLat(65,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML);
 
             //anchored bubble popup wide long fixed contents autosize closebox
             ll = new OpenLayers.LonLat(70,-15);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true);
 
           //
@@ -764,65 +507,65 @@
             //anchored bubble popup bigger contents autosize closebox
             ll = new OpenLayers.LonLat(5,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored bubble popup bigger contents autosize closebox
             ll = new OpenLayers.LonLat(10,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>closebox<br>overflow<br>' + samplePopupContentsHTML + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>closebox<br>overflow<br>' + samplePopupContentsHTML + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored bubble popup wide short contents autosize overflow
             ll = new OpenLayers.LonLat(20,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored bubble popup wide short contents autosize closebox overflow
             ll = new OpenLayers.LonLat(25,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>' 
+            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored bubble popup wide short fixed contents autosize overflow
             ll = new OpenLayers.LonLat(35,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
+            popupContentHTML = '<img src="img/wideshort.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored bubble popup wide short fixed contents autosize closebox overflow
             ll = new OpenLayers.LonLat(40,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/wideshort.jpg"></img>' 
+            popupContentHTML = '<img src="img/wideshort.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored bubble popup thin long fixed contents autosize overflow
             ll = new OpenLayers.LonLat(50,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
+            popupContentHTML = '<img src="img/thinlong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored bubble popup thin long fixed contents autosize closebox overflow
             ll = new OpenLayers.LonLat(55,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/thinlong.jpg"></img>' 
+            popupContentHTML = '<img src="img/thinlong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
 
 
             //anchored bubble popup wide long fixed contents autosize overflow
             ll = new OpenLayers.LonLat(65,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, false, true);
 
             //anchored bubble popup wide long fixed contents autosize closebox overflow
             ll = new OpenLayers.LonLat(70,-20);
             popupClass = AutoSizeFramedCloud;
-            popupContentHTML = '<img src="img/widelong.jpg"></img>' 
+            popupContentHTML = '<img src="img/widelong.jpg"></img>';
             addMarker(ll, popupClass, popupContentHTML, true, true);
  
 
diff --git a/examples/popups.html b/examples/popups.html
deleted file mode 100644
index 3620043..0000000
--- a/examples/popups.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var map, layer, popup;
-        var markers, feature, marker;
-        
-        function init(){
-            map = new OpenLayers.Map('map');
-            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
-            map.addLayer(layer);
-            layer = new OpenLayers.Layer.Google( "Google" );
-            map.addLayer(layer);
-
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.zoomToMaxExtent();
-            
-        }
-
-        function changer() {
-            popup.setBackgroundColor("red");
-            popup.setSize(new OpenLayers.Size(100,600));
-//            popup.moveTo(new OpenLayers.Pixel(120,120));
-//            popup.setOpacity(.5);
-            popup.setBorder("2px solid");    
-            popup.setContentHTML("High Chickens");            
-        }
-
-        function add() {
-            popup = new OpenLayers.Popup("chicken", 
-                                         new OpenLayers.LonLat(5,40),
-                                         new OpenLayers.Size(200,200),
-                                         "example popup",
-                                         true);
-            popup.closeOnMove = true;
-        
-            map.addPopup(popup);
-        }        
-
-        function addAnchor() {
-            popup = new OpenLayers.Popup.Anchored("chicken", 
-                                         new OpenLayers.LonLat(5,40),
-                                         new OpenLayers.Size(200,200),
-                                         "example popup", true);
-        
-            map.addPopup(popup);
-        }        
-        
-        function addMarker() {
-    
-            markers = new OpenLayers.Layer.Markers("zibo");
-            map.addLayer(markers);
-
-            feature = new OpenLayers.Feature(layer, 
-                                                 new OpenLayers.LonLat(0,0));
-
-
-            marker = feature.createMarker();
-            
-            markers.addMarker(marker);
-            marker.events.register("mousedown", marker, mousedown);
-                                                             
-        }
-        
-        function mousedown(evt) {
-            if (popup == null) {
-                popup = feature.createPopup(true);
-                popup.setContentHTML("<div style='background-color:red; width:150;height:100'><a href='http://www.somethingconstructive.net' target='_blank'>click me</a></div>");
-                popup.setBackgroundColor("yellow");
-                popup.setOpacity(0.7);
-                markers.map.addPopup(popup);
-            } else {
-                popup.toggle();
-               }
-            OpenLayers.Event.stop(evt);
-        }        
-
-        /**
-         * @param {Event} evt
-         */
-        function onPopupMouseDown(evt) {
-            markers.map.removePopup(popup);
-            popup.destroy();
-            popup = null;
-            OpenLayers.Event.stop(evt);
-        }
-
-
-        function destroy() {
-            popup.destroy();
-        }
-
-        function remove() {
-            markers.removeMarker(marker);
-        }
-
-        function removelayer() {
-            layer.destroy();
-//            map.removeLayer(markers);
-        }
-    </script>
-  </head>
-  <body onload="init()">
-  <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.
-  </p>
-
-  <div id="map" class="smallmap"></div>
-    <p>If you open an anchoredbubble and switch to google, it shouldn't crash. If it does, don't release OpenLayers.</p>  
-    <div style="background-color:purple" onclick="add()"> click to add Popup to map</div>
-    <div style="background-color:green" onclick="addMarker()"> click to add a Marker with an AnchoredBubble popup</div>
-    <div style="background-color:blue" onclick="changer()"> click to modify popup's attributes</div>
-    <div style="background-color:red" onclick="remove()"> click to remove the popup from map</div>
-    <div style="background-color:grey" onclick="removelayer()"> click to remove the markers layer</div>
-    <div style="background-color:orange" onclick="alert(marker.onScreen())"> marker.onscreen()?</div>
-    <div style="background-color:yellow" onclick="destroy()"> click to destroy the popup from map</div> 
-    <div id="docs">
-      Detailed description of this example needs to be written.
-   </div>
-  </body>
-</html>
diff --git a/examples/projected-map.html b/examples/projected-map.html
deleted file mode 100644
index 0e9c87c..0000000
--- a/examples/projected-map.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers: Non-Geographic Projection</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 {
-    width: 100%;
-    height: 100%;
-    border: 0px;
-    padding: 0px;
-    }
-    </style>
-
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var lat = 900863; 
-        var lon = 235829;
-        var zoom = 6;
-        var map, layer;
-
-        function init(){
-            map = new OpenLayers.Map( 'map' );
-            var basemap = new OpenLayers.Layer.WMS( "Boston", 
-                "http://boston.freemap.in/cgi-bin/mapserv?",
-                {
-                 map: '/www/freemap.in/boston/map/gmaps.map', 
-                 layers: 'border,water,roads,rapid_transit,buildings', 
-                 format: 'png', 
-                 transparent: 'off'
-                },
-                // These are the important parts for creating a non-epsg:4326
-                // map: Maxextent is the boundary of the map/tile loading area,
-                // maxResolution is the units/pixel at the highest zoom, and 
-                // projection is the projection to be used in WMS/WFS Requests.
-                {
-                  maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), 
-                  maxResolution: 296985/1024, // Another alternative is 'auto', which 
-                                              // will automatically fit the map: you can 
-                                              // then check map.baseLayer.resolutions[0] for
-                                              // a reasonable value.
-                  projection:"EPSG:2805",     // Used in WMS/WFS requests.   
-                  units: "m"                  // Only neccesary for working with scales.
-                  } );
-                
-            map.addLayer(basemap);
-            
-            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.addControl(new OpenLayers.Control.ScaleLine());
-        }
-    </script>
-  </head>
-
-<body onload="init()">
-  <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 
-  </p>
-    <div id="map" class="smallmap"></div>
-    <p>When using alternative projections, you still use OpenLayers.LonLat objects, even though
-       the properties are actually X/Y values at that point.</p>
-</body>
-</html>
diff --git a/examples/protocol-gears.html b/examples/protocol-gears.html
deleted file mode 100644
index 23799ec..0000000
--- a/examples/protocol-gears.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <!--[if lte IE 6]>
-        <link rel="stylesheet" href="../theme/default/ie6-style.css" type="text/css" />
-    <![endif]-->
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <style type="text/css">
-        .float-left {
-            float: left;
-        }
-        .clear-left {
-            clear: left;
-        }
-    </style>
-    <script src="../lib/Gears/gears_init.js"></script>
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var map, vector, protocol, modify;
-
-        function init() {
-            // create Gears protocol
-            protocol = new OpenLayers.Protocol.SQL.Gears({
-                databaseName: "db_name",
-                tableName: "table_name",
-                saveFeatureState: false
-            });
-
-            if (!GearsIsSupported()) {
-                return;
-            }
-
-            map = new OpenLayers.Map("map");
-
-            // create base layer
-            var layer = new OpenLayers.Layer.WMS("OpenLayers WMS",
-                "http://vmap0.tiles.osgeo.org/wms/vmap0",
-                {"layers": "basic"}
-            );
-            map.addLayer(layer);
-
-            // create vector layer
-            vector = new OpenLayers.Layer.Vector("Vector", {
-                protocol: protocol,
-                strategies : [new OpenLayers.Strategy.Fixed()],
-                eventListeners: {
-                    featuremodified: function(obj) {
-                        displayStatus();
-                    }
-                }
-            });
-            map.addLayer(vector);
-
-            // create modify feature control
-            modify = new OpenLayers.Control.ModifyFeature(vector);
-
-            // create editing panel
-            var panel = new OpenLayers.Control.Panel({
-                displayClass: "olControlEditingToolbar"
-            });
-
-            var navigation = new OpenLayers.Control.Navigation({
-                eventListeners: {
-                    activate: function(obj) {
-                        modify.activate();
-                    },
-                    deactivate: function(obj) {
-                        modify.deactivate();
-                    }
-                }
-            });
-
-            var editing = new OpenLayers.Control.DrawFeature(
-                vector, OpenLayers.Handler.Polygon, {
-                displayClass: "olControlDrawFeaturePolygon",
-                eventListeners: {
-                    featureadded: function(obj) {
-                        obj.feature.state = OpenLayers.State.INSERT;
-                        displayStatus();
-                    }
-                }
-            });
-            panel.addControls([navigation, editing]);
-            panel.defaultControl = navigation;
-
-            // add controls to the map
-            map.addControl(modify);
-            map.addControl(panel);
-
-            // center the map
-            map.setCenter(new OpenLayers.LonLat(5, 40), 5);
-        }
-
-        function displayResult(txt) {
-            if (window.resultDomElement === undefined) {
-                window.resultDomElement = OpenLayers.Util.getElement("last-result");
-            }
-            resultDomElement.innerHTML = txt;
-            displayStatus();
-        }
-
-        function displayStatus() {
-            if (window.statusDomElement === undefined) {
-                window.statusDomElement = OpenLayers.Util.getElement("status");
-            }
-
-            var createCnt = 0;
-            var updateCnt = 0;
-            var deleteCnt = 0;
-            var i, len, state;
-            for (i = 0, len = vector.features.length; i < len; i++) {
-                state = vector.features[i].state;
-                if (state == OpenLayers.State.INSERT) {
-                    createCnt++;
-                } else if (state == OpenLayers.State.UPDATE) {
-                    updateCnt++;
-                } else if (state == OpenLayers.State.DELETE) {
-                    deleteCnt++;
-                }
-            }
-            statusDomElement.innerHTML = createCnt + " features to create, " +
-                                         updateCnt + " features to update, " +
-                                         deleteCnt + " features to delete";
-        }
-
-        function GearsIsSupported() {
-            if (!protocol.supported()) {
-                OpenLayers.Console.userError("You must install Gears prior to using this example");
-                return false;
-            }
-            return true;
-        }
-
-        function featuresWithState(state) {
-            var list = [];
-            var i, len, feature;
-            for (i = 0, len = vector.features.length; i < len; i++) {
-                feature = vector.features[i];
-                if (feature.state == state) {
-                    list.push(feature);
-                }
-            }
-            return list;
-        }
-
-        function _sync() {
-            if (!GearsIsSupported()) {
-                return;
-            }
-            var resp = protocol.read();
-            if (!resp.success()) {
-                OpenLayers.Console.error("reading from Gears DB failed");
-                return;
-            }
-            vector.destroyFeatures();
-            if (!resp.features || resp.features.length <= 0) {
-                displayResult("No features to read");
-                return;
-            }
-            vector.addFeatures(resp.features);
-            displayResult("features successfully read");
-        }
-
-        function _commit() {
-            if (!GearsIsSupported()) {
-                return;
-            }
-            var error = false;
-            function callback(resp) {
-                if (error) {
-                    return;
-                }
-                if (!resp.success()) {
-                    OpenLayers.Console.error("Commiting to Gears DB failed");
-                    error = true;
-                    return;
-                }
-                modify.selectControl.unselectAll()
-
-                if (resp.reqFeatures) {
-                    vector.destroyFeatures(resp.reqFeatures);
-                }
-                if (resp.features) {
-                    vector.addFeatures(resp.features);
-                }
-            }
-            if (vector.features.length > 0) {
-                protocol.commit(vector.features, {
-                    "create": {
-                        callback: callback
-                    },
-                    "update": {
-                        callback: callback
-                    },
-                    "delete": {
-                        callback: callback
-                    }
-                });
-                if (!error) {
-                    displayResult("features successfully committed");
-                }
-            } else {
-                displayResult("no features to commit");
-            }
-        }
-
-        function _delete() {
-            if (!GearsIsSupported()) {
-                return;
-            }
-            var feature = vector.selectedFeatures[0];
-            if (feature) {
-                modify.selectControl.unselectAll()
-                feature.state = OpenLayers.State.DELETE;
-                displayStatus();
-            }
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">Gears Protocol Example</h1>
-
-    <div id="tags">
-        Google, Gears
-    </div>
-    <p id="shortdesc">
-        Shows the usage of the Gears protocol.
-    </p>
-
-    <div class="float-left">
-      <div id="map" class="smallmap"></div>
-    </div>
-
-    <div>
-      <a href="javascript:_sync()">Sync</a>
-      <p>The Sync link destroys the features currently in the layer, reads
-         features from the Gears database, and adds them to the layer.
-         Uncommitted features will be lost.</p>
-
-      <a href="javascript:_commit()">Commit</a>
-      <p>The Commit link commits to the Gears database the features that are
-         marked as INSERT, UPDATE or DELETE.</p>
-
-      <a href="javascript:_delete()">Delete</a>
-      <p>The Delete link marks the selected feature as DELETE. To select a feature
-         click choose the navigation control in the editing toolbar.</p>
-    </div>
-
-    <div style="margin-top: 30px">
-      <p>Status: <span id="status"></span></p>
-      <p>Result: <span id="last-result"></span></p>
-    </div>
-
-    <div class="clear-left" id="docs">
-      <p>This example demonstrates the usage of OpenLayers Gears protocol to
-         read/create/update/delete features from/to the Gears database.
-         <a href="http://gears.google.com/">Gears</a> must obviously be installed
-         in your browser for this example to work.</p>
-    </div>
-  </body>
-</html>
diff --git a/examples/proxy.cgi b/examples/proxy.cgi
index c668218..4358e2c 100755
--- a/examples/proxy.cgi
+++ b/examples/proxy.cgi
@@ -21,7 +21,8 @@ allowedHosts = ['www.openlayers.org', 'openlayers.org',
                 'sigma.openplans.org', 'demo.opengeo.org',
                 'www.openstreetmap.org', 'sample.azavea.com',
                 'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080', 
-                'vmap0.tiles.osgeo.org', 'www.openrouteservice.org']
+                'vmap0.tiles.osgeo.org', 'www.openrouteservice.org',
+                'maps.wien.gv.at']
 
 method = os.environ["REQUEST_METHOD"]
 
diff --git a/examples/resize-features.html b/examples/resize-features.html
index 521d501..2bf68f7 100644
--- a/examples/resize-features.html
+++ b/examples/resize-features.html
@@ -85,7 +85,7 @@
   <body onload="init()">
     <h1 id="title">Resize Features Programatically</h1>
     <div id="tags">
-        vector, feature, resizing, resize
+        vector, feature, resizing, resize, light
     </div>    
     <p id="shortdesc">
       Demonstration of how to use the geometry resize methods to
diff --git a/examples/restricted-extent.html b/examples/restricted-extent.html
index 5117453..7ab4ca8 100644
--- a/examples/restricted-extent.html
+++ b/examples/restricted-extent.html
@@ -16,7 +16,7 @@
         function init() {
             var options = {
                 restrictedExtent: extent
-            }
+            };
             map = new OpenLayers.Map('map', options);
 
             var wms = new OpenLayers.Layer.WMS(
@@ -42,7 +42,7 @@
   <body onload="init()">
     <h1 id="title">OpenLayers Restricted Extent Example</h1>
     <div id="tags">
-        map, restrict, restrictedextent, extent
+        map, restrict, restrictedextent, extent, light
     </div>    
     <p id="shortdesc">
       Don't let users drag outside the map extent: instead, limit dragging such
@@ -74,4 +74,4 @@
         </label>
     
   </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/examples/rotate-features.html b/examples/rotate-features.html
index 8a8eb02..51e559b 100644
--- a/examples/rotate-features.html
+++ b/examples/rotate-features.html
@@ -99,7 +99,7 @@
     <h1 id="title">Rotate vector features</h1>
 
     <div id="tags">
-        vector, feature, rotating, rotation, rotate, advanced
+        vector, feature, rotating, rotation, rotate, advanced, light
     </div>
   <p id="shortdesc">
       Details on how to create and rotate vector features programmatically
diff --git a/examples/select-feature-multilayer.html b/examples/select-feature-multilayer.html
index 58c1ade..6b8f3f4 100644
--- a/examples/select-feature-multilayer.html
+++ b/examples/select-feature-multilayer.html
@@ -24,7 +24,12 @@
                 {layers: 'basic'}
             ); 
 
+            // allow testing of specific renderers via "?renderer=Canvas", etc
+            var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+            renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
             var vectors1 = new OpenLayers.Layer.Vector("Vector Layer 1", {
+                renderers: renderer,
                 styleMap: new OpenLayers.StyleMap({
                     "default": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
                         externalGraphic: "../img/marker-green.png",
@@ -38,6 +43,7 @@
                 })
             });
             var vectors2 = new OpenLayers.Layer.Vector("Vector Layer 2", {
+                renderers: renderer,
                 styleMap: new OpenLayers.StyleMap({
                     "default": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
                         fillColor: "red",
@@ -111,7 +117,7 @@
   <body onload="init()">
     <h1 id="title">OpenLayers Select Feature on Multiple Layers Example</h1>
     <div id="tags">
-        vector, feature, selecting, selection, advanced
+        vector, feature, selecting, selection, advanced, light
     </div>     
     <p id="shortdesc">
       Select a feature on click with the Control.SelectFeature on multiple 
diff --git a/examples/single-tile.html b/examples/single-tile.html
index 1a6d869..54da081 100644
--- a/examples/single-tile.html
+++ b/examples/single-tile.html
@@ -10,7 +10,7 @@
     </head>
     <body>
         <h1 id="title">Single Tile Example</h1>
-        <div id="tags">tile, ratio, singleTile, performance</div>
+        <div id="tags">tile, ratio, singleTile, performance, light</div>
         <p id="shortdesc">
             Use the singleTile option on gridded layers to request a single tile.
         </p>  
diff --git a/examples/snap-grid.html b/examples/snap-grid.html
index b6b592d..9d0604b 100644
--- a/examples/snap-grid.html
+++ b/examples/snap-grid.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <meta name="apple-mobile-web-app-capable" content="yes">
     <title>OpenLayers Snap Grid Example</title>
     <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
diff --git a/examples/snap-grid.js b/examples/snap-grid.js
index 81a72da..4478c5a 100644
--- a/examples/snap-grid.js
+++ b/examples/snap-grid.js
@@ -66,16 +66,16 @@ var rotation = document.getElementById("rotation");
 rotation.value = String(points.rotation);
 rotation.onchange = function() {
     points.setRotation(Number(rotation.value));
-}
+};
 
 var spacing = document.getElementById("spacing");
 spacing.value = String(points.dx);
 spacing.onchange = function() {
     points.setSpacing(Number(spacing.value));
-}
+};
 
 var max = document.getElementById("max");
 max.value = String(points.maxFeatures);
 max.onchange = function() {
     points.setMaxFeatures(Number(max.value));
-}
+};
diff --git a/examples/snapping.html b/examples/snapping.html
index 6747e89..6c735fe 100644
--- a/examples/snapping.html
+++ b/examples/snapping.html
@@ -208,7 +208,7 @@
             sel.value = "poly";
             sel.onchange = function() {
                 updateEditable(sel.value);
-            }
+            };
             
             var target, type, tog, tol;
             var types = ["node", "vertex", "edge"];
diff --git a/examples/spherical-mercator.html b/examples/spherical-mercator.html
index 099ad03..b283570 100644
--- a/examples/spherical-mercator.html
+++ b/examples/spherical-mercator.html
@@ -11,146 +11,99 @@
     <![endif]-->
     <link rel="stylesheet" href="style.css" type="text/css">
     <style type="text/css">
-        .olControlAttribution { bottom: 0px!important }
+        .olControlAttribution { 
+            bottom: 0px;
+            left: 2px;
+            right: inherit;
+            width: 400px;
+        }
         #map {
             height: 512px;
         }
-
-        /* avoid pink tiles */
-        .olImageLoadError {
-            background-color: transparent !important;
-        }
     </style>
 
-    <script src='http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1'></script>
-    <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
-    <script src="http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=euzuro-openlayers"></script>
+    <script src="http://maps.google.com/maps/api/js?v=3&sensor=false"></script>
 
     <script src="../lib/OpenLayers.js"></script>
+  </head>
+  <body>
+    <h1 id="title">OpenLayers Spherical Mercator Example</h1>
+
+    <div id="tags">
+        spherical, mercator, osm, xyz, google, virtual earth, tile
+    </div>
+    <p id="shortdesc">
+        Shows the use of the Spherical Mercator Layers, for overlaying 
+        Google, Microsoft, and other layers with XYZ tiles.
+    </p>
+    <div id="map" class="smallmap"></div>
+
+    <div id="docs"></div>
     <script type="text/javascript">
 
-// make map available for easy debugging
-var map;
-
-// increase reload attempts 
-OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
-
-function init(){
-    var maxExtent = new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508),
-        restrictedExtent = maxExtent.clone(),
-        maxResolution = 156543.0339;
-    
-    var options = {
-        projection: new OpenLayers.Projection("EPSG:900913"),
-        displayProjection: new OpenLayers.Projection("EPSG:4326"),
-        units: "m",
-        numZoomLevels: 18,
-        maxResolution: maxResolution,
-        maxExtent: maxExtent,
-        restrictedExtent: restrictedExtent
-    };
-    map = new OpenLayers.Map('map', options);
+    var map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        displayProjection: "EPSG:4326",
+        numZoomLevels: 18
+    });
 
     // create Google Mercator layers
-    var gmap = new OpenLayers.Layer.Google(
-        "Google Streets",
-        {sphericalMercator: true}
+    var gphy = new OpenLayers.Layer.Google(
+        "Google Physical",
+        {type: google.maps.MapTypeId.TERRAIN}
     );
-    var gsat = new OpenLayers.Layer.Google(
-        "Google Satellite",
-        {type: G_SATELLITE_MAP, sphericalMercator: true, numZoomLevels: 22}
+    var gmap = new OpenLayers.Layer.Google(
+        "Google Streets", // the default
+        {numZoomLevels: 20}
     );
     var ghyb = new OpenLayers.Layer.Google(
         "Google Hybrid",
-        {type: G_HYBRID_MAP, sphericalMercator: true}
-    );
-
-    // create Virtual Earth layers
-    var veroad = new OpenLayers.Layer.VirtualEarth(
-        "Virtual Earth Roads",
-        {'type': VEMapStyle.Road, sphericalMercator: true}
-    );
-    var veaer = new OpenLayers.Layer.VirtualEarth(
-        "Virtual Earth Aerial",
-        {'type': VEMapStyle.Aerial, sphericalMercator: true}
-    );
-    var vehyb = new OpenLayers.Layer.VirtualEarth(
-        "Virtual Earth Hybrid",
-        {'type': VEMapStyle.Hybrid, sphericalMercator: true}
-    );
-
-    // create Yahoo layer
-    var yahoo = new OpenLayers.Layer.Yahoo(
-        "Yahoo Street",
-        {sphericalMercator: true}
+        {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20}
     );
-    var yahoosat = new OpenLayers.Layer.Yahoo(
-        "Yahoo Satellite",
-        {'type': YAHOO_MAP_SAT, sphericalMercator: true}
-    );
-    var yahoohyb = new OpenLayers.Layer.Yahoo(
-        "Yahoo Hybrid",
-        {'type': YAHOO_MAP_HYB, sphericalMercator: true}
+    var gsat = new OpenLayers.Layer.Google(
+        "Google Satellite",
+        {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}
     );
 
-    // create OSM layer
+    // create Bing layers
+
+    // API key for http://openlayers.org. Please get your own at
+    // http://bingmapsportal.com/ and use that instead.
+    var apiKey = "AqTGBsziZHIJYYxgivLBf0hVdrAk9mWO5cQcb8Yux8sW5M8c8opEC2lZqKR1ZZXf";
+
+    var veroad = new OpenLayers.Layer.Bing({
+        key: apiKey,
+        type: "Road",
+        wrapDateLine: true
+    });
+    var veaer = new OpenLayers.Layer.Bing({
+        key: apiKey,
+        type: "Aerial",
+        wrapDateLine: true
+    });
+    var vehyb = new OpenLayers.Layer.Bing({
+        key: apiKey,
+        type: "AerialWithLabels",
+        wrapDateLine: true
+    });
+
+    // create OSM layers
     var mapnik = new OpenLayers.Layer.OSM();
-    // create OAM layer
-    var oam = new OpenLayers.Layer.XYZ(
-        "OpenAerialMap",
-        "http://tile.openaerialmap.org/tiles/1.0.0/openaerialmap-900913/${z}/${x}/${y}.png",
-        {
-            sphericalMercator: true
-        }
-    );
-
-    // create OSM layer
-    var osmarender = new OpenLayers.Layer.OSM(
-        "OpenStreetMap (Tiles at Home)",
-        "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png"
-    );
-
-
-    // create WMS layer
-    var wms = new OpenLayers.Layer.WMS(
-        "World Map",
-        "http://world.freemap.in/tiles/",
-        {'layers': 'factbook-overlay', 'format':'png'},
-        {
-            'opacity': 0.4, visibility: false,
-            'isBaseLayer': false,'wrapDateLine': true
-        }
-    );
 
     // create a vector layer for drawing
     var vector = new OpenLayers.Layer.Vector("Editable Vectors");
 
-    map.addLayers([gmap, gsat, ghyb, veroad, veaer, vehyb,
-                   yahoo, yahoosat, yahoohyb, oam, mapnik, osmarender,
-                   wms, vector]);
+    map.addLayers([
+        gphy, gmap, gsat, ghyb, veroad, veaer, vehyb, mapnik, vector
+    ]);
     map.addControl(new OpenLayers.Control.LayerSwitcher());
     map.addControl(new OpenLayers.Control.EditingToolbar(vector));
     map.addControl(new OpenLayers.Control.Permalink());
     map.addControl(new OpenLayers.Control.MousePosition());
-    if (!map.getCenter()) {map.zoomToMaxExtent()}
-}
+    map.zoomToMaxExtent();
 
     </script>
-  </head>
-  <body onload="init()">
-    <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 
-        Google, Yahoo, Microsoft, and other layers with WMS and TMS tiles.
-    </p>
-    <div id="map" class="smallmap"></div>
-
-    <div id="docs">
-    </div>
   </body>
 </html>
 
diff --git a/examples/strategy-bbox.html b/examples/strategy-bbox.html
index 3b53c77..1674113 100644
--- a/examples/strategy-bbox.html
+++ b/examples/strategy-bbox.html
@@ -10,20 +10,46 @@
         <script src="../lib/OpenLayers.js"></script>
         <script type="text/javascript">
             var map, photos;
-            OpenLayers.ProxyHost = (window.location.host == "localhost") ?
-                "/cgi-bin/proxy.cgi?url=" : "proxy.cgi?url=";
-        
+
+            /**
+             * A specific format for parsing Flickr API JSON responses.
+             */
+            OpenLayers.Format.Flickr = OpenLayers.Class(OpenLayers.Format, {
+                read: function(obj) {
+                    if(obj.stat === 'fail') {
+                        throw new Error(
+                            ['Flickr failure response (',
+                             obj.code,
+                             '): ',
+                             obj.message].join(''));
+                    }
+                    if(!obj || !obj.photos ||
+                       !OpenLayers.Util.isArray(obj.photos.photo)) {
+                        throw new Error(
+                            'Unexpected Flickr response');
+                    }
+                    var photos = obj.photos.photo, photo,
+                        x, y, point,
+                        feature, features = [];
+                    for(var i=0,l=photos.length; i<l; i++) {
+                        photo = photos[i];
+                        x = photo.longitude;
+                        y = photo.latitude;
+                        point = new OpenLayers.Geometry.Point(x, y);
+                        feature = new OpenLayers.Feature.Vector(point, {
+                            title: photo.title,
+                            img_url: photo.url_s
+                        });
+                        features.push(feature);
+                    }
+                    return features;
+                }
+            });
+
             function init() {
-                map = new OpenLayers.Map('map', {
-                    restrictedExtent: new OpenLayers.Bounds(-180, -90, 180, 90)
-                });
-                var base = new OpenLayers.Layer.WMS("Imagery", 
-                    ["http://t1.hypercube.telascience.org/tiles?",
-		     "http://t2.hypercube.telascience.org/tiles?",
-		     "http://t3.hypercube.telascience.org/tiles?",
-		     "http://t4.hypercube.telascience.org/tiles?"], 
-                    {layers: 'landsat7'}
-                );
+                map = new OpenLayers.Map('map');
+
+                var base = new OpenLayers.Layer.OSM();
 
                 var style = new OpenLayers.Style({
                     externalGraphic: "${img_url}",
@@ -31,24 +57,28 @@
                 });
 
                 photos = new OpenLayers.Layer.Vector("Photos", {
-                    strategies: [new OpenLayers.Strategy.BBOX()],
-                    protocol: new OpenLayers.Protocol.HTTP({
-                        url: "http://labs.metacarta.com/flickrbrowse/flickr.py/flickr",
+                    projection: "EPSG:4326",
+                    strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1})],
+                    protocol: new OpenLayers.Protocol.Script({
+                        url: "http://api.flickr.com/services/rest",
                         params: {
-                            format: "WFS",
-                            sort: "interestingness-desc",
-                            service: "WFS",
-                            request: "GetFeatures",
-                            srs: "EPSG:4326",
-                            maxfeatures: 10
+                            api_key: 'b5e8c0e287e678671c3d8b2c0f3ced85',
+                            format: 'json',
+                            method: 'flickr.photos.search',
+                            extras: 'geo,url_s',
+                            per_page: 10,
+                            page: 1
                         },
-                        format: new OpenLayers.Format.GML()
+                        callbackKey: 'jsoncallback',
+                        format: new OpenLayers.Format.Flickr()
                     }),
                     styleMap: new OpenLayers.StyleMap(style)
                 });
 
                 map.addLayers([base, photos]);
-                map.setCenter(new OpenLayers.LonLat(-116.45, 35.42), 5);
+                map.setCenter(
+                        new OpenLayers.LonLat(-567468.5392481,
+                                              4950672.5471436), 5);
             }
             
         </script>
@@ -56,7 +86,7 @@
     <body onload="init()">
         <h1 id="title">BBOX Strategy Example</h1>
         <div id="tags">
-            vector, feature, stylemap, wfs, bbox, strategy, cleanup
+            vector, feature, stylemap, bbox, strategy, script, flickr
         </div>    
         <p id="shortdesc">
             Uses a BBOX strategy to request features within a bounding box.
@@ -67,6 +97,10 @@
             previously requested data bounds are invalidated (by browsing to
             some area not covered by those bounds), another request for data
             is issued.</p>
+
+            <p>This particular example uses the <a
+                href="http://www.flickr.com/services/api/">Flickr API.</a></p>
+
         </div>
     </body>
 </html>
diff --git a/examples/strategy-cluster.html b/examples/strategy-cluster.html
index 4934423..e4ca7ce 100644
--- a/examples/strategy-cluster.html
+++ b/examples/strategy-cluster.html
@@ -53,7 +53,7 @@
                 right: 80px;
             }
             #photos ul li {
-                padding 10px;
+                padding: 10px;
                 margin: 0;
                 list-style: none;
                 display: inline;
@@ -70,20 +70,45 @@
         <script src="animator.js"></script>
         <script type="text/javascript">
             var map, template;
-            OpenLayers.ProxyHost = (window.location.host == "localhost") ?
-                "/cgi-bin/proxy.cgi?url=" : "proxy.cgi?url=";
+
+            /**
+             * A specific format for parsing Flickr API JSON responses.
+             */
+            OpenLayers.Format.Flickr = OpenLayers.Class(OpenLayers.Format, {
+                read: function(obj) {
+                    if(obj.stat === 'fail') {
+                        throw new Error(
+                            ['Flickr failure response (',
+                             obj.code,
+                             '): ',
+                             obj.message].join(''));
+                    }
+                    if(!obj || !obj.photos ||
+                       !OpenLayers.Util.isArray(obj.photos.photo)) {
+                        throw new Error(
+                            'Unexpected Flickr response');
+                    }
+                    var photos = obj.photos.photo, photo,
+                        x, y, point,
+                        feature, features = [];
+                    for(var i=0,l=photos.length; i<l; i++) {
+                        photo = photos[i];
+                        x = photo.longitude;
+                        y = photo.latitude;
+                        point = new OpenLayers.Geometry.Point(x, y);
+                        feature = new OpenLayers.Feature.Vector(point, {
+                            title: photo.title,
+                            img_url: photo.url_s
+                        });
+                        features.push(feature);
+                    }
+                    return features;
+                }
+            });
 
             function init() {
-                map = new OpenLayers.Map('map', {
-                    restrictedExtent: new OpenLayers.Bounds(-180, -90, 180, 90)
-                });
-                var base = new OpenLayers.Layer.WMS("Imagery", 
-                    ["http://t1.hypercube.telascience.org/tiles?",
-		     "http://t2.hypercube.telascience.org/tiles?",
-		     "http://t3.hypercube.telascience.org/tiles?",
-		     "http://t4.hypercube.telascience.org/tiles?"], 
-                    {layers: 'landsat7'}
-                );
+                map = new OpenLayers.Map('map');
+                var base = new OpenLayers.Layer.OSM();
 
                 var style = new OpenLayers.Style({
                     pointRadius: "${radius}",
@@ -101,22 +126,24 @@
                 });
 
                 var photos = new OpenLayers.Layer.Vector("Photos", {
+                    projection: "EPSG:4326",
                     strategies: [
                         new OpenLayers.Strategy.Fixed(),
                         new OpenLayers.Strategy.Cluster()
                     ],
-                    protocol: new OpenLayers.Protocol.HTTP({
-                        url: "http://labs.metacarta.com/flickrbrowse/flickr.py/flickr",
+                    protocol: new OpenLayers.Protocol.Script({
+                        url: "http://api.flickr.com/services/rest",
                         params: {
-                            format: "WFS",
-                            sort: "interestingness-desc",
-                            service: "WFS",
-                            request: "GetFeatures",
-                            srs: "EPSG:4326",
-                            maxfeatures: 150,
+                            api_key: 'b5e8c0e287e678671c3d8b2c0f3ced85',
+                            format: 'json',
+                            method: 'flickr.photos.search',
+                            extras: 'geo,url_s',
+                            per_page: 150,
+                            page: 1,
                             bbox: [-180, -90, 180, 90]
                         },
-                        format: new OpenLayers.Format.GML()
+                        callbackKey: 'jsoncallback',
+                        format: new OpenLayers.Format.Flickr()
                     }),
                     styleMap: new OpenLayers.StyleMap({
                         "default": style,
@@ -172,7 +199,7 @@
     <body onload="init()">
         <h1 id="title">Cluster Strategy Example</h1>
         <div id="tags">
-            vector, feature, stylemap, wfs, cluster, strategy, cleanup
+            vector, feature, stylemap, cluster, strategy, flickr, script
         </div>         
         <p id="shortdesc">
             Uses a cluster strategy to render points representing clusters of features.
@@ -181,6 +208,8 @@
         <div id="docs">
             <p>The Cluster strategy lets you display points representing clusters
             of features within some pixel distance.</p>
+            <p>This particular example uses the <a
+                href="http://www.flickr.com/services/api/">Flickr API.</a></p>
         </div>
         <div id="photos"></div>
         <p>Hover over a cluster on the map to see the photos it includes.</p>
diff --git a/examples/strategy-paging.html b/examples/strategy-paging.html
index c51518a..204bac9 100644
--- a/examples/strategy-paging.html
+++ b/examples/strategy-paging.html
@@ -10,20 +10,45 @@
         <script src="../lib/OpenLayers.js"></script>
         <script type="text/javascript">
             var map, photos, paging;
-            OpenLayers.ProxyHost = (window.location.host == "localhost") ?
-                "/cgi-bin/proxy.cgi?url=" : "proxy.cgi?url=";
+
+            /**
+             * A specific format for parsing Flickr API JSON responses.
+             */
+            OpenLayers.Format.Flickr = OpenLayers.Class(OpenLayers.Format, {
+                read: function(obj) {
+                    if(obj.stat === 'fail') {
+                        throw new Error(
+                            ['Flickr failure response (',
+                             obj.code,
+                             '): ',
+                             obj.message].join(''));
+                    }
+                    if(!obj || !obj.photos ||
+                       !OpenLayers.Util.isArray(obj.photos.photo)) {
+                        throw new Error(
+                            'Unexpected Flickr response');
+                    }
+                    var photos = obj.photos.photo, photo,
+                        x, y, point,
+                        feature, features = [];
+                    for(var i=0,l=photos.length; i<l; i++) {
+                        photo = photos[i];
+                        x = photo.longitude;
+                        y = photo.latitude;
+                        point = new OpenLayers.Geometry.Point(x, y);
+                        feature = new OpenLayers.Feature.Vector(point, {
+                            title: photo.title,
+                            img_url: photo.url_s
+                        });
+                        features.push(feature);
+                    }
+                    return features;
+                }
+            });
         
             function init() {
-                map = new OpenLayers.Map('map', {
-                    restrictedExtent: new OpenLayers.Bounds(-180, -90, 180, 90)
-                });
-                var base = new OpenLayers.Layer.WMS("Imagery", 
-                    ["http://t1.hypercube.telascience.org/tiles?",
-		     "http://t2.hypercube.telascience.org/tiles?",
-		     "http://t3.hypercube.telascience.org/tiles?",
-		     "http://t4.hypercube.telascience.org/tiles?"], 
-                    {layers: 'landsat7'}
-                );
+                map = new OpenLayers.Map('map');
+                var base = new OpenLayers.Layer.OSM();
 
                 var style = new OpenLayers.Style({
                     externalGraphic: "${img_url}",
@@ -33,19 +58,21 @@
                 paging = new OpenLayers.Strategy.Paging();
 
                 photos = new OpenLayers.Layer.Vector("Photos", {
+                    projection: "EPSG:4326",
                     strategies: [new OpenLayers.Strategy.Fixed(), paging],
-                    protocol: new OpenLayers.Protocol.HTTP({
-                        url: "http://labs.metacarta.com/flickrbrowse/flickr.py/flickr",
+                    protocol: new OpenLayers.Protocol.Script({
+                        url: "http://api.flickr.com/services/rest",
                         params: {
-                            format: "WFS",
-                            sort: "interestingness-desc",
-                            service: "WFS",
-                            request: "GetFeatures",
-                            srs: "EPSG:4326",
-                            maxfeatures: 100,
+                            api_key: 'b5e8c0e287e678671c3d8b2c0f3ced85',
+                            format: 'json',
+                            method: 'flickr.photos.search',
+                            extras: 'geo,url_s',
+                            per_page: 100,
+                            page: 1,
                             bbox: [-180, -90, 180, 90]
                         },
-                        format: new OpenLayers.Format.GML()
+                        callbackKey: 'jsoncallback',
+                        format: new OpenLayers.Format.Flickr()
                     }),
                     styleMap: new OpenLayers.StyleMap(style)
                 });
@@ -66,7 +93,7 @@
     <body onload="init()">
         <h1 id="title">Paging Strategy Example</h1>
         <div id="tags">
-            vector, feature, stylemap, wfs, paging, strategy, cleanup
+            vector, feature, stylemap, paging, strategy, flickr, script
         </div>        
         <p id="shortdesc">
             Uses a paging strategy to cache large batches of features and render a page at a time.
@@ -81,6 +108,8 @@
             that do not support paging on the server.  In this case, the protocol requests a
             batch of 100 features, the strategy caches those and supplies a single
             page at a time to the layer.</p>
+            <p>This particular example uses the <a
+                href="http://www.flickr.com/services/api/">Flickr API.</a></p>
         </div>
     </body>
 </html>
diff --git a/examples/style-rules.html b/examples/style-rules.html
index 987b01e..27f31f1 100644
--- a/examples/style-rules.html
+++ b/examples/style-rules.html
@@ -13,7 +13,7 @@
     <body onload="init()">
         <h1 id="title">Rule Based Style</h1>
         <div id="tags">
-            vector, feature, stylemap, filter, comparison
+            vector, feature, stylemap, filter, comparison, light
         </div>        
         <p id="shortdesc">
             Use rule based styling to use different symbolizers for different
diff --git a/examples/style.css b/examples/style.css
index d2a9ce1..237f940 100644
--- a/examples/style.css
+++ b/examples/style.css
@@ -69,6 +69,10 @@ h6 {
     font-weight: bold;
 }
 
+.olControlAttribution {
+    bottom: 5px;
+}
+
 /**
  * Map Examples Specific
  */
diff --git a/examples/style.mobile-jq.css b/examples/style.mobile-jq.css
index 418542f..280f7ba 100644
--- a/examples/style.mobile-jq.css
+++ b/examples/style.mobile-jq.css
@@ -55,7 +55,7 @@ body {
     margin: 1em;
 }
 .ui-content .ui-listview {
-    margin: 0px;
+    margin: 0;
 }
 #details-list li{
 	padding:15px 10px;
diff --git a/examples/style.mobile.css b/examples/style.mobile.css
deleted file mode 100644
index d9e9425..0000000
--- a/examples/style.mobile.css
+++ /dev/null
@@ -1,25 +0,0 @@
-div.olControlZoomPanel {
-    height: 108px
-    width: 36px;
-    position: absolute;
-    top: 20px;
-    left: 20px;
-}
-div.olControlZoomPanel div {
-    width: 36px;
-    height: 36px;
-    background-image: url(img/mobile-zoombar.png);
-    left: 0;
-}
-div.olControlZoomPanel .olControlZoomInItemInactive {
-    top: 0;
-    background-position: 0 0;
-}
-div.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
-    top: 36px;
-    background-position: 0 -36px;
-}
-div.olControlZoomPanel .olControlZoomOutItemInactive {
-    top: 72px;
-    background-position: 0 -72px;
-}
diff --git a/examples/stylemap.html b/examples/stylemap.html
index 6e712e8..f3764af 100644
--- a/examples/stylemap.html
+++ b/examples/stylemap.html
@@ -73,7 +73,7 @@
     <h1 id="title">StyleMap Example</h1>
 
     <div id="tags">
-        vector, feature, stylemap
+        vector, feature, stylemap, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/styles-context.html b/examples/styles-context.html
index e9e35bc..853e8c3 100644
--- a/examples/styles-context.html
+++ b/examples/styles-context.html
@@ -92,7 +92,7 @@
     <h1 id="title">Feature Styles Example</h1>
 
     <div id="tags">
-        vector, feature, stylemap
+        vector, feature, stylemap, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/styles-rotation.html b/examples/styles-rotation.html
index ed21448..b6d6f95 100644
--- a/examples/styles-rotation.html
+++ b/examples/styles-rotation.html
@@ -76,7 +76,7 @@
   <body onload="init()">
     <h1 id="title">Rotation Style Example</h1>
     <div id="tags">
-        vector, feature, stylemap, rotation, cleanup
+        vector, feature, stylemap, rotation, cleanup, light
     </div>    
     <p id="shortdesc">
         Use the rotation property of a point symbolizer to rotate
diff --git a/examples/styles-unique.html b/examples/styles-unique.html
index 0d2e1ec..ccea4ed 100644
--- a/examples/styles-unique.html
+++ b/examples/styles-unique.html
@@ -39,7 +39,7 @@
                 0: {externalGraphic: "../img/marker-blue.png"},
                 1: {externalGraphic: "../img/marker-green.png"},
                 2: {externalGraphic: "../img/marker-gold.png"}
-            }
+            };
             
             // add rules from the above lookup table, with the keyes mapped to
             // the "type" property of the features, for the "default" intent
@@ -69,7 +69,7 @@
             
             var context = function(feature) {
                 return feature;
-            }
+            };
             var styleMap = new OpenLayers.StyleMap();
             
             // create a lookup table with different symbolizers for the different
@@ -94,7 +94,7 @@
     <h1 id="title">Unique Value Styles Example</h1>
 
     <div id="tags">
-        vector, feature, stylemap, uniquevalue, cleanup
+        vector, feature, stylemap, uniquevalue, cleanup, light
     </div>
 
     <p id="shortdesc">
diff --git a/examples/sundials-spherical-mercator.html b/examples/sundials-spherical-mercator.html
index 38f7b93..3ee6144 100644
--- a/examples/sundials-spherical-mercator.html
+++ b/examples/sundials-spherical-mercator.html
@@ -31,11 +31,7 @@
         function init(){
             var options = {
                 projection: new OpenLayers.Projection("EPSG:900913"),
-                displayProjection: new OpenLayers.Projection("EPSG:4326"),
-                units: "m",
-                maxResolution: 156543.0339,
-                maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
-                                                 20037508.34, 20037508.34)
+                displayProjection: new OpenLayers.Projection("EPSG:4326")
             };
             map = new OpenLayers.Map('map', options);
             var mapnik = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");
diff --git a/examples/symbolizers-fill-stroke-graphic.html b/examples/symbolizers-fill-stroke-graphic.html
index f28c8c2..27a0b58 100644
--- a/examples/symbolizers-fill-stroke-graphic.html
+++ b/examples/symbolizers-fill-stroke-graphic.html
@@ -126,7 +126,7 @@
   <body onload="init()">
     <h1 id="title">OpenLayers Example</h1>
     <div id="tags">
-        vector, feature, symbolizer, filter, comparison, labeling
+        vector, feature, symbolizer, filter, comparison, labeling, light
     </div>
     <p id="shortdesc">
         Demonstrate fill, stroke, and graphic property of symbolizers.
diff --git a/examples/tile-origin.html b/examples/tile-origin.html
index 78339d4..6e97aeb 100644
--- a/examples/tile-origin.html
+++ b/examples/tile-origin.html
@@ -11,7 +11,7 @@
     <body>
         <h1 id="title">Tile Origin</h1>
         <div id="tags">
-            grid, tileOrigin
+            grid, tileOrigin, light
         </div>
         <p id="shortdesc">
             Demonstrates the use of the tileExtent property to differentiate 
diff --git a/examples/tilecache.html b/examples/tilecache.html
index dc3202d..cf9db61 100644
--- a/examples/tilecache.html
+++ b/examples/tilecache.html
@@ -32,17 +32,6 @@
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
         }
-
-        OpenLayers.Util.onImageLoadError = function() {
-            /**
-             * For images that don't exist in the cache, you can display
-             * a default image - one that looks like water for example.
-             * To show nothing at all, leave the following lines commented out.
-             */
-
-            //this.src = "../img/blank.gif";
-            //this.style.display = "";
-        };
     </script>
   </head>
   <body onload="init()">
diff --git a/examples/transform-feature.html b/examples/transform-feature.html
index 6c562f0..a0c5645 100644
--- a/examples/transform-feature.html
+++ b/examples/transform-feature.html
@@ -14,41 +14,52 @@
         function init(){
             map = new OpenLayers.Map('map', {allOverlays: true});
 
-            // context for appropriate scale/resize cursors
-            var cursors = ["sw-resize", "s-resize", "se-resize",
-                "e-resize", "ne-resize", "n-resize", "nw-resize", "w-resize"];
-            var context = {
-                getCursor: function(feature){
-                    var i = OpenLayers.Util.indexOf(control.handles, feature);
-                    var cursor = "inherit";
-                    if(i !== -1) {
-                        i = (i + 8 + Math.round(control.rotation / 90) * 2) % 8;
-                        cursor = cursors[i];
-                    }
-                    return cursor;
-                }
-            };
-            
-            // a nice style for the transformation box
-            var style = new OpenLayers.Style({
-                cursor: "${getCursor}",
-                pointRadius: 5,
-                fillColor: "white",
-                fillOpacity: 1,
-                strokeColor: "black"
-            }, {context: context});
-                                    
+            // allow testing of specific renderers via "?renderer=Canvas", etc
+            var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+            renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
             // the layer that we want to transform features on
             var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {
                 styleMap: new OpenLayers.StyleMap({
-                    "transform": style
-                })
+                    // a nice style for the transformation box
+                    "transform": new OpenLayers.Style({
+                        display: "${getDisplay}",
+                        cursor: "${role}",
+                        pointRadius: 5,
+                        fillColor: "white",
+                        fillOpacity: 1,
+                        strokeColor: "black"
+                    }, {
+                        context: {
+                            getDisplay: function(feature) {
+                                // hide the resize handle at the south-east corner
+                                return feature.attributes.role === "se-resize" ? "none" : "";
+                            }
+                        }
+                    }),
+                    "rotate": new OpenLayers.Style({
+                        display: "${getDisplay}",
+                        pointRadius: 10,
+                        fillColor: "#ddd",
+                        fillOpacity: 1,
+                        strokeColor: "black"
+                    }, {
+                        context: {
+                            getDisplay: function(feature) {
+                                // only display the rotate handle at the south-east corner
+                                return feature.attributes.role === "se-rotate" ? "" : "none";
+                            }
+                        }
+                    })
+                }),
+                renderers: renderer
             });
 
             // create the TransformFeature control, using the renderIntent
             // from above
             control = new OpenLayers.Control.TransformFeature(vectorLayer, {
-                renderIntent: "transform"
+                renderIntent: "transform",
+                rotationHandleSymbolizer: "rotate"
             });
             map.addControl(control);
 
@@ -96,13 +107,15 @@
 <div id="docs">
     <p>This example shows transformation of vector features with a
        tranformation box. Grab one of the handles to resize the feature.
-       Holding the SHIFT key will preserve the aspect ratio. Position the
-       mouse right outside one of the corner handles to rotate the feature,
-       and hold the SHIFT key to only rotate in 45° increments.</p>
-       <p>In this example, the transformation box has been set on the left
+       Holding the SHIFT key will preserve the aspect ratio. Use the gray 
+       handle to rotate the feature and hold the SHIFT key to only rotate 
+       in 45° increments.
+    </p>
+    <p>In this example, the transformation box has been set on the left
        feature, with a rotation preset of 45°. Clicking on the right feature
        will set it for transformation, starting with an unrotated box.
-       Dragging a feature or the box edges will move it around.</p>
+       Dragging a feature or the box edges will move it around.
+    </p>
 </div>
 
   </body>
diff --git a/examples/transition.html b/examples/transition.html
index 6404c4c..7d82b8b 100644
--- a/examples/transition.html
+++ b/examples/transition.html
@@ -46,7 +46,7 @@
   <body onload="init()">
     <h1 id="title">Transition Example</h1>
     <div id="tags">
-        transition, resize, tile, singletile
+        transition, resize, tile, singletile, light
     </div>    
     <p id="shortdesc">
         Demonstrates the use of transition effects in tiled and untiled layers.
diff --git a/examples/urban.html b/examples/urban.html
deleted file mode 100644
index 8c9f247..0000000
--- a/examples/urban.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers WorldWind 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">
-        var map;
-        function init(){
-            var mapOptions = { maxResolution: 1.6, numZoomLevels: 21};
-            map = new OpenLayers.Map('map', mapOptions);
-
-            var ww = new OpenLayers.Layer.WorldWind( "Urban",
-                "http://worldwind25.arc.nasa.gov/tile/tile.aspx?", .8, 9,
-                {T:"104"}, { tileSize: new OpenLayers.Size(512,512) });
-
-
-            map.addLayers([ww]);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.setCenter(new OpenLayers.LonLat(-71.446875, 41.73515625), 15);
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">WorldWind Example</h1>
-
-    <div id="tags">
-        worldwind, cleanup
-    </div>
-
-    <p id="shortdesc">
-        Demonstrate the use of a NASA WorldWind base layer.
-    </p>
-
-    <div id="map" class="smallmap"></div>
-
-    <div id="docs">
-        <p>
-        Add the Nasa WorldWind "Urban" layer to your map. The "Urban" layer contains aerial imagery for urban areas only.
-        </p>
-        <p>
-          You can do it with a ...
-        </p>
-
-    </div>
-  </body>
-</html>
diff --git a/examples/using-proj4js.html b/examples/using-proj4js.html
new file mode 100644
index 0000000..6883d9b
--- /dev/null
+++ b/examples/using-proj4js.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>Using Proj4JS for vector reprojection</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <script type="text/javascript" src="http://svn.osgeo.org/metacrs/proj4js/trunk/lib/proj4js-compressed.js"></script>
+        <script type="text/javascript" src="http://spatialreference.org/ref/epsg/31467/proj4js/"></script>
+        <script type="text/javascript" src="../lib/OpenLayers.js"></script>
+        <script type="text/javascript" src="./using-proj4js.js"></script>
+        <style type="text/css">
+        ul {
+            width: 300px;
+            float: left;
+        }
+        ul li {
+            list-style: none;
+            margin-bottom: .2em;
+        }
+        input {
+            width: 250px;
+        }
+        #shortdesc {
+            margin-bottom: .5em;
+        }
+        #map {
+            width: 256px;
+            height: 256px;
+            float: left;
+            margin-right: .2em;
+        }
+        #attribution,
+        #mouse-position-31467,
+        #mouse-position-4326 {
+            float: left;
+            clear: left;
+            font-size: .8em;
+            color: #444;
+        }
+        .emph {
+            font-weight: bold;
+        }
+        </style>
+    </head>
+    <body onload="init();">
+        <h1 id="title">Using Proj4JS for vector reprojection</h1>
+        <div id="tags">
+            projection, proj, proj4js, reprojection, reproject,
+            transform, transformation, epsg, srs
+        </div>
+        <p id="shortdesc">
+            This example shows how to reproject vector features within 
+            OpenLayers. The baselayer shows Germany in the projection 
+            EPSG:31467 (GK 3). When one clicks on the buttons, features with
+            geometries originally in EPSG:4326 will be transformed to the 
+            projection of the map on-the-fly.
+        </p>
+        <p>
+            The features are internally reprojected with the JavaScript library 
+            <a href="http://proj4js.org/">Proj4JS</a>. Please note that usually
+            you would not inlude Proj4JS the way it is done in this example.
+            In a production environment you would furthermore have a local copy 
+            of the Proj4JS-projection definition that is hotlinked in this 
+            example (see Graticule example for how to do this).
+        </p>
+        <div id="map">
+        </div>
+        <ul>
+            <li>
+                <input type="button" value="Add Cologne (~ 6.97, 50.95)" 
+                    onclick="addVector(6.966667, 50.95, this);"
+                    id="btnCologne">
+            </li>
+            <li>
+                <input type="button" value="Add Berlin (~ 13.40, 52.50)" 
+                    onclick="addVector(13.398889, 52.500556, this);"
+                    id="btnBerlin">
+            </li>
+            <li>
+                <input type="button" value="Add Hamburg (~ 10.00, 53.57)" 
+                    onclick="addVector(10.001389, 53.565278, this);"
+                    id="btnHamburg">
+            </li>
+            <li>
+                <input type="button" value="Add Munich (~ 11.57, 48.13)" 
+                    onclick="addVector(11.566667, 48.133333, this);"
+                    id="btnMunich">
+            </li>
+            <li>
+                <input type="button" value="Add country outline (polygon)" 
+                    onclick="addOutline(this);" id="btnGermany">
+            </li>
+            <li>
+                <input type="button" value="...clear vector features" 
+                    onclick="clearVectors();">
+            </li>
+            <li>
+                <div id="status">
+                </div>
+            </li>
+        </ul>
+        <div id="attribution"></div>
+        <div id="mouse-position-4326"></div>
+        <div id="mouse-position-31467"></div>
+    </body>
+</html>
diff --git a/examples/using-proj4js.js b/examples/using-proj4js.js
new file mode 100644
index 0000000..85232fa
--- /dev/null
+++ b/examples/using-proj4js.js
@@ -0,0 +1,131 @@
+var map, vector;
+function init(){
+    map = new OpenLayers.Map('map', {
+        projection: 'EPSG:31467',
+        maxResolution: 3457.03125,
+        units: 'm',
+        numZoomLevels: 1,
+        controls: [
+            new OpenLayers.Control.Attribution({
+                div: $('attribution')
+            }),
+            new OpenLayers.Control.MousePosition({
+                div: $('mouse-position-31467'),
+                prefix: 'Coordinates: ',
+                suffix: ' (in <a href="http://spatialreference.org/ref/epsg/' 
+                    + '31467/">EPSG:31467</a>)'
+            }),
+            new OpenLayers.Control.MousePosition({
+                div: $('mouse-position-4326'),
+                displayProjection: new OpenLayers.Projection('EPSG:4326'),
+                prefix: 'Coordinates: ',
+                suffix: ' (in <a href="http://spatialreference.org/ref/epsg/' 
+                    + '4326/">EPSG:4326</a>)'
+            })
+        ],
+        maxExtent: new OpenLayers.Bounds(3146150, 5223600, 4031150, 6108600)
+    });
+    var germany_gk3 = new OpenLayers.Layer.WMS(
+        'Germany (MetaSpatial)', 
+        'http://www.metaspatial.net/cgi-bin/germany-wms', 
+        {
+            layers: 'germany'
+        }, 
+        {
+            singleTile: true,
+            ratio: 1.0,
+            attribution: 'Background WMS offered without restrictions by '
+                + '<a href="http://www.metaspatial.net/">MetaSpatial</a>'
+        }
+    );
+    
+    vector = new OpenLayers.Layer.Vector();
+    map.addLayers( [ germany_gk3, vector ] );
+    
+    map.zoomToMaxExtent();
+}
+
+function addVector(x, y, btn){
+    var status = "Transformed ",
+        geometry = new OpenLayers.Geometry.Point(x, y);
+    
+    status += '<br /><code class="emph">  ' 
+        + geometry.toString() + '</code> to';
+    
+    geometry.transform(
+        new OpenLayers.Projection('EPSG:4326'), 
+        new OpenLayers.Projection('EPSG:31467')
+    );
+    
+    status += '<br /><code class="emph">  ' 
+        + geometry.toString() + '</code>.';
+    $('status').innerHTML = status;
+    
+    var feature = new OpenLayers.Feature.Vector(geometry, {}, {
+        strokeColor: '#333333',
+        strokeOpacity: 1,
+        strokeWidth: 2,
+        fillColor: '#9966cc',
+        fillOpacity: 0.9,
+        pointRadius: 12,
+        graphicName: 'star'
+    });
+    vector.addFeatures([feature]);
+    btn.disabled = true;
+}
+function addOutline(btn) {
+    var wkt = 'POLYGON(('
+        + ' 9.921906 54.983104, 9.939580 54.596642,' 
+        + '10.950112 54.363607,10.939467 54.008693,11.956252 54.196486,'
+        + '12.518440 54.470371,13.647467 54.075511,14.119686 53.757029,'
+        + '14.353315 53.248171,14.074521 52.981263,14.437600 52.624850,'
+        + '14.685026 52.089947,14.607098 51.745188,15.016996 51.106674,'
+        + '14.570718 51.002339,14.307013 51.117268,14.056228 50.926918,'
+        + '13.338132 50.733234,12.966837 50.484076,12.240111 50.266338,'
+        + '12.415191 49.969121,12.521024 49.547415,13.031329 49.307068,'
+        + '13.595946 48.877172,13.243357 48.416115,12.884103 48.289146,'
+        + '13.025851 47.637584,12.932627 47.467646,12.620760 47.672388,'
+        + '12.141357 47.703083,11.426414 47.523766,10.544504 47.566399,'
+        + '10.402084 47.302488, 9.896068 47.580197, 9.594226 47.525058,'
+        + ' 8.522612 47.830828, 8.317301 47.613580, 7.466759 47.620582,'
+        + ' 7.593676 48.333019, 8.099279 49.017784, 6.658230 49.201958,'
+        + ' 6.186320 49.463803, 6.242751 49.902226, 6.043073 50.128052,'
+        + ' 6.156658 50.803721, 5.988658 51.851616, 6.589397 51.852029,'
+        + ' 6.842870 52.228440, 7.092053 53.144043, 6.905140 53.482162,'
+        + ' 7.100425 53.693932, 7.936239 53.748296, 8.121706 53.527792,'
+        + ' 8.800734 54.020786, 8.572118 54.395646, 8.526229 54.962744,'
+        + ' 9.282049 54.830865, 9.921906 54.983104))',
+        feature = new OpenLayers.Format.WKT().read(wkt),
+        geometry = feature.geometry.transform(
+            new OpenLayers.Projection('EPSG:4326'), 
+            new OpenLayers.Projection('EPSG:31467')
+        ),
+        style = {
+            strokeColor: '#9966cc',
+            strokeOpacity: 1,
+            strokeWidth: 5,
+            fillColor: '#ffffff',
+            fill: false
+        },
+        transformedFeature = new OpenLayers.Feature.Vector(geometry, {}, style);
+    
+    vector.addFeatures([transformedFeature]);
+    $('status').innerHTML = 'Transformed polygon';
+    btn.disabled = true;
+}
+
+function clearVectors(){
+    vector.removeAllFeatures();
+    var ids = [
+        'btnCologne',
+        'btnBerlin',
+        'btnHamburg',
+        'btnMunich',
+        'btnGermany'
+    ];
+    for (var i = 0, len = ids.length; i < len; i++) {
+        var elem = $(ids[i]);
+        elem.disabled = false;
+    }
+    $('status').innerHTML = '';
+}
diff --git a/examples/utfgrid-geography-class.html b/examples/utfgrid-geography-class.html
new file mode 100644
index 0000000..43d5222
--- /dev/null
+++ b/examples/utfgrid-geography-class.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers UTFGrid Geography Class</title>
+    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <style>
+        #flag {
+            position: relative;
+            z-index: 999;
+            height: 0px;
+            width: 0px;
+            -moz-transition: all 0.1s linear;
+            -webkit-transition: all 0.1s linear;
+        }
+        #flag img {
+            position: absolute;
+            width: 80px;
+            -moz-box-shadow: 2px 2px 1px 1px rgba(0, 0, 0, 0.3);
+            -webkit-box-shadow: 2px 2px 1px 1px rgba(0, 0, 0, 0.3);
+            box-shadow: 2px 2px 1px 1px rgba(0, 0, 0, 0.3);
+        }
+        .olControlAttribution {
+            bottom: 5px;
+            font-size: 9px;
+        }
+    </style>
+</head>
+<body>
+    <h1 id="title">OpenLayers UTFGrid Geography Class Example</h1>
+
+    <div id="shortdesc">
+        This page demonstrates the use of the OpenLayers UTFGrid Controls. 
+    </div>
+    <div id="map" class="smallmap">
+        <div id="flag"></div>
+    </div>
+    <p>Point to a country and try to guess the name before it shows up: <strong id="output"> </strong>
+    <div id="docs">
+        <p>
+        See the <a href="utfgrid-geography-class.js" target="_blank">utfgrid-geography-class.js</a> source for 
+        detail on using UTFGrids in OpenLayers.
+        </p>
+    </div>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="utfgrid-geography-class.js"></script>
+</body>
+</html>
diff --git a/examples/utfgrid-geography-class.js b/examples/utfgrid-geography-class.js
new file mode 100644
index 0000000..9377df6
--- /dev/null
+++ b/examples/utfgrid-geography-class.js
@@ -0,0 +1,62 @@
+var osm = new OpenLayers.Layer.XYZ(
+    "MapQuest OSM", 
+    [
+        "http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png",
+        "http://otile2.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png",
+        "http://otile3.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png",
+        "http://otile4.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png"
+    ],
+    {transitionEffect: "resize", wrapDateLine: true}
+);
+
+var utfgrid = new OpenLayers.Layer.UTFGrid({
+    url: "utfgrid/geography-class/${z}/${x}/${y}.grid.json",
+    utfgridResolution: 4, // default is 2
+    displayInLayerSwitcher: false
+});
+
+var map = new OpenLayers.Map({
+    div: "map", 
+    projection: "EPSG:900913",
+    numZoomLevels: 3,
+    layers: [osm, utfgrid],
+    controls: [
+        new OpenLayers.Control.Navigation({
+            dragPanOptions: {
+                enableKinetic: true
+            }
+        }),
+        new OpenLayers.Control.Zoom()
+    ],
+    center: [0, 0],
+    zoom: 1
+});
+
+var output = document.getElementById("output");
+var flag = document.getElementById("flag");
+
+var callback = function(infoLookup, loc, pixel) {
+    var msg = "";
+    if (infoLookup) {
+        var info;
+        for (var idx in infoLookup) {
+            // idx can be used to retrieve layer from map.layers[idx]
+            info = infoLookup[idx];
+            if (info && info.data) {
+                output.innerHTML = info.data.admin;
+                flag.innerHTML = "<img src='data:image/png;base64," + info.data.flag_png + "'>";
+                flag.style.left = (pixel.x + 15) + "px";
+                flag.style.top = (pixel.y + 15) + "px";
+            } else {
+                output.innerHTML = flag.innerHTML = " ";
+            }
+        }
+    }
+};
+    
+var control = new OpenLayers.Control.UTFGrid({
+    callback: callback,
+    handlerMode: "move"
+});
+
+map.addControl(control);
diff --git a/examples/utfgrid.html b/examples/utfgrid.html
new file mode 100644
index 0000000..4ed6ef0
--- /dev/null
+++ b/examples/utfgrid.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers UTFGrid Demo</title>
+    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <style>
+        #attrs {
+            height: 1.5em;
+        }
+        #controlToggle li { list-style: none; }
+    </style>
+</head>
+<body>
+    <h1 id="title">OpenLayers UTFGrid Demo</h1>
+
+    <div>
+        <div id="shortdesc">
+            This page demonstrates the use of the OpenLayers UTFGrid Controls. 
+        </div>
+        <div id="map" class="smallmap"></div>
+        <p>
+            When the selected event is triggered, the underlying feature 
+            attributes are shown below.
+        </p>
+        <div id="attrs"> </div>
+        <ul id="controlToggle">
+            <li>
+                <input type="radio" name="type" value="move" id="moveHandler" 
+                onclick="toggleControl(this);" checked="checked" />
+                <label for="moveHandler">Move</label>
+            </li>
+            <li>
+                <input type="radio" name="type" value="hover" id="hoverHandler" 
+                onclick="toggleControl(this);" />
+                <label for="hoverHandler">Hover</label>
+            </li>
+            <li>
+                <input type="radio" name="type" value="click" id="clickHandler" 
+                onclick="toggleControl(this);" />
+                <label for="clickHandler">Click</label>
+            </li>
+        </ul>
+    </div>
+    <div id="docs">
+        <p>UTFGrids can be used to output highly optimized feature "hit grids."
+        The UTFGrid encoding scheme encodes interactivity data for a tile in a
+        space efficient manner. It is designed to be used in browsers for
+        interactive features like displaying tooltips without having to hit the
+        server for an "info query."
+        </p>
+        <p>
+        See the <a href="utfgrid.js" target="_blank">utfgrid.js source</a> for 
+        detail on using UTFGrids in OpenLayers.  For more info, view the 
+        <a href="https://github.com/mapbox/utfgrid-spec">UTFGrid Specification</a>.
+        </p>
+    </div>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="utfgrid.js"></script>
+</body>
+</html>
diff --git a/examples/utfgrid.js b/examples/utfgrid.js
new file mode 100644
index 0000000..dc06c41
--- /dev/null
+++ b/examples/utfgrid.js
@@ -0,0 +1,61 @@
+var osm = new OpenLayers.Layer.OSM();
+
+var utfgrid = new OpenLayers.Layer.UTFGrid({
+    url: "utfgrid/world_utfgrid/${z}/${x}/${y}.json",
+    utfgridResolution: 4, // default is 2
+    displayInLayerSwitcher: false
+});
+
+var map = new OpenLayers.Map({
+    div: "map", 
+    projection: "EPSG:900913",
+    controls: [],
+    layers: [osm, utfgrid],
+    center: [0, 0],
+    zoom: 1
+});
+
+var callback = function(infoLookup) {
+    var msg = "";
+    if (infoLookup) {
+        var info;
+        for (var idx in infoLookup) {
+            // idx can be used to retrieve layer from map.layers[idx]
+            info = infoLookup[idx];
+            if (info && info.data) {
+                msg += "[" + info.id + "] <strong>In 2005, " + 
+                    info.data.NAME + " had a population of " +
+                    info.data.POP2005 + " people.</strong> ";
+            }
+        }
+    }
+    document.getElementById("attrs").innerHTML = msg;
+};
+    
+var controls = {
+    move: new OpenLayers.Control.UTFGrid({
+        callback: callback,
+        handlerMode: "move"
+    }),
+    hover: new OpenLayers.Control.UTFGrid({
+        callback: callback,
+        handlerMode: "hover"
+    }),
+    click: new OpenLayers.Control.UTFGrid({
+        callback: callback,
+        handlerMode: "click"
+    })
+};
+for (var key in controls) {
+    map.addControl(controls[key]);
+}
+
+function toggleControl(el) {
+    for (var c in controls) {
+        controls[c].deactivate();
+    }
+    controls[el.value].activate();
+}
+
+// activate the control that responds to mousemove
+toggleControl({value: "move"});
diff --git a/examples/utfgrid/bio_utfgrid/1/0/0.json b/examples/utfgrid/bio_utfgrid/1/0/0.json
new file mode 100644
index 0000000..e1f305b
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/0/0.json
@@ -0,0 +1 @@
+{"keys": ["", "269", "270", "572", "271", "272", "585", "586", "273", "589", "573", "274", "275", "560", "558", "559", "562", "561", "279", "563", "566", "564", "281", "574", "565", "285", "286", "287", "576", "575", "1", "289", "569", "568", "567", "590", "295", "292", "294", "2", "299", "297", "578", "587", "556", "309", "570", "577", "313", "310", "312", "588", "315", "579", "592", "591", "557", "582", "580", "318", "319", "583", "321", "571", "584", "322", "323", "326", "325", "329", [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/0/1.json b/examples/utfgrid/bio_utfgrid/1/0/1.json
new file mode 100644
index 0000000..d3a0f0d
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/0/1.json
@@ -0,0 +1 @@
+{"keys": ["", "487", "474", "483", "489", "161", "492", "494", "171", "162", "459", "173", "164", "172", "502", "505", "175", "166", "511", "508", "510", "512", "519", "518", "177", "168", "176", "517", "522", "528", "538", "541", "542", "534", "549", "235", "237", "550", "239", "241", "240", "243", "242", "244", "245", "246", "247", "552", "248", "249", "553", "268", "555", "554"], "data": {"459": {"dom_desc": "HUMID TROPICAL DOMAIN", "pro_desc": "FOREST-PARAMO AND FOREST-MEADOW"}, "489 [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/0/2.json b/examples/utfgrid/bio_utfgrid/1/0/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/0/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/1/0.json b/examples/utfgrid/bio_utfgrid/1/1/0.json
new file mode 100644
index 0000000..0c2dede
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/1/0.json
@@ -0,0 +1 @@
+{"keys": ["", "276", "593", "277", "595", "594", "602", "604", "596", "603", "597", "278", "280", "606", "282", "283", "284", "288", "607", "608", "598", "600", "290", "291", "293", "301", "296", "300", "601", "605", "609", "298", "303", "599", "304", "305", "306", "302", "307", "308", "610", "311", "316", "314", "317", "320", "324", "328", "330", "327", "333", "334", "335", "338", "25", "26", "342", "340", "87", "341", "27", "344", "345", "343", "347", "68", "346", "348", "351", "71", " [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/1/1.json b/examples/utfgrid/bio_utfgrid/1/1/1.json
new file mode 100644
index 0000000..5457be3
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/1/1.json
@@ -0,0 +1 @@
+{"keys": ["", "486", "478", "475", "471", "493", "491", "484", "455", "468", "469", "463", "466", "481", "490", "201", "207", "208", "209", "488", "495", "179", "497", "496", "185", "202", "498", "499", "500", "234", "181", "186", "203", "501", "215", "214", "213", "504", "188", "218", "217", "216", "183", "195", "189", "219", "220", "221", "506", "507", "196", "194", "509", "228", "513", "199", "514", "520", "515", "516", "182", "521", "198", "523", "525", "524", "530", "527", "537", "5 [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/1/2.json b/examples/utfgrid/bio_utfgrid/1/1/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/1/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/2/0.json b/examples/utfgrid/bio_utfgrid/1/2/0.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/2/0.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/2/1.json b/examples/utfgrid/bio_utfgrid/1/2/1.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/2/1.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/bio_utfgrid/1/2/2.json b/examples/utfgrid/bio_utfgrid/1/2/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/bio_utfgrid/1/2/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/geography-class/0/0/0.grid.json b/examples/utfgrid/geography-class/0/0/0.grid.json
new file mode 100644
index 0000000..ea81c26
--- /dev/null
+++ b/examples/utfgrid/geography-class/0/0/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                        !!!!                                    ","                  ####  !!!!!                                   ","                #####!!!!!!!!!                                  ","               ######!!!!!!!!!           $$$  $ $$              ","              [...]
diff --git a/examples/utfgrid/geography-class/1/0/0.grid.json b/examples/utfgrid/geography-class/1/0/0.grid.json
new file mode 100644
index 0000000..6fcd565
--- /dev/null
+++ b/examples/utfgrid/geography-class/1/0/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                  !!!!!         ","              [...]
diff --git a/examples/utfgrid/geography-class/1/0/1.grid.json b/examples/utfgrid/geography-class/1/0/1.grid.json
new file mode 100644
index 0000000..612f84b
--- /dev/null
+++ b/examples/utfgrid/geography-class/1/0/1.grid.json
@@ -0,0 +1 @@
+{"grid":["                                !   !#$$%%%%%%%%                ","   &                                ####%%%%%%%%%%%             ","                                   ####%%%%%%%%%%%%%            ","              '                     ###%%%%%%%%%%%%%            ","          &                          ###(%%%%%%%%%%             ","   )                                 ###(((%%%%%%%%             ","*         '  '                        ##(((%%%%%%%%             ","              [...]
diff --git a/examples/utfgrid/geography-class/1/1/0.grid.json b/examples/utfgrid/geography-class/1/1/0.grid.json
new file mode 100644
index 0000000..3bb1360
--- /dev/null
+++ b/examples/utfgrid/geography-class/1/1/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/1/1/1.grid.json b/examples/utfgrid/geography-class/1/1/1.grid.json
new file mode 100644
index 0000000..c11f785
--- /dev/null
+++ b/examples/utfgrid/geography-class/1/1/1.grid.json
@@ -0,0 +1 @@
+{"grid":["   !!!#$$$$%%&&'                   ((( (((   ((((             ) ","    !#$$$$$***&                     (((((((( (((((++  +         ","     $$$$$$****                      (( (   (  ( (++++ +        ","     ,,,$$--***                         (((((.    +++++ //      ","     ,,,,---0*1                               22         /      ","     ,,,----011  3                           2222  2            ","    4,,,--55111 33                          22222222           6","     44477551 [...]
diff --git a/examples/utfgrid/geography-class/2/0/0.grid.json b/examples/utfgrid/geography-class/2/0/0.grid.json
new file mode 100644
index 0000000..17113f6
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/0/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/0/1.grid.json b/examples/utfgrid/geography-class/2/0/1.grid.json
new file mode 100644
index 0000000..eb2aeda
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/0/1.grid.json
@@ -0,0 +1 @@
+{"grid":["       !!!!#!###############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$","       !!###################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"," !!   !!!!##################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$","!!!!  !!!!###!##############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$","!!!!!!!!!!!!!!##############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$","!!!!!!##!!!!!###############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$","!!!!!!!!!!!#################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$","!!!!!!!!!!### [...]
diff --git a/examples/utfgrid/geography-class/2/0/2.grid.json b/examples/utfgrid/geography-class/2/0/2.grid.json
new file mode 100644
index 0000000..ae6dd26
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/0/2.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                               !","                                                                ","                                                                ","      #                                                         ","                 #                                              ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/0/3.grid.json b/examples/utfgrid/geography-class/2/0/3.grid.json
new file mode 100644
index 0000000..187916d
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/0/3.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/1/0.grid.json b/examples/utfgrid/geography-class/2/1/0.grid.json
new file mode 100644
index 0000000..37da089
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/1/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/1/1.grid.json b/examples/utfgrid/geography-class/2/1/1.grid.json
new file mode 100644
index 0000000..91d4291
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/1/1.grid.json
@@ -0,0 +1 @@
+{"grid":["   ! !!!!!!!         !!!!!##############!!!!!!!!$!!!$!!!!!!!!!!!","     !!!!!!!     !  !!!!!!#############!!!!!!!!$$!$$$$!!!!!!!!!!","     !!!!        ! !!!!!!!!#########!!!!!!!!!!!!$$$$$$$!!!!!!!!!","  !   !!!         !!!!!!!!!#########!!!!!!!!!!!$$$$$$$$!!!!!!!!!","  !    !!!!!       !!!!!!!!#########!!!!!!!!!!!!$$$$$!!!!!!!!!!!","!!!  ! !  !!!      !!!!!!!!!########!!!!!!!!!!!!!!$$!!!!!!!!!!!!","!!!!! !!!!!!!!     !!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!","!!!!! ! !     [...]
diff --git a/examples/utfgrid/geography-class/2/1/2.grid.json b/examples/utfgrid/geography-class/2/1/2.grid.json
new file mode 100644
index 0000000..8dafb56
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/1/2.grid.json
@@ -0,0 +1 @@
+{"grid":["       !!!#$$$$%%%%%%%%%%%%%%%                                  ","       !!!##$$$%%%%%%%%%%%%%%%%%%                               ","       !!######%%%%%%%%%%%%%%%%%%%%%                            ","      #########%%%%%%%%%%%%%%%%%%%%%%%                          ","       ######%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ","       #####%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ","        ####%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ","         #### [...]
diff --git a/examples/utfgrid/geography-class/2/1/3.grid.json b/examples/utfgrid/geography-class/2/1/3.grid.json
new file mode 100644
index 0000000..6a41219
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/1/3.grid.json
@@ -0,0 +1 @@
+{"grid":["                 !!                                             ","               !!!                                              ","               !!!                                              ","                 !                                              ","                !!!                                             ","             !! !!!!                                            ","             !! !!!!                                            ","              [...]
diff --git a/examples/utfgrid/geography-class/2/2/0.grid.json b/examples/utfgrid/geography-class/2/2/0.grid.json
new file mode 100644
index 0000000..14abaf6
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/2/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/2/1.grid.json b/examples/utfgrid/geography-class/2/2/1.grid.json
new file mode 100644
index 0000000..bd799d1
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/2/1.grid.json
@@ -0,0 +1 @@
+{"grid":["          !######$$$$%%% %%%% % %%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%","         !!#######$$$$%%%    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%","         !######  $$$%%%%    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%","        !!######  $$$$%%% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%","       !!######  $$$$$%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%","      !!!###### $$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%","     !!!!##### $$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%","    !!!!!#### [...]
diff --git a/examples/utfgrid/geography-class/2/2/2.grid.json b/examples/utfgrid/geography-class/2/2/2.grid.json
new file mode 100644
index 0000000..fbd3598
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/2/2.grid.json
@@ -0,0 +1 @@
+{"grid":["       !!!!##$$$$$$$$%%%%&&&&''                                 ","       !!!!#$$$$$$$$$%((((&&&&                                  ","       !!###$$$$$$$$$)(((((&&                                   ","        ###$$$$$$$$$$(((((((&                                   ","         $$$$$$$$$$$$(((((((                                    ","         ***$$$$$$$$$$(((((((                                   ","          ******$$$$$++((((((                                   ","          *** [...]
diff --git a/examples/utfgrid/geography-class/2/2/3.grid.json b/examples/utfgrid/geography-class/2/2/3.grid.json
new file mode 100644
index 0000000..6e989ec
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/2/3.grid.json
@@ -0,0 +1 @@
+{"grid":["                                    !!!!!                       ","                                   !!!!!!!                  !!!!","                                !!!!!!!!!!!!!!!!          !!!!!!","                               !!!!!!!!!!!!!!!!!!!      !!!!!!!!","                        !    !!!!!!!!!!!!!!!!!!!!!      !!!!!!!!","                       !!    !!!!!!!!!!!!!!!!!!!!!     !!!!!!!!!","           !            !!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!"," ! !     !    [...]
diff --git a/examples/utfgrid/geography-class/2/3/0.grid.json b/examples/utfgrid/geography-class/2/3/0.grid.json
new file mode 100644
index 0000000..db1cb87
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/3/0.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/3/1.grid.json b/examples/utfgrid/geography-class/2/3/1.grid.json
new file mode 100644
index 0000000..153a10c
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/3/1.grid.json
@@ -0,0 +1 @@
+{"grid":["                                                                ","                                                                ","                                                                ","                                                                ","                                                               !","                                                                ","                                                                ","              [...]
diff --git a/examples/utfgrid/geography-class/2/3/2.grid.json b/examples/utfgrid/geography-class/2/3/2.grid.json
new file mode 100644
index 0000000..64eb142
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/3/2.grid.json
@@ -0,0 +1 @@
+{"grid":["      !!!!    !!!!!! !     !!!!                                 ","      ! !!!!  !!!!!  !!! ! ! !!! !!                             ","       !!!!!!! !!!!  !!!  !!! !! !!!##      #                   ","         !!!         ! !       !!!!!####    #                   ","          !!!   !    ! !!         !!########  #                 ","            !!!!!!                 !#####       $               ","                !!!!!!!!!%%         ### ##      $ $             ","              [...]
diff --git a/examples/utfgrid/geography-class/2/3/3.grid.json b/examples/utfgrid/geography-class/2/3/3.grid.json
new file mode 100644
index 0000000..f803145
--- /dev/null
+++ b/examples/utfgrid/geography-class/2/3/3.grid.json
@@ -0,0 +1 @@
+{"grid":[" !!!!!!!!!!!!  !!!!     !!! !!!!!!!!                            ","!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!                         ","!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ","!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ","!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ","!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ","!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ","!!!!!!!!!!!!! [...]
diff --git a/examples/utfgrid/world_utfgrid/1/0/0.json b/examples/utfgrid/world_utfgrid/1/0/0.json
new file mode 100644
index 0000000..7ad337b
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/0/0.json
@@ -0,0 +1 @@
+{"keys": ["", "71", "24", "245", "207", "238", "82", "132", "205", "51", "65", "242", "231", "186", "165", "114", "120", "2", "13", "235", "116", "113", "41", "234", "34", "90", "78", "48", "173", "215", "150", "75", "79", "224", "42", "181", "158", "38", "225", "211", "11", "208", "212", "167", "76", "39", "164", "77", "183", "104", "87", "95", "157", "59", "49", "21"], "data": {"150": {"NAME": "United States Minor Outlying Islands", "POP2005": 0}, "215": {"NAME": "United States Virgin  [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/0/1.json b/examples/utfgrid/world_utfgrid/1/0/1.json
new file mode 100644
index 0000000..549b5e6
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/0/1.json
@@ -0,0 +1 @@
+{"keys": ["", "150", "49", "161", "38", "21", "95", "195", "64", "43", "17", "218", "61", "196", "33", "160", "8", "209", "159", "62", "243"], "data": {"150": {"NAME": "United States Minor Outlying Islands", "POP2005": 0}, "38": {"NAME": "Colombia", "POP2005": 4494579}, "21": {"NAME": "Brazil", "POP2005": 186830759}, "17": {"NAME": "Bolivia", "POP2005": 9182015}, "49": {"NAME": "Ecuador", "POP2005": 13060993}, "159": {"NAME": "New Zealand", "POP2005": 4097112}, "95": {"NAME": "Kiribati", [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/0/2.json b/examples/utfgrid/world_utfgrid/1/0/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/0/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/1/0.json b/examples/utfgrid/world_utfgrid/1/1/0.json
new file mode 100644
index 0000000..1be321e
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/1/0.json
@@ -0,0 +1 @@
+{"keys": ["", "245", "238", "154", "189", "60", "142", "53", "45", "101", "103", "102", "205", "153", "72", "163", "98", "206", "30", "207", "129", "65", "105", "110", "191", "86", "182", "81", "170", "80", "236", "171", "210", "89", "186", "22", "202", "112", "200", "5", "3", "93", "94", "74", "84", "194", "96", "2", "199", "117", "88", "162", "190", "31", "83", "107", "50", "139", "175", "155", "168", "226", "244", "14", "18", "113", "126", "36", "188", "118", "99", "214", "220", "193" [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/1/1.json b/examples/utfgrid/world_utfgrid/1/1/1.json
new file mode 100644
index 0000000..66a2faf
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/1/1.json
@@ -0,0 +1 @@
+{"keys": ["", "52", "67", "28", "204", "92", "185", "119", "223", "156", "95", "174", "203", "166", "177", "148", "201", "6", "221", "227", "20", "123", "37", "9", "122", "108", "151", "216", "222", "146", "61", "180", "115", "124", "178", "219", "179", "159", "147", "145"], "data": {"151": {"NAME": "Vanuatu", "POP2005": 215366}, "201": {"NAME": "Tuvalu", "POP2005": 10441}, "156": {"NAME": "Nauru", "POP2005": 10111}, "159": {"NAME": "New Zealand", "POP2005": 4097112}, "67": {"NAME": "Gab [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/1/2.json b/examples/utfgrid/world_utfgrid/1/1/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/1/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/2/0.json b/examples/utfgrid/world_utfgrid/1/2/0.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/2/0.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/2/1.json b/examples/utfgrid/world_utfgrid/1/2/1.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/2/1.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid/world_utfgrid/1/2/2.json b/examples/utfgrid/world_utfgrid/1/2/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/examples/utfgrid/world_utfgrid/1/2/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/examples/utfgrid_twogrids.html b/examples/utfgrid_twogrids.html
new file mode 100644
index 0000000..57adb88
--- /dev/null
+++ b/examples/utfgrid_twogrids.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers Multiple UTFGrid Demo</title>
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <style>
+        #controlToggle li { list-style: none; }
+    </style>
+</head>
+<body>
+    <h1 id="title">OpenLayers Multiple UTFGrid Demo</h1>
+
+    <div id="shortdesc">
+        This page demonstrates the use of the OpenLayers UTFGrid Controls with 
+        more than one UTFGrid Layer.
+    </div>
+    <div id="map" class="smallmap"></div>
+    <ul id="controlToggle">
+        <li>
+            <input type="radio" name="type" value="move_pop" id="moveHandler" 
+            onclick="toggleControl(this);" checked="checked" />
+            <label for="moveHandler">View population stats</label>
+        </li>
+        <li>
+            <input type="radio" name="type" value="move_bio" id="hoverHandler" 
+            onclick="toggleControl(this);" />
+            <label for="hoverHandler">View bioregion stats</label>
+        </li>
+        <li>
+            <input type="radio" name="type" value="move_both" id="clickHandler" 
+            onclick="toggleControl(this);" />
+            <label for="clickHandler">View all stats</label>
+        </li>
+    </ul>
+    <div id="docs">
+        <p>
+            This example demonstrates the use of two separate UTFGrid layers.
+            See the <a href="utfgrid_twogrids.js">utfgrid_twogrids.js source</a>
+            for detail on how this is done.
+        </p>
+    </div>
+    <div id="attrsdiv"></div>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="utfgrid_twogrids.js"></script>
+    <script>
+    </script>
+</body>
+</html>
diff --git a/examples/utfgrid_twogrids.js b/examples/utfgrid_twogrids.js
new file mode 100644
index 0000000..c9cb498
--- /dev/null
+++ b/examples/utfgrid_twogrids.js
@@ -0,0 +1,70 @@
+var osm = new OpenLayers.Layer.OSM();
+
+var population = new OpenLayers.Layer.UTFGrid({
+    name: "World Population",
+    url: "utfgrid/world_utfgrid/${z}/${x}/${y}.json",
+    utfgridResolution: 4 // default is 2
+});
+var bioregions = new OpenLayers.Layer.UTFGrid({
+    name: "World Bioregions",
+    url: "utfgrid/bio_utfgrid/${z}/${x}/${y}.json",
+    utfgridResolution: 4 // default is 2
+});
+
+var map = new OpenLayers.Map({
+    div: "map",
+    projection: "EPSG:900913",
+    controls: [],
+    layers: [osm, population, bioregions],
+    center: [0, 0],
+    zoom: 1
+});
+
+var callback = function(infoLookup) {
+    var msg = "";
+    if (infoLookup) {
+        var layer, info;
+        for (var idx in infoLookup) {
+            layer = map.layers[idx];
+            info = infoLookup[idx];
+            if (info && info.data) {
+                msg += "<strong>" + layer.name + "</strong><br>";
+                msg += "feature id: " + info.id + "<br>";
+                for (var key in info.data) {
+                    msg += key + ": " + info.data[key] + "<br>";
+                }
+            }
+        }
+    }
+    document.getElementById("attrsdiv").innerHTML = msg;
+};
+
+var controls = {
+    move_pop: new OpenLayers.Control.UTFGrid({
+        callback: callback,
+        layers: [population],
+        handlerMode: "move"
+    }),
+    move_bio: new OpenLayers.Control.UTFGrid({
+        callback: callback,
+        layers: [bioregions],
+        handlerMode: "move"
+    }),
+    move_both: new OpenLayers.Control.UTFGrid({
+        callback: callback,
+        layers: null, // same as all map.layers
+        handlerMode: "move"
+    })
+};
+
+for (var key in controls) {
+    map.addControl(controls[key]);
+}
+
+function toggleControl(el) {
+    for (var c in controls) {
+        controls[c].deactivate();
+    }
+    controls[el.value].activate();
+}
+toggleControl({value: "move_pop"});
diff --git a/examples/ve-novibrate.html b/examples/ve-novibrate.html
deleted file mode 100644
index 6be2943..0000000
--- a/examples/ve-novibrate.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<html> 
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes"> 
-    <title>OpenLayers Virtual Earth Example</title> 
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css"> 
-    <link rel="stylesheet" href="style.css" type="text/css"> 
-    <script src='http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1'></script> 
- 
-    <script src="../lib/OpenLayers.js"></script> 
-    <script type="text/javascript"> 
- 
-        var map, velayer, layer;
- 
-        function init(){
-            map = new OpenLayers.Map('map', {
-                controls: [new OpenLayers.Control.Navigation()],
-                panMethod: OpenLayers.Easing.Linear.easeOut,
-                panDuration: 10
-            });
- 
-            velayer = new OpenLayers.Layer.VirtualEarth("VE", {
-                minZoomLevel: 2, 
-                maxZoomLevel: 6, 
-                type: VEMapStyle.Road
-            });
-            map.addLayer(velayer);
- 
-            map.setCenter(new OpenLayers.LonLat(25, 25), 0);
-            
-            map.addControl( new OpenLayers.Control.PanZoomBar() );
-
-            markers = new OpenLayers.Layer.Markers("markers");
-            map.addLayer(markers);
-            
-            for(var i=0;i<100;i++){
-                var lat= Math.floor(Math.random()*50);
-                var lon= Math.floor(Math.random()*50);
-                var lonLat=new OpenLayers.LonLat(lon,lat);
-				var marker=new OpenLayers.Marker(lonLat);
-				markers.addMarker(marker);
-            }
-            
-        }
- 
-    </script> 
-  </head> 
-  <body onload="init()"> 
-    <h1 id="title">Virtual Earth Example</h1> 
- 
-    <div id="tags">
-        panning, virtual earth, panzoom, panmethod, panduration
-    </div> 
- 
-    <p id="shortdesc"> 
-        When using the PanZoom buttons with VirtualEarth, some 'drift' is 
-        possible in markers. This page demonstrates how to use the 
-        panMethod and panDuration properties to change the OpenLayers 
-        settings to match VirtualEarth. 
-    </p> 
- 
-    <div id="map" class="smallmap"></div> 
-  </body> 
-</html> 
- 
- 
diff --git a/examples/ve.html b/examples/ve.html
deleted file mode 100644
index 7b9bad8..0000000
--- a/examples/ve.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers Virtual Earth Example</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <script src='http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1'></script>
-
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-
-        var lon = 12;
-        var lat = 41;
-        var zoom = 15;
-        var map, velayer, layer, marker;
-
-        function init(){
-            map = new OpenLayers.Map( 'map' ,
-            {controls:[new OpenLayers.Control.MouseDefaults()]});
-
-            velayer = new OpenLayers.Layer.VirtualEarth( "VE", {
-                // turn off animated zooming
-                animationEnabled: false,
-                minZoomLevel: 4,
-                maxZoomLevel: 6,
-                'type': VEMapStyle.Aerial
-            });
-            map.addLayer(velayer);
-
-            markers = new OpenLayers.Layer.Markers("markers");
-            map.addLayer(markers);
-
-            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
-            map.addControl( new OpenLayers.Control.LayerSwitcher() );
-            map.addControl( new OpenLayers.Control.PanZoomBar() );
-        }
-
-        function add() {
-            if(!marker) {
-                marker = new OpenLayers.Marker(new OpenLayers.LonLat(15, 47));
-                markers.addMarker(marker);
-            }
-        }
-
-        function remove() {
-            if(marker) {
-                markers.removeMarker(marker);
-                marker = null;
-            }
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">Virtual Earth Example</h1>
-
-    <div id="tags">
-        virtual earth, marker
-    </div>
-
-    <p id="shortdesc">
-        Demonstrates the use of a Virtual Earth base layer.
-    </p>
-
-    <div id="map" class="smallmap"></div>
-    <input type="button" onClick="javascript:add()"value="Add the marker to the map">
-    <input type="button" onClick="javascript:remove()" value="Remove the marker from the map">
-    <div id="docs">This example demonstrates the ability to add VirtualEarth and the and remove markers.</div>
-  </body>
-</html>
-
-
diff --git a/examples/vector-features-with-text.html b/examples/vector-features-with-text.html
index cbdba66..c3e9e02 100644
--- a/examples/vector-features-with-text.html
+++ b/examples/vector-features-with-text.html
@@ -39,7 +39,9 @@
                     fontWeight: "bold",
                     labelAlign: "${align}",
                     labelXOffset: "${xOffset}",
-                    labelYOffset: "${yOffset}"
+                    labelYOffset: "${yOffset}",
+                    labelOutlineColor: "white",
+                    labelOutlineWidth: 3
                 }}),
                 renderers: renderer
             });
@@ -123,7 +125,7 @@
   <body onload="init()">
     <h1 id="title">OpenLayers Labeled features example</h1>
     <div id="tags">
-        vector, feature, labeling, symbolizer
+        vector, feature, labeling, symbolizer, light
     </div>
     <p id="shortdesc">
         Label vector features with a text symbolizer.
diff --git a/examples/vector-features.html b/examples/vector-features.html
index 0a48a30..70fc34a 100644
--- a/examples/vector-features.html
+++ b/examples/vector-features.html
@@ -123,7 +123,7 @@
 <h1 id="title">Drawing Simple Vector Features Example</h1>
 
 <div id="tags">
-    vector, feature
+    vector, feature, light
 </div>
 <p id="shortdesc">
     Shows the use of the shows drawing simple vector features, in different styles.
diff --git a/examples/vector-formats.html b/examples/vector-formats.html
index 7848cf3..97b51c7 100644
--- a/examples/vector-formats.html
+++ b/examples/vector-formats.html
@@ -86,7 +86,8 @@
                 gml2: new OpenLayers.Format.GML.v2(gmlOptionsIn),
                 gml3: new OpenLayers.Format.GML.v3(gmlOptionsIn),
                 kml: new OpenLayers.Format.KML(kmlOptionsIn),
-                atom: new OpenLayers.Format.Atom(in_options)
+                atom: new OpenLayers.Format.Atom(in_options),
+                gpx: new OpenLayers.Format.GPX(in_options)
               }, 
               'out': {
                 wkt: new OpenLayers.Format.WKT(out_options),
@@ -95,7 +96,8 @@
                 gml2: new OpenLayers.Format.GML.v2(gmlOptionsOut),
                 gml3: new OpenLayers.Format.GML.v3(gmlOptionsOut),
                 kml: new OpenLayers.Format.KML(out_options),
-                atom: new OpenLayers.Format.Atom(out_options)
+                atom: new OpenLayers.Format.Atom(out_options),
+                gpx: new OpenLayers.Format.GPX(out_options)
               } 
             };
         }
@@ -199,6 +201,7 @@
                 <option value="gml2">GML (v2)</option>
                 <option value="gml3">GML (v3)</option>
                 <option value="wkt">Well-Known Text (WKT)</option>
+                <option value="gpx">GPX</option>
             </select>
              
             <label for="prettyPrint">Pretty print</label>
diff --git a/examples/web-mercator.js b/examples/web-mercator.js
index ed14d94..7a25d37 100644
--- a/examples/web-mercator.js
+++ b/examples/web-mercator.js
@@ -1,14 +1,6 @@
 // make map available for easy debugging
 var map;
 
-// if your application transforms coordinates to and from EPSG:102113 then
-// you must uncomment the lines below
-
-// OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:102113",
-//     OpenLayers.Layer.SphericalMercator.projectForward);
-// OpenLayers.Projection.addTransform("EPSG:102113", "EPSG:4326",
-//     OpenLayers.Layer.SphericalMercator.projectInverse);
-
 function init() {
 
     var options = {
diff --git a/examples/wfs-protocol-transactions.js b/examples/wfs-protocol-transactions.js
index 1f61958..6b1044e 100644
--- a/examples/wfs-protocol-transactions.js
+++ b/examples/wfs-protocol-transactions.js
@@ -38,9 +38,6 @@ function init() {
     map = new OpenLayers.Map('map', {
         projection: new OpenLayers.Projection("EPSG:900913"),
         displayProjection: new OpenLayers.Projection("EPSG:4326"),
-        units: "m",
-        maxResolution: 20037508.34 / 128,
-        maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508),
         restrictedExtent: extent,
         controls: [
             new OpenLayers.Control.PanZoom(),
diff --git a/examples/wfs-reprojection.js b/examples/wfs-reprojection.js
index d789b92..64a0736 100644
--- a/examples/wfs-reprojection.js
+++ b/examples/wfs-reprojection.js
@@ -7,12 +7,7 @@ function init() {
     var mercator = new OpenLayers.Projection("EPSG:900913");
 
     map = new OpenLayers.Map('map', {
-        projection: mercator,
-        units: "m",
-        maxResolution: 156543.0339,
-        maxExtent: new OpenLayers.Bounds(
-            -20037508, -20037508, 20037508, 20037508
-        )
+        projection: mercator
     });
 
     var g = new OpenLayers.Layer.Google("Google Layer", {
diff --git a/examples/wfs-states.js b/examples/wfs-states.js
index 7f31513..6bdb499 100644
--- a/examples/wfs-states.js
+++ b/examples/wfs-states.js
@@ -2,28 +2,28 @@ var map;
 OpenLayers.ProxyHost = "proxy.cgi?url=";
 
 function init() {
-    map = new OpenLayers.Map("map");
-
-    var base = new OpenLayers.Layer.WMS("OpenLayers WMS",
-        "http://tilecache.osgeo.org/wms-c/Basic.py",
-        {layers: "basic"} 
-    );
-    map.addLayer(base);
-
     // allow testing of specific renderers via "?renderer=Canvas", etc
     var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
     renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
 
-    var wfs = new OpenLayers.Layer.Vector("States", {
-        strategies: [new OpenLayers.Strategy.BBOX()],
-        protocol: new OpenLayers.Protocol.WFS({
-            url: "http://demo.opengeo.org/geoserver/wfs",
-            featureType: "states",
-            featureNS: "http://www.openplans.org/topp"
-        }),
-        renderers: renderer
+    map = new OpenLayers.Map({
+        div: "map",
+        layers: [
+            new OpenLayers.Layer.WMS("OpenLayers WMS",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
+                {layers: "basic"} 
+            ),
+            new OpenLayers.Layer.Vector("States", {
+                strategies: [new OpenLayers.Strategy.BBOX()],
+                protocol: new OpenLayers.Protocol.WFS({
+                    url: "http://demo.opengeo.org/geoserver/wfs",
+                    featureType: "states",
+                    featureNS: "http://www.openplans.org/topp"
+                }),
+                renderers: renderer
+            })
+        ],
+        center: [-95.8506355, 37.163851],
+        zoom: 3
     });
-    map.addLayer(wfs);
-
-    map.zoomToExtent(new OpenLayers.Bounds(-140.4, 25.1, -44.4, 50.5));
 }
diff --git a/examples/wms-long-url.js b/examples/wms-long-url.js
index ecbda39..ef95177 100644
--- a/examples/wms-long-url.js
+++ b/examples/wms-long-url.js
@@ -5,12 +5,12 @@ var map = new OpenLayers.Map( 'map' );
 var base = new OpenLayers.Layer.WMS( "OpenLayers WMS",
     "http://vmap0.tiles.osgeo.org/wms/vmap0",
     {layers: 'basic', makeTheUrlLong: longText},
-    {tileOptions: {maxGetUrlLength: 2048}}
+    {tileOptions: {maxGetUrlLength: 2048}, transitionEffect: 'resize'}
 );
 var overlay = new OpenLayers.Layer.WMS("Overlay",
     "http://suite.opengeo.org/geoserver/wms",
     {layers: "usa:states", transparent: true, makeTheUrlLong: longText},
-    {ratio: 1, singleTile: true, tileOptions: {maxGetUrlLength: 2048}}
+    {ratio: 1, singleTile: true, tileOptions: {maxGetUrlLength: 2048}, transitionEffect: 'resize'}
 );
 map.addLayers([base, overlay]);
 map.zoomToMaxExtent();
diff --git a/examples/wms-untiled.html b/examples/wms-untiled.html
index 1d3c4dc..9651eac 100644
--- a/examples/wms-untiled.html
+++ b/examples/wms-untiled.html
@@ -32,7 +32,7 @@
     <h1 id="title"> WMS Untiled Example</h1>
 
     <div id="tags">
-        singletile, tile
+        singletile, tile, light
     </div>
         <p id="shortdesc">
             Shows an example of an "untiled" WMS layer, which requests a single
@@ -40,9 +40,7 @@
         </p>
     <div id="map" class="smallmap"></div>
         <div id="docs">
-            An untiled layer will only request a single image at a time.
-            This is equivalent to using the deprecated
-            OpenLayers.Layer.WMS.Untiled class, which will be removed at 3.0.
+            An untiled (with singleTile: true) layer will only request a single image at a time.
         </div>
   </body>
 </html>
diff --git a/examples/wms-v13.html b/examples/wms-v13.html
index b917e75..427a829 100644
--- a/examples/wms-v13.html
+++ b/examples/wms-v13.html
@@ -40,7 +40,7 @@
     <h1 id="title"> WMS version 1.3 (axis order) Example</h1>
 
     <div id="tags">
-        axis order, wms 1.3
+        axis order, wms 1.3, light
     </div>
         <p id="shortdesc">
             Shows an example of the influence of axis order on WMS 1.3 GetMap requests.
diff --git a/examples/wmts-capabilities.js b/examples/wmts-capabilities.js
index 7f138b4..dc12941 100644
--- a/examples/wmts-capabilities.js
+++ b/examples/wmts-capabilities.js
@@ -43,16 +43,11 @@ function init() {
             alert("Trouble getting capabilities doc");
             OpenLayers.Console.error.apply(OpenLayers.Console, arguments);
         }
-    })
+    });
     
     map = new OpenLayers.Map({
         div: "map",
-        projection: "EPSG:900913",
-        units: "m",
-        maxExtent: new OpenLayers.Bounds(
-            -20037508.34, -20037508.34, 20037508.34, 20037508.34
-        ),
-        maxResolution: 156543.0339
+        projection: "EPSG:900913"
     });    
     
     var osm = new OpenLayers.Layer.OSM();
diff --git a/examples/wmts-getfeatureinfo.js b/examples/wmts-getfeatureinfo.js
index 6882c44..0b8cd8a 100644
--- a/examples/wmts-getfeatureinfo.js
+++ b/examples/wmts-getfeatureinfo.js
@@ -1,16 +1,11 @@
-OpenLayers.ProxyHost = "/proxy/?url=";
+OpenLayers.ProxyHost = "proxy.cgi?url=";
 var map, control, popups = {};
 
 function init() {
     
     map = new OpenLayers.Map({
         div: "map",
-        projection: "EPSG:900913",
-        units: "m",
-        maxExtent: new OpenLayers.Bounds(
-            -20037508.34, -20037508.34, 20037508.34, 20037508.34
-        ),
-        maxResolution: 156543.0339
+        projection: "EPSG:900913"
     });    
     
     var osm = new OpenLayers.Layer.OSM();
diff --git a/examples/wmts.js b/examples/wmts.js
index 784e596..391a200 100644
--- a/examples/wmts.js
+++ b/examples/wmts.js
@@ -4,12 +4,7 @@ function init() {
     
     map = new OpenLayers.Map({
         div: "map",
-        projection: "EPSG:900913",
-        units: "m",
-        maxExtent: new OpenLayers.Bounds(
-            -20037508.34, -20037508.34, 20037508.34, 20037508.34
-        ),
-        maxResolution: 156543.0339
+        projection: "EPSG:900913"
     });    
     
     var osm = new OpenLayers.Layer.OSM();
diff --git a/examples/worldwind.html b/examples/worldwind.html
deleted file mode 100644
index 3038c5b..0000000
--- a/examples/worldwind.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <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, ol_wms, ww, ww2;
-        function init(){
-            map = new OpenLayers.Map('map', {'maxResolution': .28125, tileSize: new OpenLayers.Size(512, 512)});
-
-            ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-            "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,
-            {T:"bmng.topo.bathy.200406"});
-            ww2 = new OpenLayers.Layer.WorldWind( "LANDSAT",
-                "http://worldwind25.arc.nasa.gov/tile/tile.aspx", 2.25, 4,
-                {T:"105"});
-
-
-
-            map.addLayers([ol_wms, ww, ww2]);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.setCenter(new OpenLayers.LonLat(-71.4, 42.3), 6);
-        }
-    </script>
-  </head>
-  <body onload="init()">
-        <h1 id="title">WorldWind layers Example</h1>
-
-        <div id="tags">
-            worldwind, tile
-        </div>
-        <p id="shortdesc">
-            Shows the use of the Tiled WorldWind layers.
-        </p>
-
-        <div id="map" class="smallmap"></div>
-
-        <div id="docs">
-            <p>This is a demonstration of using Tiled WorldWind layers.
-            WorldWind requires you to define a "LZTD" -- the 3rd param of the
-            constructor -- and the number of zoom levels it supports. When a
-            worldwind layer is not visible at a given tile level, and empty
-            tile is placed there instead. Note that the maxResolution of the
-            map times 512px, must be a multiple of a power of two different
-            from the LZTD -- in this case, .28125 * 512 is 144, which is 36*4,
-            and 2.25*64. This example has a 'Bathy' layer, visible as you zoom
-            out, and a 'landsat' layer, visible as you zoom in, both visible at
-            zoom level 6.</p>
-        </div>
-      </body>
-</html>
-
-
diff --git a/examples/xyz-esri.html b/examples/xyz-esri.html
index 7bcef7f..71ad270 100644
--- a/examples/xyz-esri.html
+++ b/examples/xyz-esri.html
@@ -7,15 +7,19 @@
     <title>OpenLayers Basic ESRI Map Cache Example</title>
     <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
     <link rel="stylesheet" href="style.css" type="text/css">
+    <style>
+      .olImageLoadError {
+          display: none;
+      }
+    </style>
     <script src="../lib/OpenLayers.js"></script>
     <script type="text/javascript">
         var map, layer;
         function init(){
-            OpenLayers.Util.onImageLoadError = function() { this.style.display="none";}
-            var layerExtent = new OpenLayers.Bounds( -13758743.4295939,  5591455.28887228, -13531302.3472101 , 5757360.4178881)
+            var layerExtent = new OpenLayers.Bounds( -13758743.4295939,  5591455.28887228, -13531302.3472101 , 5757360.4178881);
             map = new OpenLayers.Map( 'map', {'restrictedExtent': layerExtent} );
             layer = new OpenLayers.Layer.XYZ( "ESRI",
-                    "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Portland/ESRI_LandBase_WebMercator/MapServer/tile/${z}/${y}/${x}",
+                    "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/${z}/${y}/${x}",
                     {sphericalMercator: true} );
             map.addLayer(layer);
             map.zoomToExtent(map.restrictedExtent);
@@ -29,7 +33,7 @@
         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>
+    <div id="shortdesc">Show a Simple ESRI map using the layer from <a href="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer">ESRI's server</a>. </div>
 
     <div id="map" class="smallmap"></div>
 
diff --git a/examples/xyz-offset.html b/examples/xyz-offset.html
deleted file mode 100644
index b751fa5..0000000
--- a/examples/xyz-offset.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-    <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-        <title>OpenLayers XYZ with Offset</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 src="xyz-offset.js"></script>
-    </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>
-        
-        <div id="docs">
-            <p>
-                The XYZ layer allows a zoomOffset to be set if you want to have
-                a maximum resolution for the map that differs from the maxiumum
-                resolution of the cached tiles.  This example uses only 6 of the
-                levels in the cache, starting with the ninth level (index of 8)
-                in the cache.  To do this, the layer is constructed with a
-                zoomOffset of 8.  When the map zoom level is zero, the level
-                with index 8 will be requested from the cache.
-            </p>
-            <p>
-                See the <a href="xyz-offset.js" target="_blank">
-                xyz-offset.js source</a> to see how this is done.
-            </p>        
-        </div>
-    </body>
-</html>
diff --git a/examples/xyz-offset.js b/examples/xyz-offset.js
deleted file mode 100644
index 6e7fa94..0000000
--- a/examples/xyz-offset.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var map, layer;
-
-// if tiles are not available, hide images
-//OpenLayers.Util.onImageLoadError = function() {
-//    this.style.display = "none";
-//}
-
-// called on body load
-function init() {
-
-    var extent = new OpenLayers.Bounds(
-        -13758743.4295939,  5591455.28887228, -13531302.3472101 , 5757360.4178881
-    );
-
-    map = new OpenLayers.Map({
-        div: "map",
-        maxExtent: new OpenLayers.Bounds(
-            -128 * 156543.0339, -128 * 156543.0339,
-            128 * 156543.0339, 128 * 156543.0339
-        ),
-        restrictedExtent: extent,
-        maxResolution: 611.496226171875, // corresponds to level 8 in the cache
-        numZoomLevels: 6,
-        projection: new OpenLayers.Projection("EPSG:900913"),
-        units: "m",
-        layers: [
-            new OpenLayers.Layer.XYZ(
-                "ESRI",
-                "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Portland/ESRI_LandBase_WebMercator/MapServer/tile/${z}/${y}/${x}",
-                {zoomOffset: 8} // since our map maxResolution differs from cache max resolution
-            )
-        ]
-    });
-
-    map.zoomToExtent(extent);
-
-}
diff --git a/examples/yahoo.html b/examples/yahoo.html
deleted file mode 100644
index 6a584c7..0000000
--- a/examples/yahoo.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <title>OpenLayers: Yahoo Layer</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
-    <link rel="stylesheet" href="style.css" type="text/css">
-    <script src="http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=euzuro-openlayers"></script>
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var map, layer, velayer;
-
-        function init(){
-            map = new OpenLayers.Map('map');
-
-            yahooLayer = new OpenLayers.Layer.Yahoo( "Yahoo");
-
-            map.addLayer(yahooLayer);
-
-            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
-            map.addLayer(layer);
-
-            map.setCenter(new OpenLayers.LonLat(-5, 40), 4);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">Yahoo Base Layer Example</h1>
-
-        <div id="tags">
-            yahoo, layer
-        </div>
-
-        <p id="shortdesc">
-            Shows how you would add a yahoo layer and add the LayerSwitcher control
-        </p>
-
-        <div id="map" class="smallmap"></div>
-
-        <div id="docs">
-            <p>This is an example of how to add a yahoo layer to the OpenLayers
-            window.  In order to enable a yahoo layer, also shown in this
-            example is the LayerSwitcher() control for toggling between both
-            the yahoo layer and the OSGeo WMS.
-        </div>
-
-  </body>
-</html>
diff --git a/examples/zoom.html b/examples/zoom.html
new file mode 100644
index 0000000..8ca11bf
--- /dev/null
+++ b/examples/zoom.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>OpenLayers Zoom Example</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <style>
+            .olControlAttribution {
+                bottom: 5px;
+                font-size: 9px;
+            }
+            #customZoom {
+                z-index: 1001;
+                position: relative;
+                top: 10px;
+                left: 10px;
+            }
+            #customZoom a {
+                text-decoration: none;
+                position: absolute;
+                display: block;
+                width: 50px;
+                text-align: center;
+                font-weight: bold;
+                color: #fff;
+                background: #369;
+                border: 1px solid #ccc;
+                border-radius: 3px;
+            }
+            #customZoom a:hover {
+                background: #036;
+            }
+            #customZoomOut {
+                top: 25px;
+            }
+            
+        </style>
+    </head>
+    <body>
+        <h1 id="title">Zoom Control Example</h1>
+        <div id="tags">zoom control light</div>
+
+        <div id="shortdesc">Shows how to use a simple zoom control.</div>
+
+        <div id="map" class="smallmap"></div>
+        <p>The map above uses the default control configuration and style.</p>
+        <p>The map below uses the custom zoom elements and styling.</p>
+        <div id="map2" class="smallmap">
+            <div id="customZoom">
+                <a href="#customZoomIn" id="customZoomIn">in</a>
+                <a href="#customZoomOut" id="customZoomOut">out</a>
+            </div>
+        </div>
+
+        <div id="docs">
+            <p>This example demonstrates the use of a Zoom control.</p>
+            <p>
+                See the <a href="zoom.js" target="_blank">zoom.js</a> source 
+                for details.
+            </p>
+        </div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="zoom.js"></script>
+    </body>
+</html>
diff --git a/examples/zoom.js b/examples/zoom.js
new file mode 100644
index 0000000..08694cc
--- /dev/null
+++ b/examples/zoom.js
@@ -0,0 +1,34 @@
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [new OpenLayers.Layer.OSM()],
+    controls: [
+        new OpenLayers.Control.Navigation({
+            dragPanOptions: {
+                enableKinetic: true
+            }
+        }),
+        new OpenLayers.Control.Attribution(),
+        new OpenLayers.Control.Zoom()
+    ],
+    center: [0, 0],
+    zoom: 1
+});
+
+var map2 = new OpenLayers.Map({
+    div: "map2",
+    layers: [new OpenLayers.Layer.OSM()],
+    controls: [
+        new OpenLayers.Control.Navigation({
+            dragPanOptions: {
+                enableKinetic: true
+            }
+        }),
+        new OpenLayers.Control.Attribution(),
+        new OpenLayers.Control.Zoom({
+            zoomInId: "customZoomIn",
+            zoomOutId: "customZoomOut"
+        })
+    ],
+    center: [0, 0],
+    zoom: 1
+});
diff --git a/examples/zoomify.html b/examples/zoomify.html
index 3bec55b..6b610aa 100644
--- a/examples/zoomify.html
+++ b/examples/zoomify.html
@@ -23,7 +23,6 @@
 
 	       /* Map with raster coordinates (pixels) from Zoomify image */
 	        var options = {
-	            controls: [],
 	            maxExtent: new OpenLayers.Bounds(0, 0, zoomify_width, zoomify_height),
 	            maxResolution: Math.pow(2, zoomify.numberOfTiers-1 ),
 	            numZoomLevels: zoomify.numberOfTiers,
@@ -33,11 +32,6 @@
 	        map = new OpenLayers.Map("map", options);
 	        map.addLayer(zoomify);
 
-	        map.addControl(new OpenLayers.Control.MousePosition());
-	        map.addControl(new OpenLayers.Control.PanZoomBar());
-	        map.addControl(new OpenLayers.Control.MouseDefaults());
-	        map.addControl(new OpenLayers.Control.KeyboardDefaults());
-
             map.setBaseLayer(zoomify);
 	        map.zoomToMaxExtent();
         };
diff --git a/lib/Firebug/firebug.js b/lib/Firebug/firebug.js
index a6242c3..f07825e 100644
--- a/lib/Firebug/firebug.js
+++ b/lib/Firebug/firebug.js
@@ -208,7 +208,7 @@ if (!window.console || !console.firebug) { (function()
             consoleBody = doc.getElementById("log");
             layout();
             flush();
-        }
+        };
 
         var baseURL = getFirebugURL();
 
diff --git a/lib/Gears/gears_init.js b/lib/Gears/gears_init.js
deleted file mode 100644
index d531a3f..0000000
--- a/lib/Gears/gears_init.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2007, Google Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  1. Redistributions of source code must retain the above copyright notice,
- *     this list of conditions and the following disclaimer.
- *  2. 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.
- *  3. Neither the name of Google Inc. nor the names of its contributors may be
- *     used to endorse or promote products derived from this software without
- *     specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- *
- * Sets up google.gears.*, which is *the only* supported way to access Gears.
- *
- * Circumvent this file at your own risk!
- *
- * In the future, Gears may automatically define google.gears.* without this
- * file. Gears may use these objects to transparently fix bugs and compatibility
- * issues. Applications that use the code below will continue to work seamlessly
- * when that happens.
- */
-
-(function() {
-  // We are already defined. Hooray!
-  if (window.google && google.gears) {
-    return;
-  }
-
-  var factory = null;
-
-  // Firefox
-  if (typeof GearsFactory != 'undefined') {
-    factory = new GearsFactory();
-  } else {
-    // IE
-    try {
-      factory = new ActiveXObject('Gears.Factory');
-      // privateSetGlobalObject is only required and supported on WinCE.
-      if (factory.getBuildInfo().indexOf('ie_mobile') != -1) {
-        factory.privateSetGlobalObject(this);
-      }
-    } catch (e) {
-      // Safari
-      if ((typeof navigator.mimeTypes != 'undefined')
-           && navigator.mimeTypes["application/x-googlegears"]) {
-        factory = document.createElement("object");
-        factory.style.display = "none";
-        factory.width = 0;
-        factory.height = 0;
-        factory.type = "application/x-googlegears";
-        document.documentElement.appendChild(factory);
-      }
-    }
-  }
-
-  // *Do not* define any objects if Gears is not installed. This mimics the
-  // behavior of Gears defining the objects in the future.
-  if (!factory) {
-    return;
-  }
-
-  // Now set up the objects, being careful not to overwrite anything.
-  //
-  // Note: In Internet Explorer for Windows Mobile, you can't add properties to
-  // the window object. However, global objects are automatically added as
-  // properties of the window object in all browsers.
-  if (!window.google) {
-    google = {};
-  }
-
-  if (!google.gears) {
-    google.gears = {factory: factory};
-  }
-})();
diff --git a/lib/OpenLayers.js b/lib/OpenLayers.js
index ea25d93..acd1abd 100644
--- a/lib/OpenLayers.js
+++ b/lib/OpenLayers.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /* 
@@ -71,7 +71,7 @@
             for(var i=0, len=s.length; i<len; i++) {
                 src = s[i].getAttribute('src');
                 if(src) {
-                    var m = src.match(r);
+                    m = src.match(r);
                     if(m) {
                         l = m[1];
                         break;
@@ -79,7 +79,42 @@
                 }
             }
             return (function() { return l; });
-        })()
+        })(),
+        
+        /**
+         * APIProperty: ImgPath
+         * {String} Set this to the path where control images are stored, a path  
+         * given here must end with a slash. If set to '' (which is the default) 
+         * OpenLayers will use its script location + "img/".
+         * 
+         * You will need to set this property when you have a singlefile build of 
+         * OpenLayers that either is not named "OpenLayers.js" or if you move
+         * the file in a way such that the image directory cannot be derived from 
+         * the script location.
+         * 
+         * If your custom OpenLayers build is named "my-custom-ol.js" and the images
+         * of OpenLayers are in a folder "/resources/external/images/ol" a correct
+         * way of including OpenLayers in your HTML would be:
+         * 
+         * (code)
+         *   <script src="/path/to/my-custom-ol.js" type="text/javascript"></script>
+         *   <script type="text/javascript">
+         *      // tell OpenLayers where the control images are
+         *      // remember the trailing slash
+         *      OpenLayers.ImgPath = "/resources/external/images/ol/";
+         *   </script>
+         * (end code)
+         * 
+         * Please remember that when your OpenLayers script is not named 
+         * "OpenLayers.js" you will have to make sure that the default theme is 
+         * loaded into the page by including an appropriate <link>-tag, 
+         * e.g.:
+         * 
+         * (code)
+         *   <link rel="stylesheet" href="/path/to/default/style.css"  type="text/css">
+         * (end code)
+         */
+        ImgPath : ''
     };
 
     /**
@@ -97,6 +132,7 @@
             jsFiles = [
                 "OpenLayers/BaseTypes/Class.js",
                 "OpenLayers/Util.js",
+                "OpenLayers/Animation.js",
                 "OpenLayers/BaseTypes.js",
                 "OpenLayers/BaseTypes/Bounds.js",
                 "OpenLayers/BaseTypes/Date.js",
@@ -109,8 +145,8 @@
                 "OpenLayers/Kinetic.js",
                 "Rico/Corner.js",
                 "Rico/Color.js",
-                "OpenLayers/Ajax.js",
                 "OpenLayers/Events.js",
+                "OpenLayers/Events/buttonclick.js",
                 "OpenLayers/Request.js",
                 "OpenLayers/Request/XMLHttpRequest.js",
                 "OpenLayers/Projection.js",
@@ -123,35 +159,31 @@
                 "OpenLayers/Tile.js",
                 "OpenLayers/Tile/Image.js",
                 "OpenLayers/Tile/Image/IFrame.js",
-                "OpenLayers/Tile/WFS.js",
+                "OpenLayers/Tile/UTFGrid.js",
                 "OpenLayers/Layer/Image.js",
                 "OpenLayers/Layer/SphericalMercator.js",
                 "OpenLayers/Layer/EventPane.js",
                 "OpenLayers/Layer/FixedZoomLevels.js",
                 "OpenLayers/Layer/Google.js",
                 "OpenLayers/Layer/Google/v3.js",
-                "OpenLayers/Layer/VirtualEarth.js",
-                "OpenLayers/Layer/Yahoo.js",
                 "OpenLayers/Layer/HTTPRequest.js",
                 "OpenLayers/Layer/Grid.js",
                 "OpenLayers/Layer/MapGuide.js",
                 "OpenLayers/Layer/MapServer.js",
-                "OpenLayers/Layer/MapServer/Untiled.js",
                 "OpenLayers/Layer/KaMap.js",
                 "OpenLayers/Layer/KaMapCache.js",
-                "OpenLayers/Layer/MultiMap.js",
                 "OpenLayers/Layer/Markers.js",
                 "OpenLayers/Layer/Text.js",
                 "OpenLayers/Layer/WorldWind.js",
                 "OpenLayers/Layer/ArcGIS93Rest.js",
                 "OpenLayers/Layer/WMS.js",
-                "OpenLayers/Layer/WMS/Untiled.js",
-                "OpenLayers/Layer/WMS/Post.js",
                 "OpenLayers/Layer/WMTS.js",
                 "OpenLayers/Layer/ArcIMS.js",
                 "OpenLayers/Layer/GeoRSS.js",
                 "OpenLayers/Layer/Boxes.js",
                 "OpenLayers/Layer/XYZ.js",
+                "OpenLayers/Layer/UTFGrid.js",
+                "OpenLayers/Layer/OSM.js",
                 "OpenLayers/Layer/Bing.js",
                 "OpenLayers/Layer/TMS.js",
                 "OpenLayers/Layer/TileCache.js",
@@ -163,7 +195,6 @@
                 "OpenLayers/Popup/FramedCloud.js",
                 "OpenLayers/Feature.js",
                 "OpenLayers/Feature/Vector.js",
-                "OpenLayers/Feature/WFS.js",
                 "OpenLayers/Handler.js",
                 "OpenLayers/Handler/Click.js",
                 "OpenLayers/Handler/Hover.js",
@@ -180,13 +211,14 @@
                 "OpenLayers/Control.js",
                 "OpenLayers/Control/Attribution.js",
                 "OpenLayers/Control/Button.js",
+                "OpenLayers/Control/CacheRead.js",
+                "OpenLayers/Control/CacheWrite.js",
                 "OpenLayers/Control/ZoomBox.js",
                 "OpenLayers/Control/ZoomToMaxExtent.js",
                 "OpenLayers/Control/DragPan.js",
                 "OpenLayers/Control/Navigation.js",
                 "OpenLayers/Control/PinchZoom.js",
                 "OpenLayers/Control/TouchNavigation.js",
-                "OpenLayers/Control/MouseDefaults.js",
                 "OpenLayers/Control/MousePosition.js",
                 "OpenLayers/Control/OverviewMap.js",
                 "OpenLayers/Control/KeyboardDefaults.js",
@@ -210,9 +242,10 @@
                 "OpenLayers/Control/WMTSGetFeatureInfo.js",
                 "OpenLayers/Control/Graticule.js",
                 "OpenLayers/Control/TransformFeature.js",
+                "OpenLayers/Control/UTFGrid.js",
                 "OpenLayers/Control/SLDSelect.js",
+                "OpenLayers/Control/Zoom.js",
                 "OpenLayers/Geometry.js",
-                "OpenLayers/Geometry/Rectangle.js",
                 "OpenLayers/Geometry/Collection.js",
                 "OpenLayers/Geometry/Point.js",
                 "OpenLayers/Geometry/MultiPoint.js",
@@ -222,12 +255,9 @@
                 "OpenLayers/Geometry/Polygon.js",
                 "OpenLayers/Geometry/MultiLineString.js",
                 "OpenLayers/Geometry/MultiPolygon.js",
-                "OpenLayers/Geometry/Surface.js",
                 "OpenLayers/Renderer.js",
                 "OpenLayers/Renderer/Elements.js",
-                "OpenLayers/Renderer/NG.js",
                 "OpenLayers/Renderer/SVG.js",
-                "OpenLayers/Renderer/SVG2.js",
                 "OpenLayers/Renderer/Canvas.js",
                 "OpenLayers/Renderer/VML.js",
                 "OpenLayers/Layer/Vector.js",
@@ -249,17 +279,16 @@
                 "OpenLayers/Filter/Function.js",                
                 "OpenLayers/Protocol.js",
                 "OpenLayers/Protocol/HTTP.js",
-                "OpenLayers/Protocol/SQL.js",
-                "OpenLayers/Protocol/SQL/Gears.js",
                 "OpenLayers/Protocol/WFS.js",
                 "OpenLayers/Protocol/WFS/v1.js",
                 "OpenLayers/Protocol/WFS/v1_0_0.js",
                 "OpenLayers/Protocol/WFS/v1_1_0.js",
+                "OpenLayers/Protocol/CSW.js", 
+                "OpenLayers/Protocol/CSW/v2_0_2.js",
                 "OpenLayers/Protocol/Script.js",
                 "OpenLayers/Protocol/SOS.js",
                 "OpenLayers/Protocol/SOS/v1_0_0.js",
                 "OpenLayers/Layer/PointTrack.js",
-                "OpenLayers/Layer/GML.js",
                 "OpenLayers/Style.js",
                 "OpenLayers/Style2.js",
                 "OpenLayers/StyleMap.js",
@@ -279,6 +308,10 @@
                 "OpenLayers/Format/KML.js",
                 "OpenLayers/Format/GeoRSS.js",
                 "OpenLayers/Format/WFS.js",
+                "OpenLayers/Format/OWSCommon.js",
+                "OpenLayers/Format/OWSCommon/v1.js",
+                "OpenLayers/Format/OWSCommon/v1_0_0.js",
+                "OpenLayers/Format/OWSCommon/v1_1_0.js",
                 "OpenLayers/Format/WFSCapabilities.js",
                 "OpenLayers/Format/WFSCapabilities/v1.js",
                 "OpenLayers/Format/WFSCapabilities/v1_0_0.js",
@@ -297,6 +330,7 @@
                 "OpenLayers/Format/SLD.js",
                 "OpenLayers/Format/SLD/v1.js",
                 "OpenLayers/Format/SLD/v1_0_0.js",
+                "OpenLayers/Format/SLD/v1_0_0_GeoServer.js",
                 "OpenLayers/Format/OWSCommon.js",
                 "OpenLayers/Format/OWSCommon/v1.js",
                 "OpenLayers/Format/OWSCommon/v1_0_0.js",
@@ -342,9 +376,7 @@
                 "OpenLayers/Format/XLS/v1.js",
                 "OpenLayers/Format/XLS/v1_1_0.js",
                 "OpenLayers/Format/OGCExceptionReport.js",
-                "OpenLayers/Layer/WFS.js",
                 "OpenLayers/Control/GetFeature.js",
-                "OpenLayers/Control/MouseToolbar.js",
                 "OpenLayers/Control/NavToolbar.js",
                 "OpenLayers/Control/PanPanel.js",
                 "OpenLayers/Control/Pan.js",
@@ -360,7 +392,8 @@
                 "OpenLayers/Symbolizer/Text.js",
                 "OpenLayers/Symbolizer/Raster.js",
                 "OpenLayers/Lang.js",
-                "OpenLayers/Lang/en.js"
+                "OpenLayers/Lang/en.js",
+                "OpenLayers/Spherical.js"
             ]; // etc.
         }
 
@@ -381,4 +414,4 @@
 /**
  * Constant: VERSION_NUMBER
  */
-OpenLayers.VERSION_NUMBER="Release 2.11";
+OpenLayers.VERSION_NUMBER="Release 2.12";
diff --git a/lib/OpenLayers/Ajax.js b/lib/OpenLayers/Ajax.js
deleted file mode 100644
index 9223502..0000000
--- a/lib/OpenLayers/Ajax.js
+++ /dev/null
@@ -1,679 +0,0 @@
-/* Copyright (c) 2006-2011 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 = "";
-//OpenLayers.ProxyHost = "examples/proxy.cgi?url=";
-
-/**
- * Ajax reader for OpenLayers
- *
- *  @uri url to do remote XML http get
- *  @param {String} 'get' format params (x=y&a=b...)
- *  @who object to handle callbacks for this request
- *  @complete  the function to be called on success 
- *  @failure  the function to be called on failure
- *  
- *   example usage from a caller:
- *  
- *     caps: function(request) {
- *      -blah-  
- *     },
- *  
- *     OpenLayers.loadURL(url,params,this,caps);
- *
- * Notice the above example does not provide an error handler; a default empty
- * handler is provided which merely logs the error if a failure handler is not 
- * supplied
- *
- */
-
-
-/**
- * Function: OpenLayers.nullHandler
- * @param {} request
- */
-OpenLayers.nullHandler = function(request) {
-    OpenLayers.Console.userError(OpenLayers.i18n("unhandledRequest", {'statusText':request.statusText}));
-};
-
-/** 
- * APIFunction: OpenLayers.loadURL
- * Background load a document.
- * *Deprecated*.  Use <OpenLayers.Request.GET> method instead.
- *
- * Parameters:
- * uri - {String} URI of source doc
- * params - {String} or {Object} GET params. Either a string in the form
- *     "?hello=world&foo=bar" (do not forget the leading question mark)
- *     or an object in the form {'hello': 'world', 'foo': 'bar}
- * caller - {Object} object which gets callbacks
- * onComplete - {Function} Optional callback for success.  The callback
- *     will be called with this set to caller and will receive the request
- *     object as an argument.  Note that if you do not specify an onComplete
- *     function, <OpenLayers.nullHandler> will be called (which pops up a 
- *     user friendly error message dialog).
- * onFailure - {Function} Optional callback for failure.  In the event of
- *     a failure, the callback will be called with this set to caller and will
- *     receive the request object as an argument.  Note that if you do not
- *     specify an onComplete function, <OpenLayers.nullHandler> will be called
- *     (which pops up a user friendly error message dialog).
- *
- * Returns:
- * {<OpenLayers.Request.XMLHttpRequest>}  The request object. To abort loading,
- *     call request.abort().
- */
-OpenLayers.loadURL = function(uri, params, caller,
-                                  onComplete, onFailure) {
-    
-    if(typeof params == 'string') {
-        params = OpenLayers.Util.getParameters(params);
-    }
-    var success = (onComplete) ? onComplete : OpenLayers.nullHandler;
-    var failure = (onFailure) ? onFailure : OpenLayers.nullHandler;
-    
-    return OpenLayers.Request.GET({
-        url: uri, params: params,
-        success: success, failure: failure, scope: caller
-    });
-};
-
-/** 
- * Function: OpenLayers.parseXMLString
- * Parse XML into a doc structure
- * 
- * Parameters:
- * text - {String} 
- * 
- * Returns:
- * {?} Parsed AJAX Responsev
- */
-OpenLayers.parseXMLString = function(text) {
-
-    //MS sucks, if the server is bad it dies
-    var index = text.indexOf('<');
-    if (index > 0) {
-        text = text.substring(index);
-    }
-
-    var ajaxResponse = OpenLayers.Util.Try(
-        function() {
-            var xmldom = new ActiveXObject('Microsoft.XMLDOM');
-            xmldom.loadXML(text);
-            return xmldom;
-        },
-        function() {
-            return new DOMParser().parseFromString(text, 'text/xml');
-        },
-        function() {
-            var req = new XMLHttpRequest();
-            req.open("GET", "data:" + "text/xml" +
-                     ";charset=utf-8," + encodeURIComponent(text), false);
-            if (req.overrideMimeType) {
-                req.overrideMimeType("text/xml");
-            }
-            req.send(null);
-            return req.responseXML;
-        }
-    );
-
-    return ajaxResponse;
-};
-
-
-/**
- * Namespace: OpenLayers.Ajax
- */
-OpenLayers.Ajax = {
-
-    /**
-     * Method: emptyFunction
-     */
-    emptyFunction: function () {},
-
-    /**
-     * Method: getTransport
-     * 
-     * Returns: 
-     * {Object} Transport mechanism for whichever browser we're in, or false if
-     *          none available.
-     */
-    getTransport: function() {
-        return OpenLayers.Util.Try(
-            function() {return new XMLHttpRequest();},
-            function() {return new ActiveXObject('Msxml2.XMLHTTP');},
-            function() {return new ActiveXObject('Microsoft.XMLHTTP');}
-        ) || false;
-    },
-
-    /**
-     * Property: activeRequestCount
-     * {Integer}
-     */
-    activeRequestCount: 0
-};
-
-/**
- * Namespace: OpenLayers.Ajax.Responders
- * {Object}
- */
-OpenLayers.Ajax.Responders = {
-  
-    /**
-     * Property: responders
-     * {Array}
-     */
-    responders: [],
-
-    /**
-     * Method: register
-     *  
-     * Parameters:
-     * responderToAdd - {?}
-     */
-    register: function(responderToAdd) {
-        for (var i = 0; i < this.responders.length; i++){
-            if (responderToAdd == this.responders[i]){
-                return;
-            }
-        }
-        this.responders.push(responderToAdd);
-    },
-
-    /**
-     * Method: unregister
-     *  
-     * Parameters:
-     * responderToRemove - {?}
-     */
-    unregister: function(responderToRemove) {
-        OpenLayers.Util.removeItem(this.reponders, responderToRemove);
-    },
-
-    /**
-     * Method: dispatch
-     * 
-     * Parameters:
-     * callback - {?}
-     * request - {?}
-     * transport - {?}
-     */
-    dispatch: function(callback, request, transport) {
-        var responder;
-        for (var i = 0; i < this.responders.length; i++) {
-            responder = this.responders[i];
-     
-            if (responder[callback] && 
-                typeof responder[callback] == 'function') {
-                try {
-                    responder[callback].apply(responder, 
-                                              [request, transport]);
-                } catch (e) {}
-            }
-        }
-    }
-};
-
-OpenLayers.Ajax.Responders.register({
-    /** 
-     * Function: onCreate
-     */
-    onCreate: function() {
-        OpenLayers.Ajax.activeRequestCount++;
-    },
-
-    /**
-     * Function: onComplete
-     */
-     onComplete: function() {
-         OpenLayers.Ajax.activeRequestCount--;
-     }
-});
-
-/**
- * Class: OpenLayers.Ajax.Base
- */
-OpenLayers.Ajax.Base = OpenLayers.Class({
-      
-    /**
-     * Constructor: OpenLayers.Ajax.Base
-     * 
-     * Parameters: 
-     * options - {Object}
-     */
-    initialize: function(options) {
-        this.options = {
-            method:       'post',
-            asynchronous: true,
-            contentType:  'application/xml',
-            parameters:   ''
-        };
-        OpenLayers.Util.extend(this.options, options || {});
-        
-        this.options.method = this.options.method.toLowerCase();
-        
-        if (typeof this.options.parameters == 'string') {
-            this.options.parameters = 
-                OpenLayers.Util.getParameters(this.options.parameters);
-        }
-    }
-});
-
-/**
- * Class: OpenLayers.Ajax.Request
- * *Deprecated*.  Use <OpenLayers.Request> method instead.
- *
- * Inherit:
- *  - <OpenLayers.Ajax.Base>
- */
-OpenLayers.Ajax.Request = OpenLayers.Class(OpenLayers.Ajax.Base, {
-
-    /**
-     * Property: _complete
-     *
-     * {Boolean}
-     */
-    _complete: false,
-      
-    /**
-     * Constructor: OpenLayers.Ajax.Request
-     * 
-     * Parameters: 
-     * url - {String}
-     * options - {Object}
-     */
-    initialize: function(url, options) {
-        OpenLayers.Ajax.Base.prototype.initialize.apply(this, [options]);
-        
-        if (OpenLayers.ProxyHost && OpenLayers.String.startsWith(url, "http")) {
-            url = OpenLayers.ProxyHost + encodeURIComponent(url);
-        }
-        
-        this.transport = OpenLayers.Ajax.getTransport();
-        this.request(url);
-    },
-
-    /**
-     * Method: request
-     * 
-     * Parameters:
-     * url - {String}
-     */
-    request: function(url) {
-        this.url = url;
-        this.method = this.options.method;
-        var params = OpenLayers.Util.extend({}, this.options.parameters);
-        
-        if (this.method != 'get' && this.method != 'post') {
-            // simulate other verbs over post
-            params['_method'] = this.method;
-            this.method = 'post';
-        }
-
-        this.parameters = params;        
-        
-        if (params = OpenLayers.Util.getParameterString(params)) {
-            // when GET, append parameters to URL
-            if (this.method == 'get') {
-                this.url += ((this.url.indexOf('?') > -1) ? '&' : '?') + params;
-            } else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
-                params += '&_=';
-            }
-        }
-        try {
-            var response = new OpenLayers.Ajax.Response(this);
-            if (this.options.onCreate) {
-                this.options.onCreate(response);
-            }
-            
-            OpenLayers.Ajax.Responders.dispatch('onCreate', 
-                                                this, 
-                                                response);
-    
-            this.transport.open(this.method.toUpperCase(), 
-                                this.url,
-                                this.options.asynchronous);
-    
-            if (this.options.asynchronous) {
-                window.setTimeout(
-                    OpenLayers.Function.bind(this.respondToReadyState, this, 1),
-                    10);
-            }
-            
-            this.transport.onreadystatechange = 
-                OpenLayers.Function.bind(this.onStateChange, this);    
-            this.setRequestHeaders();
-    
-            this.body =  this.method == 'post' ?
-                (this.options.postBody || params) : null;
-            this.transport.send(this.body);
-    
-            // Force Firefox to handle ready state 4 for synchronous requests
-            if (!this.options.asynchronous && 
-                this.transport.overrideMimeType) {
-                this.onStateChange();
-            }
-        } catch (e) {
-            this.dispatchException(e);
-        }
-    },
-
-    /**
-     * Method: onStateChange
-     */
-    onStateChange: function() {
-        var readyState = this.transport.readyState;
-        if (readyState > 1 && !((readyState == 4) && this._complete)) {
-            this.respondToReadyState(this.transport.readyState);
-        }
-    },
-     
-    /**
-     * Method: setRequestHeaders
-     */
-    setRequestHeaders: function() {
-        var headers = {
-            'X-Requested-With': 'XMLHttpRequest',
-            'Accept': 'text/javascript, text/html, application/xml, text/xml, */*',
-            'OpenLayers': true
-        };
-
-        if (this.method == 'post') {
-            headers['Content-type'] = this.options.contentType +
-                (this.options.encoding ? '; charset=' + this.options.encoding : '');
-    
-            /* Force "Connection: close" for older Mozilla browsers to work
-             * around a bug where XMLHttpRequest sends an incorrect
-             * Content-length header. See Mozilla Bugzilla #246651.
-             */
-            if (this.transport.overrideMimeType &&
-                (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) {
-                headers['Connection'] = 'close';
-            }
-        }
-        // user-defined headers
-        if (typeof this.options.requestHeaders == 'object') {    
-            var extras = this.options.requestHeaders;
-            
-            if (typeof extras.push == 'function') {
-                for (var i = 0, length = extras.length; i < length; i += 2) {
-                    headers[extras[i]] = extras[i+1];
-                }
-            } else {
-                for (var i in extras) {
-                    headers[i] = extras[i];
-                }
-            }
-        }
-        
-        for (var name in headers) {
-            this.transport.setRequestHeader(name, headers[name]);
-        }
-    },
-    
-    /**
-     * Method: success
-     *
-     * Returns:
-     * {Boolean} - 
-     */
-    success: function() {
-        var status = this.getStatus();
-        return !status || (status >=200 && status < 300);
-    },
-    
-    /**
-     * Method: getStatus
-     *
-     * Returns:
-     * {Integer} - Status
-     */
-    getStatus: function() {
-        try {
-            return this.transport.status || 0;
-        } catch (e) {
-            return 0;
-        }
-    },
-
-    /**
-     * Method: respondToReadyState
-     *
-     * Parameters:
-     * readyState - {?}
-     */
-    respondToReadyState: function(readyState) {
-        var state = OpenLayers.Ajax.Request.Events[readyState];
-        var response = new OpenLayers.Ajax.Response(this);
-    
-        if (state == 'Complete') {
-            try {
-                this._complete = true;
-                (this.options['on' + response.status] ||
-                    this.options['on' + (this.success() ? 'Success' : 'Failure')] ||
-                    OpenLayers.Ajax.emptyFunction)(response);
-            } catch (e) {
-                this.dispatchException(e);
-            }
-    
-            var contentType = response.getHeader('Content-type');
-        }
-    
-        try {
-            (this.options['on' + state] || 
-             OpenLayers.Ajax.emptyFunction)(response);
-             OpenLayers.Ajax.Responders.dispatch('on' + state, 
-                                                 this, 
-                                                 response);
-        } catch (e) {
-            this.dispatchException(e);
-        }
-    
-        if (state == 'Complete') {
-            // avoid memory leak in MSIE: clean up
-            this.transport.onreadystatechange = OpenLayers.Ajax.emptyFunction;
-        }
-    },
-    
-    /**
-     * Method: getHeader
-     * 
-     * Parameters:
-     * name - {String} Header name
-     *
-     * Returns:
-     * {?} - response header for the given name
-     */
-    getHeader: function(name) {
-        try {
-            return this.transport.getResponseHeader(name);
-        } catch (e) {
-            return null;
-        }
-    },
-
-    /**
-     * Method: dispatchException
-     * If the optional onException function is set, execute it
-     * and then dispatch the call to any other listener registered
-     * for onException.
-     * 
-     * If no optional onException function is set, we suspect that
-     * the user may have also not used
-     * OpenLayers.Ajax.Responders.register to register a listener
-     * for the onException call.  To make sure that something
-     * gets done with this exception, only dispatch the call if there
-     * are listeners.
-     *
-     * If you explicitly want to swallow exceptions, set
-     * request.options.onException to an empty function (function(){})
-     * or register an empty function with <OpenLayers.Ajax.Responders>
-     * for onException.
-     * 
-     * Parameters:
-     * exception - {?}
-     */
-    dispatchException: function(exception) {
-        var handler = this.options.onException;
-        if(handler) {
-            // call options.onException and alert any other listeners
-            handler(this, exception);
-            OpenLayers.Ajax.Responders.dispatch('onException', this, exception);
-        } else {
-            // check if there are any other listeners
-            var listener = false;
-            var responders = OpenLayers.Ajax.Responders.responders;
-            for (var i = 0; i < responders.length; i++) {
-                if(responders[i].onException) {
-                    listener = true;
-                    break;
-                }
-            }
-            if(listener) {
-                // call all listeners
-                OpenLayers.Ajax.Responders.dispatch('onException', this, exception);
-            } else {
-                // let the exception through
-                throw exception;
-            }
-        }
-    }
-});
-
-/** 
- * Property: Events
- * {Array(String)}
- */
-OpenLayers.Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-/**
- * Class: OpenLayers.Ajax.Response
- */
-OpenLayers.Ajax.Response = OpenLayers.Class({
-
-    /**
-     * Property: status
-     *
-     * {Integer}
-     */
-    status: 0,
-    
-
-    /**
-     * Property: statusText
-     *
-     * {String}
-     */
-    statusText: '',
-      
-    /**
-     * Constructor: OpenLayers.Ajax.Response
-     * 
-     * Parameters: 
-     * request - {Object}
-     */
-    initialize: function(request) {
-        this.request = request;
-        var transport = this.transport = request.transport,
-            readyState = this.readyState = transport.readyState;
-        
-        if ((readyState > 2 &&
-            !(!!(window.attachEvent && !window.opera))) ||
-            readyState == 4) {
-            this.status       = this.getStatus();
-            this.statusText   = this.getStatusText();
-            this.responseText = transport.responseText == null ?
-                '' : String(transport.responseText);
-        }
-        
-        if(readyState == 4) {
-            var xml = transport.responseXML;
-            this.responseXML  = xml === undefined ? null : xml;
-        }
-    },
-    
-    /**
-     * Method: getStatus
-     */
-    getStatus: OpenLayers.Ajax.Request.prototype.getStatus,
-    
-    /**
-     * Method: getStatustext
-     *
-     * Returns:
-     * {String} - statusText
-     */
-    getStatusText: function() {
-        try {
-            return this.transport.statusText || '';
-        } catch (e) {
-            return '';
-        }
-    },
-    
-    /**
-     * Method: getHeader
-     */
-    getHeader: OpenLayers.Ajax.Request.prototype.getHeader,
-    
-    /** 
-     * Method: getResponseHeader
-     *
-     * Returns:
-     * {?} - response header for given name
-     */
-    getResponseHeader: function(name) {
-        return this.transport.getResponseHeader(name);
-    }
-});
-
-
-/**
- * Function: getElementsByTagNameNS
- * 
- * Parameters:
- * parentnode - {?}
- * nsuri - {?}
- * nsprefix - {?}
- * tagname - {?}
- * 
- * Returns:
- * {?}
- */
-OpenLayers.Ajax.getElementsByTagNameNS  = function(parentnode, nsuri, 
-                                                   nsprefix, tagname) {
-    var elem = null;
-    if (parentnode.getElementsByTagNameNS) {
-        elem = parentnode.getElementsByTagNameNS(nsuri, tagname);
-    } else {
-        elem = parentnode.getElementsByTagName(nsprefix + ':' + tagname);
-    }
-    return elem;
-};
-
-
-/**
- * Function: serializeXMLToString
- * Wrapper function around XMLSerializer, which doesn't exist/work in
- *     IE/Safari. We need to come up with a way to serialize in those browser:
- *     for now, these browsers will just fail. #535, #536
- *
- * Parameters: 
- * xmldom {XMLNode} xml dom to serialize
- * 
- * Returns:
- * {?}
- */
-OpenLayers.Ajax.serializeXMLToString = function(xmldom) {
-    var serializer = new XMLSerializer();
-    var data = serializer.serializeToString(xmldom);
-    return data;
-};
diff --git a/lib/OpenLayers/Animation.js b/lib/OpenLayers/Animation.js
new file mode 100644
index 0000000..cadc14d
--- /dev/null
+++ b/lib/OpenLayers/Animation.js
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. 
+ *
+ * @requires OpenLayers/SingleFile.js
+ */
+
+/**
+ * Namespace: OpenLayers.Animation
+ * A collection of utility functions for executing methods that repaint a 
+ *     portion of the browser window.  These methods take advantage of the
+ *     browser's scheduled repaints where requestAnimationFrame is available.
+ */
+OpenLayers.Animation = (function(window) {
+    
+    /**
+     * Property: isNative
+     * {Boolean} true if a native requestAnimationFrame function is available
+     */
+    var isNative = !!(window.requestAnimationFrame ||
+        window.webkitRequestAnimationFrame ||
+        window.mozRequestAnimationFrame ||
+        window.oRequestAnimationFrame ||
+        window.msRequestAnimationFrame);
+    
+    /**
+     * Function: requestFrame
+     * Schedule a function to be called at the next available animation frame.
+     *     Uses the native method where available.  Where requestAnimationFrame is
+     *     not available, setTimeout will be called with a 16ms delay.
+     *
+     * Parameters:
+     * callback - {Function} The function to be called at the next animation frame.
+     * element - {DOMElement} Optional element that visually bounds the animation.
+     */
+    var requestFrame = (function() {
+        var request = window.requestAnimationFrame ||
+            window.webkitRequestAnimationFrame ||
+            window.mozRequestAnimationFrame ||
+            window.oRequestAnimationFrame ||
+            window.msRequestAnimationFrame ||
+            function(callback, element) {
+                window.setTimeout(callback, 16);
+            };
+        // bind to window to avoid illegal invocation of native function
+        return function(callback, element) {
+            request.apply(window, [callback, element]);
+        };
+    })();
+    
+    // private variables for animation loops
+    var counter = 0;
+    var loops = {};
+    
+    /**
+     * Function: start
+     * Executes a method with <requestFrame> in series for some 
+     *     duration.
+     *
+     * Parameters:
+     * callback - {Function} The function to be called at the next animation frame.
+     * duration - {Number} Optional duration for the loop.  If not provided, the
+     *     animation loop will execute indefinitely.
+     * element - {DOMElement} Optional element that visually bounds the animation.
+     *
+     * Returns:
+     * {Number} Identifier for the animation loop.  Used to stop animations with
+     *     <stop>.
+     */
+    function start(callback, duration, element) {
+        duration = duration > 0 ? duration : Number.POSITIVE_INFINITY;
+        var id = ++counter;
+        var start = +new Date;
+        loops[id] = function() {
+            if (loops[id] && +new Date - start <= duration) {
+                callback();
+                if (loops[id]) {
+                    requestFrame(loops[id], element);
+                }
+            } else {
+                delete loops[id];
+            }
+        };
+        requestFrame(loops[id], element);
+        return id;
+    }
+    
+    /**
+     * Function: stop
+     * Terminates an animation loop started with <start>.
+     *
+     * Parameters:
+     * id - {Number} Identifier returned from <start>.
+     */
+    function stop(id) {
+        delete loops[id];
+    }
+    
+    return {
+        isNative: isNative,
+        requestFrame: requestFrame,
+        start: start,
+        stop: stop
+    };
+    
+})(window);
diff --git a/lib/OpenLayers/BaseTypes.js b/lib/OpenLayers/BaseTypes.js
index f1fdd2e..430cc5f 100644
--- a/lib/OpenLayers/BaseTypes.js
+++ b/lib/OpenLayers/BaseTypes.js
@@ -1,13 +1,12 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
- * @requires OpenLayers/Lang.js
- * @requires OpenLayers/Console.js
+ * @requires OpenLayers/SingleFile.js
  */
- 
+
 /** 
  * Header: OpenLayers Base Types
  * OpenLayers custom string, number and function functions are described here.
@@ -188,7 +187,10 @@ OpenLayers.String = {
      * APIFunction: numericIf
      * Converts a string that appears to be a numeric value into a number.
      * 
-     * Returns
+     * Parameters:
+     * value - {String}
+     *
+     * Returns:
      * {Number|String} a Number if the passed value is a number, a String
      *     otherwise. 
      */
@@ -198,75 +200,6 @@ OpenLayers.String = {
 
 };
 
-if (!String.prototype.startsWith) {
-    /**
-     * APIMethod: String.startsWith
-     * *Deprecated*. Whether or not a string starts with another string. 
-     * 
-     * Parameters:
-     * sStart - {String} The string we're testing for.
-     *  
-     * Returns:
-     * {Boolean} Whether or not this string starts with the string passed in.
-     */
-    String.prototype.startsWith = function(sStart) {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                                {'newMethod':'OpenLayers.String.startsWith'}));
-        return OpenLayers.String.startsWith(this, sStart);
-    };
-}
-
-if (!String.prototype.contains) {
-    /**
-     * APIMethod: String.contains
-     * *Deprecated*. Whether or not a string contains another string.
-     * 
-     * Parameters:
-     * str - {String} The string that we're testing for.
-     * 
-     * Returns:
-     * {Boolean} Whether or not this string contains with the string passed in.
-     */
-    String.prototype.contains = function(str) {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                                  {'newMethod':'OpenLayers.String.contains'}));
-        return OpenLayers.String.contains(this, str);
-    };
-}
-
-if (!String.prototype.trim) {
-    /**
-     * APIMethod: String.trim
-     * *Deprecated*. Removes leading and trailing whitespace characters from a string.
-     * 
-     * Returns:
-     * {String} A trimmed version of the string - all leading and 
-     *          trailing spaces removed
-     */
-    String.prototype.trim = function() {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                                      {'newMethod':'OpenLayers.String.trim'}));
-        return OpenLayers.String.trim(this);
-    };
-}
-
-if (!String.prototype.camelize) {
-    /**
-     * APIMethod: String.camelize
-     * *Deprecated*. Camel-case a hyphenated string. 
-     *     Ex. "chicken-head" becomes "chickenHead", and
-     *     "-chicken-head" becomes "ChickenHead".
-     * 
-     * Returns:
-     * {String} The string, camelized
-     */
-    String.prototype.camelize = function() {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                                  {'newMethod':'OpenLayers.String.camelize'}));
-        return OpenLayers.String.camelize(this);
-    };
-}
-
 /**
  * Namespace: OpenLayers.Number
  * Contains convenience functions for manipulating numbers.
@@ -360,26 +293,6 @@ OpenLayers.Number = {
     }
 };
 
-if (!Number.prototype.limitSigDigs) {
-    /**
-     * APIMethod: Number.limitSigDigs
-     * *Deprecated*. Limit the number of significant digits on an integer. Does *not*
-     *     work with floats!
-     * 
-     * Parameters:
-     * sig - {Integer}
-     * 
-     * Returns:
-     * {Integer} The number, rounded to the specified number of significant digits.
-     *           If null, 0, or negative value passed in, returns 0
-     */
-    Number.prototype.limitSigDigs = function(sig) {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                              {'newMethod':'OpenLayers.Number.limitSigDigs'}));
-        return OpenLayers.Number.limitSigDigs(this, sig);
-    };
-}
-
 /**
  * Namespace: OpenLayers.Function
  * Contains convenience functions for function manipulation.
@@ -471,47 +384,6 @@ OpenLayers.Function = {
 
 };
 
-if (!Function.prototype.bind) {
-    /**
-     * APIMethod: Function.bind
-     * *Deprecated*. Bind a function to an object. 
-     * Method to easily create closures with 'this' altered.
-     * 
-     * Parameters:
-     * object - {Object} the this parameter
-     * 
-     * Returns:
-     * {Function} A closure with 'this' altered to the first
-     *            argument.
-     */
-    Function.prototype.bind = function() {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                                {'newMethod':'OpenLayers.Function.bind'}));
-        // new function takes the same arguments with this function up front
-        Array.prototype.unshift.apply(arguments, [this]);
-        return OpenLayers.Function.bind.apply(null, arguments);
-    };
-}
-
-if (!Function.prototype.bindAsEventListener) {
-    /**
-     * APIMethod: Function.bindAsEventListener
-     * *Deprecated*. Bind a function to an object, and configure it to receive the
-     *     event object as first parameter when called. 
-     * 
-     * Parameters:
-     * object - {Object} A reference to this.
-     * 
-     * Returns:
-     * {Function}
-     */
-    Function.prototype.bindAsEventListener = function(object) {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
-                        {'newMethod':'OpenLayers.Function.bindAsEventListener'}));
-        return OpenLayers.Function.bindAsEventListener(this, object);
-    };
-}
-
 /**
  * Namespace: OpenLayers.Array
  * Contains convenience functions for array manipulation.
diff --git a/lib/OpenLayers/BaseTypes/Bounds.js b/lib/OpenLayers/BaseTypes/Bounds.js
index e33c496..35f2b6e 100644
--- a/lib/OpenLayers/BaseTypes/Bounds.js
+++ b/lib/OpenLayers/BaseTypes/Bounds.js
@@ -1,12 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -58,17 +56,27 @@ OpenLayers.Bounds = OpenLayers.Class({
 
     /**
      * Constructor: OpenLayers.Bounds
-     * Construct a new bounds object.
+     * Construct a new bounds object. Coordinates can either be passed as four
+     * arguments, or as a single argument.
      *
-     * Parameters:
+     * Parameters (four arguments):
      * left - {Number} The left bounds of the box.  Note that for width
      *        calculations, this is assumed to be less than the right value.
      * bottom - {Number} The bottom bounds of the box.  Note that for height
      *          calculations, this is assumed to be more than the top value.
      * right - {Number} The right bounds.
      * top - {Number} The top bounds.
+     *
+     * Parameters (single argument):
+     * bounds - {Array(Number)} [left, bottom, right, top]
      */
     initialize: function(left, bottom, right, top) {
+        if (OpenLayers.Util.isArray(left)) {
+            top = left[3];
+            right = left[2];
+            bottom = left[1];
+            left = left[0];
+        }
         if (left != null) {
             this.left = OpenLayers.Util.toFloat(left);
         }
@@ -300,9 +308,7 @@ OpenLayers.Bounds = OpenLayers.Class({
      */
     add:function(x, y) {
         if ( (x == null) || (y == null) ) {
-            var msg = OpenLayers.i18n("boundsAddError");
-            OpenLayers.Console.error(msg);
-            return null;
+            throw new TypeError('Bounds.add cannot receive null values');
         }
         return new OpenLayers.Bounds(this.left + x, this.bottom + y,
                                      this.right + x, this.top + y);
@@ -357,15 +363,38 @@ OpenLayers.Bounds = OpenLayers.Class({
      * APIMethod: containsLonLat
      * 
      * Parameters:
-     * ll - {<OpenLayers.LonLat>}
+     * ll - {<OpenLayers.LonLat>|Object} OpenLayers.LonLat or an
+     *     object with a 'lon' and 'lat' properties.
+     * options - {Object} Optional parameters
+     *
+     * Acceptable options:
      * inclusive - {Boolean} Whether or not to include the border.
      *     Default is true.
+     * worldBounds - {<OpenLayers.Bounds>} If a worldBounds is provided, the
+     *     ll will be considered as contained if it exceeds the world bounds,
+     *     but can be wrapped around the dateline so it is contained by this
+     *     bounds.
      *
      * Returns:
      * {Boolean} The passed-in lonlat is within this bounds.
      */
-    containsLonLat:function(ll, inclusive) {
-        return this.contains(ll.lon, ll.lat, inclusive);
+    containsLonLat: function(ll, options) {
+        if (typeof options === "boolean") {
+            options =  {inclusive: options};
+        }
+        options = options || {};
+        var contains = this.contains(ll.lon, ll.lat, options.inclusive),
+            worldBounds = options.worldBounds;
+        if (worldBounds && !contains) {
+            var worldWidth = worldBounds.getWidth();
+            var worldCenterX = (worldBounds.left + worldBounds.right) / 2;
+            var worldsAway = Math.round((ll.lon - worldCenterX) / worldWidth);
+            contains = this.containsLonLat({
+                lon: ll.lon - worldsAway * worldWidth,
+                lat: ll.lat
+            }, {inclusive: options.inclusive});
+        }
+        return contains;
     },
 
     /**
@@ -428,48 +457,79 @@ OpenLayers.Bounds = OpenLayers.Class({
      * 
      * Parameters:
      * bounds - {<OpenLayers.Bounds>} The target bounds.
+     * options - {Object} Optional parameters.
+     * 
+     * Acceptable options:
      * inclusive - {Boolean} Treat coincident borders as intersecting.  Default
      *     is true.  If false, bounds that do not overlap but only touch at the
      *     border will not be considered as intersecting.
+     * worldBounds - {<OpenLayers.Bounds>} If a worldBounds is provided, two
+     *     bounds will be considered as intersecting if they intersect when 
+     *     shifted to within the world bounds.  This applies only to bounds that
+     *     cross or are completely outside the world bounds.
      *
      * Returns:
      * {Boolean} The passed-in bounds object intersects this bounds.
      */
-    intersectsBounds:function(bounds, inclusive) {
-        if (inclusive == null) {
-            inclusive = true;
+    intersectsBounds:function(bounds, options) {
+        if (typeof options === "boolean") {
+            options =  {inclusive: options};
+        }
+        options = options || {};
+        if (options.worldBounds) {
+            var self = this.wrapDateLine(options.worldBounds);
+            bounds = bounds.wrapDateLine(options.worldBounds);
+        } else {
+            self = this;
+        }
+        if (options.inclusive == null) {
+            options.inclusive = true;
         }
         var intersects = false;
         var mightTouch = (
-            this.left == bounds.right ||
-            this.right == bounds.left ||
-            this.top == bounds.bottom ||
-            this.bottom == bounds.top
+            self.left == bounds.right ||
+            self.right == bounds.left ||
+            self.top == bounds.bottom ||
+            self.bottom == bounds.top
         );
         
         // if the two bounds only touch at an edge, and inclusive is false,
         // then the bounds don't *really* intersect.
-        if (inclusive || !mightTouch) {
+        if (options.inclusive || !mightTouch) {
             // otherwise, if one of the boundaries even partially contains another,
             // inclusive of the edges, then they do intersect.
             var inBottom = (
-                ((bounds.bottom >= this.bottom) && (bounds.bottom <= this.top)) ||
-                ((this.bottom >= bounds.bottom) && (this.bottom <= bounds.top))
+                ((bounds.bottom >= self.bottom) && (bounds.bottom <= self.top)) ||
+                ((self.bottom >= bounds.bottom) && (self.bottom <= bounds.top))
             );
             var inTop = (
-                ((bounds.top >= this.bottom) && (bounds.top <= this.top)) ||
-                ((this.top > bounds.bottom) && (this.top < bounds.top))
+                ((bounds.top >= self.bottom) && (bounds.top <= self.top)) ||
+                ((self.top > bounds.bottom) && (self.top < bounds.top))
             );
             var inLeft = (
-                ((bounds.left >= this.left) && (bounds.left <= this.right)) ||
-                ((this.left >= bounds.left) && (this.left <= bounds.right))
+                ((bounds.left >= self.left) && (bounds.left <= self.right)) ||
+                ((self.left >= bounds.left) && (self.left <= bounds.right))
             );
             var inRight = (
-                ((bounds.right >= this.left) && (bounds.right <= this.right)) ||
-                ((this.right >= bounds.left) && (this.right <= bounds.right))
+                ((bounds.right >= self.left) && (bounds.right <= self.right)) ||
+                ((self.right >= bounds.left) && (self.right <= bounds.right))
             );
             intersects = ((inBottom || inTop) && (inLeft || inRight));
         }
+        // document me
+        if (options.worldBounds && !intersects) {
+            var world = options.worldBounds;
+            var width = world.getWidth();
+            var selfCrosses = !world.containsBounds(self);
+            var boundsCrosses = !world.containsBounds(bounds);
+            if (selfCrosses && !boundsCrosses) {
+                bounds = bounds.add(-width, 0);
+                intersects = self.intersectsBounds(bounds, {inclusive: options.inclusive});
+            } else if (boundsCrosses && !selfCrosses) {
+                self = self.add(-width, 0);
+                intersects = bounds.intersectsBounds(self, {inclusive: options.inclusive});                
+            }
+        }
         return intersects;
     },
     
@@ -577,8 +637,9 @@ OpenLayers.Bounds = OpenLayers.Class({
      *                       a different bounds value if this bounds is 
      *                       *entirely* outside of the maxExtent. If this 
      *                       bounds straddles the dateline (is part in/part 
-     *                       out of maxExtent), the returned bounds will be 
-     *                       merely a copy of this one.
+     *                       out of maxExtent), the returned bounds will always 
+     *                       cross the left edge of the given maxExtent.
+     *.
      */
     wrapDateLine: function(maxExtent, options) {    
         options = options || {};
@@ -589,18 +650,26 @@ OpenLayers.Bounds = OpenLayers.Class({
         var newBounds = this.clone();
     
         if (maxExtent) {
+            var width = maxExtent.getWidth();
 
-           //shift right?
-           while ( newBounds.left < maxExtent.left && 
-                   (newBounds.right - rightTolerance) <= maxExtent.left ) { 
-                newBounds = newBounds.add(maxExtent.getWidth(), 0);
-           }
+            //shift right?
+            while (newBounds.left < maxExtent.left && 
+                   newBounds.right - rightTolerance <= maxExtent.left ) { 
+                newBounds = newBounds.add(width, 0);
+            }
 
-           //shift left?
-           while ( (newBounds.left + leftTolerance) >= maxExtent.right && 
+            //shift left?
+            while (newBounds.left + leftTolerance >= maxExtent.right && 
                    newBounds.right > maxExtent.right ) { 
-                newBounds = newBounds.add(-maxExtent.getWidth(), 0);
-           }
+                newBounds = newBounds.add(-width, 0);
+            }
+           
+            // crosses right only? force left
+            var newLeft = newBounds.left + leftTolerance;
+            if (newLeft < maxExtent.right && newLeft > maxExtent.left && 
+                   newBounds.right - rightTolerance > maxExtent.right) {
+                newBounds = newBounds.add(-width, 0);
+            }
         }
                 
         return newBounds;
@@ -641,14 +710,8 @@ OpenLayers.Bounds.fromString = function(str, reverseAxisOrder) {
  */
 OpenLayers.Bounds.fromArray = function(bbox, reverseAxisOrder) {
     return reverseAxisOrder === true ?
-           new OpenLayers.Bounds(parseFloat(bbox[1]),
-                                 parseFloat(bbox[0]),
-                                 parseFloat(bbox[3]),
-                                 parseFloat(bbox[2])) :
-           new OpenLayers.Bounds(parseFloat(bbox[0]),
-                                 parseFloat(bbox[1]),
-                                 parseFloat(bbox[2]),
-                                 parseFloat(bbox[3]));
+           new OpenLayers.Bounds(bbox[1], bbox[0], bbox[3], bbox[2]) :
+           new OpenLayers.Bounds(bbox[0], bbox[1], bbox[2], bbox[3]);
 };
 
 /** 
@@ -657,7 +720,8 @@ OpenLayers.Bounds.fromArray = function(bbox, reverseAxisOrder) {
  *     from a size
  * 
  * Parameters:
- * size - {<OpenLayers.Size>} 
+ * size - {<OpenLayers.Size>|Object} OpenLayers.Size or an object with
+ *     a 'w' and 'h' properties.
  *
  * Returns:
  * {<OpenLayers.Bounds>} New bounds object built from the passed-in size.
diff --git a/lib/OpenLayers/BaseTypes/Class.js b/lib/OpenLayers/BaseTypes/Class.js
index a1f3495..b703464 100644
--- a/lib/OpenLayers/BaseTypes/Class.js
+++ b/lib/OpenLayers/BaseTypes/Class.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -50,48 +50,6 @@ OpenLayers.Class = function() {
 };
 
 /**
- * Property: isPrototype
- * *Deprecated*.  This is no longer needed and will be removed at 3.0.
- */
-OpenLayers.Class.isPrototype = function () {};
-
-/**
- * APIFunction: OpenLayers.create
- * *Deprecated*.  Old method to create an OpenLayers style class.  Use the
- *     <OpenLayers.Class> constructor instead.
- *
- * Returns:
- * An OpenLayers class
- */
-OpenLayers.Class.create = function() {
-    return function() {
-        if (arguments && arguments[0] != OpenLayers.Class.isPrototype) {
-            this.initialize.apply(this, arguments);
-        }
-    };
-};
-
-/**
- * APIFunction: inherit
- * *Deprecated*.  Old method to inherit from one or more OpenLayers style
- *     classes.  Use the <OpenLayers.Class> constructor instead.
- *
- * Parameters:
- * class - One or more classes can be provided as arguments
- *
- * Returns:
- * An object prototype
- */
-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:
diff --git a/lib/OpenLayers/BaseTypes/Date.js b/lib/OpenLayers/BaseTypes/Date.js
index 47ab010..f42b713 100644
--- a/lib/OpenLayers/BaseTypes/Date.js
+++ b/lib/OpenLayers/BaseTypes/Date.js
@@ -1,9 +1,13 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
+ * @requires OpenLayers/SingleFile.js
+ */
+
+/**
  * Namespace: OpenLayers.Date
  * Contains implementations of Date.parse and date.toISOString that match the
  *     ECMAScript 5 specification for parsing RFC 3339 dates.
@@ -87,7 +91,7 @@ OpenLayers.Date = {
      */
     parse: function(str) {
         var date;
-        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 match = str.match(/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:(?:T(\d{1,2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(?:[+-]\d{1,2}(?::(\d{2}))?)))|Z)?$/);
         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;
diff --git a/lib/OpenLayers/BaseTypes/Element.js b/lib/OpenLayers/BaseTypes/Element.js
index 329a19b..9a54b4d 100644
--- a/lib/OpenLayers/BaseTypes/Element.js
+++ b/lib/OpenLayers/BaseTypes/Element.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -36,50 +36,9 @@ OpenLayers.Element = {
     toggle: function() {
         for (var i=0, len=arguments.length; i<len; i++) {
             var element = OpenLayers.Util.getElement(arguments[i]);
-            var display = OpenLayers.Element.visible(element) ? 'hide' 
-                                                              : 'show';
-            OpenLayers.Element[display](element);
-        }
-    },
-
-
-    /**
-     * APIFunction: hide
-     * *Deprecated*. Hide element(s) passed in
-     * 
-     * Parameters:
-     * element - {DOMElement} Actually user can pass any number of elements
-     */
-    hide: function() {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", {
-            newMethod: "element.style.display = 'none';"
-        }));
-
-        for (var i=0, len=arguments.length; i<len; i++) {
-            var element = OpenLayers.Util.getElement(arguments[i]);
-            if (element) {
-                element.style.display = 'none';
-            }
-        }
-    },
-
-    /**
-     * APIFunction: show
-     * *Deprecated*. Show element(s) passed in
-     * 
-     * Parameters:
-     * element - {DOMElement} Actually user can pass any number of elements
-     */
-    show: function() {
-        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", {
-            newMethod: "element.style.display = '';"
-        }));
-
-        for (var i=0, len=arguments.length; i<len; i++) {
-            var element = OpenLayers.Util.getElement(arguments[i]);
-            if (element) {
-                element.style.display = '';
-            }
+            var display = OpenLayers.Element.visible(element) ? 'none' 
+                                                              : '';
+            element.style.display = display;
         }
     },
 
@@ -110,40 +69,6 @@ OpenLayers.Element = {
     },
 
     /**
-     * APIFunction: getDimensions
-     * *Deprecated*. Returns dimensions of the element passed in.
-     *  
-     * Parameters:
-     * element - {DOMElement}
-     * 
-     * Returns:
-     * {Object} Object with 'width' and 'height' properties which are the 
-     *          dimensions of the element passed in.
-     */
-    getDimensions: function(element) {
-        element = OpenLayers.Util.getElement(element);
-        if (OpenLayers.Element.getStyle(element, 'display') != 'none') {
-            return {width: element.offsetWidth, height: element.offsetHeight};
-        }
-    
-        // All *Width and *Height properties give 0 on elements with display none,
-        // so enable the element temporarily
-        var els = element.style;
-        var originalVisibility = els.visibility;
-        var originalPosition = els.position;
-        var originalDisplay = els.display;
-        els.visibility = 'hidden';
-        els.position = 'absolute';
-        els.display = '';
-        var originalWidth = element.clientWidth;
-        var originalHeight = element.clientHeight;
-        els.display = originalDisplay;
-        els.position = originalPosition;
-        els.visibility = originalVisibility;
-        return {width: originalWidth, height: originalHeight};
-    },
-
-    /**
      * Function: hasClass
      * Tests if an element has the given CSS class name.
      *
diff --git a/lib/OpenLayers/BaseTypes/LonLat.js b/lib/OpenLayers/BaseTypes/LonLat.js
index 16e3de4..892961f 100644
--- a/lib/OpenLayers/BaseTypes/LonLat.js
+++ b/lib/OpenLayers/BaseTypes/LonLat.js
@@ -1,12 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -29,17 +27,25 @@ OpenLayers.LonLat = OpenLayers.Class({
 
     /**
      * Constructor: OpenLayers.LonLat
-     * Create a new map location.
+     * Create a new map location. Coordinates can be passed either as two
+     * arguments, or as a single argument.
      *
-     * Parameters:
+     * Parameters (two arguments):
      * lon - {Number} The x-axis coordinate in map units.  If your map is in
      *     a geographic projection, this will be the Longitude.  Otherwise,
      *     it will be the x coordinate of the map location in your map units.
      * lat - {Number} The y-axis coordinate in map units.  If your map is in
      *     a geographic projection, this will be the Latitude.  Otherwise,
      *     it will be the y coordinate of the map location in your map units.
+     *
+     * Parameters (single argument):
+     * location - {Array(Float)} [lon, lat]
      */
     initialize: function(lon, lat) {
+        if (OpenLayers.Util.isArray(lon)) {
+            lat = lon[1];
+            lon = lon[0];
+        }
         this.lon = OpenLayers.Util.toFloat(lon);
         this.lat = OpenLayers.Util.toFloat(lat);
     },
@@ -91,9 +97,7 @@ OpenLayers.LonLat = OpenLayers.Class({
      */
     add:function(lon, lat) {
         if ( (lon == null) || (lat == null) ) {
-            var msg = OpenLayers.i18n("lonlatAddError");
-            OpenLayers.Console.error(msg);
-            return null;
+            throw new TypeError('LonLat.add cannot receive null values');
         }
         return new OpenLayers.LonLat(this.lon + OpenLayers.Util.toFloat(lon), 
                                      this.lat + OpenLayers.Util.toFloat(lat));
diff --git a/lib/OpenLayers/BaseTypes/Pixel.js b/lib/OpenLayers/BaseTypes/Pixel.js
index 5426bb8..55d07f4 100644
--- a/lib/OpenLayers/BaseTypes/Pixel.js
+++ b/lib/OpenLayers/BaseTypes/Pixel.js
@@ -1,12 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -70,7 +68,8 @@ OpenLayers.Pixel = OpenLayers.Class({
      * Determine whether one pixel is equivalent to another
      *
      * Parameters:
-     * px - {<OpenLayers.Pixel>}
+     * px - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an object with
+     *                                  a 'x' and 'y' properties.
      *
      * Returns:
      * {Boolean} The point passed in as parameter is equal to this. Note that
@@ -116,9 +115,7 @@ OpenLayers.Pixel = OpenLayers.Class({
      */
     add:function(x, y) {
         if ( (x == null) || (y == null) ) {
-            var msg = OpenLayers.i18n("pixelAddError");
-            OpenLayers.Console.error(msg);
-            return null;
+            throw new TypeError('Pixel.add cannot receive null values');
         }
         return new OpenLayers.Pixel(this.x + x, this.y + y);
     },
@@ -127,7 +124,8 @@ OpenLayers.Pixel = OpenLayers.Class({
     * APIMethod: offset
     * 
     * Parameters
-    * px - {<OpenLayers.Pixel>}
+    * px - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an object with
+    *                                  a 'x' and 'y' properties.
     * 
     * Returns:
     * {<OpenLayers.Pixel>} A new Pixel with this pixel's x&y augmented by the 
diff --git a/lib/OpenLayers/BaseTypes/Size.js b/lib/OpenLayers/BaseTypes/Size.js
index 4a0b135..ef4d12a 100644
--- a/lib/OpenLayers/BaseTypes/Size.js
+++ b/lib/OpenLayers/BaseTypes/Size.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -69,12 +69,12 @@ OpenLayers.Size = OpenLayers.Class({
      * Determine where this size is equal to another
      *
      * Parameters:
-     * sz - {<OpenLayers.Size>}
+     * sz - {<OpenLayers.Size>|Object} An OpenLayers.Size or an object with
+     *                                  a 'w' and 'h' properties.
      *
      * Returns: 
      * {Boolean} The passed in size has the same h and w properties as this one.
      * Note that if sz passed in is null, returns false.
-     *
      */
     equals:function(sz) {
         var equals = false;
diff --git a/lib/OpenLayers/Console.js b/lib/OpenLayers/Console.js
index 9d62ac1..823ba1c 100644
--- a/lib/OpenLayers/Console.js
+++ b/lib/OpenLayers/Console.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control.js b/lib/OpenLayers/Control.js
index e61d1cd..e585ce8 100644
--- a/lib/OpenLayers/Control.js
+++ b/lib/OpenLayers/Control.js
@@ -1,11 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
- * @requires OpenLayers/Console.js
  */
 
 /**
@@ -23,7 +22,6 @@
  * > var map = new OpenLayers.Map('map', { controls: [] });
  * >
  * > map.addControl(new OpenLayers.Control.PanZoomBar());
- * > map.addControl(new OpenLayers.Control.MouseToolbar());
  * > map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
  * > map.addControl(new OpenLayers.Control.Permalink());
  * > map.addControl(new OpenLayers.Control.Permalink('permalink'));
@@ -87,7 +85,7 @@ OpenLayers.Control = OpenLayers.Class({
 
     /** 
      * Property: allowSelection
-     * {Boolean} By deafault, controls do not allow selection, because
+     * {Boolean} By default, controls do not allow selection, because
      * it may interfere with map dragging. If this is true, OpenLayers
      * will not prevent selection of the control.
      * Default is false.
@@ -141,13 +139,8 @@ OpenLayers.Control = OpenLayers.Class({
      * APIProperty: events
      * {<OpenLayers.Events>} Events instance for listeners and triggering
      *     control specific events.
-     */
-    events: null,
-
-    /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * control.events.register(type, obj, listener);
      * (end)
@@ -165,7 +158,7 @@ OpenLayers.Control = OpenLayers.Class({
      * activate - Triggered when activated.
      * deactivate - Triggered when deactivated.
      */
-    EVENT_TYPES: ["activate", "deactivate"],
+    events: null,
 
     /**
      * Constructor: OpenLayers.Control
@@ -187,7 +180,7 @@ OpenLayers.Control = OpenLayers.Class({
         
         OpenLayers.Util.extend(this, options);
         
-        this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES);
+        this.events = new OpenLayers.Events(this);
         if(this.eventListeners instanceof Object) {
             this.events.on(this.eventListeners);
         }
diff --git a/lib/OpenLayers/Control/ArgParser.js b/lib/OpenLayers/Control/ArgParser.js
index 3ba0d49..abfd6b3 100644
--- a/lib/OpenLayers/Control/ArgParser.js
+++ b/lib/OpenLayers/Control/ArgParser.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -10,7 +10,7 @@
 
 /**
  * Class: OpenLayers.Control.ArgParser
- * The ArgParser control adds location bar querystring parsing functionality 
+ * The ArgParser control adds location bar query string parsing functionality 
  * to an OpenLayers Map.
  * When added to a Map control, on a page load/refresh, the Map will 
  * automatically take the href string and parse it for lon, lat, zoom, and 
@@ -22,20 +22,21 @@
 OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, {
 
     /**
-     * Parameter: center
+     * Property: center
      * {<OpenLayers.LonLat>}
      */
     center: null,
     
     /**
-     * Parameter: zoom
+     * Property: zoom
      * {int}
      */
     zoom: null,
 
     /**
-     * Parameter: layers 
-     * {Array(<OpenLayers.Layer>)}
+     * Property: layers
+     * {String} Each character represents the state of the corresponding layer 
+     *     on the map.
      */
     layers: null,
     
@@ -43,7 +44,6 @@ OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, {
      * APIProperty: displayProjection
      * {<OpenLayers.Projection>} Requires proj4js support. 
      *     Projection used when reading the coordinates from the URL. This will
-     *
      *     reproject the map coordinates from the URL into the map's
      *     projection.
      *
@@ -68,10 +68,10 @@ OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, {
         url = url || window.location.href;
         var parameters = OpenLayers.Util.getParameters(url);
 
-        // If we have an chchor in the url use it to split the url
+        // If we have an anchor in the url use it to split the url
         var index = url.indexOf('#');
         if (index > 0) {
-            // create an url to parce on the getParameters
+            // create an url to parse on the getParameters
             url = '?' + url.substring(index + 1, url.length);
 
             OpenLayers.Util.extend(parameters,
@@ -122,7 +122,7 @@ OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, {
                 this.center = new OpenLayers.LonLat(parseFloat(args.lon),
                                                     parseFloat(args.lat));
                 if (args.zoom) {
-                    this.zoom = parseInt(args.zoom);
+                    this.zoom = parseFloat(args.zoom);
                 }
     
                 // when we add a new baselayer to see when we can set the center
diff --git a/lib/OpenLayers/Control/Attribution.js b/lib/OpenLayers/Control/Attribution.js
index c0b5706..6e50ee6 100644
--- a/lib/OpenLayers/Control/Attribution.js
+++ b/lib/OpenLayers/Control/Attribution.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -25,6 +25,14 @@ OpenLayers.Control.Attribution =
     separator: ", ",
     
     /**
+     * APIProperty: template
+     * {String} Template for the attribution. This has to include the substring
+     *     "${layers}", which will be replaced by the layer specific
+     *     attributions, separated by <separator>. The default is "${layers}".
+     */
+    template: "${layers}",
+    
+    /**
      * Constructor: OpenLayers.Control.Attribution 
      * 
      * Parameters:
@@ -86,7 +94,9 @@ OpenLayers.Control.Attribution =
                     }
                 }
             } 
-            this.div.innerHTML = attributions.join(this.separator);
+            this.div.innerHTML = OpenLayers.String.format(this.template, {
+                layers: attributions.join(this.separator)
+            });
         }
     },
 
diff --git a/lib/OpenLayers/Control/Button.js b/lib/OpenLayers/Control/Button.js
index d5163ca..84699ee 100644
--- a/lib/OpenLayers/Control/Button.js
+++ b/lib/OpenLayers/Control/Button.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/CacheRead.js b/lib/OpenLayers/Control/CacheRead.js
new file mode 100644
index 0000000..b08928c
--- /dev/null
+++ b/lib/OpenLayers/Control/CacheRead.js
@@ -0,0 +1,156 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Control.js
+ */
+
+/**
+ * Class: OpenLayers.Control.CacheRead
+ * A control for using image tiles cached with <OpenLayers.Control.CacheWrite>
+ * from the browser's local storage.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Control>
+ */
+OpenLayers.Control.CacheRead = OpenLayers.Class(OpenLayers.Control, {
+    
+    /**
+     * APIProperty: fetchEvent
+     * {String} The layer event to listen to for replacing remote resource tile
+     *     URLs with cached data URIs. Supported values are "tileerror" (try
+     *     remote first, fall back to cached) and "tileloadstart" (try cache
+     *     first, fall back to remote). Default is "tileloadstart".
+     *
+     *     Note that "tileerror" will not work for CORS enabled images (see
+     *     https://developer.mozilla.org/en/CORS_Enabled_Image), i.e. layers
+     *     configured with a <OpenLayers.Tile.Image.crossOriginKeyword> in
+     *     <OpenLayers.Layer.Grid.tileOptions>.
+     */
+    fetchEvent: "tileloadstart",
+    
+    /**
+     * APIProperty: layers
+     * {Array(<OpenLayers.Layer.Grid>)}. Optional. If provided, only these
+     *     layers will receive tiles from the cache.
+     */
+    layers: null,
+    
+    /**
+     * APIProperty: autoActivate
+     * {Boolean} Activate the control when it is added to a map.  Default is
+     *     true.
+     */
+    autoActivate: true,
+
+    /**
+     * Constructor: OpenLayers.Control.CacheRead
+     *
+     * Parameters:
+     * options - {Object} Object with API properties for this control
+     */
+    
+    /** 
+     * Method: setMap
+     * Set the map property for the control. 
+     * 
+     * Parameters:
+     * map - {<OpenLayers.Map>} 
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+        var i, layers = this.layers || map.layers;
+        for (i=layers.length-1; i>=0; --i) {
+            this.addLayer({layer: layers[i]});
+        }
+        if (!this.layers) {
+            map.events.on({
+                addlayer: this.addLayer,
+                removeLayer: this.removeLayer,
+                scope: this
+            });
+        }
+    },
+    
+    /**
+     * Method: addLayer
+     * Adds a layer to the control. Once added, tiles requested for this layer
+     *     will be cached.
+     *
+     * Parameters:
+     * evt - {Object} Object with a layer property referencing an
+     *     <OpenLayers.Layer> instance
+     */
+    addLayer: function(evt) {
+        evt.layer.events.register(this.fetchEvent, this, this.fetch);        
+    },
+    
+    /**
+     * Method: removeLayer
+     * Removes a layer from the control. Once removed, tiles requested for this
+     *     layer will no longer be cached.
+     *
+     * Parameters:
+     * evt - {Object} Object with a layer property referencing an
+     *     <OpenLayers.Layer> instance
+     */
+    removeLayer: function(evt) {
+        evt.layer.events.unregister(this.fetchEvent, this, this.fetch);
+    },
+    
+    /**
+     * Method: fetch
+     * Listener to the <fetchEvent> event. Replaces a tile's url with a data
+     * URI from the cache.
+     *
+     * Parameters:
+     * evt - {Object} Event object with a tile property.
+     */
+    fetch: function(evt) {
+        if (this.active && window.localStorage &&
+                evt.tile instanceof OpenLayers.Tile.Image) {
+            var tile = evt.tile,
+                url = tile.url;
+            // deal with modified tile urls when both CacheWrite and CacheRead
+            // are active
+            if (!tile.layer.crossOriginKeyword && OpenLayers.ProxyHost &&
+                    url.indexOf(OpenLayers.ProxyHost) === 0) {
+                url = OpenLayers.Control.CacheWrite.urlMap[url];        
+            }
+            var dataURI = window.localStorage.getItem("olCache_" + url);
+            if (dataURI) {
+                tile.url = dataURI;
+                if (evt.type === "tileerror") {
+                    tile.setImgSrc(dataURI);
+                }
+            }
+        }
+    },
+    
+    /**
+     * Method: destroy
+     * The destroy method is used to perform any clean up before the control
+     * is dereferenced.  Typically this is where event listeners are removed
+     * to prevent memory leaks.
+     */
+    destroy: function() {
+        if (this.layers || this.map) {
+            var i, layers = this.layers || this.map.layers;
+            for (i=layers.length-1; i>=0; --i) {
+                this.removeLayer({layer: layers[i]});
+            }
+        }
+        if (this.map) {
+            this.map.events.un({
+                addlayer: this.addLayer,
+                removeLayer: this.removeLayer,
+                scope: this
+            });
+        }
+        OpenLayers.Control.prototype.destroy.apply(this, arguments);
+    },
+    
+    CLASS_NAME: "OpenLayers.Control.CacheRead"
+});
diff --git a/lib/OpenLayers/Control/CacheWrite.js b/lib/OpenLayers/Control/CacheWrite.js
new file mode 100644
index 0000000..8b4e787
--- /dev/null
+++ b/lib/OpenLayers/Control/CacheWrite.js
@@ -0,0 +1,245 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Request.js
+ * @requires OpenLayers/Console.js
+ */
+
+/**
+ * Class: OpenLayers.Control.CacheWrite
+ * A control for caching image tiles in the browser's local storage. The
+ * <OpenLayers.Control.CacheRead> control is used to fetch and use the cached
+ * tile images.
+ *
+ * Note: Before using this control on any layer that is not your own, make sure
+ * that the terms of service of the tile provider allow local storage of tiles.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Control>
+ */
+OpenLayers.Control.CacheWrite = OpenLayers.Class(OpenLayers.Control, {
+    
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * To register events in the constructor, configure <eventListeners>.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
+     *
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
+     * cachefull - Triggered when the cache is full. Listeners receive an
+     *     object with a tile property as first argument. The tile references
+     *     the tile that couldn't be cached.
+     */
+    
+    /**
+     * APIProperty: eventListeners
+     * {Object} Object with event listeners, keyed by event name. An optional
+     *     scope property defines the scope that listeners will be executed in.
+     */
+
+    /**
+     * APIProperty: layers
+     * {Array(<OpenLayers.Layer.Grid>)}. Optional. If provided, caching
+     *     will be enabled for these layers only, otherwise for all cacheable
+     *     layers.
+     */
+    layers: null,
+    
+    /**
+     * APIProperty: imageFormat
+     * {String} The image format used for caching. The default is "image/png".
+     *     Supported formats depend on the user agent. If an unsupported
+     *     <imageFormat> is provided, "image/png" will be used. For aerial
+     *     imagery, "image/jpeg" is recommended.
+     */
+    imageFormat: "image/png",
+    
+    /**
+     * Property: quotaRegEx
+     * {RegExp}
+     */
+    quotaRegEx: (/quota/i),
+    
+    /**
+     * Constructor: OpenLayers.Control.CacheWrite
+     *
+     * Parameters:
+     * options - {Object} Object with API properties for this control.
+     */
+
+    /** 
+     * Method: setMap
+     * Set the map property for the control. 
+     * 
+     * Parameters:
+     * map - {<OpenLayers.Map>} 
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+        var i, layers = this.layers || map.layers;
+        for (i=layers.length-1; i>=0; --i) {
+            this.addLayer({layer: layers[i]});
+        }
+        if (!this.layers) {
+            map.events.on({
+                addlayer: this.addLayer,
+                removeLayer: this.removeLayer,
+                scope: this
+            });
+        }
+    },
+    
+    /**
+     * Method: addLayer
+     * Adds a layer to the control. Once added, tiles requested for this layer
+     *     will be cached.
+     *
+     * Parameters:
+     * evt - {Object} Object with a layer property referencing an
+     *     <OpenLayers.Layer> instance
+     */
+    addLayer: function(evt) {
+        evt.layer.events.on({
+            tileloadstart: this.makeSameOrigin,
+            tileloaded: this.cache,
+            scope: this
+        });        
+    },
+    
+    /**
+     * Method: removeLayer
+     * Removes a layer from the control. Once removed, tiles requested for this
+     *     layer will no longer be cached.
+     *
+     * Parameters:
+     * evt - {Object} Object with a layer property referencing an
+     *     <OpenLayers.Layer> instance
+     */
+    removeLayer: function(evt) {
+        evt.layer.events.un({
+            tileloadstart: this.makeSameOrigin,
+            tileloaded: this.cache,
+            scope: this
+        });
+    },
+
+    /**
+     * Method: makeSameOrigin
+     * If the tile does not have CORS image loading enabled and is from a
+     * different origin, use OpenLayers.ProxyHost to make it a same origin url.
+     *
+     * Parameters:
+     * evt - {<OpenLayers.Event>}
+     */
+    makeSameOrigin: function(evt) {
+        if (this.active) {
+            var tile = evt.tile;
+            if (tile instanceof OpenLayers.Tile.Image &&
+                    !tile.crossOriginKeyword &&
+                    tile.url.substr(0, 5) !== "data:") {
+                var sameOriginUrl = OpenLayers.Request.makeSameOrigin(
+                    tile.url, OpenLayers.ProxyHost
+                );
+                OpenLayers.Control.CacheWrite.urlMap[sameOriginUrl] = tile.url;
+                tile.url = sameOriginUrl;
+            }
+        }
+    },
+    
+    /**
+     * Method: cache
+     * Adds a tile to the cache. When the cache is full, the "cachefull" event
+     * is triggered.
+     *
+     * Parameters:
+     * obj - {Object} Object with a tile property, tile being the
+     *     <OpenLayers.Tile.Image> with the data to add to the cache
+     */
+    cache: function(obj) {
+        if (this.active && window.localStorage) {
+            var tile = obj.tile;
+            if (tile instanceof OpenLayers.Tile.Image &&
+                    tile.url.substr(0, 5) !== 'data:') {
+                try {
+                    var canvasContext = tile.getCanvasContext();
+                    if (canvasContext) {
+                        var urlMap = OpenLayers.Control.CacheWrite.urlMap;
+                        var url = urlMap[tile.url] || tile.url;
+                        window.localStorage.setItem(
+                            "olCache_" + url,
+                            canvasContext.canvas.toDataURL(this.imageFormat)
+                        );
+                        delete urlMap[tile.url];
+                    }
+                } catch(e) {
+                    // local storage full or CORS violation
+                    var reason = e.name || e.message;
+                    if (reason && this.quotaRegEx.test(reason)) {
+                        this.events.triggerEvent("cachefull", {tile: tile});
+                    } else {
+                        OpenLayers.Console.error(e.toString());
+                    }
+                }
+            }
+        }
+    },
+    
+    /**
+     * Method: destroy
+     * The destroy method is used to perform any clean up before the control
+     * is dereferenced.  Typically this is where event listeners are removed
+     * to prevent memory leaks.
+     */
+    destroy: function() {
+        if (this.layers || this.map) {
+            var i, layers = this.layers || this.map.layers;
+            for (i=layers.length-1; i>=0; --i) {
+                this.removeLayer({layer: layers[i]});
+            }
+        }
+        if (this.map) {
+            this.map.events.un({
+                addlayer: this.addLayer,
+                removeLayer: this.removeLayer,
+                scope: this
+            });
+        }
+        OpenLayers.Control.prototype.destroy.apply(this, arguments);
+    },
+    
+    CLASS_NAME: "OpenLayers.Control.CacheWrite"
+});
+
+/**
+ * APIFunction: OpenLayers.Control.CacheWrite.clearCache
+ * Clears all tiles cached with <OpenLayers.Control.CacheWrite> from the cache.
+ */
+OpenLayers.Control.CacheWrite.clearCache = function() {
+    if (!window.localStorage) { return; }
+    var i, key;
+    for (i=window.localStorage.length-1; i>=0; --i) {
+        key = window.localStorage.key(i);
+        if (key.substr(0, 8) === "olCache_") {
+            window.localStorage.removeItem(key);
+        }
+    }
+};
+
+/**
+ * Property: OpenLayers.Control.CacheWrite.urlMap
+ * {Object} Mapping of same origin urls to cache url keys. Entries will be
+ *     deleted as soon as a tile was cached.
+ */
+OpenLayers.Control.CacheWrite.urlMap = {};
+
+
diff --git a/lib/OpenLayers/Control/DragFeature.js b/lib/OpenLayers/Control/DragFeature.js
index 012ac76..af81062 100644
--- a/lib/OpenLayers/Control/DragFeature.js
+++ b/lib/OpenLayers/Control/DragFeature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
diff --git a/lib/OpenLayers/Control/DragPan.js b/lib/OpenLayers/Control/DragPan.js
index b46c15e..1dc3eb5 100644
--- a/lib/OpenLayers/Control/DragPan.js
+++ b/lib/OpenLayers/Control/DragPan.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -47,7 +47,7 @@ OpenLayers.Control.DragPan = OpenLayers.Class(OpenLayers.Control, {
 
     /**
      * Property: kinetic
-     * {OpenLayers.Kinetic} The OpenLayers.Kinetic object.
+     * {<OpenLayers.Kinetic>} The OpenLayers.Kinetic object.
      */
     kinetic: null,
 
@@ -57,6 +57,8 @@ OpenLayers.Control.DragPan = OpenLayers.Class(OpenLayers.Control, {
      *     set to true or to an object. If set to an object this
      *     object will be passed to the {<OpenLayers.Kinetic>}
      *     constructor. Defaults to false.
+     *     If you set this property, you should ensure that 
+     *     OpenLayers/Kinetic.js is included in your build config
      */
     enableKinetic: false,
 
diff --git a/lib/OpenLayers/Control/DrawFeature.js b/lib/OpenLayers/Control/DrawFeature.js
index eb84329..62b5fab 100644
--- a/lib/OpenLayers/Control/DrawFeature.js
+++ b/lib/OpenLayers/Control/DrawFeature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -31,13 +31,19 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
      */
     callbacks: null,
     
-    /**
-     * Constant: EVENT_TYPES
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
      *
-     * Supported event types:
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * featureadded - Triggered when a feature is added
      */
-    EVENT_TYPES: ["featureadded"],
     
     /**
      * APIProperty: multi
@@ -67,13 +73,6 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
      * options - {Object} 
      */
     initialize: function(layer, handler, options) {
-        
-        // concatenate events specific to vector with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.DrawFeature.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
-        
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
         this.callbacks = OpenLayers.Util.extend(
             {
@@ -93,6 +92,11 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
         );
         this.layer = layer;
         this.handlerOptions = this.handlerOptions || {};
+        this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(
+            this.handlerOptions.layerOptions, {
+                renderers: layer.renderers, rendererOptions: layer.rendererOptions
+            }
+        );
         if (!("multi" in this.handlerOptions)) {
             this.handlerOptions.multi = this.multi;
         }
diff --git a/lib/OpenLayers/Control/EditingToolbar.js b/lib/OpenLayers/Control/EditingToolbar.js
index b56188b..4cd4f85 100644
--- a/lib/OpenLayers/Control/EditingToolbar.js
+++ b/lib/OpenLayers/Control/EditingToolbar.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -25,6 +25,13 @@ OpenLayers.Control.EditingToolbar = OpenLayers.Class(
   OpenLayers.Control.Panel, {
 
     /**
+     * APIProperty: citeCompliant
+     * {Boolean} If set to true, coordinates of features drawn in a map extent
+     * crossing the date line won't exceed the world bounds. Default is false.
+     */
+    citeCompliant: false,
+
+    /**
      * Constructor: OpenLayers.Control.EditingToolbar
      * Create an editing toolbar for a given layer. 
      *
@@ -39,9 +46,18 @@ OpenLayers.Control.EditingToolbar = OpenLayers.Class(
           [ new OpenLayers.Control.Navigation() ]
         );  
         var controls = [
-          new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'}),
-          new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'}),
-          new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'})
+            new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {
+                displayClass: 'olControlDrawFeaturePoint',
+                handlerOptions: {citeCompliant: this.citeCompliant}
+            }),
+            new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Path, {
+                displayClass: 'olControlDrawFeaturePath',
+                handlerOptions: {citeCompliant: this.citeCompliant}
+            }),
+            new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon, {
+                displayClass: 'olControlDrawFeaturePolygon',
+                handlerOptions: {citeCompliant: this.citeCompliant}
+            })
         ];
         this.addControls(controls);
     },
diff --git a/lib/OpenLayers/Control/Geolocate.js b/lib/OpenLayers/Control/Geolocate.js
index 6745ab7..0a1e18e 100644
--- a/lib/OpenLayers/Control/Geolocate.js
+++ b/lib/OpenLayers/Control/Geolocate.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -22,15 +22,25 @@
  */
 OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
-     * Supported event types:
-     *  - *locationupdated* Triggered when browser return a new position
-     *  - *locationfailed* Triggered when geolocation has failed
-     *  - *locationuncapable* Triggered when control is activated on a browser
-     *  which doesn't support geolocation
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
+     *
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
+     * locationupdated - Triggered when browser return a new position. Listeners will 
+     *     receive an object with a 'position' property which is the browser.geolocation.position
+     *     native object, as well as a 'point' property which is the location transformed in the 
+     *     current map projection.
+     * locationfailed - Triggered when geolocation has failed
+     * locationuncapable - Triggered when control is activated on a browser
+     *     which doesn't support geolocation
      */
-    EVENT_TYPES: ["locationupdated", "locationfailed", "locationuncapable"],
 
     /**
      * Property: geolocation
@@ -63,15 +73,6 @@ OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, {
      * Create a new control to deal with browser geolocation API
      *
      */
-    initialize: function(options) {
-        // concatenate events specific to this control with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.Geolocate.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
-        this.geolocationOptions = {};
-        OpenLayers.Control.prototype.initialize.apply(this, [options]);
-    },
 
     /**
      * Method: destroy
diff --git a/lib/OpenLayers/Control/GetFeature.js b/lib/OpenLayers/Control/GetFeature.js
index ee2896d..368ea9c 100644
--- a/lib/OpenLayers/Control/GetFeature.js
+++ b/lib/OpenLayers/Control/GetFeature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -169,10 +169,17 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
      */
     filterType: OpenLayers.Filter.Spatial.BBOX,
 
-    /**
-     * Constant: EVENT_TYPES
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
      *
-     * Supported event types:
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * beforefeatureselected - Triggered when <click> is true before a
      *      feature is selected. The event object has a feature property with
      *      the feature about to select
@@ -197,9 +204,6 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
      * outfeature - Triggered when <hover> is true and the mouse moves
      *      moved away from a hover-selected feature
      */
-    EVENT_TYPES: ["featureselected", "featuresselected", "featureunselected", 
-        "clickout", "beforefeatureselected", "beforefeaturesselected", 
-        "hoverfeature", "outfeature"],
 
     /**
      * Constructor: OpenLayers.Control.GetFeature
@@ -211,12 +215,6 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
      *     made)
      */
     initialize: function(options) {
-        // concatenate events specific to vector with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.GetFeature.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
-
         options.handlerOptions = options.handlerOptions || {};
 
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
@@ -243,7 +241,8 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
             this.handlers.hover = new OpenLayers.Handler.Hover(
                 this, {'move': this.cancelHover, 'pause': this.selectHover},
                 OpenLayers.Util.extend(this.handlerOptions.hover, {
-                    'delay': 250
+                    'delay': 250,
+                    'pixelTolerance': 2
                 })
             );
         }
@@ -304,17 +303,20 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
      * Callback from the handlers.box set up when <box> selection is on
      *
      * Parameters:
-     * position - {<OpenLayers.Bounds>}  
+     * position - {<OpenLayers.Bounds>|Object} An OpenLayers.Bounds or
+     * an object with a 'left', 'bottom', 'right' and 'top' properties.
      */
     selectBox: function(position) {
         var bounds;
         if (position instanceof OpenLayers.Bounds) {
-            var minXY = this.map.getLonLatFromPixel(
-                new OpenLayers.Pixel(position.left, position.bottom)
-            );
-            var maxXY = this.map.getLonLatFromPixel(
-                new OpenLayers.Pixel(position.right, position.top)
-            );
+            var minXY = this.map.getLonLatFromPixel({
+                x: position.left,
+                y: position.bottom
+            });
+            var maxXY = this.map.getLonLatFromPixel({
+                x: position.right,
+                y: position.top
+            });
             bounds = new OpenLayers.Bounds(
                 minXY.lon, minXY.lat, maxXY.lon, maxXY.lat
             );
@@ -331,11 +333,11 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
     },
     
     /**
-     * Method selectHover
+     * Method: selectHover
      * Callback from the handlers.hover set up when <hover> selection is on
      *
      * Parameters:
-     * evt {Object} - event object with an xy property
+     * evt - {Object} event object with an xy property
      */
     selectHover: function(evt) {
         var bounds = this.pixelToBounds(evt.xy);
@@ -457,7 +459,7 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
      * Sets the multiple and toggle modifiers according to the current event
      * 
      * Parameters:
-     * evt {<OpenLayers.Event>}
+     * evt - {<OpenLayers.Event>}
      */
     setModifiers: function(evt) {
         this.modifiers = {
diff --git a/lib/OpenLayers/Control/Graticule.js b/lib/OpenLayers/Control/Graticule.js
index a3af87f..e393c4b 100644
--- a/lib/OpenLayers/Control/Graticule.js
+++ b/lib/OpenLayers/Control/Graticule.js
@@ -1,11 +1,14 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Control.js
  * @requires OpenLayers/Lang.js
+ * @requires OpenLayers/Rule.js
+ * @requires OpenLayers/StyleMap.js
+ * @requires OpenLayers/Layer/Vector.js
  */
 
 /**
@@ -98,7 +101,7 @@ OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, {
 
     /**
      * Property: gratLayer
-     * {OpenLayers.Layer.Vector} vector layer used to draw the graticule on
+     * {<OpenLayers.Layer.Vector>} vector layer used to draw the graticule on
      */
     gratLayer: null,
 
@@ -234,8 +237,8 @@ OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, {
         for (var i=0; i<this.intervals.length; ++i) {
             llInterval = this.intervals[i];   //could do this for both x and y??
             var delta = llInterval/2;  
-            var p1 = mapCenterLL.offset(new OpenLayers.Pixel(-delta, -delta));  //test coords in EPSG:4326 space
-            var p2 = mapCenterLL.offset(new OpenLayers.Pixel( delta,  delta));
+            var p1 = mapCenterLL.offset({x: -delta, y: -delta});  //test coords in EPSG:4326 space
+            var p2 = mapCenterLL.offset({x: delta, y: delta});
             OpenLayers.Projection.transform(p1, llProj, mapProj); // convert them back to map projection
             OpenLayers.Projection.transform(p2, llProj, mapProj);
             var distSq = (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y);
@@ -261,13 +264,13 @@ OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, {
         var newPoint = mapCenterLL.clone();
         var mapXY;
         do {
-            newPoint = newPoint.offset(new OpenLayers.Pixel(0,llInterval));
+            newPoint = newPoint.offset({x: 0, y: llInterval});
             mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj);
             centerLonPoints.unshift(newPoint);
         } while (mapBounds.containsPixel(mapXY) && ++iter<1000);
         newPoint = mapCenterLL.clone();
         do {          
-            newPoint = newPoint.offset(new OpenLayers.Pixel(0,-llInterval));
+            newPoint = newPoint.offset({x: 0, y: -llInterval});
             mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj);
             centerLonPoints.push(newPoint);
         } while (mapBounds.containsPixel(mapXY) && ++iter<1000);
@@ -277,13 +280,13 @@ OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, {
         var centerLatPoints = [mapCenterLL.clone()];
         newPoint = mapCenterLL.clone();
         do {
-            newPoint = newPoint.offset(new OpenLayers.Pixel(-llInterval, 0));
+            newPoint = newPoint.offset({x: -llInterval, y: 0});
             mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj);
             centerLatPoints.unshift(newPoint);
         } while (mapBounds.containsPixel(mapXY) && ++iter<1000);
         newPoint = mapCenterLL.clone();
         do {          
-            newPoint = newPoint.offset(new OpenLayers.Pixel(llInterval, 0));
+            newPoint = newPoint.offset({x: llInterval, y: 0});
             mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj);
             centerLatPoints.push(newPoint);
         } while (mapBounds.containsPixel(mapXY) && ++iter<1000);
diff --git a/lib/OpenLayers/Control/KeyboardDefaults.js b/lib/OpenLayers/Control/KeyboardDefaults.js
index 22d9033..b973b3d 100644
--- a/lib/OpenLayers/Control/KeyboardDefaults.js
+++ b/lib/OpenLayers/Control/KeyboardDefaults.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -35,6 +35,15 @@ OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, {
     slideFactor: 75,
 
     /**
+     * APIProperty: observeElement
+     * {DOMelement|String} The DOM element to handle keys for. You
+     *     can use the map div here, to have the navigation keys
+     *     work when the map div has the focus. If undefined the
+     *     document is used.
+     */
+    observeElement: null,
+
+    /**
      * Constructor: OpenLayers.Control.KeyboardDefaults
      */
         
@@ -43,8 +52,11 @@ OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, {
      * Create handler.
      */
     draw: function() {
-        this.handler = new OpenLayers.Handler.Keyboard( this, { 
-                                "keydown": this.defaultKeyPress });
+        var observeElement = this.observeElement || document;
+        this.handler = new OpenLayers.Handler.Keyboard( this,
+                {"keydown": this.defaultKeyPress},
+                {observeElement: observeElement}
+        );
     },
     
     /**
@@ -59,9 +71,10 @@ OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, {
      *    http://unixpapa.com/js/key.html
      *
      * Parameters:
-     * code - {Integer} 
+     * evt - {Event} 
      */
     defaultKeyPress: function (evt) {
+        var size, handled = true;
         switch(evt.keyCode) {
             case OpenLayers.Event.KEY_LEFT:
                 this.map.pan(-this.slideFactor, 0);
@@ -77,19 +90,19 @@ OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, {
                 break;
             
             case 33: // Page Up. Same in all browsers.
-                var size = this.map.getSize();
+                size = this.map.getSize();
                 this.map.pan(0, -0.75*size.h);
                 break;
             case 34: // Page Down. Same in all browsers.
-                var size = this.map.getSize();
+                size = this.map.getSize();
                 this.map.pan(0, 0.75*size.h);
                 break; 
             case 35: // End. Same in all browsers.
-                var size = this.map.getSize();
+                size = this.map.getSize();
                 this.map.pan(0.75*size.w, 0);
                 break; 
             case 36: // Home. Same in all browsers.
-                var size = this.map.getSize();
+                size = this.map.getSize();
                 this.map.pan(-0.75*size.w, 0);
                 break; 
 
@@ -105,7 +118,14 @@ OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, {
             case 95:  // -/_ (some ASCII)
                 this.map.zoomOut();
                 break; 
-        } 
+            default:
+                handled = false;
+        }
+        if (handled) {
+            // prevent browser default not to move the page
+            // when moving the page with the keyboard
+            OpenLayers.Event.stop(evt);
+        }
     },
 
     CLASS_NAME: "OpenLayers.Control.KeyboardDefaults"
diff --git a/lib/OpenLayers/Control/LayerSwitcher.js b/lib/OpenLayers/Control/LayerSwitcher.js
index 4186445..b8524ef 100644
--- a/lib/OpenLayers/Control/LayerSwitcher.js
+++ b/lib/OpenLayers/Control/LayerSwitcher.js
@@ -1,12 +1,13 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /** 
  * @requires OpenLayers/Control.js
  * @requires OpenLayers/Lang.js
- * @requires Rico/Corner.js
+ * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Events/buttonclick.js
  */
 
 /**
@@ -28,9 +29,13 @@ OpenLayers.Control.LayerSwitcher =
     /**
      * APIProperty: roundedCorner
      * {Boolean} If true the Rico library is used for rounding the corners
-     *     of the layer switcher div, defaults to true.
+     *     of the layer switcher div, defaults to false. *Deprecated*. Use
+     *     CSS3's border-radius instead. If this option is set to true the
+     *     Rico/Corner.js script must be loaded in the page, and therefore
+     *     listed in the build profile.
+     *
      */
-    roundedCorner: true,
+    roundedCorner: false,
 
     /**  
      * APIProperty: roundedCornerColor
@@ -64,7 +69,7 @@ OpenLayers.Control.LayerSwitcher =
 
     /** 
      * Property: baseLayers
-     * {Array(<OpenLayers.Layer>)}
+     * {Array(Object)}
      */
     baseLayers: null,
     
@@ -83,7 +88,7 @@ OpenLayers.Control.LayerSwitcher =
 
     /** 
      * Property: dataLayers
-     * {Array(<OpenLayers.Layer>)} 
+     * {Array(Object)} 
      */
     dataLayers: null,
 
@@ -115,6 +120,10 @@ OpenLayers.Control.LayerSwitcher =
     initialize: function(options) {
         OpenLayers.Control.prototype.initialize.apply(this, arguments);
         this.layerStates = [];
+        
+        if(this.roundedCorner) {
+            OpenLayers.Console.warn('roundedCorner option is deprecated');
+        }
     },
 
     /**
@@ -122,22 +131,19 @@ OpenLayers.Control.LayerSwitcher =
      */    
     destroy: function() {
         
-        OpenLayers.Event.stopObservingElement(this.div);
-
-        OpenLayers.Event.stopObservingElement(this.minimizeDiv);
-        OpenLayers.Event.stopObservingElement(this.maximizeDiv);
-
         //clear out layers info and unregister their events 
         this.clearLayersArray("base");
         this.clearLayersArray("data");
         
         this.map.events.un({
-            "addlayer": this.redraw,
-            "changelayer": this.redraw,
-            "removelayer": this.redraw,
-            "changebaselayer": this.redraw,
+            buttonclick: this.onButtonClick,
+            addlayer: this.redraw,
+            changelayer: this.redraw,
+            removelayer: this.redraw,
+            changebaselayer: this.redraw,
             scope: this
         });
+        this.events.unregister("buttonclick", this, this.onButtonClick);
         
         OpenLayers.Control.prototype.destroy.apply(this, arguments);
     },
@@ -152,12 +158,18 @@ OpenLayers.Control.LayerSwitcher =
         OpenLayers.Control.prototype.setMap.apply(this, arguments);
 
         this.map.events.on({
-            "addlayer": this.redraw,
-            "changelayer": this.redraw,
-            "removelayer": this.redraw,
-            "changebaselayer": this.redraw,
+            addlayer: this.redraw,
+            changelayer: this.redraw,
+            removelayer: this.redraw,
+            changebaselayer: this.redraw,
             scope: this
         });
+        if (this.outsideViewport) {
+            this.events.attachToElement(this.div);
+            this.events.register("buttonclick", this, this.onButtonClick);
+        } else {
+            this.map.events.register("buttonclick", this, this.onButtonClick);
+        }
     },
 
     /**
@@ -184,6 +196,34 @@ OpenLayers.Control.LayerSwitcher =
         return this.div;
     },
 
+    /**
+     * Method: onButtonClick
+     *
+     * Parameters:
+     * evt - {Event}
+     */
+    onButtonClick: function(evt) {
+        var button = evt.buttonElement;
+        if (button === this.minimizeDiv) {
+            this.minimizeControl();
+        } else if (button === this.maximizeDiv) {
+            this.maximizeControl();
+        } else if (button._layerSwitcher === this.id) {
+            if (button["for"]) {
+                button = document.getElementById(button["for"]);
+            }
+            if (!button.disabled) {
+                if (button.type == "radio") {
+                    button.checked = true;
+                    this.map.setBaseLayer(this.map.getLayer(button._layer));
+                } else {
+                    button.checked = !button.checked;
+                    this.updateMap();
+                }
+            }
+        }
+    },
+
     /** 
      * Method: clearLayersArray
      * User specifies either "base" or "data". we then clear all the
@@ -193,14 +233,6 @@ OpenLayers.Control.LayerSwitcher =
      * layersType - {String}  
      */
     clearLayersArray: function(layersType) {
-        var layers = this[layersType + "Layers"];
-        if (layers) {
-            for(var i=0, len=layers.length; i<len ; i++) {
-                var layer = layers[i];
-                OpenLayers.Event.stopObservingElement(layer.inputElem);
-                OpenLayers.Event.stopObservingElement(layer.labelSpan);
-            }
-        }
         this[layersType + "LayersDiv"].innerHTML = "";
         this[layersType + "Layers"] = [];
     },
@@ -300,33 +332,26 @@ OpenLayers.Control.LayerSwitcher =
                 inputElem.value = layer.name;
                 inputElem.checked = checked;
                 inputElem.defaultChecked = checked;
+                inputElem.className = "olButton";
+                inputElem._layer = layer.id;
+                inputElem._layerSwitcher = this.id;
 
                 if (!baseLayer && !layer.inRange) {
                     inputElem.disabled = true;
                 }
-                var context = {
-                    'inputElem': inputElem,
-                    'layer': layer,
-                    'layerSwitcher': this
-                };
-                OpenLayers.Event.observe(inputElem, "mouseup", 
-                    OpenLayers.Function.bindAsEventListener(this.onInputClick,
-                                                            context)
-                );
                 
                 // create span
-                var labelSpan = document.createElement("span");
-                OpenLayers.Element.addClass(labelSpan, "labelSpan");
+                var labelSpan = document.createElement("label");
+                labelSpan["for"] = inputElem.id;
+                OpenLayers.Element.addClass(labelSpan, "labelSpan olButton");
+                labelSpan._layer = layer.id;
+                labelSpan._layerSwitcher = this.id;
                 if (!baseLayer && !layer.inRange) {
                     labelSpan.style.color = "gray";
                 }
                 labelSpan.innerHTML = layer.name;
                 labelSpan.style.verticalAlign = (baseLayer) ? "bottom" 
                                                             : "baseline";
-                OpenLayers.Event.observe(labelSpan, "click", 
-                    OpenLayers.Function.bindAsEventListener(this.onInputClick,
-                                                            context)
-                );
                 // create line break
                 var br = document.createElement("br");
     
@@ -358,46 +383,6 @@ OpenLayers.Control.LayerSwitcher =
     },
 
     /** 
-     * Method:
-     * A label has been clicked, check or uncheck its corresponding input
-     * 
-     * Parameters:
-     * e - {Event} 
-     *
-     * Context:  
-     *  - {DOMElement} inputElem
-     *  - {<OpenLayers.Control.LayerSwitcher>} layerSwitcher
-     *  - {<OpenLayers.Layer>} layer
-     */
-
-    onInputClick: function(e) {
-
-        if (!this.inputElem.disabled) {
-            if (this.inputElem.type == "radio") {
-                this.inputElem.checked = true;
-                this.layer.map.setBaseLayer(this.layer);
-            } else {
-                this.inputElem.checked = !this.inputElem.checked;
-                this.layerSwitcher.updateMap();
-            }
-        }
-        OpenLayers.Event.stop(e);
-    },
-    
-    /**
-     * Method: onLayerClick
-     * Need to update the map accordingly whenever user clicks in either of
-     *     the layers.
-     * 
-     * Parameters: 
-     * e - {Event} 
-     */
-    onLayerClick: function(e) {
-        this.updateMap();
-    },
-
-
-    /** 
      * Method: updateMap
      * Cycles through the loaded data and base layer input arrays and makes
      *     the necessary calls to the Map object such that that the map's 
@@ -489,16 +474,6 @@ OpenLayers.Control.LayerSwitcher =
      */
     loadContents: function() {
 
-        //configure main div
-
-        OpenLayers.Event.observe(this.div, "mouseup", 
-            OpenLayers.Function.bindAsEventListener(this.mouseUp, this));
-        OpenLayers.Event.observe(this.div, "click",
-                      this.ignoreEvent);
-        OpenLayers.Event.observe(this.div, "mousedown",
-            OpenLayers.Function.bindAsEventListener(this.mouseDown, this));
-        OpenLayers.Event.observe(this.div, "dblclick", this.ignoreEvent);
-
         // layers list div        
         this.layersDiv = document.createElement("div");
         this.layersDiv.id = this.id + "_layersDiv";
@@ -542,81 +517,32 @@ OpenLayers.Control.LayerSwitcher =
             OpenLayers.Rico.Corner.changeOpacity(this.layersDiv, 0.75);
         }
 
-        var imgLocation = OpenLayers.Util.getImagesLocation();
-        var sz = new OpenLayers.Size(18,18);        
-
         // maximize button div
-        var img = imgLocation + 'layer-switcher-maximize.png';
+        var img = OpenLayers.Util.getImageLocation('layer-switcher-maximize.png');
         this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(
                                     "OpenLayers_Control_MaximizeDiv", 
                                     null, 
-                                    sz, 
+                                    null, 
                                     img, 
                                     "absolute");
-        OpenLayers.Element.addClass(this.maximizeDiv, "maximizeDiv");
+        OpenLayers.Element.addClass(this.maximizeDiv, "maximizeDiv olButton");
         this.maximizeDiv.style.display = "none";
-        OpenLayers.Event.observe(this.maximizeDiv, "click", 
-            OpenLayers.Function.bindAsEventListener(this.maximizeControl, this)
-        );
         
         this.div.appendChild(this.maximizeDiv);
 
         // minimize button div
-        var img = imgLocation + 'layer-switcher-minimize.png';
-        var sz = new OpenLayers.Size(18,18);        
+        var img = OpenLayers.Util.getImageLocation('layer-switcher-minimize.png');
         this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv(
                                     "OpenLayers_Control_MinimizeDiv", 
                                     null, 
-                                    sz, 
+                                    null, 
                                     img, 
                                     "absolute");
-        OpenLayers.Element.addClass(this.minimizeDiv, "minimizeDiv");
+        OpenLayers.Element.addClass(this.minimizeDiv, "minimizeDiv olButton");
         this.minimizeDiv.style.display = "none";
-        OpenLayers.Event.observe(this.minimizeDiv, "click", 
-            OpenLayers.Function.bindAsEventListener(this.minimizeControl, this)
-        );
 
         this.div.appendChild(this.minimizeDiv);
     },
     
-    /** 
-     * Method: ignoreEvent
-     * 
-     * Parameters:
-     * evt - {Event} 
-     */
-    ignoreEvent: function(evt) {
-        OpenLayers.Event.stop(evt);
-    },
-
-    /** 
-     * Method: mouseDown
-     * Register a local 'mouseDown' flag so that we'll know whether or not
-     *     to ignore a mouseUp event
-     * 
-     * Parameters:
-     * evt - {Event}
-     */
-    mouseDown: function(evt) {
-        this.isMouseDown = true;
-        this.ignoreEvent(evt);
-    },
-
-    /** 
-     * Method: mouseUp
-     * If the 'isMouseDown' flag has been set, that means that the drag was 
-     *     started from within the LayerSwitcher control, and thus we can 
-     *     ignore the mouseup. Otherwise, let the Event continue.
-     *  
-     * Parameters:
-     * evt - {Event} 
-     */
-    mouseUp: function(evt) {
-        if (this.isMouseDown) {
-            this.isMouseDown = false;
-            this.ignoreEvent(evt);
-        }
-    },
-
     CLASS_NAME: "OpenLayers.Control.LayerSwitcher"
 });
diff --git a/lib/OpenLayers/Control/Measure.js b/lib/OpenLayers/Control/Measure.js
index 172317c..bae9df3 100644
--- a/lib/OpenLayers/Control/Measure.js
+++ b/lib/OpenLayers/Control/Measure.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -17,18 +17,17 @@
  */
 OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * control.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.
-     *
-     * Supported control event types (in addition to those from <OpenLayers.Control>):
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * measure - Triggered when a measurement sketch is complete.  Listeners
      *      will receive an event with measure, units, order, and geometry
      *      properties.
@@ -37,7 +36,6 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
      *      measurement sketch is modified.  Listeners receive an event with measure,
      *      units, order, and geometry.
      */
-    EVENT_TYPES: ['measure', 'measurepartial'],
 
     /**
      * APIProperty: handlerOptions
@@ -120,11 +118,6 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
      * options - {Object} 
      */
     initialize: function(handler, options) {
-        // concatenate events specific to measure with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.Measure.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
         var callbacks = {done: this.measureComplete,
             point: this.measurePartial};
@@ -238,8 +231,8 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
      * mouseposition. feature - {<OpenLayers.Feature.Vector>} The sketch feature.
      */
     measureImmediate : function(point, feature, drawing) {
-        if (drawing && this.delayedTrigger === null &&
-                                !this.handler.freehandMode(this.handler.evt)) {
+        if (drawing && !this.handler.freehandMode(this.handler.evt)) {
+            this.cancelDelay();
             this.measure(feature.geometry, "measurepartial");
         }
     },
diff --git a/lib/OpenLayers/Control/ModifyFeature.js b/lib/OpenLayers/Control/ModifyFeature.js
index 3982cb1..4dc2347 100644
--- a/lib/OpenLayers/Control/ModifyFeature.js
+++ b/lib/OpenLayers/Control/ModifyFeature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -138,6 +138,13 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
     mode: null,
 
     /**
+     * APIProperty: createVertices
+     * {Boolean} Create new vertices by dragging the virtual vertices
+     *     in the middle of each edge. Default is true.
+     */
+    createVertices: true,
+
+    /**
      * Property: modified
      * {Boolean} The currently selected feature has been modified.
      */
@@ -239,7 +246,6 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
         // configure the drag control
         var dragOptions = {
             geometryTypes: ["OpenLayers.Geometry.Point"],
-            snappingOptions: this.snappingOptions,
             onStart: function(feature, pixel) {
                 control.dragStart.apply(control, [feature, pixel]);
             },
@@ -376,7 +382,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
     },
 
     /**
-     * Method: unselectFeature
+     * APIMethod: unselectFeature
      * Called when the select feature control unselects a feature.
      *
      * Parameters:
@@ -610,7 +616,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
      *     the mouse is over a vertex.
      *
      * Parameters:
-     * {Integer} Key code corresponding to the keypress event.
+     * evt - {Event} Keypress event.
      */
     handleKeypress: function(evt) {
         var code = evt.keyCode;
@@ -677,7 +683,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
                 }
                 
                 // add virtual vertices in the middle of each edge
-                if(geometry.CLASS_NAME != "OpenLayers.Geometry.MultiPoint") {
+                if (control.createVertices && geometry.CLASS_NAME != "OpenLayers.Geometry.MultiPoint") {
                     for(i=0, len=geometry.components.length; i<len-1; ++i) {
                         var prevVertex = geometry.components[i];
                         var nextVertex = geometry.components[i + 1];
@@ -721,6 +727,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
         };
         origin._sketch = true;
         this.dragHandle = origin;
+        this.dragHandle.renderIntent = this.vertexRenderIntent;
         this.layer.addFeatures([this.dragHandle], {silent: true});
     },
 
@@ -773,6 +780,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
         };
         radius._sketch = true;
         this.radiusHandle = radius;
+        this.radiusHandle.renderIntent = this.vertexRenderIntent;
         this.layer.addFeatures([this.radiusHandle], {silent: true});
     },
 
diff --git a/lib/OpenLayers/Control/MouseDefaults.js b/lib/OpenLayers/Control/MouseDefaults.js
deleted file mode 100644
index cc71164..0000000
--- a/lib/OpenLayers/Control/MouseDefaults.js
+++ /dev/null
@@ -1,368 +0,0 @@
-/* Copyright (c) 2006-2011 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
- */
-
-/**
- * Class: OpenLayers.Control.MouseDefaults
- * This class is DEPRECATED in 2.4 and will be removed by 3.0.
- * If you need this functionality, use <OpenLayers.Control.Navigation> 
- * instead!!!
- *
- * This class is DEPRECATED in 2.4 and will be removed by 3.0.
- *     If you need this functionality, use Control.Navigation instead!!!
- *
- * Inherits from:
- *  - <OpenLayers.Control>
- */
-OpenLayers.Control.MouseDefaults = OpenLayers.Class(OpenLayers.Control, {
-
-    /** WARNING WARNING WARNING!!!
-        This class is DEPRECATED in 2.4 and will be removed by 3.0.
-        If you need this functionality, use Control.Navigation instead!!! */
-
-    /** 
-     * Property: performedDrag
-     * {Boolean}
-     */
-    performedDrag: false,
-
-    /** 
-     * Property: wheelObserver 
-     * {Function}
-     */
-    wheelObserver: null,
-
-    /** 
-     * Constructor: OpenLayers.Control.MouseDefaults
-     */
-    initialize: function() {
-        OpenLayers.Control.prototype.initialize.apply(this, arguments);
-    },
-
-    /**
-     * APIMethod: destroy
-     */    
-    destroy: function() {
-        
-        if (this.handler) {
-            this.handler.destroy();
-        }
-        this.handler = null;
-
-        this.map.events.un({
-            "click": this.defaultClick,
-            "dblclick": this.defaultDblClick,
-            "mousedown": this.defaultMouseDown,
-            "mouseup": this.defaultMouseUp,
-            "mousemove": this.defaultMouseMove,
-            "mouseout": this.defaultMouseOut,
-            scope: this
-        });
-
-        //unregister mousewheel events specifically on the window and document
-        OpenLayers.Event.stopObserving(window, "DOMMouseScroll", 
-                                        this.wheelObserver);
-        OpenLayers.Event.stopObserving(window, "mousewheel", 
-                                        this.wheelObserver);
-        OpenLayers.Event.stopObserving(document, "mousewheel", 
-                                        this.wheelObserver);
-        this.wheelObserver = null;
-                      
-        OpenLayers.Control.prototype.destroy.apply(this, arguments);        
-    },
-
-    /**
-     * Method: draw
-     */
-    draw: function() {
-        this.map.events.on({
-            "click": this.defaultClick,
-            "dblclick": this.defaultDblClick,
-            "mousedown": this.defaultMouseDown,
-            "mouseup": this.defaultMouseUp,
-            "mousemove": this.defaultMouseMove,
-            "mouseout": this.defaultMouseOut,
-            scope: this
-        });
-
-        this.registerWheelEvents();
-
-    },
-
-    /**
-     * Method: registerWheelEvents
-     */
-    registerWheelEvents: function() {
-
-        this.wheelObserver = OpenLayers.Function.bindAsEventListener(
-            this.onWheelEvent, this
-        );
-        
-        //register mousewheel events specifically on the window and document
-        OpenLayers.Event.observe(window, "DOMMouseScroll", this.wheelObserver);
-        OpenLayers.Event.observe(window, "mousewheel", this.wheelObserver);
-        OpenLayers.Event.observe(document, "mousewheel", this.wheelObserver);
-    },
-
-    /**
-     * Method: defaultClick
-     * 
-     * Parameters:
-     * evt - {Event} 
-     *
-     * Returns:
-     * {Boolean}
-     */
-    defaultClick: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        var notAfterDrag = !this.performedDrag;
-        this.performedDrag = false;
-        return notAfterDrag;
-    },
-
-    /**
-     * Method: defaultDblClick
-     * 
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultDblClick: function (evt) {
-        var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 
-        this.map.setCenter(newCenter, this.map.zoom + 1);
-        OpenLayers.Event.stop(evt);
-        return false;
-    },
-
-    /**
-     * Method: defaultMouseDown
-     * 
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseDown: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        this.mouseDragStart = evt.xy.clone();
-        this.performedDrag  = false;
-        if (evt.shiftKey) {
-            this.map.div.style.cursor = "crosshair";
-            this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
-                                                     this.mouseDragStart,
-                                                     null,
-                                                     null,
-                                                     "absolute",
-                                                     "2px solid red");
-            this.zoomBox.style.backgroundColor = "white";
-            this.zoomBox.style.filter = "alpha(opacity=50)"; // IE
-            this.zoomBox.style.opacity = "0.50";
-            this.zoomBox.style.fontSize = "1px";
-            this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
-            this.map.eventsDiv.appendChild(this.zoomBox);
-        }
-        document.onselectstart = OpenLayers.Function.False;
-        OpenLayers.Event.stop(evt);
-    },
-
-    /**
-     * Method: defaultMouseMove
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseMove: function (evt) {
-        // record the mouse position, used in onWheelEvent
-        this.mousePosition = evt.xy.clone();
-
-        if (this.mouseDragStart != null) {
-            if (this.zoomBox) {
-                var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x);
-                var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y);
-                this.zoomBox.style.width = Math.max(1, deltaX) + "px";
-                this.zoomBox.style.height = Math.max(1, deltaY) + "px";
-                if (evt.xy.x < this.mouseDragStart.x) {
-                    this.zoomBox.style.left = evt.xy.x+"px";
-                }
-                if (evt.xy.y < this.mouseDragStart.y) {
-                    this.zoomBox.style.top = evt.xy.y+"px";
-                }
-            } else {
-                var deltaX = this.mouseDragStart.x - evt.xy.x;
-                var deltaY = this.mouseDragStart.y - evt.xy.y;
-                var size = this.map.getSize();
-                var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX,
-                                                 size.h / 2 + deltaY);
-                var newCenter = this.map.getLonLatFromViewPortPx( newXY ); 
-                this.map.setCenter(newCenter, null, true);
-                this.mouseDragStart = evt.xy.clone();
-                this.map.div.style.cursor = "move";
-            }
-            this.performedDrag = true;
-        }
-    },
-
-    /**
-     * Method: defaultMouseUp
-     * 
-     * Parameters:
-     * evt - {<OpenLayers.Event>} 
-     */
-    defaultMouseUp: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        if (this.zoomBox) {
-            this.zoomBoxEnd(evt);    
-        } else {
-            if (this.performedDrag) {
-                this.map.setCenter(this.map.center);
-            }
-        }
-        document.onselectstart=null;
-        this.mouseDragStart = null;
-        this.map.div.style.cursor = "";
-    },
-
-    /**
-     * Method: defaultMouseOut
-     * 
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseOut: function (evt) {
-        if (this.mouseDragStart != null && 
-            OpenLayers.Util.mouseLeft(evt, this.map.eventsDiv)) {
-            if (this.zoomBox) {
-                this.removeZoomBox();
-            }
-            this.mouseDragStart = null;
-        }
-    },
-
-
-    /** 
-     * Method: defaultWheelUp
-     * User spun scroll wheel up
-     * 
-     */
-    defaultWheelUp: function(evt) {
-        if (this.map.getZoom() <= this.map.getNumZoomLevels()) {
-            this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),
-                               this.map.getZoom() + 1);
-        }
-    },
-
-    /**
-     * Method: defaultWheelDown
-     * User spun scroll wheel down
-     */
-    defaultWheelDown: function(evt) {
-        if (this.map.getZoom() > 0) {
-            this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),
-                               this.map.getZoom() - 1);
-        }
-    },
-
-    /**
-     * Method: zoomBoxEnd
-     * Zoombox function. 
-     */
-    zoomBoxEnd: function(evt) {
-        if (this.mouseDragStart != null) {
-            if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 ||    
-                Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) {   
-                var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); 
-                var end = this.map.getLonLatFromViewPortPx( evt.xy );
-                var top = Math.max(start.lat, end.lat);
-                var bottom = Math.min(start.lat, end.lat);
-                var left = Math.min(start.lon, end.lon);
-                var right = Math.max(start.lon, end.lon);
-                var bounds = new OpenLayers.Bounds(left, bottom, right, top);
-                this.map.zoomToExtent(bounds);
-            } else {
-                var end = this.map.getLonLatFromViewPortPx( evt.xy );
-                this.map.setCenter(new OpenLayers.LonLat(
-                  (end.lon),
-                  (end.lat)
-                 ), this.map.getZoom() + 1);
-            }    
-            this.removeZoomBox();
-       }
-    },
-
-    /**
-     * Method: removeZoomBox
-     * Remove the zoombox from the screen and nullify our reference to it.
-     */
-    removeZoomBox: function() {
-        this.map.eventsDiv.removeChild(this.zoomBox);
-        this.zoomBox = null;
-    },
-
-
-/**
- *  Mouse ScrollWheel code thanks to http://adomas.org/javascript-mouse-wheel/
- */
-
-
-    /**
-     * Method: onWheelEvent
-     * Catch the wheel event and handle it xbrowserly
-     *
-     * Parameters: 
-     * e - {Event} 
-     */
-    onWheelEvent: function(e){
-    
-        // first determine whether or not the wheeling was inside the map
-        var inMap = false;
-        var elem = OpenLayers.Event.element(e);
-        while(elem != null) {
-            if (this.map && elem == this.map.div) {
-                inMap = true;
-                break;
-            }
-            elem = elem.parentNode;
-        }
-        
-        if (inMap) {
-            
-            var delta = 0;
-            if (!e) {
-                e = window.event;
-            }
-            if (e.wheelDelta) {
-                delta = e.wheelDelta/120; 
-                if (window.opera && window.opera.version() < 9.2) {
-                    delta = -delta;
-                }
-            } else if (e.detail) {
-                delta = -e.detail / 3;
-            }
-            if (delta) {
-                // add the mouse position to the event because mozilla has a bug
-                // with clientX and clientY (see https://bugzilla.mozilla.org/show_bug.cgi?id=352179)
-                // getLonLatFromViewPortPx(e) returns wrong values
-                e.xy = this.mousePosition;
-
-                if (delta < 0) {
-                   this.defaultWheelDown(e);
-                } else {
-                   this.defaultWheelUp(e);
-                }
-            }
-            
-            //only wheel the map, not the window
-            OpenLayers.Event.stop(e);
-        }
-    },
-
-    CLASS_NAME: "OpenLayers.Control.MouseDefaults"
-});
diff --git a/lib/OpenLayers/Control/MousePosition.js b/lib/OpenLayers/Control/MousePosition.js
index 4031407..c3b9c41 100644
--- a/lib/OpenLayers/Control/MousePosition.js
+++ b/lib/OpenLayers/Control/MousePosition.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
diff --git a/lib/OpenLayers/Control/MouseToolbar.js b/lib/OpenLayers/Control/MouseToolbar.js
deleted file mode 100644
index 9400c17..0000000
--- a/lib/OpenLayers/Control/MouseToolbar.js
+++ /dev/null
@@ -1,406 +0,0 @@
-/* Copyright (c) 2006-2011 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/MouseDefaults.js
- */
-
-/**
- * Class: OpenLayers.Control.MouseToolbar
- * This class is DEPRECATED in 2.4 and will be removed by 3.0.
- * If you need this functionality, use <OpenLayers.Control.NavToolbar>
- * instead!!! 
- */
-OpenLayers.Control.MouseToolbar = OpenLayers.Class(
-                                            OpenLayers.Control.MouseDefaults, {
-    
-    /**
-     * Property: mode
-     */ 
-    mode: null,
-    /**
-     * Property: buttons
-     */
-    buttons: null,
-    
-    /**
-     * APIProperty: direction
-     * {String} 'vertical' or 'horizontal'
-     */
-    direction: "vertical",
-    
-    /**
-     * Property: buttonClicked
-     * {String}
-     */
-    buttonClicked: null,
-    
-    /**
-     * Constructor: OpenLayers.Control.MouseToolbar
-     *
-     * Parameters:
-     * position - {<OpenLayers.Pixel>}
-     * direction - {String}
-     */
-    initialize: function(position, direction) {
-        OpenLayers.Control.prototype.initialize.apply(this, arguments);
-        this.position = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X,
-                                             OpenLayers.Control.MouseToolbar.Y);
-        if (position) {
-            this.position = position;
-        }
-        if (direction) {
-            this.direction = direction; 
-        }
-        this.measureDivs = [];
-    },
-    
-    /**
-     * APIMethod: destroy 
-     */
-    destroy: function() {
-        for( var btnId in this.buttons) {
-            var btn = this.buttons[btnId];
-            btn.map = null;
-            btn.events.destroy();
-        }
-        OpenLayers.Control.MouseDefaults.prototype.destroy.apply(this, 
-                                                                 arguments);
-    },
-    
-    /**
-     * Method: draw
-     */
-    draw: function() {
-        OpenLayers.Control.prototype.draw.apply(this, arguments); 
-        OpenLayers.Control.MouseDefaults.prototype.draw.apply(this, arguments);
-        this.buttons = {};
-        var sz = new OpenLayers.Size(28,28);
-        var centered = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X,0);
-        this._addButton("zoombox", "drag-rectangle-off.png", "drag-rectangle-on.png", centered, sz, "Shift->Drag to zoom to area");
-        centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0));
-        this._addButton("pan", "panning-hand-off.png", "panning-hand-on.png", centered, sz, "Drag the map to pan.");
-        centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0));
-        this.switchModeTo("pan");
-
-        return this.div;
-    },
-    
-    /**
-     * Method: _addButton
-     */
-    _addButton:function(id, img, activeImg, xy, sz, title) {
-        var imgLocation = OpenLayers.Util.getImagesLocation() + img;
-        var activeImgLocation = OpenLayers.Util.getImagesLocation() + activeImg;
-        // var btn = new ol.AlphaImage("_"+id, imgLocation, xy, sz);
-        var btn = OpenLayers.Util.createAlphaImageDiv(
-                                    "OpenLayers_Control_MouseToolbar_" + id, 
-                                    xy, sz, imgLocation, "absolute");
-
-        //we want to add the outer div
-        this.div.appendChild(btn);
-        btn.imgLocation = imgLocation;
-        btn.activeImgLocation = activeImgLocation;
-        
-        btn.events = new OpenLayers.Events(this, btn, null, true);
-        btn.events.on({
-            "mousedown": this.buttonDown,
-            "mouseup": this.buttonUp,
-            "dblclick": OpenLayers.Event.stop,
-            scope: this
-        });
-        btn.action = id;
-        btn.title = title;
-        btn.alt = title;
-        btn.map = this.map;
-
-        //we want to remember/reference the outer div
-        this.buttons[id] = btn;
-        return btn;
-    },
-
-    /**
-     * Method: buttonDown
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    buttonDown: function(evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        this.buttonClicked = evt.element.action;
-        OpenLayers.Event.stop(evt);
-    },
-
-    /**
-     * Method: buttonUp
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    buttonUp: function(evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        if (this.buttonClicked != null) {
-            if (this.buttonClicked == evt.element.action) {
-                this.switchModeTo(evt.element.action);
-            }
-            OpenLayers.Event.stop(evt);
-            this.buttonClicked = null;
-        }
-    },
-    
-    /**
-     * Method: defaultDblClick 
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultDblClick: function (evt) {
-        this.switchModeTo("pan");
-        this.performedDrag = false;
-        var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 
-        this.map.setCenter(newCenter, this.map.zoom + 1);
-        OpenLayers.Event.stop(evt);
-        return false;
-    },
-
-    /**
-     * Method: defaultMouseDown
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseDown: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        this.mouseDragStart = evt.xy.clone();
-        this.performedDrag = false;
-        this.startViaKeyboard = false;
-        if (evt.shiftKey && this.mode !="zoombox") {
-            this.switchModeTo("zoombox");
-            this.startViaKeyboard = true;
-        } else if (evt.altKey && this.mode !="measure") {
-            this.switchModeTo("measure");
-        } else if (!this.mode) {
-            this.switchModeTo("pan");
-        }
-        
-        switch (this.mode) {
-            case "zoombox":
-                this.map.div.style.cursor = "crosshair";
-                this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
-                                                         this.mouseDragStart,
-                                                         null,
-                                                         null,
-                                                         "absolute",
-                                                         "2px solid red");
-                this.zoomBox.style.backgroundColor = "white";
-                this.zoomBox.style.filter = "alpha(opacity=50)"; // IE
-                this.zoomBox.style.opacity = "0.50";
-                this.zoomBox.style.fontSize = "1px";
-                this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
-                this.map.eventsDiv.appendChild(this.zoomBox);
-                this.performedDrag = true;
-                break;
-            case "measure":
-                var distance = "";
-                if (this.measureStart) {
-                    var measureEnd = this.map.getLonLatFromViewPortPx(this.mouseDragStart);
-                    distance = OpenLayers.Util.distVincenty(this.measureStart, measureEnd);
-                    distance = Math.round(distance * 100) / 100;
-                    distance = distance + "km";
-                    this.measureStartBox = this.measureBox;
-                }    
-                this.measureStart = this.map.getLonLatFromViewPortPx(this.mouseDragStart);;
-                this.measureBox = OpenLayers.Util.createDiv(null,
-                                                         this.mouseDragStart.add(
-                                                           -2-parseInt(this.map.layerContainerDiv.style.left),
-                                                           -2-parseInt(this.map.layerContainerDiv.style.top)),
-                                                         null,
-                                                         null,
-                                                         "absolute");
-                this.measureBox.style.width="4px";
-                this.measureBox.style.height="4px";
-                this.measureBox.style.fontSize = "1px";
-                this.measureBox.style.backgroundColor="red";
-                this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
-                this.map.layerContainerDiv.appendChild(this.measureBox);
-                if (distance) {
-                    this.measureBoxDistance = OpenLayers.Util.createDiv(null,
-                                                         this.mouseDragStart.add(
-                                                           -2-parseInt(this.map.layerContainerDiv.style.left),
-                                                           2-parseInt(this.map.layerContainerDiv.style.top)),
-                                                         null,
-                                                         null,
-                                                         "absolute");
-                    
-                    this.measureBoxDistance.innerHTML = distance;
-                    this.measureBoxDistance.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
-                    this.map.layerContainerDiv.appendChild(this.measureBoxDistance);
-                    this.measureDivs.push(this.measureBoxDistance);
-                }
-                this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
-                this.map.layerContainerDiv.appendChild(this.measureBox);
-                this.measureDivs.push(this.measureBox);
-                break;
-            default:
-                this.map.div.style.cursor = "move";
-                break;
-        }
-        document.onselectstart = OpenLayers.Function.False;
-        OpenLayers.Event.stop(evt);
-    },
-
-    /**
-     * Method: switchModeTo 
-     *
-     * Parameters:
-     * mode - {String} 
-     */
-    switchModeTo: function(mode) {
-        if (mode != this.mode) {
-            
-
-            if (this.mode && this.buttons[this.mode]) {
-                OpenLayers.Util.modifyAlphaImageDiv(this.buttons[this.mode], null, null, null, this.buttons[this.mode].imgLocation);
-            }
-            if (this.mode == "measure" && mode != "measure") {
-                for(var i=0, len=this.measureDivs.length; i<len; i++) {
-                    if (this.measureDivs[i]) { 
-                        this.map.layerContainerDiv.removeChild(this.measureDivs[i]);
-                    }
-                }
-                this.measureDivs = [];
-                this.measureStart = null;
-            }
-            this.mode = mode;
-            if (this.buttons[mode]) {
-                OpenLayers.Util.modifyAlphaImageDiv(this.buttons[mode], null, null, null, this.buttons[mode].activeImgLocation);
-            }
-            switch (this.mode) {
-                case "zoombox":
-                    this.map.div.style.cursor = "crosshair";
-                    break;
-                default:
-                    this.map.div.style.cursor = "";
-                    break;
-            }
-
-        } 
-    }, 
-
-    /**
-     * Method: leaveMode
-     */
-    leaveMode: function() {
-        this.switchModeTo("pan");
-    },
-    
-    /**
-     * Method: defaultMouseMove
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseMove: function (evt) {
-        if (this.mouseDragStart != null) {
-            switch (this.mode) {
-                case "zoombox": 
-                    var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x);
-                    var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y);
-                    this.zoomBox.style.width = Math.max(1, deltaX) + "px";
-                    this.zoomBox.style.height = Math.max(1, deltaY) + "px";
-                    if (evt.xy.x < this.mouseDragStart.x) {
-                        this.zoomBox.style.left = evt.xy.x+"px";
-                    }
-                    if (evt.xy.y < this.mouseDragStart.y) {
-                        this.zoomBox.style.top = evt.xy.y+"px";
-                    }
-                    break;
-                default:
-                    var deltaX = this.mouseDragStart.x - evt.xy.x;
-                    var deltaY = this.mouseDragStart.y - evt.xy.y;
-                    var size = this.map.getSize();
-                    var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX,
-                                                     size.h / 2 + deltaY);
-                    var newCenter = this.map.getLonLatFromViewPortPx( newXY ); 
-                    this.map.setCenter(newCenter, null, true);
-                    this.mouseDragStart = evt.xy.clone();
-            }
-            this.performedDrag = true;
-        }
-    },
-
-    /**
-     * Method: defaultMouseUp
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseUp: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        switch (this.mode) {
-            case "zoombox":
-                this.zoomBoxEnd(evt);
-                if (this.startViaKeyboard) {
-                    this.leaveMode();
-                }
-                break;
-            case "pan":
-                if (this.performedDrag) {
-                    this.map.setCenter(this.map.center);
-                }        
-        }
-        document.onselectstart = null;
-        this.mouseDragStart = null;
-        this.map.div.style.cursor = "default";
-    },
-
-    /**
-     * Method: defaultMouseOut
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultMouseOut: function (evt) {
-        if (this.mouseDragStart != null
-            && OpenLayers.Util.mouseLeft(evt, this.map.eventsDiv)) {
-            if (this.zoomBox) {
-                this.removeZoomBox();
-                if (this.startViaKeyboard) {
-                    this.leaveMode();
-                }
-            }
-            this.mouseDragStart = null;
-            this.map.div.style.cursor = "default";
-        }
-    },
-
-    /**
-     * Method: defaultClick
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    defaultClick: function (evt) {
-        if (this.performedDrag)  {
-            this.performedDrag = false;
-            return false;
-        }
-    },
-    
-    CLASS_NAME: "OpenLayers.Control.MouseToolbar"
-});
-
-OpenLayers.Control.MouseToolbar.X = 6;
-OpenLayers.Control.MouseToolbar.Y = 300;
diff --git a/lib/OpenLayers/Control/NavToolbar.js b/lib/OpenLayers/Control/NavToolbar.js
index f6cdccd..241682f 100644
--- a/lib/OpenLayers/Control/NavToolbar.js
+++ b/lib/OpenLayers/Control/NavToolbar.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/Navigation.js b/lib/OpenLayers/Control/Navigation.js
index ae61145..11f1a05 100644
--- a/lib/OpenLayers/Control/Navigation.js
+++ b/lib/OpenLayers/Control/Navigation.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -94,7 +94,7 @@ OpenLayers.Control.Navigation = OpenLayers.Class(OpenLayers.Control, {
      *    You should probably set handleRightClicks to true if you use this
      *    with MOD_CTRL, to disable the context menu for machines which use
      *    CTRL-Click as a right click.
-     * Default: <OpenLayers.Handler.MOD_SHIFT
+     * Default: <OpenLayers.Handler.MOD_SHIFT>
      */
     zoomBoxKeyMask: OpenLayers.Handler.MOD_SHIFT,
     
diff --git a/lib/OpenLayers/Control/NavigationHistory.js b/lib/OpenLayers/Control/NavigationHistory.js
index 6ca9acd..759e953 100644
--- a/lib/OpenLayers/Control/NavigationHistory.js
+++ b/lib/OpenLayers/Control/NavigationHistory.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/OverviewMap.js b/lib/OpenLayers/Control/OverviewMap.js
index c1b2ff7..86c0737 100644
--- a/lib/OpenLayers/Control/OverviewMap.js
+++ b/lib/OpenLayers/Control/OverviewMap.js
@@ -1,12 +1,12 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /** 
  * @requires OpenLayers/Control.js
  * @requires OpenLayers/BaseTypes.js
- * @requires OpenLayers/Events.js
+ * @requires OpenLayers/Events/buttonclick.js
  */
 
 /**
@@ -17,7 +17,7 @@
  * the lower right corner of the main map. Create a new overview map with the
  * <OpenLayers.Control.OverviewMap> constructor.
  *
- * Inerits from:
+ * Inherits from:
  *  - <OpenLayers.Control>
  */
 OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
@@ -41,7 +41,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      * class name olControlOverviewMapElement) may have padding or other style
      * attributes added via CSS.
      */
-    size: new OpenLayers.Size(180, 90),
+    size: {w: 180, h: 90},
 
     /**
      * APIProperty: layers
@@ -132,7 +132,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      * Create a new overview map
      *
      * Parameters:
-     * object - {Object} Properties of this object will be set on the overview
+     * options - {Object} Properties of this object will be set on the overview
      * map object.  Note, to set options on the map object contained in this
      * control, set <mapOptions> as one of the options properties.
      */
@@ -157,7 +157,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
             this.handlers.drag.destroy();
         }
 
-        this.ovmap && this.ovmap.eventsDiv.removeChild(this.extentRectangle);
+        this.ovmap && this.ovmap.viewPortDiv.removeChild(this.extentRectangle);
         this.extentRectangle = null;
 
         if (this.rectEvents) {
@@ -177,20 +177,19 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
         this.element = null;
 
         if (this.maximizeDiv) {
-            OpenLayers.Event.stopObservingElement(this.maximizeDiv);
             this.div.removeChild(this.maximizeDiv);
             this.maximizeDiv = null;
         }
         
         if (this.minimizeDiv) {
-            OpenLayers.Event.stopObservingElement(this.minimizeDiv);
             this.div.removeChild(this.minimizeDiv);
             this.minimizeDiv = null;
         }
 
         this.map.events.un({
-            "moveend": this.update,
-            "changebaselayer": this.baseLayerDraw,
+            buttonclick: this.onButtonClick,
+            moveend: this.update,
+            changebaselayer: this.baseLayerDraw,
             scope: this
         });
 
@@ -203,7 +202,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      */    
     draw: function() {
         OpenLayers.Control.prototype.draw.apply(this, arguments);
-        if(!(this.layers.length > 0)) {
+        if (this.layers.length === 0) {
             if (this.map.baseLayer) {
                 var layer = this.map.baseLayer.clone();
                 this.layers = [layer];
@@ -238,52 +237,29 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
         // map viewport.
         if(!this.outsideViewport) {
             this.div.className += " " + this.displayClass + 'Container';
-            var imgLocation = OpenLayers.Util.getImagesLocation();
             // maximize button div
-            var img = imgLocation + 'layer-switcher-maximize.png';
+            var img = OpenLayers.Util.getImageLocation('layer-switcher-maximize.png');
             this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(
                                         this.displayClass + 'MaximizeButton', 
                                         null, 
-                                        new OpenLayers.Size(18,18), 
+                                        null, 
                                         img, 
                                         'absolute');
             this.maximizeDiv.style.display = 'none';
-            this.maximizeDiv.className = this.displayClass + 'MaximizeButton';
-            OpenLayers.Event.observe(this.maximizeDiv, 'click', 
-                OpenLayers.Function.bindAsEventListener(this.maximizeControl,
-                                                        this)
-            );
+            this.maximizeDiv.className = this.displayClass + 'MaximizeButton olButton';
             this.div.appendChild(this.maximizeDiv);
     
             // minimize button div
-            var img = imgLocation + 'layer-switcher-minimize.png';
+            var img = OpenLayers.Util.getImageLocation('layer-switcher-minimize.png');
             this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv(
                                         'OpenLayers_Control_minimizeDiv', 
                                         null, 
-                                        new OpenLayers.Size(18,18), 
+                                        null, 
                                         img, 
                                         'absolute');
             this.minimizeDiv.style.display = 'none';
-            this.minimizeDiv.className = this.displayClass + 'MinimizeButton';
-            OpenLayers.Event.observe(this.minimizeDiv, 'click', 
-                OpenLayers.Function.bindAsEventListener(this.minimizeControl,
-                                                        this)
-            );
-            this.div.appendChild(this.minimizeDiv);
-            
-            var eventsToStop = ['dblclick','mousedown'];
-            
-            for (var i=0, len=eventsToStop.length; i<len; i++) {
-
-                OpenLayers.Event.observe(this.maximizeDiv, 
-                                         eventsToStop[i], 
-                                         OpenLayers.Event.stop);
-
-                OpenLayers.Event.observe(this.minimizeDiv,
-                                         eventsToStop[i], 
-                                         OpenLayers.Event.stop);
-            }
-            
+            this.minimizeDiv.className = this.displayClass + 'MinimizeButton olButton';
+            this.div.appendChild(this.minimizeDiv);            
             this.minimizeControl();
         } else {
             // show the overview map
@@ -293,7 +269,11 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
             this.update();
         }
         
-        this.map.events.register('moveend', this, this.update);
+        this.map.events.on({
+            buttonclick: this.onButtonClick,
+            moveend: this.update,
+            scope: this
+        });
         
         if (this.maximized) {
             this.maximizeControl();
@@ -364,6 +344,20 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
                                                    newTop));
         this.updateMapToRect();
     },
+    
+    /**
+     * Method: onButtonClick
+     *
+     * Parameters:
+     * evt - {Event}
+     */
+    onButtonClick: function(evt) {
+        if (evt.buttonElement === this.minimizeDiv) {
+            this.minimizeControl();
+        } else if (evt.buttonElement === this.maximizeDiv) {
+            this.maximizeControl();
+        }
+    },
 
     /**
      * Method: maximizeControl
@@ -489,7 +483,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
                         {controls: [], maxResolution: 'auto', 
                          fallThrough: false}, this.mapOptions);
         this.ovmap = new OpenLayers.Map(this.mapDiv, options);
-        this.ovmap.eventsDiv.appendChild(this.extentRectangle);
+        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).
@@ -634,12 +628,14 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      * translated into pixel bounds for the overview map
      */
     getRectBoundsFromMapBounds: function(lonLatBounds) {
-        var leftBottomLonLat = new OpenLayers.LonLat(lonLatBounds.left,
-                                                     lonLatBounds.bottom);
-        var rightTopLonLat = new OpenLayers.LonLat(lonLatBounds.right,
-                                                   lonLatBounds.top);
-        var leftBottomPx = this.getOverviewPxFromLonLat(leftBottomLonLat);
-        var rightTopPx = this.getOverviewPxFromLonLat(rightTopLonLat);
+        var leftBottomPx = this.getOverviewPxFromLonLat({
+            lon: lonLatBounds.left,
+            lat: lonLatBounds.bottom
+        });
+        var rightTopPx = this.getOverviewPxFromLonLat({
+            lon: lonLatBounds.right,
+            lat: lonLatBounds.top
+        });
         var bounds = null;
         if (leftBottomPx && rightTopPx) {
             bounds = new OpenLayers.Bounds(leftBottomPx.x, leftBottomPx.y,
@@ -660,12 +656,14 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      * translated into lon/lat bounds for the overview map
      */
     getMapBoundsFromRectBounds: function(pxBounds) {
-        var leftBottomPx = new OpenLayers.Pixel(pxBounds.left,
-                                                pxBounds.bottom);
-        var rightTopPx = new OpenLayers.Pixel(pxBounds.right,
-                                              pxBounds.top);
-        var leftBottomLonLat = this.getLonLatFromOverviewPx(leftBottomPx);
-        var rightTopLonLat = this.getLonLatFromOverviewPx(rightTopPx);
+        var leftBottomLonLat = this.getLonLatFromOverviewPx({
+            x: pxBounds.left,
+            y: pxBounds.bottom
+        });
+        var rightTopLonLat = this.getLonLatFromOverviewPx({
+            x: pxBounds.right,
+            y: pxBounds.top
+        });
         return new OpenLayers.Bounds(leftBottomLonLat.lon, leftBottomLonLat.lat,
                                      rightTopLonLat.lon, rightTopLonLat.lat);
     },
@@ -675,22 +673,27 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      * Get a map location from a pixel location
      *
      * Parameters:
-     * overviewMapPx - {<OpenLayers.Pixel>}
+     * overviewMapPx - {<OpenLayers.Pixel>|Object} OpenLayers.Pixel or
+     *                                             an object with a
+     *                                             'x' and 'y' properties.
      *
      * Returns:
-     * {<OpenLayers.LonLat>} Location which is the passed-in overview map
-     * OpenLayers.Pixel, translated into lon/lat by the overview map
+     * {Object} Location which is the passed-in overview map
+     * OpenLayers.Pixel, translated into lon/lat by the overview
+     * map. An object with a 'lon' and 'lat' properties.
      */
     getLonLatFromOverviewPx: function(overviewMapPx) {
         var size = this.ovmap.size;
         var res  = this.ovmap.getResolution();
         var center = this.ovmap.getExtent().getCenterLonLat();
     
-        var delta_x = overviewMapPx.x - (size.w / 2);
-        var delta_y = overviewMapPx.y - (size.h / 2);
-        
-        return new OpenLayers.LonLat(center.lon + delta_x * res ,
-                                     center.lat - delta_y * res); 
+        var deltaX = overviewMapPx.x - (size.w / 2);
+        var deltaY = overviewMapPx.y - (size.h / 2);
+
+        return {
+            lon: center.lon + deltaX * res,
+            lat: center.lat - deltaY * res
+        };
     },
 
     /**
@@ -698,22 +701,22 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
      * Get a pixel location from a map location
      *
      * Parameters:
-     * lonlat - {<OpenLayers.LonLat>}
+     * lonlat - {<OpenLayers.LonLat>|Object} OpenLayers.LonLat or an
+     *     object with a 'lon' and 'lat' properties.
      *
      * Returns:
-     * {<OpenLayers.Pixel>} Location which is the passed-in OpenLayers.LonLat, 
+     * {Object} Location which is the passed-in OpenLayers.LonLat, 
      * translated into overview map pixels
      */
     getOverviewPxFromLonLat: function(lonlat) {
-        var res  = this.ovmap.getResolution();
+        var res = this.ovmap.getResolution();
         var extent = this.ovmap.getExtent();
-        var px = null;
         if (extent) {
-            px = new OpenLayers.Pixel(
-                        Math.round(1/res * (lonlat.lon - extent.left)),
-                        Math.round(1/res * (extent.top - lonlat.lat)));
+            return {
+                x: Math.round(1/res * (lonlat.lon - extent.left)),
+                y: Math.round(1/res * (extent.top - lonlat.lat))
+            };
         } 
-        return px;
     },
 
     CLASS_NAME: 'OpenLayers.Control.OverviewMap'
diff --git a/lib/OpenLayers/Control/Pan.js b/lib/OpenLayers/Control/Pan.js
index 7056ad3..2850aa8 100644
--- a/lib/OpenLayers/Control/Pan.js
+++ b/lib/OpenLayers/Control/Pan.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/PanPanel.js b/lib/OpenLayers/Control/PanPanel.js
index 15c7615..a8369b5 100644
--- a/lib/OpenLayers/Control/PanPanel.js
+++ b/lib/OpenLayers/Control/PanPanel.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/PanZoom.js b/lib/OpenLayers/Control/PanZoom.js
index 147c0c4..9941007 100644
--- a/lib/OpenLayers/Control/PanZoom.js
+++ b/lib/OpenLayers/Control/PanZoom.js
@@ -1,11 +1,12 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Events/buttonclick.js
  */
 
 /**
@@ -64,12 +65,26 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
      * APIMethod: destroy
      */
     destroy: function() {
+        if (this.map) {
+            this.map.events.unregister("buttonclick", this, this.onButtonClick);
+        }
         this.removeButtons();
         this.buttons = null;
         this.position = null;
         OpenLayers.Control.prototype.destroy.apply(this, arguments);
     },
 
+    /** 
+     * Method: setMap
+     *
+     * Properties:
+     * map - {<OpenLayers.Map>} 
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+        this.map.events.register("buttonclick", this, this.onButtonClick);
+    },
+
     /**
      * Method: draw
      *
@@ -87,7 +102,7 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
         // place the controls
         this.buttons = [];
 
-        var sz = new OpenLayers.Size(18,18);
+        var sz = {w: 18, h: 18};
         var centered = new OpenLayers.Pixel(px.x+sz.w/2, px.y);
 
         this._addButton("panup", "north-mini.png", centered, sz);
@@ -119,37 +134,16 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
      *     image of the button, and has all the proper event handlers set.
      */
     _addButton:function(id, img, xy, sz) {
-        var imgLocation = OpenLayers.Util.getImagesLocation() + img;
+        var imgLocation = OpenLayers.Util.getImageLocation(img);
         var btn = OpenLayers.Util.createAlphaImageDiv(
                                     this.id + "_" + id, 
                                     xy, sz, imgLocation, "absolute");
         btn.style.cursor = "pointer";
         //we want to add the outer div
         this.div.appendChild(btn);
-
-        OpenLayers.Event.observe(btn, "mousedown", 
-            OpenLayers.Function.bindAsEventListener(this.buttonDown, btn));
-        OpenLayers.Event.observe(btn, "dblclick", 
-            OpenLayers.Function.bindAsEventListener(this.doubleClick, btn));
-        OpenLayers.Event.observe(btn, "click", 
-            OpenLayers.Function.bindAsEventListener(this.doubleClick, btn));
         btn.action = id;
-        btn.map = this.map;
+        btn.className = "olButton";
     
-        if(!this.slideRatio){
-            var slideFactorPixels = this.slideFactor;
-            var getSlideFactor = function() {
-                return slideFactorPixels;
-            };
-        } else {
-            var slideRatio = this.slideRatio;
-            var getSlideFactor = function(dim) {
-                return this.map.getSize()[dim] * slideRatio;
-            };
-        }
-
-        btn.getSlideFactor = getSlideFactor;
-
         //we want to remember/reference the outer div
         this.buttons.push(btn);
         return btn;
@@ -162,9 +156,6 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
      * btn - {Object}
      */
     _removeButton: function(btn) {
-        OpenLayers.Event.stopObservingElement(btn);
-        btn.map = null;
-        btn.getSlideFactor = null;
         this.div.removeChild(btn);
         OpenLayers.Util.removeItem(this.buttons, btn);
     },
@@ -179,31 +170,14 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
     },
     
     /**
-     * Method: doubleClick
+     * Method: onButtonClick
      *
      * Parameters:
-     * evt - {Event} 
-     *
-     * Returns:
-     * {Boolean}
+     * evt - {Event}
      */
-    doubleClick: function (evt) {
-        OpenLayers.Event.stop(evt);
-        return false;
-    },
-    
-    /**
-     * Method: buttonDown
-     *
-     * Parameters:
-     * evt - {Event} 
-     */
-    buttonDown: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-
-        switch (this.action) {
+    onButtonClick: function(evt) {
+        var btn = evt.buttonElement;
+        switch (btn.action) {
             case "panup": 
                 this.map.pan(0, -this.getSlideFactor("h"));
                 break;
@@ -226,8 +200,21 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
                 this.map.zoomToMaxExtent(); 
                 break;
         }
-
-        OpenLayers.Event.stop(evt);
+    },
+    
+    /**
+     * Method: getSlideFactor
+     *
+     * Parameters:
+     * dim - {String} "w" or "h" (for width or height).
+     *
+     * Returns:
+     * {Number} The slide factor for panning in the requested direction.
+     */
+    getSlideFactor: function(dim) {
+        return this.slideRatio ?
+            this.map.getSize()[dim] * this.slideRatio :
+            this.slideFactor;
     },
 
     CLASS_NAME: "OpenLayers.Control.PanZoom"
diff --git a/lib/OpenLayers/Control/PanZoomBar.js b/lib/OpenLayers/Control/PanZoomBar.js
index 3f8ef3b..40b5990 100644
--- a/lib/OpenLayers/Control/PanZoomBar.js
+++ b/lib/OpenLayers/Control/PanZoomBar.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -48,12 +48,6 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
     zoombarDiv: null,
 
     /** 
-     * Property: divEvents
-     * {<OpenLayers.Events>}
-     */
-    divEvents: null,
-
-    /** 
      * APIProperty: zoomWorldIcon
      * {Boolean}
      */
@@ -151,7 +145,7 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
         // place the controls
         this.buttons = [];
 
-        var sz = new OpenLayers.Size(18,18);
+        var sz = {w: 18, h: 18};
         if (this.panIcons) {
             var centered = new OpenLayers.Pixel(px.x+sz.w/2, px.y);
             var wposition = sz.w;
@@ -190,17 +184,16 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
     * Method: _addZoomBar
     * 
     * Parameters:
-    * location - {<OpenLayers.Pixel>} where zoombar drawing is to start.
+    * centered - {<OpenLayers.Pixel>} where zoombar drawing is to start.
     */
     _addZoomBar:function(centered) {
-        var imgLocation = OpenLayers.Util.getImagesLocation();
-        
+        var imgLocation = OpenLayers.Util.getImageLocation("slider.png");
         var id = this.id + "_" + this.map.id;
         var zoomsToEnd = this.map.getNumZoomLevels() - 1 - this.map.getZoom();
         var slider = OpenLayers.Util.createAlphaImageDiv(id,
                        centered.add(-1, zoomsToEnd * this.zoomStopHeight), 
-                       new OpenLayers.Size(20,9), 
-                       imgLocation+"slider.png",
+                       {w: 20, h: 9},
+                       imgLocation,
                        "absolute");
         slider.style.cursor = "move";
         this.slider = slider;
@@ -213,22 +206,21 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
             "touchend": this.zoomBarUp,
             "mousedown": this.zoomBarDown,
             "mousemove": this.zoomBarDrag,
-            "mouseup": this.zoomBarUp,
-            "dblclick": this.doubleClick,
-            "click": this.doubleClick
+            "mouseup": this.zoomBarUp
         });
         
-        var sz = new OpenLayers.Size();
-        sz.h = this.zoomStopHeight * this.map.getNumZoomLevels();
-        sz.w = this.zoomStopWidth;
+        var sz = {
+            w: this.zoomStopWidth,
+            h: this.zoomStopHeight * this.map.getNumZoomLevels()
+        };
+        var imgLocation = OpenLayers.Util.getImageLocation("zoombar.png");
         var div = null;
         
         if (OpenLayers.Util.alphaHack()) {
             var id = this.id + "_" + this.map.id;
             div = OpenLayers.Util.createAlphaImageDiv(id, centered,
-                                      new OpenLayers.Size(sz.w, 
-                                              this.zoomStopHeight),
-                                      imgLocation + "zoombar.png", 
+                                      {w: sz.w, h: this.zoomStopHeight},
+                                      imgLocation,
                                       "absolute", null, "crop");
             div.style.height = sz.h + "px";
         } else {
@@ -236,21 +228,12 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
                         'OpenLayers_Control_PanZoomBar_Zoombar' + this.map.id,
                         centered,
                         sz,
-                        imgLocation+"zoombar.png");
+                        imgLocation);
         }
         div.style.cursor = "pointer";
+        div.className = "olButton";
         this.zoombarDiv = div;
         
-        this.divEvents = new OpenLayers.Events(this, div, null, true, 
-                                                {includeXY: true});
-        this.divEvents.on({
-            "touchmove": this.passEventToSlider,
-            "mousedown": this.divClick,
-            "mousemove": this.passEventToSlider,
-            "dblclick": this.doubleClick,
-            "click": this.doubleClick
-        });
-        
         this.div.appendChild(div);
 
         this.startTop = parseInt(div.style.top);
@@ -268,23 +251,14 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
      */
     _removeZoomBar: function() {
         this.sliderEvents.un({
+            "touchstart": this.zoomBarDown,
             "touchmove": this.zoomBarDrag,
+            "touchend": this.zoomBarUp,
             "mousedown": this.zoomBarDown,
             "mousemove": this.zoomBarDrag,
-            "mouseup": this.zoomBarUp,
-            "dblclick": this.doubleClick,
-            "click": this.doubleClick
+            "mouseup": this.zoomBarUp
         });
         this.sliderEvents.destroy();
-
-        this.divEvents.un({
-            "touchmove": this.passEventToSlider,
-            "mousedown": this.divClick,
-            "mousemove": this.passEventToSlider,
-            "dblclick": this.doubleClick,
-            "click": this.doubleClick
-        });
-        this.divEvents.destroy();
         
         this.div.removeChild(this.zoombarDiv);
         this.zoombarDiv = null;
@@ -295,6 +269,25 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
     },
     
     /**
+     * Method: onButtonClick
+     *
+     * Parameters:
+     * evt - {Event}
+     */
+    onButtonClick: function(evt) {
+        OpenLayers.Control.PanZoom.prototype.onButtonClick.apply(this, arguments);
+        if (evt.buttonElement === this.zoombarDiv) {
+            var levels = evt.buttonXY.y / this.zoomStopHeight;
+            if(this.forceFixedZoomLevel || !this.map.fractionalZoom) {
+                levels = Math.floor(levels);
+            }    
+            var zoom = (this.map.getNumZoomLevels() - 1) - levels; 
+            zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1);
+            this.map.zoomTo(zoom);
+        }
+    },
+    
+    /**
      * Method: passEventToSlider
      * This function is used to pass events that happen on the div, or the map,
      * through to the slider, which then does its moving thing.
@@ -306,25 +299,6 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
         this.sliderEvents.handleBrowserEvent(evt);
     },
     
-    /**
-     * Method: divClick
-     * Picks up on clicks directly on the zoombar div
-     *           and sets the zoom level appropriately.
-     */
-    divClick: function (evt) {
-        if (!OpenLayers.Event.isLeftClick(evt)) {
-            return;
-        }
-        var levels = evt.xy.y / this.zoomStopHeight;
-        if(this.forceFixedZoomLevel || !this.map.fractionalZoom) {
-            levels = Math.floor(levels);
-        }    
-        var zoom = (this.map.getNumZoomLevels() - 1) - levels; 
-        zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1);
-        this.map.zoomTo(zoom);
-        OpenLayers.Event.stop(evt);
-    },
-    
     /*
      * Method: zoomBarDown
      * event listener for clicks on the slider
@@ -425,4 +399,4 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
     },    
     
     CLASS_NAME: "OpenLayers.Control.PanZoomBar"
-});
+});
\ No newline at end of file
diff --git a/lib/OpenLayers/Control/Panel.js b/lib/OpenLayers/Control/Panel.js
index 1129ef4..4db0fb4 100644
--- a/lib/OpenLayers/Control/Panel.js
+++ b/lib/OpenLayers/Control/Panel.js
@@ -1,10 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Events/buttonclick.js
  */
 
 /**
@@ -103,6 +104,9 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
      * APIMethod: destroy
      */
     destroy: function() {
+        if (this.map) {
+            this.map.events.unregister("buttonclick", this, this.onButtonClick);
+        }
         OpenLayers.Control.prototype.destroy.apply(this, arguments);
         for (var ctl, i = this.controls.length - 1; i >= 0; i--) {
             ctl = this.controls[i];
@@ -112,7 +116,6 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
                     deactivate: this.iconOff
                 });
             }
-            OpenLayers.Event.stopObservingElement(ctl.panel_div);
             ctl.panel_div = null;
         }
         this.activeState = null;
@@ -166,6 +169,12 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
      */    
     draw: function() {
         OpenLayers.Control.prototype.draw.apply(this, arguments);
+        if (this.outsideViewport) {
+            this.events.attachToElement(this.div);
+            this.events.register("buttonclick", this, this.onButtonClick);
+        } else {
+            this.map.events.register("buttonclick", this, this.onButtonClick);
+        }
         this.addControlsToMap(this.controls);
         return this.div;
     },
@@ -184,7 +193,7 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
             }
         }
     },
-
+    
     /**
      * APIMethod: activateControl
      * This method is called when the user click on the icon representing a 
@@ -236,32 +245,58 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
             controls = [controls];
         }
         this.controls = this.controls.concat(controls);
-        
-        // Give each control a panel_div which will be used later.
-        // Access to this div is via the panel_div attribute of the 
-        // control added to the panel.
-        // Also, stop mousedowns and clicks, but don't stop mouseup,
-        // since they need to pass through.
+
         for (var i=0, len=controls.length; i<len; i++) {
-            var element = document.createElement("div");
-            element.className = controls[i].displayClass + "ItemInactive";
-            controls[i].panel_div = element;
-            if (controls[i].title != "") {
-                controls[i].panel_div.title = controls[i].title;
+            var control = controls[i],
+                element = this.createControlMarkup(control);
+            OpenLayers.Element.addClass(element, 
+                                        control.displayClass + "ItemInactive");
+            OpenLayers.Element.addClass(element, "olButton");
+            if (control.title != ""  && !element.title) {
+                element.title = control.title;
             }
-            OpenLayers.Event.observe(controls[i].panel_div, "click", 
-                OpenLayers.Function.bind(this.onClick, this, controls[i]));
-            OpenLayers.Event.observe(controls[i].panel_div, "dblclick", 
-                OpenLayers.Function.bind(this.onDoubleClick, this, controls[i]));
-            OpenLayers.Event.observe(controls[i].panel_div, "mousedown", 
-                OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop));
-        }    
+            control.panel_div = element;
+        }
 
         if (this.map) { // map.addControl() has already been called on the panel
             this.addControlsToMap(controls);
             this.redraw();
         }
     },
+
+    /**
+     * APIMethod: createControlMarkup
+     * This function just creates a div for the control. If specific HTML
+     * markup is needed this function can be overridden in specific classes,
+     * or at panel instantiation time:
+     *
+     * Example:
+     * (code)
+     * var panel = new OpenLayers.Control.Panel({
+     *     defaultControl: control,
+     *     // ovverride createControlMarkup to create actual buttons
+     *     // including texts wrapped into span elements.
+     *     createControlMarkup: function(control) {
+     *         var button = document.createElement('button'),
+     *             span = document.createElement('span');
+     *         if (control.text) {
+     *             span.innerHTML = control.text;
+     *         }
+     *         return button;
+     *     }
+     *  });
+     * (end)
+     *
+     * Parameters:
+     * control - {<OpenLayers.Control>} The control to create the HTML
+     *     markup for.
+     *
+     * Returns:
+     * {DOMElement} The markup.
+     */
+    createControlMarkup: function(control) {
+        return document.createElement("div");
+    },
    
     /**
      * Method: addControlsToMap
@@ -295,7 +330,8 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
      */
      iconOn: function() {
         var d = this.panel_div; // "this" refers to a control on panel!
-        d.className = d.className.replace(/ItemInactive$/, "ItemActive");
+        var re = new RegExp("\\b(" + this.displayClass + "Item)Inactive\\b");
+        d.className = d.className.replace(re, "$1Active");
     },
 
     /**
@@ -304,29 +340,32 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
      */
      iconOff: function() {
         var d = this.panel_div; // "this" refers to a control on panel!
-        d.className = d.className.replace(/ItemActive$/, "ItemInactive");
+        var re = new RegExp("\\b(" + this.displayClass + "Item)Active\\b");
+        d.className = d.className.replace(re, "$1Inactive");
     },
-
-    /**
-     * Method: onClick
-     */
-    onClick: function (ctrl, evt) {
-        OpenLayers.Event.stop(evt ? evt : window.event);
-        this.activateControl(ctrl);
-    },
-
+    
     /**
-     * Method: onDoubleClick
+     * Method: onButtonClick
+     *
+     * Parameters:
+     * evt - {Event}
      */
-    onDoubleClick: function(ctrl, evt) {
-        OpenLayers.Event.stop(evt ? evt : window.event);
+    onButtonClick: function (evt) {
+        var controls = this.controls,
+            button = evt.buttonElement;
+        for (var i=controls.length-1; i>=0; --i) {
+            if (controls[i].panel_div === button) {
+                this.activateControl(controls[i]);
+                break;
+            }
+        }
     },
 
     /**
      * APIMethod: getControlsBy
      * Get a list of controls with properties matching the given criteria.
      *
-     * Parameter:
+     * Parameters:
      * property - {String} A control property to be matched.
      * match - {String | Object} A string to match.  Can also be a regular
      *     expression literal or object.  In addition, it can be any object
@@ -351,7 +390,7 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
      * APIMethod: getControlsByName
      * Get a list of contorls with names matching the given name.
      *
-     * Parameter:
+     * Parameters:
      * match - {String | Object} A control name.  The name can also be a regular
      *     expression literal or object.  In addition, it can be any object
      *     with a method named test.  For reqular expressions or other, if
@@ -371,7 +410,7 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
      * APIMethod: getControlsByClass
      * Get a list of controls of a given type (CLASS_NAME).
      *
-     * Parameter:
+     * Parameters:
      * match - {String | Object} A control class name.  The type can also be a
      *     regular expression literal or object.  In addition, it can be any
      *     object with a method named test.  For reqular expressions or other,
diff --git a/lib/OpenLayers/Control/Permalink.js b/lib/OpenLayers/Control/Permalink.js
index ed4f248..3654565 100644
--- a/lib/OpenLayers/Control/Permalink.js
+++ b/lib/OpenLayers/Control/Permalink.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -16,7 +16,7 @@
  * current map view. By default it is drawn in the lower right corner of the
  * map. The href is updated as the map is zoomed, panned and whilst layers
  * are switched.
- * `
+ * 
  * Inherits from:
  *  - <OpenLayers.Control>
  */
@@ -94,12 +94,13 @@ OpenLayers.Control.Permalink = OpenLayers.Class(OpenLayers.Control, {
      * APIMethod: destroy
      */
     destroy: function()  {
-        if (this.element.parentNode == this.div) {
+        if (this.element && this.element.parentNode == this.div) {
             this.div.removeChild(this.element);
+            this.element = null;
+        }
+        if (this.map) {
+            this.map.events.unregister('moveend', this, this.updateLink);
         }
-        this.element = null;
-
-        this.map.events.unregister('moveend', this, this.updateLink);
 
         OpenLayers.Control.prototype.destroy.apply(this, arguments); 
     },
diff --git a/lib/OpenLayers/Control/PinchZoom.js b/lib/OpenLayers/Control/PinchZoom.js
index ff744ba..51dc44f 100644
--- a/lib/OpenLayers/Control/PinchZoom.js
+++ b/lib/OpenLayers/Control/PinchZoom.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -22,10 +22,10 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
     type: OpenLayers.Control.TYPE_TOOL,
 
     /**
-     * Property: containerOrigin
-     * {Object} Cached object representing the layer container origin (in pixels).
+     * Property: containerCenter
+     * {Object} Cached object representing the layer container center (in pixels).
      */
-    containerOrigin: null,
+    containerCenter: null,
 
     /**
      * Property: pinchOrigin
@@ -76,10 +76,10 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
         var activated = OpenLayers.Control.prototype.activate.apply(this,arguments);
         if (activated) {
             this.map.events.on({
-                moveend: this.updateContainerOrigin,
+                moveend: this.updateContainerCenter,
                 scope: this
             });
-            this.updateContainerOrigin();
+            this.updateContainerCenter();
         }
         return activated;
     },
@@ -95,7 +95,7 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
         var deactivated = OpenLayers.Control.prototype.deactivate.apply(this,arguments);
         if (this.map && this.map.events) {
             this.map.events.un({
-                moveend: this.updateContainerOrigin,
+                moveend: this.updateContainerCenter,
                 scope: this
             });
         }
@@ -103,14 +103,15 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
     },
     
     /**
-     * Method: updateContainerOrigin
-     * Must be called each time the layer container origin changes.
+     * Method: updateContainerCenter
+     * Must be called each time the layer container moves.
      */
-    updateContainerOrigin: function() {
+    updateContainerCenter: function() {
         var container = this.map.layerContainerDiv;
-        this.containerOrigin = {
-            x: parseInt(container.style.left, 10),
-            y: parseInt(container.style.top, 10)
+        // the layer container div is a square of 100px/100px
+        this.containerCenter = {
+            x: parseInt(container.style.left, 10) + 50,
+            y: parseInt(container.style.top, 10) + 50
         };
     },
 
@@ -137,12 +138,12 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
      */
     pinchMove: function(evt, pinchData) {
         var scale = pinchData.scale;
-        var containerOrigin = this.containerOrigin;
+        var containerCenter = this.containerCenter;
         var pinchOrigin = this.pinchOrigin;
         var current = evt.xy;
 
-        var dx = Math.round((current.x - pinchOrigin.x) + (scale - 1) * (containerOrigin.x - pinchOrigin.x));
-        var dy = Math.round((current.y - pinchOrigin.y) + (scale - 1) * (containerOrigin.y - pinchOrigin.y));
+        var dx = Math.round((current.x - pinchOrigin.x) + (scale - 1) * (containerCenter.x - pinchOrigin.x));
+        var dy = Math.round((current.y - pinchOrigin.y) + (scale - 1) * (containerCenter.y - pinchOrigin.y));
 
         this.applyTransform(
             "translate(" + dx + "px, " + dy + "px) scale(" + scale + ")"
@@ -183,6 +184,20 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
             location.lon += resolution * ((size.w / 2) - zoomPixel.x);
             location.lat -= resolution * ((size.h / 2) - zoomPixel.y);
 
+            // Force a reflow before calling setCenter. This is to work
+            // around an issue occuring in iOS.
+            //
+            // See https://github.com/openlayers/openlayers/pull/351.
+            //
+            // Without a reflow setting the layer container div's top left
+            // style properties to "0px" - as done in Map.moveTo when zoom
+            // is changed - won't actually correctly reposition the layer
+            // container div.
+            //
+            // Also, we need to use a statement that the Google Closure
+            // compiler won't optimize away.
+            this.map.div.clientWidth = this.map.div.clientWidth;
+
             this.map.setCenter(location, zoom);
         }
     },
diff --git a/lib/OpenLayers/Control/SLDSelect.js b/lib/OpenLayers/Control/SLDSelect.js
index 7bb7574..fcafdfe 100644
--- a/lib/OpenLayers/Control/SLDSelect.js
+++ b/lib/OpenLayers/Control/SLDSelect.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -23,25 +23,22 @@
  */
 OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * control.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.
-     *
-     * Supported control event types (in addition to those from 
-     * <OpenLayers.Control>):
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * selected - Triggered when a selection occurs.  Listeners receive an 
      *     event with *filters* and *layer* properties.  Filters will be an 
      *     array of OpenLayers.Filter objects created in order to perform 
      *     the particular selection.
      */
-    EVENT_TYPES: ["selected"],
 
     /**
      * APIProperty: clearOnDeactivate
@@ -148,11 +145,6 @@ OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, {
      *     selection on.
      */
     initialize: function(handler, options) {
-        // concatenate events specific to this control with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.SLDSelect.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
 
         this.callbacks = OpenLayers.Util.extend({done: this.select, 
@@ -191,6 +183,9 @@ OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, {
      *     layer visibility. So if the source layer is turned off, the
      *     selection layer is also turned off.
      *
+     * Context: 
+     * - {<OpenLayers.Layer>}
+     *
      * Parameters:
      * evt - {Object}
      */
diff --git a/lib/OpenLayers/Control/Scale.js b/lib/OpenLayers/Control/Scale.js
index 9eae15f..3e36ad0 100644
--- a/lib/OpenLayers/Control/Scale.js
+++ b/lib/OpenLayers/Control/Scale.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -20,7 +20,7 @@
 OpenLayers.Control.Scale = OpenLayers.Class(OpenLayers.Control, {
     
     /**
-     * Parameter: element
+     * Property: element
      * {DOMElement}
      */
     element: null,
diff --git a/lib/OpenLayers/Control/ScaleLine.js b/lib/OpenLayers/Control/ScaleLine.js
index cdb52a8..2a501c2 100644
--- a/lib/OpenLayers/Control/ScaleLine.js
+++ b/lib/OpenLayers/Control/ScaleLine.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/SelectFeature.js b/lib/OpenLayers/Control/SelectFeature.js
index 5d2dc93..e5129ce 100644
--- a/lib/OpenLayers/Control/SelectFeature.js
+++ b/lib/OpenLayers/Control/SelectFeature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -21,15 +21,23 @@
  */
 OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
      *
-     * Supported event types:
-     *  - *beforefeaturehighlighted* Triggered before a feature is highlighted
-     *  - *featurehighlighted* Triggered when a feature is highlighted
-     *  - *featureunhighlighted* Triggered when a feature is unhighlighted
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
+     *
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
+     * beforefeaturehighlighted - Triggered before a feature is highlighted
+     * featurehighlighted - Triggered when a feature is highlighted
+     * featureunhighlighted - Triggered when a feature is unhighlighted
+     * boxselectionstart - Triggered before box selection starts
+     * boxselectionend - Triggered after box selection ends
      */
-    EVENT_TYPES: ["beforefeaturehighlighted", "featurehighlighted", "featureunhighlighted"],
     
     /**
      * Property: multipleKey
@@ -173,11 +181,6 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
      * options - {Object} 
      */
     initialize: function(layers, options) {
-        // concatenate events specific to this control with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.SelectFeature.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
         
         if(this.scope === null) {
@@ -543,12 +546,14 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
      */
     selectBox: function(position) {
         if (position instanceof OpenLayers.Bounds) {
-            var minXY = this.map.getLonLatFromPixel(
-                new OpenLayers.Pixel(position.left, position.bottom)
-            );
-            var maxXY = this.map.getLonLatFromPixel(
-                new OpenLayers.Pixel(position.right, position.top)
-            );
+            var minXY = this.map.getLonLatFromPixel({
+                x: position.left,
+                y: position.bottom
+            });
+            var maxXY = this.map.getLonLatFromPixel({
+                x: position.right,
+                y: position.top
+            });
             var bounds = new OpenLayers.Bounds(
                 minXY.lon, minXY.lat, maxXY.lon, maxXY.lat
             );
@@ -562,6 +567,7 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
             var prevMultiple = this.multiple;
             this.multiple = true;
             var layers = this.layers || [this.layer];
+            this.events.triggerEvent("boxselectionstart", {layers: layers}); 
             var layer;
             for(var l=0; l<layers.length; ++l) {
                 layer = layers[l];
@@ -583,6 +589,7 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
                 }
             }
             this.multiple = prevMultiple;
+            this.events.triggerEvent("boxselectionend", {layers: layers}); 
         }
     },
 
diff --git a/lib/OpenLayers/Control/Snapping.js b/lib/OpenLayers/Control/Snapping.js
index ee58a9e..ec75f6d 100644
--- a/lib/OpenLayers/Control/Snapping.js
+++ b/lib/OpenLayers/Control/Snapping.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -17,18 +17,17 @@
  */
 OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * control.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.
-     *
-     * Supported control event types (in addition to those from <OpenLayers.Control>):
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * beforesnap - Triggered before a snap occurs.  Listeners receive an
      *     event object with *point*, *x*, *y*, *distance*, *layer*, and
      *     *snapType* properties.  The point property will be original point
@@ -45,7 +44,6 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
      * unsnap - Triggered when a vertex is unsnapped.  Listeners receive an
      *     event with a *point* property.
      */
-    EVENT_TYPES: ["beforesnap", "snap", "unsnap"],
     
     /**
      * CONSTANT: DEFAULTS
@@ -118,7 +116,7 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
      *     the control.
      *
      * Valid options:
-     * layer - {OpenLayers.Layer.Vector} The editable layer.  Features from this
+     * layer - {<OpenLayers.Layer.Vector>} The editable layer.  Features from this
      *     layer that are digitized or modified may have vertices snapped to
      *     features from any of the target layers.
      * targets - {Array(Object | OpenLayers.Layer.Vector)} A list of objects for
@@ -144,7 +142,7 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
      *     continues after an eligible feature is found in a target layer.
      *
      * Valid target properties:
-     * layer - {OpenLayers.Layer.Vector} A target layer.  Features from this
+     * layer - {<OpenLayers.Layer.Vector>} A target layer.  Features from this
      *     layer will be eligible to act as snapping target for the editable
      *     layer.
      * tolerance - {Float} The distance (in pixels) at which snapping may occur.
@@ -162,7 +160,7 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
      * edgeTolerance - {Float} Optional distance at which snapping may occur
      *     for edges specifically.  If none is provided, <tolerance> will be
      *     used.
-     * filter - {OpenLayers.Filter} Optional filter to evaluate to determine if
+     * filter - {<OpenLayers.Filter>} Optional filter to evaluate to determine if
      *     feature is eligible for snapping.  If filter evaluates to true for a
      *     target feature a vertex may be snapped to the feature. 
      * minResolution - {Number} If a minResolution is provided, snapping to this
@@ -175,10 +173,6 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
      *     no maximum resolution limit.
      */
     initialize: function(options) {
-        // concatenate events specific to measure with those from the base
-        Array.prototype.push.apply(
-            this.EVENT_TYPES, OpenLayers.Control.prototype.EVENT_TYPES
-        );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
         this.options = options || {}; // TODO: this could be done by the super
         
@@ -205,7 +199,7 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
      *     layer is set.
      *
      * Parameters:
-     * layer - {OpenLayers.Layer.Vector}  The new editable layer.
+     * layer - {<OpenLayers.Layer.Vector>}  The new editable layer.
      */
     setLayer: function(layer) {
         if(this.active) {
@@ -476,7 +470,7 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
             feature = features[i];
             if(feature !== this.feature && !feature._sketch &&
                feature.state !== OpenLayers.State.DELETE &&
-               (!target.filter || target.filter.evaluate(feature.attributes))) {
+               (!target.filter || target.filter.evaluate(feature))) {
                 if(feature.atPoint(ll, maxTolerance, maxTolerance)) {
                     for(var j=0, stop=Math.min(result.rank+1, numTypes); j<stop; ++j) {
                         type = this.precedence[j];
diff --git a/lib/OpenLayers/Control/Split.js b/lib/OpenLayers/Control/Split.js
index 3dd823c..c382eae 100644
--- a/lib/OpenLayers/Control/Split.js
+++ b/lib/OpenLayers/Control/Split.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -18,18 +18,17 @@
  */
 OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * control.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.
-     *
-     * Supported control event types (in addition to those from <OpenLayers.Control>):
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * beforesplit - Triggered before a split occurs.  Listeners receive an
      *     event object with *source* and *target* properties.
      * split - Triggered when a split occurs.  Listeners receive an event with
@@ -47,7 +46,6 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
      *     sketch or modified feature used as a splitter.  The features
      *     property is a list of all resulting features.
      */
-    EVENT_TYPES: ["beforesplit", "split", "aftersplit"],
     
     /**
      * APIProperty: layer
@@ -109,7 +107,7 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
     
     /**
      * APIProperty: targetFilter
-     * {OpenLayers.Filter} Optional filter that will be evaluated
+     * {<OpenLayers.Filter>} Optional filter that will be evaluated
      *     to determine if a feature from the target layer is eligible for
      *     splitting.
      */
@@ -117,8 +115,8 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
     
     /**
      * APIProperty: sourceFilter
-     * {OpenLayers.Filter} Optional filter that will be evaluated
-     *     to determine if a feature from the target layer is eligible for
+     * {<OpenLayers.Filter>} Optional filter that will be evaluated
+     *     to determine if a feature from the source layer is eligible for
      *     splitting.
      */
     sourceFilter: null,
@@ -144,10 +142,10 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
      *     the control.
      *
      * Valid options:
-     * layer - {OpenLayers.Layer.Vector} The target layer.  Features from this
+     * layer - {<OpenLayers.Layer.Vector>} The target layer.  Features from this
      *     layer will be split by new or modified features on the source layer
      *     or temporary sketch layer.
-     * source - {OpenLayers.Layer.Vector} Optional source layer.  If provided
+     * source - {<OpenLayers.Layer.Vector>} Optional source layer.  If provided
      *     newly created features or modified features will be used to split
      *     features on the target layer.  If not provided, a temporary sketch
      *     layer will be created for drawing lines.
@@ -161,18 +159,14 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
      * mutual - {Boolean} If source and target are the same, split source
      *     features and target features where they intersect.  Default is
      *     true.  If false, only target features will be split.
-     * targetFilter - {OpenLayers.Filter} Optional filter that will be evaluated
+     * targetFilter - {<OpenLayers.Filter>} Optional filter that will be evaluated
      *     to determine if a feature from the target layer is eligible for
      *     splitting.
-     * sourceFilter - {OpenLayers.Filter} Optional filter that will be evaluated
+     * sourceFilter - {<OpenLayers.Filter>} Optional filter that will be evaluated
      *     to determine if a feature from the target layer is eligible for
      *     splitting.
      */
     initialize: function(options) {
-        // concatenate events specific to measure with those from the base
-        Array.prototype.push.apply(
-            this.EVENT_TYPES, OpenLayers.Control.prototype.EVENT_TYPES
-        );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
         this.options = options || {}; // TODO: this could be done by the super
         
@@ -187,7 +181,7 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
      * Set the source layer for edits layer.
      *
      * Parameters:
-     * layer - {OpenLayers.Layer.Vector}  The new source layer layer.  If
+     * layer - {<OpenLayers.Layer.Vector>}  The new source layer layer.  If
      *     null, a temporary sketch layer will be created.
      */
     setSource: function(layer) {
@@ -284,8 +278,7 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
     afterFeatureModified: function(event) {
         if(event.modified) {
             var feature = event.feature;
-            if(feature.geometry instanceof OpenLayers.Geometry.LineString ||
-               feature.geometry instanceof OpenLayers.Geometry.MultiLineString) {
+            if (typeof feature.geometry.split === "function") {
                 this.feature = event.feature;
                 this.considerSplit(event.feature);
             }
@@ -320,17 +313,20 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
      * {Boolean} The target is eligible for splitting.
      */
     isEligible: function(target) {
-        return (
-            target.state !== OpenLayers.State.DELETE
-        ) && (
-            target.geometry instanceof OpenLayers.Geometry.LineString ||
-            target.geometry instanceof OpenLayers.Geometry.MultiLineString
-        ) && (
-            this.feature !== target
-        ) && (
-            !this.targetFilter ||
-            this.targetFilter.evaluate(target.attributes)
-        );
+        if (!target.geometry) {
+            return false;
+        } else {
+            return (
+                target.state !== OpenLayers.State.DELETE
+            ) && (
+                typeof target.geometry.split === "function"
+            ) && (
+                this.feature !== target
+            ) && (
+                !this.targetFilter ||
+                this.targetFilter.evaluate(target.attributes)
+            );
+        }
     },
 
     /**
diff --git a/lib/OpenLayers/Control/TouchNavigation.js b/lib/OpenLayers/Control/TouchNavigation.js
index ab4ca49..7ff476e 100644
--- a/lib/OpenLayers/Control/TouchNavigation.js
+++ b/lib/OpenLayers/Control/TouchNavigation.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/TransformFeature.js b/lib/OpenLayers/Control/TransformFeature.js
index 42faff7..85f593e 100644
--- a/lib/OpenLayers/Control/TransformFeature.js
+++ b/lib/OpenLayers/Control/TransformFeature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -21,38 +21,43 @@
  */
 OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
 
-    /**
-     * Constant: EVENT_TYPES
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
      *
-     * Supported event types:
-     *  - *beforesetfeature* Triggered before a feature is set for
-     *      tranformation. The feature will not be set if a listener returns
-     *      false. Listeners receive a *feature* property, with the feature
-     *      that will be set for transformation. Listeners are allowed to
-     *      set the control's *scale*, *ratio* and *rotation* properties,
-     *      which will set the initial scale, ratio and rotation of the
-     *      feature, like the <setFeature> method's initialParams argument.
-     *  - *setfeature* Triggered when a feature is set for tranformation.
-     *      Listeners receive a *feature* property, with the feature that
-     *      is now set for transformation.
-     *  - *beforetransform* Triggered while dragging, before a feature is
-     *      transformed. The feature will not be transformed if a listener
-     *      returns false (but the box still will). Listeners receive one or
-     *      more of *center*, *scale*, *ratio* and *rotation*. The *center*
-     *      property is an <OpenLayers.Geometry.Point> object with the new
-     *      center of the transformed feature, the others are Floats with the
-     *      scale, ratio or rotation change since the last transformation.
-     *  - *transform* Triggered while dragging, when a feature is transformed.
-     *      Listeners receive an event object with one or more of *center*,
-     *      *scale*, *ratio* and *rotation*. The *center* property is an
-     *      <OpenLayers.Geometry.Point> object with the new center of the
-     *      transformed feature, the others are Floats with the scale, ratio
-     *      or rotation change of the feature since the last transformation.
-     *  - *transformcomplete* Triggered after dragging. Listeners receive
-     *      an event object with the transformed *feature*.
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
+     * beforesetfeature - Triggered before a feature is set for
+     *     tranformation. The feature will not be set if a listener returns
+     *     false. Listeners receive a *feature* property, with the feature
+     *     that will be set for transformation. Listeners are allowed to
+     *     set the control's *scale*, *ratio* and *rotation* properties,
+     *     which will set the initial scale, ratio and rotation of the
+     *     feature, like the <setFeature> method's initialParams argument.
+     * setfeature - Triggered when a feature is set for tranformation.
+     *     Listeners receive a *feature* property, with the feature that
+     *     is now set for transformation.
+     * beforetransform - Triggered while dragging, before a feature is
+     *     transformed. The feature will not be transformed if a listener
+     *     returns false (but the box still will). Listeners receive one or
+     *     more of *center*, *scale*, *ratio* and *rotation*. The *center*
+     *     property is an <OpenLayers.Geometry.Point> object with the new
+     *     center of the transformed feature, the others are Floats with the
+     *     scale, ratio or rotation change since the last transformation.
+     * transform - Triggered while dragging, when a feature is transformed.
+     *     Listeners receive an event object with one or more of *center*,
+     *     scale*, *ratio* and *rotation*. The *center* property is an
+     *     <OpenLayers.Geometry.Point> object with the new center of the
+     *     transformed feature, the others are Floats with the scale, ratio
+     *     or rotation change of the feature since the last transformation.
+     * transformcomplete - Triggered after dragging. Listeners receive
+     *     an event object with the transformed *feature*.
      */
-    EVENT_TYPES: ["beforesetfeature", "setfeature", "beforetransform",
-        "transform", "transformcomplete"],
 
     /**
      * APIProperty: geometryTypes
@@ -171,6 +176,15 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
     dragControl: null,
     
     /**
+     * APIProperty: irregular
+     * {Boolean} Make scaling/resizing work irregularly. If true then
+     *     dragging a handle causes the feature to resize in the direction
+     *     of movement. If false then the feature resizes symetrically
+     *     about it's center.
+     */
+    irregular: false,
+    
+    /**
      * Constructor: OpenLayers.Control.TransformFeature
      * Create a new transform feature control.
      *
@@ -181,11 +195,6 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
      *     control.
      */
     initialize: function(layer, options) {
-        // concatenate events specific to this control with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.TransformFeature.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
 
         this.layer = layer;
@@ -232,9 +241,6 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
             this.dragControl.deactivate();
             deactivated = true;
         }
-        if (deactivated) {
-        	this.unsetFeature();
-        }
         return deactivated;
     },
     
@@ -317,14 +323,14 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
      * If the control is active, it will be deactivated first.
      */
     unsetFeature: function() {
-    	if (this.active) {
-    		this.deactivate();
-    	} else {
-	    	this.feature = null;
-	    	this.rotation = 0;
-	    	this.scale = 1;
-	    	this.ratio = 1;
-    	}
+        if (this.active) {
+            this.deactivate();
+        } else {
+            this.feature = null;
+            this.rotation = 0;
+            this.scale = 1;
+            this.ratio = 1;
+        }
     },
     
     /**
@@ -335,7 +341,7 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
         var control = this;
         
         this.center = new OpenLayers.Geometry.Point(0, 0);
-        var box = new OpenLayers.Feature.Vector(
+        this.box = new OpenLayers.Feature.Vector(
             new OpenLayers.Geometry.LineString([
                 new OpenLayers.Geometry.Point(-1, -1),
                 new OpenLayers.Geometry.Point(0, -1),
@@ -351,7 +357,7 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
         );
         
         // Override for box move - make sure that the center gets updated
-        box.geometry.move = function(x, y) {
+        this.box.geometry.move = function(x, y) {
             control._moving = true;
             OpenLayers.Geometry.LineString.prototype.move.apply(this, arguments);
             control.center.move(x, y);
@@ -399,6 +405,10 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
             var dy1 = this.y - centerGeometry.y;
             var dx0 = dx1 - (this.x - oldGeom.x);
             var dy0 = dy1 - (this.y - oldGeom.y);
+            if (control.irregular && !control._setfeature) {
+               dx1 -= (this.x - oldGeom.x) / 2;
+               dy1 -= (this.y - oldGeom.y) / 2;
+            }
             this.x = oldX;
             this.y = oldY;
             var scale, ratio = 1;
@@ -420,6 +430,13 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
             control.box.geometry.resize(scale, centerGeometry, ratio);
             control.box.geometry.rotate(control.rotation, centerGeometry);
             control.transformFeature({scale: scale, ratio: ratio});
+            if (control.irregular && !control._setfeature) {
+               var newCenter = centerGeometry.clone();
+               newCenter.x += Math.abs(oldX - centerGeometry.x) < 0.00001 ? 0 : (this.x - oldX);
+               newCenter.y += Math.abs(oldY - centerGeometry.y) < 0.00001 ? 0 : (this.y - oldY);
+               control.box.geometry.move(this.x - oldX, this.y - oldY);
+               control.transformFeature({center: newCenter});
+            }
         };
         
         // Override for rotation handle move - make sure that the box and
@@ -457,14 +474,17 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
         var handles = new Array(8);
         var rotationHandles = new Array(4);
         var geom, handle, rotationHandle;
+        var positions = ["sw", "s", "se", "e", "ne", "n", "nw", "w"];
         for(var i=0; i<8; ++i) {
-            geom = box.geometry.components[i];
-            handle = new OpenLayers.Feature.Vector(geom.clone(), null,
-                typeof this.renderIntent == "string" ? null :
+            geom = this.box.geometry.components[i];
+            handle = new OpenLayers.Feature.Vector(geom.clone(), {
+                role: positions[i] + "-resize"
+            }, typeof this.renderIntent == "string" ? null :
                 this.renderIntent);
             if(i % 2 == 0) {
-                rotationHandle = new OpenLayers.Feature.Vector(geom.clone(),
-                    null, typeof this.rotationHandleSymbolizer == "string" ?
+                rotationHandle = new OpenLayers.Feature.Vector(geom.clone(), {
+                    role: positions[i] + "-rotate"
+                }, typeof this.rotationHandleSymbolizer == "string" ?
                     null : this.rotationHandleSymbolizer);
                 rotationHandle.geometry.move = rotationHandleMoveFn;
                 geom._rotationHandle = rotationHandle;
@@ -478,7 +498,6 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
             handles[i] = handle;
         }
         
-        this.box = box;
         this.rotationHandles = rotationHandles;
         this.handles = handles;
     },
@@ -503,7 +522,6 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
             onDrag: function(feature, pixel) {
                 if(feature === control.box) {
                     control.transformFeature({center: control.center});
-                    control.drawHandles();
                 }
             },
             // set a new feature
@@ -589,10 +607,16 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
             geom._rotationHandle && geom._rotationHandle.destroy();
             geom._rotationHandle = null;
         }
+        this.center = null;
+        this.feature = null;
+        this.handles = null;
+        this.rotationHandleSymbolizer = null;
+        this.rotationHandles = null;
         this.box.destroy();
         this.box = null;
         this.layer = null;
         this.dragControl.destroy();
+        this.dragControl = null;
         OpenLayers.Control.prototype.destroy.apply(this, arguments);
     },
 
diff --git a/lib/OpenLayers/Control/UTFGrid.js b/lib/OpenLayers/Control/UTFGrid.js
new file mode 100644
index 0000000..4b439ac
--- /dev/null
+++ b/lib/OpenLayers/Control/UTFGrid.js
@@ -0,0 +1,240 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Handler/Hover.js
+ * @requires OpenLayers/Handler/Click.js
+ */
+
+/**
+ * Class: OpenLayers.Control.UTFGrid
+ *
+ * This Control provides behavior associated with UTFGrid Layers.
+ * These 'hit grids' provide underlying feature attributes without
+ * calling the server (again). This control allows Mousemove, Hovering 
+ * and Click events to trigger callbacks that use the attributes in 
+ * whatever way you need. 
+ *
+ * The most common example may be a UTFGrid layer containing feature
+ * attributes that are displayed in a div as you mouseover.
+ *
+ * Example Code:
+ *
+ * (start code)
+ * var world_utfgrid = new OpenLayers.Layer.UTFGrid( 
+ *     'UTFGrid Layer', 
+ *     "http://tiles/world_utfgrid/${z}/${x}/${y}.json"
+ * );
+ * map.addLayer(world_utfgrid);
+ * 
+ * var control = new OpenLayers.Control.UTFGrid({
+ *     layers: [world_utfgrid],
+ *     handlerMode: 'move',
+ *     callback: function(infoLookup) {
+ *         // do something with returned data
+ *
+ *     }
+ * })
+ * (end code)
+ *
+ *
+ * Inherits from:
+ *  - <OpenLayers.Control>
+ */
+OpenLayers.Control.UTFGrid = OpenLayers.Class(OpenLayers.Control, {
+    
+    /**
+     * APIProperty: autoActivate
+     * {Boolean} Activate the control when it is added to a map.  Default is
+     *     true.
+     */
+    autoActivate: true,
+
+    /** 
+     * APIProperty: Layers
+     * List of layers to consider. Must be Layer.UTFGrids
+     * `null` is the default indicating all UTFGrid Layers are queried.
+     * {Array} <OpenLayers.Layer.UTFGrid> 
+     */
+    layers: null,
+
+    /* Property: defaultHandlerOptions
+     * The default opts passed to the handler constructors
+     */
+    defaultHandlerOptions: {
+        'delay': 300,
+        'pixelTolerance': 4,
+        'stopMove': false,
+        'single': true,
+        'double': false,
+        'stopSingle': false,
+        'stopDouble': false
+    },
+
+    /* APIProperty: handlerMode
+     * Defaults to 'click'. Can be 'hover' or 'move'.
+     */
+    handlerMode: 'click',
+
+    /**
+     * APIMethod: setHandler
+     * sets this.handlerMode and calls resetHandler()
+     *
+     * Parameters:
+     * hm - {String} Handler Mode string; 'click', 'hover' or 'move'.
+     */
+    setHandler: function(hm) {
+        this.handlerMode = hm;
+        this.resetHandler();
+    },
+
+    /**
+     * Method: resetHandler
+     * Deactivates the old hanlder and creates a new
+     * <OpenLayers.Handler> based on the mode specified in
+     * this.handlerMode
+     *
+     */
+    resetHandler: function() {
+        if (this.handler) {
+            this.handler.deactivate();
+            this.handler.destroy();
+            this.handler = null;
+        }
+   
+        if (this.handlerMode == 'hover') {
+            // Handle this event on hover
+            this.handler = new OpenLayers.Handler.Hover(
+                this,
+                {'pause': this.handleEvent, 'move': this.reset},
+                this.handlerOptions
+            );
+        } else if (this.handlerMode == 'click') {
+            // Handle this event on click
+            this.handler = new OpenLayers.Handler.Click(
+                this, {
+                    'click': this.handleEvent
+                }, this.handlerOptions
+            );
+        } else if (this.handlerMode == 'move') {
+            this.handler = new OpenLayers.Handler.Hover(
+                this,
+                // Handle this event while hovering OR moving
+                {'pause': this.handleEvent, 'move': this.handleEvent},
+                this.handlerOptions
+            );
+        }
+        if (this.handler) {
+            return true;
+        } else {
+            return false;
+        }
+    },
+
+    /**
+     * Constructor: <OpenLayers.Control.UTFGrid>
+     *
+     * Parameters:
+     * options - {Object} 
+     */
+    initialize: function(options) {
+        options = options || {};
+        options.handlerOptions = options.handlerOptions || this.defaultHandlerOptions;
+        OpenLayers.Control.prototype.initialize.apply(this, [options]);
+        this.resetHandler();
+    }, 
+
+    /**
+     * Method: handleEvent
+     * Internal method called when specified event is triggered.
+     * 
+     * This method does several things:
+     *
+     * Gets the lonLat of the event.
+     *
+     * Loops through the appropriate hit grid layers and gathers the attributes.
+     *
+     * Passes the attributes to the callback
+     *
+     * Parameters:
+     * evt - {<OpenLayers.Event>} 
+     */
+    handleEvent: function(evt) {
+        if (evt == null) {
+            this.reset();
+            return;
+        }
+
+        var lonLat = this.map.getLonLatFromPixel(evt.xy);
+        if (!lonLat) { 
+            return;
+        }    
+        
+        var layers = this.findLayers();
+        if (layers.length > 0) {
+            var infoLookup = {};
+            var layer, idx;
+            for (var i=0, len=layers.length; i<len; i++) {
+                layer = layers[i];
+                idx = OpenLayers.Util.indexOf(this.map.layers, layer);
+                infoLookup[idx] = layer.getFeatureInfo(lonLat);
+            }
+            this.callback(infoLookup, lonLat, evt.xy);
+        }
+    },
+
+    /**
+     * APIMethod: callback
+     * Function to be called when a mouse event corresponds with a location that
+     *     includes data in one of the configured UTFGrid layers.
+     *
+     * Parameters:
+     * infoLookup - {Object} Keys of this object are layer indexes and can be
+     *     used to resolve a layer in the map.layers array.  The structure of
+     *     the property values depend on the data included in the underlying
+     *     UTFGrid and may be any valid JSON type.  
+     */
+    callback: function(infoLookup) {
+        // to be provided in the constructor
+    },
+
+    /**
+     * Method: reset
+     * Calls the callback with null.
+     */
+    reset: function(evt) {
+        this.callback(null);
+    },
+
+    /**
+     * Method: findLayers
+     * Internal method to get the layers, independent of whether we are
+     *     inspecting the map or using a client-provided array
+     *
+     * The default value of this.layers is null; this causes the 
+     * findLayers method to return ALL UTFGrid layers encountered.
+     *
+     * Parameters:
+     * None
+     *
+     * Returns:
+     * {Array} Layers to handle on each event
+     */
+    findLayers: function() {
+        var candidates = this.layers || this.map.layers;
+        var layers = [];
+        var layer;
+        for (var i=candidates.length-1; i>=0; --i) {
+            layer = candidates[i];
+            if (layer instanceof OpenLayers.Layer.UTFGrid ) { 
+                layers.push(layer);
+            }
+        }
+        return layers;
+    },
+
+    CLASS_NAME: "OpenLayers.Control.UTFGrid"
+});
diff --git a/lib/OpenLayers/Control/WMSGetFeatureInfo.js b/lib/OpenLayers/Control/WMSGetFeatureInfo.js
index f0a2188..974e703 100644
--- a/lib/OpenLayers/Control/WMSGetFeatureInfo.js
+++ b/lib/OpenLayers/Control/WMSGetFeatureInfo.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -9,6 +9,7 @@
  * @requires OpenLayers/Handler/Click.js
  * @requires OpenLayers/Handler/Hover.js
  * @requires OpenLayers/Request.js
+ * @requires OpenLayers/Format/WMSGetFeatureInfo.js
  */
 
 /**
@@ -154,10 +155,17 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      */
     hoverRequest: null,
     
-    /**
-     * Constant: EVENT_TYPES
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
      *
-     * Supported event types (in addition to those from <OpenLayers.Control>):
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * beforegetfeatureinfo - Triggered before the request is sent.
      *      The event object has an *xy* property with the position of the 
      *      mouse click or hover event that triggers the request.
@@ -172,7 +180,6 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      *      layers, *text* and *request* will only contain the response body
      *      and request object of the last request.
      */
-    EVENT_TYPES: ["beforegetfeatureinfo", "nogetfeatureinfo", "getfeatureinfo"],
 
     /**
      * Constructor: <OpenLayers.Control.WMSGetFeatureInfo>
@@ -181,12 +188,6 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      * options - {Object} 
      */
     initialize: function(options) {
-        // concatenate events specific to vector with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.WMSGetFeatureInfo.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
-
         options = options || {};
         options.handlerOptions = options.handlerOptions || {};
 
@@ -220,35 +221,6 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
     },
 
     /**
-     * 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
      *
@@ -296,7 +268,7 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
         var candidates = this.layers || this.map.layers;
         var layers = [];
         var layer, url;
-        for(var i=0, len=candidates.length; i<len; ++i) {
+        for(var i = candidates.length - 1; i >= 0; --i) {
             layer = candidates[i];
             if(layer instanceof OpenLayers.Layer.WMS &&
                (!this.queryVisible || layer.getVisibility())) {
@@ -352,9 +324,11 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      */
     buildWMSOptions: function(url, layers, clickPosition, format) {
         var layerNames = [], styleNames = [];
-        for (var i = 0, len = layers.length; i < len; i++) { 
-            layerNames = layerNames.concat(layers[i].params.LAYERS);
-            styleNames = styleNames.concat(this.getStyleNames(layers[i]));
+        for (var i = 0, len = layers.length; i < len; i++) {
+            if (layers[i].params.LAYERS != null) {
+                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 -
@@ -368,9 +342,7 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
             service: "WMS",
             version: firstLayer.params.VERSION,
             request: "GetFeatureInfo",
-            layers: layerNames,
-            query_layers: layerNames,
-            styles: styleNames,
+            exceptions: firstLayer.params.EXCEPTIONS,
             bbox: this.map.getExtent().toBBOX(null,
                 firstLayer.reverseAxisOrder()),
             feature_count: this.maxFeatures,
@@ -390,6 +362,13 @@ OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
                 y: parseInt(clickPosition.y)
             }
         );
+        if (layerNames.length != 0) {
+            params = OpenLayers.Util.extend({
+                layers: layerNames,
+                query_layers: layerNames,
+                styles: styleNames
+            }, params);
+        }
         OpenLayers.Util.applyDefaults(params, this.vendorParams);
         return {
             url: url,
diff --git a/lib/OpenLayers/Control/WMTSGetFeatureInfo.js b/lib/OpenLayers/Control/WMTSGetFeatureInfo.js
index ec62eea..ac2788e 100644
--- a/lib/OpenLayers/Control/WMTSGetFeatureInfo.js
+++ b/lib/OpenLayers/Control/WMTSGetFeatureInfo.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -135,10 +135,17 @@ OpenLayers.Control.WMTSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      */
     hoverRequest: null,
     
-    /**
-     * Constant: EVENT_TYPES
+    /** 
+     * APIProperty: events
+     * {<OpenLayers.Events>} Events instance for listeners and triggering
+     *     control specific events.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * control.events.register(type, obj, listener);
+     * (end)
      *
-     * Supported event types (in addition to those from <OpenLayers.Control>):
+     * Supported event types (in addition to those from <OpenLayers.Control.events>):
      * beforegetfeatureinfo - Triggered before each request is sent.
      *      The event object has an *xy* property with the position of the 
      *      mouse click or hover event that triggers the request and a *layer*
@@ -157,7 +164,6 @@ OpenLayers.Control.WMTSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      *      an event with *request*, *xy*, and *layer*  properties.  In the case 
      *      of a parsing error, the event will also contain an *error* property.
      */
-    EVENT_TYPES: ["beforegetfeatureinfo", "getfeatureinfo", "exception"],
     
     /** 
      * Property: pending
@@ -172,12 +178,6 @@ OpenLayers.Control.WMTSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
      * options - {Object} 
      */
     initialize: function(options) {
-        // concatenate events specific to vector with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Control.WMTSGetFeatureInfo.prototype.EVENT_TYPES.concat(
-            OpenLayers.Control.prototype.EVENT_TYPES
-        );
-
         options = options || {};
         options.handlerOptions = options.handlerOptions || {};
 
diff --git a/lib/OpenLayers/Control/Zoom.js b/lib/OpenLayers/Control/Zoom.js
new file mode 100644
index 0000000..37ac48c
--- /dev/null
+++ b/lib/OpenLayers/Control/Zoom.js
@@ -0,0 +1,138 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Events/buttonclick.js
+ */
+
+/**
+ * Class: OpenLayers.Control.Zoom
+ * The Zoom control is a pair of +/- links for zooming in and out.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Control>
+ */
+OpenLayers.Control.Zoom = OpenLayers.Class(OpenLayers.Control, {
+    
+    /**
+     * APIProperty: zoomInText
+     * {String}
+     * Text for zoom-in link.  Default is "+".
+     */
+    zoomInText: "+",
+
+    /**
+     * APIProperty: zoomInId
+     * {String}
+     * Instead of having the control create a zoom in link, you can provide 
+     *     the identifier for an anchor element already added to the document.
+     *     By default, an element with id "olZoomInLink" will be searched for
+     *     and used if it exists.
+     */
+    zoomInId: "olZoomInLink",
+
+    /**
+     * APIProperty: zoomOutText
+     * {String}
+     * Text for zoom-out link.  Default is "-".
+     */
+    zoomOutText: "-",
+
+    /**
+     * APIProperty: zoomOutId
+     * {String}
+     * Instead of having the control create a zoom out link, you can provide 
+     *     the identifier for an anchor element already added to the document.
+     *     By default, an element with id "olZoomOutLink" will be searched for
+     *     and used if it exists.
+     */
+    zoomOutId: "olZoomOutLink",
+
+    /**
+     * Method: draw
+     *
+     * Returns:
+     * {DOMElement} A reference to the DOMElement containing the zoom links.
+     */
+    draw: function() {
+        var div = OpenLayers.Control.prototype.draw.apply(this),
+            links = this.getOrCreateLinks(div),
+            zoomIn = links.zoomIn,
+            zoomOut = links.zoomOut,
+            eventsInstance = this.map.events;
+        
+        if (zoomOut.parentNode !== div) {
+            eventsInstance = this.events;
+            eventsInstance.attachToElement(zoomOut.parentNode);
+        }
+        eventsInstance.register("buttonclick", this, this.onZoomClick);
+        
+        this.zoomInLink = zoomIn;
+        this.zoomOutLink = zoomOut;
+        return div;
+    },
+    
+    /**
+     * Method: getOrCreateLinks
+     * 
+     * Parameters:
+     * el - {DOMElement}
+     *
+     * Return: 
+     * {Object} Object with zoomIn and zoomOut properties referencing links.
+     */
+    getOrCreateLinks: function(el) {
+        var zoomIn = document.getElementById(this.zoomInId),
+            zoomOut = document.getElementById(this.zoomOutId);
+        if (!zoomIn) {
+            zoomIn = document.createElement("a");
+            zoomIn.href = "#zoomIn";
+            zoomIn.appendChild(document.createTextNode(this.zoomInText));
+            zoomIn.className = "olControlZoomIn";
+            el.appendChild(zoomIn);
+        }
+        OpenLayers.Element.addClass(zoomIn, "olButton");
+        if (!zoomOut) {
+            zoomOut = document.createElement("a");
+            zoomOut.href = "#zoomOut";
+            zoomOut.appendChild(document.createTextNode(this.zoomOutText));
+            zoomOut.className = "olControlZoomOut";
+            el.appendChild(zoomOut);
+        }
+        OpenLayers.Element.addClass(zoomOut, "olButton");
+        return {
+            zoomIn: zoomIn, zoomOut: zoomOut
+        };
+    },
+    
+    /**
+     * Method: onZoomClick
+     * Called when zoomin/out link is clicked.
+     */
+    onZoomClick: function(evt) {
+        var button = evt.buttonElement;
+        if (button === this.zoomInLink) {
+            this.map.zoomIn();
+        } else if (button === this.zoomOutLink) {
+            this.map.zoomOut();
+        }
+    },
+
+    /** 
+     * Method: destroy
+     * Clean up.
+     */
+    destroy: function() {
+        if (this.map) {
+            this.map.events.unregister("buttonclick", this, this.onZoomClick);
+        }
+        delete this.zoomInLink;
+        delete this.zoomOutLink;
+        OpenLayers.Control.prototype.destroy.apply(this);
+    },
+
+    CLASS_NAME: "OpenLayers.Control.Zoom"
+});
diff --git a/lib/OpenLayers/Control/ZoomBox.js b/lib/OpenLayers/Control/ZoomBox.js
index 9cdee91..8f407ad 100644
--- a/lib/OpenLayers/Control/ZoomBox.js
+++ b/lib/OpenLayers/Control/ZoomBox.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -31,7 +31,16 @@ OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
     out: false,
 
     /**
-     * Property: alwaysZoom
+     * APIProperty: keyMask
+     * {Integer} Zoom only occurs if the keyMask matches the combination of 
+     *     keys down. Use bitwise operators and one or more of the
+     *     <OpenLayers.Handler> constants to construct a keyMask. Leave null if 
+     *     not used mask. Default is null.
+     */
+    keyMask: null,
+
+    /**
+     * APIProperty: alwaysZoom
      * {Boolean} Always zoom in/out, when box drawed 
      */
     alwaysZoom: false,
@@ -54,10 +63,14 @@ OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
         if (position instanceof OpenLayers.Bounds) {
             var bounds;
             if (!this.out) {
-                var minXY = this.map.getLonLatFromPixel(
-                            new OpenLayers.Pixel(position.left, position.bottom));
-                var maxXY = this.map.getLonLatFromPixel(
-                            new OpenLayers.Pixel(position.right, position.top));
+                var minXY = this.map.getLonLatFromPixel({
+                    x: position.left,
+                    y: position.bottom
+                });
+                var maxXY = this.map.getLonLatFromPixel({
+                    x: position.right,
+                    y: position.top
+                });
                 bounds = new OpenLayers.Bounds(minXY.lon, minXY.lat,
                                                maxXY.lon, maxXY.lat);
             } else {
diff --git a/lib/OpenLayers/Control/ZoomIn.js b/lib/OpenLayers/Control/ZoomIn.js
index 0faaa78..776172d 100644
--- a/lib/OpenLayers/Control/ZoomIn.js
+++ b/lib/OpenLayers/Control/ZoomIn.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/ZoomOut.js b/lib/OpenLayers/Control/ZoomOut.js
index b4f93d0..2a538af 100644
--- a/lib/OpenLayers/Control/ZoomOut.js
+++ b/lib/OpenLayers/Control/ZoomOut.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/ZoomPanel.js b/lib/OpenLayers/Control/ZoomPanel.js
index 1905648..d08c27b 100644
--- a/lib/OpenLayers/Control/ZoomPanel.js
+++ b/lib/OpenLayers/Control/ZoomPanel.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Control/ZoomToMaxExtent.js b/lib/OpenLayers/Control/ZoomToMaxExtent.js
index e43d4c4..b172c28 100644
--- a/lib/OpenLayers/Control/ZoomToMaxExtent.js
+++ b/lib/OpenLayers/Control/ZoomToMaxExtent.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Events.js b/lib/OpenLayers/Events.js
index 69769c3..c2b5b99 100644
--- a/lib/OpenLayers/Events.js
+++ b/lib/OpenLayers/Events.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -20,6 +20,12 @@ OpenLayers.Event = {
      * element._eventCacheID 
      */
     observers: false,
+
+    /**
+     * Constant: KEY_SPACE
+     * {int}
+     */
+    KEY_SPACE: 32,
     
     /** 
      * Constant: KEY_BACKSPACE 
@@ -155,10 +161,8 @@ OpenLayers.Event = {
      * Parameters: 
      * event - {Event} 
      * allowDefault - {Boolean} If true, we stop the event chain but 
-     *                               still allow the default browser 
-     *                               behaviour (text selection, radio-button 
-     *                               clicking, etc)
-     *                               Default false
+     *     still allow the default browser behaviour (text selection,
+     *     radio-button clicking, etc).  Default is false.
      */
     stop: function(event, allowDefault) {
         
@@ -376,14 +380,6 @@ OpenLayers.Event = {
 /* prevent memory leaks in IE */
 OpenLayers.Event.observe(window, 'unload', OpenLayers.Event.unloadCache, false);
 
-// FIXME: Remove this in 3.0. In 3.0, Event.stop will no longer be provided
-// by OpenLayers.
-if (window.Event) {
-    OpenLayers.Util.applyDefaults(window.Event, OpenLayers.Event);
-} else {
-    var Event = OpenLayers.Event;
-}
-
 /**
  * Class: OpenLayers.Events
  */
@@ -398,7 +394,8 @@ OpenLayers.Events = OpenLayers.Class({
         "mousedown", "mouseup", "mousemove", 
         "click", "dblclick", "rightclick", "dblrightclick",
         "resize", "focus", "blur",
-        "touchstart", "touchmove", "touchend"
+        "touchstart", "touchmove", "touchend",
+        "keydown"
     ],
 
     /** 
@@ -420,12 +417,6 @@ OpenLayers.Events = OpenLayers.Class({
     element: null,
 
     /** 
-     * Property: eventTypes 
-     * {Array(String)}  list of support application events 
-     */
-    eventTypes: null,
-
-    /** 
      * Property: eventHandler 
      * {Function}  bound event handler attached to elements 
      */
@@ -464,6 +455,77 @@ OpenLayers.Events = OpenLayers.Class({
      *        the location of the element in the page changes
     */
     includeXY: false,      
+    
+    /**
+     * APIProperty: extensions
+     * {Object} Event extensions registered with this instance. Keys are
+     *     event types, values are {OpenLayers.Events.*} extension instances or
+     *     {Boolean} for events that an instantiated extension provides in
+     *     addition to the one it was created for.
+     *
+     * Extensions create an event in addition to browser events, which usually
+     * fires when a sequence of browser events is completed. Extensions are
+     * automatically instantiated when a listener is registered for an event
+     * provided by an extension.
+     *
+     * Extensions are created in the <OpenLayers.Events> namespace using
+     * <OpenLayers.Class>, and named after the event they provide.
+     * The constructor receives the target <OpenLayers.Events> instance as
+     * argument. Extensions that need to capture browser events before they
+     * propagate can register their listeners events using <register>, with
+     * {extension: true} as 4th argument.
+     *
+     * If an extension creates more than one event, an alias for each event
+     * type should be created and reference the same class. The constructor
+     * should set a reference in the target's extensions registry to itself.
+     *
+     * Below is a minimal extension that provides the "foostart" and "fooend"
+     * event types, which replace the native "click" event type if clicked on
+     * an element with the css class "foo":
+     *
+     * (code)
+     *   OpenLayers.Events.foostart = OpenLayers.Class({
+     *       initialize: function(target) {
+     *           this.target = target;
+     *           this.target.register("click", this, this.doStuff, {extension: true});
+     *           // only required if extension provides more than one event type
+     *           this.target.extensions["foostart"] = true;
+     *           this.target.extensions["fooend"] = true;
+     *       },
+     *       destroy: function() {
+     *           var target = this.target;
+     *           target.unregister("click", this, this.doStuff);
+     *           delete this.target;
+     *           // only required if extension provides more than one event type
+     *           delete target.extensions["foostart"];
+     *           delete target.extensions["fooend"];
+     *       },
+     *       doStuff: function(evt) {
+     *           var propagate = true;
+     *           if (OpenLayers.Event.element(evt).className === "foo") {
+     *               propagate = false;
+     *               var target = this.target;
+     *               target.triggerEvent("foostart");
+     *               window.setTimeout(function() {
+     *                   target.triggerEvent("fooend");
+     *               }, 1000);
+     *           }
+     *           return propagate;
+     *       }
+     *   });
+     *   // only required if extension provides more than one event type
+     *   OpenLayers.Events.fooend = OpenLayers.Events.foostart;
+     * (end)
+     * 
+     */
+    extensions: null,
+    
+    /**
+     * Property: extensionCount
+     * {Object} Keys are event types (like in <listeners>), values are the
+     *     number of extension listeners for each event type.
+     */
+    extensionCount: null,
 
     /**
      * Method: clearMouseListener
@@ -480,7 +542,9 @@ OpenLayers.Events = OpenLayers.Class({
      * Parameters:
      * 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 
+     * eventTypes - {Array(String)} Deprecated.  Array of custom application
+     *     events.  A listener may be registered for any named event, regardless
+     *     of the values provided here.
      * fallThrough - {Boolean} Allow events to fall through after these have
      *                         been handled?
      * options - {Object} Options for the events object.
@@ -490,26 +554,8 @@ OpenLayers.Events = OpenLayers.Class({
         this.object     = object;
         this.fallThrough = fallThrough;
         this.listeners  = {};
-
-        // keep a bound copy of handleBrowserEvent() so that we can
-        // pass the same function to both Event.observe() and .stopObserving()
-        this.eventHandler = OpenLayers.Function.bindAsEventListener(
-            this.handleBrowserEvent, this
-        );
-        
-        // to be used with observe and stopObserving
-        this.clearMouseListener = OpenLayers.Function.bind(
-            this.clearMouseCache, this
-        );
-
-        // if eventTypes is specified, create a listeners list for each 
-        // custom application event.
-        this.eventTypes = [];
-        if (eventTypes != null) {
-            for (var i=0, len=eventTypes.length; i<len; i++) {
-                this.addEventType(eventTypes[i]);
-            }
-        }
+        this.extensions = {};
+        this.extensionCount = {};
         
         // if a dom element is specified, add a listeners list 
         // for browser events on the element and register them
@@ -522,6 +568,12 @@ OpenLayers.Events = OpenLayers.Class({
      * APIMethod: destroy
      */
     destroy: function () {
+        for (var e in this.extensions) {
+            if (typeof this.extensions[e] !== "boolean") {
+                this.extensions[e].destroy();
+            }
+        }
+        this.extensions = null;
         if (this.element) {
             OpenLayers.Event.stopObservingElement(this.element);
             if(this.element.hasScrollEvent) {
@@ -534,24 +586,18 @@ OpenLayers.Events = OpenLayers.Class({
 
         this.listeners = null;
         this.object = null;
-        this.eventTypes = null;
         this.fallThrough = null;
         this.eventHandler = null;
     },
 
     /**
      * APIMethod: addEventType
-     * Add a new event type to this events object.
-     * If the event type has already been added, do nothing.
+     * Deprecated.  Any event can be triggered without adding it first.
      * 
      * Parameters:
      * eventName - {String}
      */
     addEventType: function(eventName) {
-        if (!this.listeners[eventName]) {
-            this.eventTypes.push(eventName);
-            this.listeners[eventName] = [];
-        }
     },
 
     /**
@@ -561,19 +607,26 @@ OpenLayers.Events = OpenLayers.Class({
      * element - {HTMLDOMElement} a DOM element to attach browser events to
      */
     attachToElement: function (element) {
-        if(this.element) {
+        if (this.element) {
             OpenLayers.Event.stopObservingElement(this.element);
+        } else {
+            // keep a bound copy of handleBrowserEvent() so that we can
+            // pass the same function to both Event.observe() and .stopObserving()
+            this.eventHandler = OpenLayers.Function.bindAsEventListener(
+                this.handleBrowserEvent, this
+            );
+            
+            // to be used with observe and stopObserving
+            this.clearMouseListener = OpenLayers.Function.bind(
+                this.clearMouseCache, this
+            );
         }
         this.element = element;
-        for (var i=0, len=this.BROWSER_EVENTS.length; i<len; i++) {
-            var eventType = this.BROWSER_EVENTS[i];
-
-            // every browser event has a corresponding application event 
-            // (whether it's listened for or not).
-            this.addEventType(eventType);
-            
-            // use Prototype to register the event cross-browser
-            OpenLayers.Event.observe(element, eventType, this.eventHandler);
+        for (var i = 0, len = this.BROWSER_EVENTS.length; i < len; i++) {
+            // register the event cross-browser
+            OpenLayers.Event.observe(
+                element, this.BROWSER_EVENTS[i], this.eventHandler
+            );
         }
         // disable dragstart in IE so that mousedown/move/up works normally
         OpenLayers.Event.observe(element, "dragstart", OpenLayers.Event.stop);
@@ -610,7 +663,7 @@ OpenLayers.Events = OpenLayers.Class({
      */
     on: function(object) {
         for(var type in object) {
-            if(type != "scope") {
+            if(type != "scope" && object.hasOwnProperty(type)) {
                 this.register(type, object.scope, object[type]);
             }
         }
@@ -636,23 +689,40 @@ OpenLayers.Events = OpenLayers.Class({
      * Parameters:
      * type - {String} Name of the event to register
      * obj - {Object} The object to bind the context to for the callback#.
-     *                     If no object is specified, default is the Events's 
-     *                     'object' property.
+     *     If no object is specified, default is the Events's 'object' property.
      * func - {Function} The callback function. If no callback is 
-     *                        specified, this function does nothing.
-     * 
-     * 
+     *     specified, this function does nothing.
+     * priority - {Boolean|Object} If true, adds the new listener to the
+     *     *front* of the events queue instead of to the end.
+     *
+     * Valid options for priority:
+     * extension - {Boolean} If true, then the event will be registered as
+     *     extension event. Extension events are handled before all other
+     *     events.
      */
-    register: function (type, obj, func) {
-
-        if ( (func != null) && 
-             (OpenLayers.Util.indexOf(this.eventTypes, type) != -1) ) {
-
+    register: function (type, obj, func, priority) {
+        if (type in OpenLayers.Events && !this.extensions[type]) {
+            this.extensions[type] = new OpenLayers.Events[type](this);
+        }
+        if (func != null) {
             if (obj == null)  {
                 obj = this.object;
             }
             var listeners = this.listeners[type];
-            listeners.push( {obj: obj, func: func} );
+            if (!listeners) {
+                listeners = [];
+                this.listeners[type] = listeners;
+                this.extensionCount[type] = 0;
+            }
+            var listener = {obj: obj, func: func};
+            if (priority) {
+                listeners.splice(this.extensionCount[type], 0, listener);
+                if (typeof priority === "object" && priority.extension) {
+                    this.extensionCount[type]++;
+                }
+            } else {
+                listeners.push(listener);
+            }
         }
     },
 
@@ -674,16 +744,7 @@ OpenLayers.Events = OpenLayers.Class({
      *                   specified, this function does nothing.
      */
     registerPriority: function (type, obj, func) {
-
-        if (func != null) {
-            if (obj == null)  {
-                obj = this.object;
-            }
-            var listeners = this.listeners[type];
-            if (listeners != null) {
-                listeners.unshift( {obj: obj, func: func} );
-            }
-        }
+        this.register(type, obj, func, true);
     },
     
     /**
@@ -714,7 +775,7 @@ OpenLayers.Events = OpenLayers.Class({
      */
     un: function(object) {
         for(var type in object) {
-            if(type != "scope") {
+            if(type != "scope" && object.hasOwnProperty(type)) {
                 this.unregister(type, object.scope, object[type]);
             }
         }
diff --git a/lib/OpenLayers/Events/buttonclick.js b/lib/OpenLayers/Events/buttonclick.js
new file mode 100644
index 0000000..e2a3eda
--- /dev/null
+++ b/lib/OpenLayers/Events/buttonclick.js
@@ -0,0 +1,179 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Events.js
+ */
+
+/**
+ * Class: OpenLayers.Events.buttonclick
+ * Extension event type for handling buttons on top of a dom element. This
+ *     event type fires "buttonclick" on its <target> when a button was
+ *     clicked. Buttons are detected by the "olButton" class.
+ *
+ * This event type makes sure that button clicks do not interfere with other
+ *     events that are registered on the same <element>.
+ *
+ * Event types provided by this extension:
+ * - *buttonclick* Triggered when a button is clicked. Listeners receive an
+ *     object with a *buttonElement* property referencing the dom element of
+ *     the clicked button, and an *buttonXY* property with the click position
+ *     relative to the button.
+ */
+OpenLayers.Events.buttonclick = OpenLayers.Class({
+    
+    /**
+     * Property: target
+     * {<OpenLayers.Events>} The events instance that the buttonclick event will
+     * be triggered on.
+     */
+    target: null,
+    
+    /**
+     * Property: events
+     * {Array} Events to observe and conditionally stop from propagating when
+     *     an element with the olButton class (or its olAlphaImg child) is
+     *     clicked.
+     */
+    events: [
+        'mousedown', 'mouseup', 'click', 'dblclick',
+        'touchstart', 'touchmove', 'touchend', 'keydown'
+    ],
+    
+    /**
+     * Property: startRegEx
+     * {RegExp} Regular expression to test Event.type for events that start
+     *     a buttonclick sequence.
+     */
+    startRegEx: /^mousedown|touchstart$/,
+
+    /**
+     * Property: cancelRegEx
+     * {RegExp} Regular expression to test Event.type for events that cancel
+     *     a buttonclick sequence.
+     */
+    cancelRegEx: /^touchmove$/,
+
+    /**
+     * Property: completeRegEx
+     * {RegExp} Regular expression to test Event.type for events that complete
+     *     a buttonclick sequence.
+     */
+    completeRegEx: /^mouseup|touchend$/,
+    
+    /**
+     * Property: startEvt
+     * {Event} The event that started the click sequence
+     */
+    
+    /**
+     * Constructor: OpenLayers.Events.buttonclick
+     * Construct a buttonclick event type. Applications are not supposed to
+     *     create instances of this class - they are created on demand by
+     *     <OpenLayers.Events> instances.
+     *
+     * Parameters:
+     * target - {<OpenLayers.Events>} The events instance that the buttonclick
+     *     event will be triggered on.
+     */
+    initialize: function(target) {
+        this.target = target;
+        for (var i=this.events.length-1; i>=0; --i) {
+            this.target.register(this.events[i], this, this.buttonClick, {
+                extension: true
+            });
+        }
+    },
+    
+    /**
+     * Method: destroy
+     */
+    destroy: function() {
+        for (var i=this.events.length-1; i>=0; --i) {
+            this.target.unregister(this.events[i], this, this.buttonClick);
+        }
+        delete this.target;
+    },
+
+    /**
+     * Method: getPressedButton
+     * Get the pressed button, if any. Returns undefined if no button
+     * was pressed.
+     *
+     * Arguments:
+     * element - {DOMElement} The event target.
+     *
+     * Returns:
+     * {DOMElement} The button element, or undefined.
+     */
+    getPressedButton: function(element) {
+        var depth = 3, // limit the search depth
+            button;
+        do {
+            if(OpenLayers.Element.hasClass(element, "olButton")) {
+                // hit!
+                button = element;
+                break;
+            }
+            element = element.parentNode;
+        } while(--depth > 0 && element);
+        return button;
+    },
+
+    /**
+     * Method: buttonClick
+     * Check if a button was clicked, and fire the buttonclick event
+     *
+     * Parameters:
+     * evt - {Event}
+     */
+    buttonClick: function(evt) {
+        var propagate = true,
+            element = OpenLayers.Event.element(evt);
+        if (element && (OpenLayers.Event.isLeftClick(evt) || !~evt.type.indexOf("mouse"))) {
+            // was a button pressed?
+            var button = this.getPressedButton(element);
+            if (button) {
+                if (evt.type === "keydown") {
+                    switch (evt.keyCode) {
+                    case OpenLayers.Event.KEY_RETURN:
+                    case OpenLayers.Event.KEY_SPACE:
+                        this.target.triggerEvent("buttonclick", {
+                            buttonElement: button
+                        });
+                        OpenLayers.Event.stop(evt);
+                        propagate = false;
+                        break;
+                    }
+                } else if (this.startEvt) {
+                    if (this.completeRegEx.test(evt.type)) {
+                        var pos = OpenLayers.Util.pagePosition(button);
+                        this.target.triggerEvent("buttonclick", {
+                            buttonElement: button,
+                            buttonXY: {
+                                x: this.startEvt.clientX - pos[0],
+                                y: this.startEvt.clientY - pos[1]
+                            }
+                        });
+                    }
+                    if (this.cancelRegEx.test(evt.type)) {
+                        delete this.startEvt;
+                    }
+                    OpenLayers.Event.stop(evt);
+                    propagate = false;
+                }
+                if (this.startRegEx.test(evt.type)) {
+                    this.startEvt = evt;
+                    OpenLayers.Event.stop(evt);
+                    propagate = false;
+                }
+            } else {
+                delete this.startEvt;
+            }
+        }
+        return propagate;
+    }
+    
+});
diff --git a/lib/OpenLayers/Feature.js b/lib/OpenLayers/Feature.js
index f921bc4..7e391d3 100644
--- a/lib/OpenLayers/Feature.js
+++ b/lib/OpenLayers/Feature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -49,7 +49,7 @@ OpenLayers.Feature = OpenLayers.Class({
     /**
      * APIProperty: popupClass
      * {<OpenLayers.Class>} The class which will be used to instantiate
-     *     a new Popup. Default is <OpenLayers.Popup.AnchoredBubble>.
+     *     a new Popup. Default is <OpenLayers.Popup.Anchored>.
      */
     popupClass: null,
 
@@ -188,7 +188,7 @@ OpenLayers.Feature = OpenLayers.Class({
             if (!this.popup) {
                 var anchor = (this.marker) ? this.marker.icon : null;
                 var popupClass = this.popupClass ? 
-                    this.popupClass : OpenLayers.Popup.AnchoredBubble;
+                    this.popupClass : OpenLayers.Popup.Anchored;
                 this.popup = new popupClass(this.id + "_popup", 
                                             this.lonlat,
                                             this.data.popupSize,
diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js
index 4aec61d..6f36fec 100644
--- a/lib/OpenLayers/Feature/Vector.js
+++ b/lib/OpenLayers/Feature/Vector.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 // TRASH THIS
@@ -267,7 +267,8 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, {
      * Determins whether the feature intersects with the specified location.
      * 
      * Parameters: 
-     * lonlat - {<OpenLayers.LonLat>} 
+     * lonlat - {<OpenLayers.LonLat>|Object} OpenLayers.LonLat or an
+     *     object with a 'lon' and 'lat' properties.
      * toleranceLon - {float} Optional tolerance in Geometric Coords
      * toleranceLat - {float} Optional tolerance in Geographic Coords
      * 
@@ -297,7 +298,7 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, {
      * Moves the feature and redraws it at its new location
      *
      * Parameters:
-     * state - {OpenLayers.LonLat or OpenLayers.Pixel} the
+     * location - {<OpenLayers.LonLat> or <OpenLayers.Pixel>} the
      *         location to which to move the feature.
      */
     move: function(location) {
@@ -414,11 +415,13 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, {
  * labelAlign - {String} Label alignment. This specifies the insertion point relative to the text. It is a string
  *     composed of two characters. The first character is for the horizontal alignment, the second for the vertical
  *     alignment. Valid values for horizontal alignment: "l"=left, "c"=center, "r"=right. Valid values for vertical
- *     alignment: "t"=top, "m"=middle, "b"=bottom. Example values: "lt", "cm", "rb".
+ *     alignment: "t"=top, "m"=middle, "b"=bottom. Example values: "lt", "cm", "rb". Default is "cm".
  * labelXOffset - {Number} Pixel offset along the positive x axis for displacing the label. Not supported by the canvas renderer.
  * labelYOffset - {Number} Pixel offset along the positive y axis for displacing the label. Not supported by the canvas renderer.
  * labelSelect - {Boolean} If set to true, labels will be selectable using SelectFeature or similar controls.
  *     Default is false.
+ * labelOutlineColor - {String} The color of the label outline. Default is 'white'. Only supported by the canvas & SVG renderers.
+ * labelOutlineWidth - {Number} The width of the label outline. Default is 3, set to 0 or null to disable. Only supported by the canvas & SVG renderers.
  * fontColor - {String} The font color for the label, to be provided like CSS.
  * fontOpacity - {Number} Opacity (0-1) for the label
  * fontFamily - {String} The font family for the label, to be provided like in CSS.
@@ -445,7 +448,11 @@ OpenLayers.Feature.Vector.style = {
         hoverPointRadius: 1,
         hoverPointUnit: "%",
         pointerEvents: "visiblePainted",
-        cursor: "inherit"
+        cursor: "inherit",
+        fontColor: "#000000",
+        labelAlign: "cm",
+        labelOutlineColor: "white",
+        labelOutlineWidth: 3
     },
     'select': {
         fillColor: "blue",
@@ -464,7 +471,12 @@ OpenLayers.Feature.Vector.style = {
         hoverPointRadius: 1,
         hoverPointUnit: "%",
         pointerEvents: "visiblePainted",
-        cursor: "pointer"
+        cursor: "pointer",
+        fontColor: "#000000",
+        labelAlign: "cm",
+        labelOutlineColor: "white",
+        labelOutlineWidth: 3
+
     },
     'temporary': {
         fillColor: "#66cccc",
@@ -483,7 +495,12 @@ OpenLayers.Feature.Vector.style = {
         hoverPointRadius: 1,
         hoverPointUnit: "%",
         pointerEvents: "visiblePainted",
-        cursor: "inherit"
+        cursor: "inherit",
+        fontColor: "#000000",
+        labelAlign: "cm",
+        labelOutlineColor: "white",
+        labelOutlineWidth: 3
+
     },
     'delete': {
         display: "none"
diff --git a/lib/OpenLayers/Feature/WFS.js b/lib/OpenLayers/Feature/WFS.js
deleted file mode 100644
index 7234e4f..0000000
--- a/lib/OpenLayers/Feature/WFS.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (c) 2006-2011 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.js
- */
-
-/**
- * Class: OpenLayers.Feature.WFS
- * WFS handling class, for use as a featureClass on the WFS layer for handling
- * 'point' WFS types. Good for subclassing when creating a custom WFS like
- * XML application.
- * 
- * Inherits from:
- *  - <OpenLayers.Feature>
- */
-OpenLayers.Feature.WFS = OpenLayers.Class(OpenLayers.Feature, {
-      
-    /** 
-     * Constructor: OpenLayers.Feature.WFS
-     * Create a WFS feature.
-     *
-     * Parameters:
-     * layer - {<OpenLayers.Layer>} 
-     * xmlNode - {XMLNode} 
-     */
-    initialize: function(layer, xmlNode) {
-        var newArguments = arguments;
-        var data = this.processXMLNode(xmlNode);
-        newArguments = new Array(layer, data.lonlat, data);
-        OpenLayers.Feature.prototype.initialize.apply(this, newArguments);
-        this.createMarker();
-        this.layer.addMarker(this.marker);
-    },
-    
-    /** 
-     * Method: destroy
-     * nullify references to prevent circular references and memory leaks
-     */
-    destroy: function() {
-        if (this.marker != null) {
-            this.layer.removeMarker(this.marker);  
-        }
-        OpenLayers.Feature.prototype.destroy.apply(this, arguments);
-    },
-
-    /**
-     * Method: processXMLNode
-     * When passed an xmlNode, parses it for a GML point, and passes
-     * back an object describing that point.
-     *
-     * For subclasses of Feature.WFS, this is the feature to change.
-     *
-     * Parameters:
-     * xmlNode - {XMLNode} 
-     * 
-     * Returns:
-     * {Object} Data Object with 'id', 'lonlat', and private properties set
-     */
-    processXMLNode: function(xmlNode) {
-        //this should be overridden by subclasses
-        // must return an Object with 'id' and 'lonlat' values set
-        var point = OpenLayers.Ajax.getElementsByTagNameNS(xmlNode, "http://www.opengis.net/gml", "gml", "Point");
-        var text  = OpenLayers.Util.getXmlNodeValue(OpenLayers.Ajax.getElementsByTagNameNS(point[0], "http://www.opengis.net/gml","gml", "coordinates")[0]);
-        var floats = text.split(",");
-        return {lonlat: new OpenLayers.LonLat(parseFloat(floats[0]),
-                                              parseFloat(floats[1])),
-                id: null};
-
-    },
-
-    CLASS_NAME: "OpenLayers.Feature.WFS"
-});
-  
-  
-  
-  
-
diff --git a/lib/OpenLayers/Filter.js b/lib/OpenLayers/Filter.js
index f222248..b9d8c9e 100644
--- a/lib/OpenLayers/Filter.js
+++ b/lib/OpenLayers/Filter.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -56,7 +56,7 @@ OpenLayers.Filter = OpenLayers.Class({
     
     /**
      * APIMethod: clone
-     * Clones this filter. Should be implementted by subclasses.
+     * Clones this filter. Should be implemented by subclasses.
      * 
      * Returns:
      * {<OpenLayers.Filter>} Clone of this filter.
@@ -65,5 +65,23 @@ OpenLayers.Filter = OpenLayers.Class({
         return null;
     },
     
+    /**
+     * APIMethod: toString
+     *
+     * Returns:
+     * {String} Include <OpenLayers.Format.CQL> in your build to get a CQL
+     *     representation of the filter returned. Otherwise "[Object object]"
+     *     will be returned.
+     */
+    toString: function() {
+        var string;
+        if (OpenLayers.Format && OpenLayers.Format.CQL) {
+            string = OpenLayers.Format.CQL.prototype.write(this);
+        } else {
+            string = Object.prototype.toString.call(this);
+        }
+        return string;
+    },
+    
     CLASS_NAME: "OpenLayers.Filter"
 });
diff --git a/lib/OpenLayers/Filter/Comparison.js b/lib/OpenLayers/Filter/Comparison.js
index a707928..c57c868 100644
--- a/lib/OpenLayers/Filter/Comparison.js
+++ b/lib/OpenLayers/Filter/Comparison.js
@@ -1,18 +1,17 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Filter.js
- * @requires OpenLayers/Console.js
  */
 
 /**
  * Class: OpenLayers.Filter.Comparison
  * This class represents a comparison filter.
  * 
- * Inherits from
+ * Inherits from:
  * - <OpenLayers.Filter>
  */
 OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
@@ -167,11 +166,11 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
      * regular expression already.
      * 
      * Parameters:
-     * wildCard   - {<Char>} wildcard character in the above value, default
+     * wildCard   - {Char} wildcard character in the above value, default
      *              is "*"
-     * singleChar - {<Char>) single-character wildcard in the above value
+     * singleChar - {Char} single-character wildcard in the above value
      *              default is "."
-     * escape     - {<Char>) escape character in the above value, default is
+     * escapeChar - {Char} escape character in the above value, default is
      *              "!"
      * 
      * Returns:
@@ -179,10 +178,8 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
      */
     value2regex: function(wildCard, singleChar, escapeChar) {
         if (wildCard == ".") {
-            var msg = "'.' is an unsupported wildCard character for "+
-                    "OpenLayers.Filter.Comparison";
-            OpenLayers.Console.error(msg);
-            return null;
+            throw new Error("'.' is an unsupported wildCard character for " +
+                            "OpenLayers.Filter.Comparison");
         }
         
 
diff --git a/lib/OpenLayers/Filter/FeatureId.js b/lib/OpenLayers/Filter/FeatureId.js
index 3c755ef..c9b14ab 100644
--- a/lib/OpenLayers/Filter/FeatureId.js
+++ b/lib/OpenLayers/Filter/FeatureId.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -13,15 +13,15 @@
  * This class represents a ogc:FeatureId Filter, as being used for rule-based SLD
  * styling
  * 
- * Inherits from
+ * Inherits from:
  * - <OpenLayers.Filter>
  */
 OpenLayers.Filter.FeatureId = OpenLayers.Class(OpenLayers.Filter, {
 
     /** 
      * APIProperty: fids
-     * {Array(String)} Feature Ids to evaluate this rule against. To be passed
-     * To be passed inside the params object.
+     * {Array(String)} Feature Ids to evaluate this rule against. 
+     *     To be passed inside the params object.
      */
     fids: null,
     
diff --git a/lib/OpenLayers/Filter/Function.js b/lib/OpenLayers/Filter/Function.js
index 34cbc7c..c7d6047 100644
--- a/lib/OpenLayers/Filter/Function.js
+++ b/lib/OpenLayers/Filter/Function.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -14,7 +14,7 @@
  * filters that can contain filter functions as values.
  * Nesting function as other functions parameter is supported.
  * 
- * Inherits from
+ * Inherits from:
  * - <OpenLayers.Filter>
  */
 OpenLayers.Filter.Function = OpenLayers.Class(OpenLayers.Filter, {
@@ -43,9 +43,6 @@ OpenLayers.Filter.Function = OpenLayers.Class(OpenLayers.Filter, {
      * Returns:
      * {<OpenLayers.Filter.Function>}
      */
-    initialize: function(options) {
-        OpenLayers.Filter.prototype.initialize.apply(this, [options]);
-    },
 
     CLASS_NAME: "OpenLayers.Filter.Function"
 });
diff --git a/lib/OpenLayers/Filter/Logical.js b/lib/OpenLayers/Filter/Logical.js
index 85bc845..b8e5c4d 100644
--- a/lib/OpenLayers/Filter/Logical.js
+++ b/lib/OpenLayers/Filter/Logical.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -12,7 +12,7 @@
  * Class: OpenLayers.Filter.Logical
  * This class represents ogc:And, ogc:Or and ogc:Not rules.
  * 
- * Inherits from
+ * Inherits from:
  * - <OpenLayers.Filter>
  */
 OpenLayers.Filter.Logical = OpenLayers.Class(OpenLayers.Filter, {
diff --git a/lib/OpenLayers/Filter/Spatial.js b/lib/OpenLayers/Filter/Spatial.js
index 745ce85..0aba0cf 100644
--- a/lib/OpenLayers/Filter/Spatial.js
+++ b/lib/OpenLayers/Filter/Spatial.js
@@ -1,12 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Filter.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -14,7 +12,7 @@
  * This class represents a spatial filter.
  * Currently implemented: BBOX, DWithin and Intersects
  * 
- * Inherits from
+ * Inherits from:
  * - <OpenLayers.Filter>
  */
 OpenLayers.Filter.Spatial = OpenLayers.Class(OpenLayers.Filter, {
@@ -69,9 +67,6 @@ OpenLayers.Filter.Spatial = OpenLayers.Class(OpenLayers.Filter, {
      * Returns:
      * {<OpenLayers.Filter.Spatial>}
      */
-    initialize: function(options) {
-        OpenLayers.Filter.prototype.initialize.apply(this, [options]);
-    },
 
    /**
     * Method: evaluate
@@ -99,9 +94,7 @@ OpenLayers.Filter.Spatial = OpenLayers.Class(OpenLayers.Filter, {
                 }
                 break;
             default:
-                OpenLayers.Console.error(
-                    OpenLayers.i18n("filterEvaluateNotImplemented"));
-                break;
+                throw new Error('evaluate is not implemented for this filter type.');
         }
         return intersect;
     },
diff --git a/lib/OpenLayers/Format.js b/lib/OpenLayers/Format.js
index 514e8df..16c5d5b 100644
--- a/lib/OpenLayers/Format.js
+++ b/lib/OpenLayers/Format.js
@@ -1,13 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
  * @requires OpenLayers/Util.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -104,7 +102,7 @@ OpenLayers.Format = OpenLayers.Class({
      * Depends on the subclass
      */
     read: function(data) {
-        OpenLayers.Console.userError(OpenLayers.i18n("readNotImplemented"));
+        throw new Error('Read not implemented.');
     },
     
     /**
@@ -118,7 +116,7 @@ OpenLayers.Format = OpenLayers.Class({
      * {String} A string representation of the object.
      */
     write: function(object) {
-        OpenLayers.Console.userError(OpenLayers.i18n("writeNotImplemented"));
+        throw new Error('Write not implemented.');
     },
 
     CLASS_NAME: "OpenLayers.Format"
diff --git a/lib/OpenLayers/Format/ArcXML.js b/lib/OpenLayers/Format/ArcXML.js
index bd27eab..e0affce 100644
--- a/lib/OpenLayers/Format/ArcXML.js
+++ b/lib/OpenLayers/Format/ArcXML.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -17,7 +17,7 @@
  *     constructor.
  * 
  * Inherits from:
- *  - <OpenLayers.Format>
+ *  - <OpenLayers.Format.XML>
  */
 OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
 
@@ -135,7 +135,7 @@ OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
      *
      * Parameters:
      * imsize - {Object} An ArcXML imagesize object.
-     * olsize - {OpenLayers.Size} The image size to set.
+     * olsize - {<OpenLayers.Size>} The image size to set.
      */
     addImageSize: function(imsize, olsize) {
         if (olsize !== null) {
@@ -152,7 +152,7 @@ OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
      *
      * Parameters:
      * featOrFilt - {Object} A featurecoordsys or filtercoordsys ArcXML structure.
-     * fsys - {String} or {OpenLayers.Projection} or {filtercoordsys} or 
+     * fsys - {String} or {<OpenLayers.Projection>} or {filtercoordsys} or 
      * {featurecoordsys} A projection representation. If it's a {String}, 
      * the value is assumed to be the SRID.  If it's a {OpenLayers.Projection} 
      * AND Proj4js is available, the projection number and name are extracted 
@@ -205,7 +205,7 @@ OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
      * data - {String} or {DOMElement} data to read/parse.
      *
      * Returns:
-     * {OpenLayers.Format.ArcXML.Response} An ArcXML response. Note that this response
+     * {<OpenLayers.Format.ArcXML.Response>} An ArcXML response. Note that this response
      *     data may change in the future. 
      */
     read: function(data) {
@@ -873,7 +873,7 @@ OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
      * node - {<DOMElement>} An element to parse <COORDS> or <POINT> arcxml data from.
      *
      * Returns:
-     * {OpenLayers.Geometry.LinearRing} A linear ring represented by the node's points.
+     * {<OpenLayers.Geometry.LinearRing>} A linear ring represented by the node's points.
      */
     parsePointGeometry: function(node) {
         var ringPoints = [];
@@ -885,7 +885,7 @@ OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
             coordArr = coordArr.split(/;/);
             for (var cn = 0; cn < coordArr.length; cn++) {
                 var coordItems = coordArr[cn].split(/ /);
-                ringPoints.push(new OpenLayers.Geometry.Point(parseFloat(coordItems[0]), parseFloat(coordItems[1])));
+                ringPoints.push(new OpenLayers.Geometry.Point(coordItems[0], coordItems[1]));
             }
             coords = null;
         } else {
diff --git a/lib/OpenLayers/Format/ArcXML/Features.js b/lib/OpenLayers/Format/ArcXML/Features.js
index 831b72e..dc01a4a 100644
--- a/lib/OpenLayers/Format/ArcXML/Features.js
+++ b/lib/OpenLayers/Format/ArcXML/Features.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -26,9 +26,6 @@ OpenLayers.Format.ArcXML.Features = OpenLayers.Class(OpenLayers.Format.XML, {
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {     
-        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
-    },
     
     /**
      * APIMethod: read
diff --git a/lib/OpenLayers/Format/Atom.js b/lib/OpenLayers/Format/Atom.js
index 9dec303..7f6aaa1 100644
--- a/lib/OpenLayers/Format/Atom.js
+++ b/lib/OpenLayers/Format/Atom.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -76,7 +76,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
      * doc - {Element} or {String}
      *
      * Returns:
-     * An Array of <OpenLayers.Feature.Vector>s
+     * Array({<OpenLayers.Feature.Vector>})
      */
     read: function(doc) {
         if (typeof doc == "string") {
@@ -90,8 +90,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
      * Serialize or more feature nodes to Atom documents.
      *
      * Parameters:
-     * features - a single {<OpenLayers.Feature.Vector>} or an
-     * Array({<OpenLayers.Feature.Vector>}).
+     * features - {<OpenLayers.Feature.Vector>} or Array({<OpenLayers.Feature.Vector>})
      *
      * Returns:
      * {String} an Atom entry document if passed one feature node, or a feed
@@ -419,7 +418,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
      * node - {DOMElement} An Atom entry or feed node.
      *
      * Returns:
-     * An <OpenLayers.Feature.Vector>.
+     * {<OpenLayers.Feature.Vector>}
      */
     parseFeature: function(node) {
         var atomAttrib = {};
@@ -555,7 +554,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
      * node - {DOMElement} An Atom entry or feed node.
      *
      * Returns:
-     * An Array of <OpenLayers.Feature.Vector>s.
+     * Array({<OpenLayers.Feature.Vector>})
      */
     parseFeatures: function(node) {
         var features = [];
@@ -579,7 +578,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
      * node - {DOMElement} An Atom entry or feed node.
      *
      * Returns:
-     * An Array of <OpenLayers.Geometry>s.
+     * Array({<OpenLayers.Geometry>})
      */
     parseLocations: function(node) {
         var georssns = this.namespaces.georss;
@@ -607,12 +606,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
                                 point[i].firstChild.nodeValue
                                 ).split(/\s*,\s*/);
                 }
-                components.push(
-                    new OpenLayers.Geometry.Point(
-                        parseFloat(xy[1]),
-                        parseFloat(xy[0])
-                    )
-                );
+                components.push(new OpenLayers.Geometry.Point(xy[1], xy[0]));
             }
         }
 
@@ -627,10 +621,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
                                 ).split(/\s+/);
                 points = [];
                 for (var j=0, jj=coords.length; j<jj; j+=2) {
-                    p = new OpenLayers.Geometry.Point(
-                        parseFloat(coords[j+1]),
-                        parseFloat(coords[j])
-                    );
+                    p = new OpenLayers.Geometry.Point(coords[j+1], coords[j]);
                     points.push(p);
                 }
                 components.push(
@@ -650,10 +641,7 @@ OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
                             ).split(/\s+/);
                 points = [];
                 for (var j=0, jj=coords.length; j<jj; j+=2) {
-                    p = new OpenLayers.Geometry.Point(
-                        parseFloat(coords[j+1]),
-                        parseFloat(coords[j])
-                    );
+                    p = new OpenLayers.Geometry.Point(coords[j+1], coords[j]);
                     points.push(p);
                 }
                 components.push(
diff --git a/lib/OpenLayers/Format/CQL.js b/lib/OpenLayers/Format/CQL.js
index e030eb4..fa88d2a 100644
--- a/lib/OpenLayers/Format/CQL.js
+++ b/lib/OpenLayers/Format/CQL.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -345,7 +345,7 @@ OpenLayers.Format.CQL = (function() {
             var result = buildAst(tokenize(text));
             if (this.keepData) {
                 this.data = result;
-            };
+            }
             return result;
         },
 
diff --git a/lib/OpenLayers/Format/CSWGetDomain.js b/lib/OpenLayers/Format/CSWGetDomain.js
index 9dee01e..dd46949 100644
--- a/lib/OpenLayers/Format/CSWGetDomain.js
+++ b/lib/OpenLayers/Format/CSWGetDomain.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js b/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js
index db936bf..831a16e 100644
--- a/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js
+++ b/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -74,9 +74,6 @@ OpenLayers.Format.CSWGetDomain.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML,
      * - PropertyName
      * - ParameterName
      */
-    initialize: function(options) {
-        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
-    },
 
     /**
      * APIMethod: read
diff --git a/lib/OpenLayers/Format/CSWGetRecords.js b/lib/OpenLayers/Format/CSWGetRecords.js
index 1aadcfb..74146a7 100644
--- a/lib/OpenLayers/Format/CSWGetRecords.js
+++ b/lib/OpenLayers/Format/CSWGetRecords.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js b/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js
index 9182a40..9b2274d 100644
--- a/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js
+++ b/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -30,6 +30,7 @@ OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML,
         csw: "http://www.opengis.net/cat/csw/2.0.2",
         dc: "http://purl.org/dc/elements/1.1/",
         dct: "http://purl.org/dc/terms/",
+        gmd: "http://www.isotc211.org/2005/gmd",
         geonet: "http://www.fao.org/geonetwork",
         ogc: "http://www.opengis.net/ogc",
         ows: "http://www.opengis.net/ows",
@@ -254,7 +255,7 @@ OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML,
             "*": function(node, obj) {
                 var name = node.localName || node.nodeName.split(":").pop();
                 if (!(OpenLayers.Util.isArray(obj[name]))) {
-                    obj[name] = new Array();
+                    obj[name] = [];
                 }
                 var dc_element = {};
                 var attrs = node.attributes;
@@ -262,7 +263,9 @@ OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML,
                     dc_element[attrs[i].name] = attrs[i].nodeValue;
                 }
                 dc_element.value = this.getChildValue(node);
-                obj[name].push(dc_element);
+                if (dc_element.value != "") {
+                    obj[name].push(dc_element);
+                }
             }
         },
         "dct": {
@@ -270,7 +273,7 @@ OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML,
             "*": function(node, obj) {
                 var name = node.localName || node.nodeName.split(":").pop();
                 if (!(OpenLayers.Util.isArray(obj[name]))) {
-                    obj[name] = new Array();
+                    obj[name] = [];
                 }
                 obj[name].push(this.getChildValue(node));
             }
@@ -307,6 +310,7 @@ OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML,
      */
     write: function(options) {
         var node = this.writeNode("csw:GetRecords", options);
+        node.setAttribute("xmlns:gmd", this.namespaces.gmd);
         return OpenLayers.Format.XML.prototype.write.apply(this, [node]);
     },
 
diff --git a/lib/OpenLayers/Format/Context.js b/lib/OpenLayers/Format/Context.js
index b73a420..7fc2e52 100644
--- a/lib/OpenLayers/Format/Context.js
+++ b/lib/OpenLayers/Format/Context.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -10,6 +10,9 @@
 /**
  * Class: OpenLayers.Format.Context
  * Base class for both Format.WMC and Format.OWSContext
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.XML.VersionedOGC>
  */
 OpenLayers.Format.Context = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
 
@@ -267,7 +270,7 @@ OpenLayers.Format.Context = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC,
             keywords:           context.keywords,
             logo:               context.logo,
             descriptionURL:     context.descriptionURL
-        }
+        };
 
         options.metadata = metadata;
 
diff --git a/lib/OpenLayers/Format/Filter.js b/lib/OpenLayers/Format/Filter.js
index 4fa803e..664b294 100644
--- a/lib/OpenLayers/Format/Filter.js
+++ b/lib/OpenLayers/Format/Filter.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/Filter/v1.js b/lib/OpenLayers/Format/Filter/v1.js
index 7fd9830..7d7fc76 100644
--- a/lib/OpenLayers/Format/Filter/v1.js
+++ b/lib/OpenLayers/Format/Filter/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 /**
  * @requires OpenLayers/Format/Filter.js
@@ -77,6 +77,27 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
      */
     readers: {
         "ogc": {
+            "_expression": function(node) {
+                // only the simplest of ogc:expression handled
+                // "some text and an <PropertyName>attribute</PropertyName>"}
+                var obj, value = "";
+                for(var child=node.firstChild; child; child=child.nextSibling) {
+                    switch(child.nodeType) {
+                        case 1:
+                            obj = this.readNode(child);
+                            if (obj.property) {
+                                value += "${" + obj.property + "}";
+                            } else if (obj.value !== undefined) {
+                                value += obj.value;
+                            }
+                            break;
+                        case 3: // text node
+                        case 4: // cdata section
+                            value += child.nodeValue;
+                    }
+                }
+                return value;
+            },
             "Filter": function(node, parent) {
                 // Filters correspond to subclasses of OpenLayers.Filter.
                 // Since they contain information we don't persist, we
@@ -166,11 +187,11 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
             },
             "LowerBoundary": function(node, filter) {
                 filter.lowerBoundary = OpenLayers.String.numericIf(
-                    this.readOgcExpression(node));
+                    this.readers.ogc._expression.call(this, node));
             },
             "UpperBoundary": function(node, filter) {
                 filter.upperBoundary = OpenLayers.String.numericIf(
-                    this.readOgcExpression(node));
+                    this.readers.ogc._expression.call(this, node));
             },
             "Intersects": function(node, obj) {
                 this.readSpatial(node, obj, OpenLayers.Filter.Spatial.INTERSECTS);
@@ -219,26 +240,6 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
     },
 
     /**
-     * Method: readOgcExpression
-     * Limited support for OGC expressions.
-     *
-     * Parameters:
-     * node - {DOMElement} A DOM element that contains an ogc:expression.
-     *
-     * Returns:
-     * {String} A value to be used in a symbolizer.
-     */
-    readOgcExpression: function(node) {
-        var obj = {};
-        this.readChildNodes(node, obj);
-        var value = obj.value;
-        if(value === undefined) {
-            value = this.getChildValue(node);
-        }
-        return value;
-    },
-
-    /**
      * Method: writeOgcExpression
      * Limited support for writing OGC expressions. Currently it supports
      * (<OpenLayers.Filter.Function> || String || Number)
@@ -297,7 +298,7 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
             "Filter": function(filter) {
                 var node = this.createElementNSPlus("ogc:Filter");
                 if (filter.type === "FID") {
-                    this.writeFeatureIdNodes(filter, node);
+                    OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, filter, node);
                 } else {
                     this.writeNode(this.getFilterType(filter), filter, node);
                 }
@@ -314,7 +315,7 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
                 for (var i=0, ii=filter.filters.length; i<ii; ++i) {
                     childFilter = filter.filters[i];
                     if (childFilter.type === "FID") {
-                        this.writeFeatureIdNodes(childFilter, node);
+                        OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, childFilter, node);
                     } else {
                     this.writeNode(
                         this.getFilterType(childFilter), childFilter, node
@@ -329,7 +330,7 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
                 for (var i=0, ii=filter.filters.length; i<ii; ++i) {
                     childFilter = filter.filters[i];
                     if (childFilter.type === "FID") {
-                        this.writeFeatureIdNodes(childFilter, node);
+                        OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, childFilter, node);
                     } else {
                     this.writeNode(
                         this.getFilterType(childFilter), childFilter, node
@@ -342,7 +343,7 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
                 var node = this.createElementNSPlus("ogc:Not");
                 var childFilter = filter.filters[0];
                 if (childFilter.type === "FID") {
-                    this.writeFeatureIdNodes(childFilter, node);
+                    OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, childFilter, node);
                 } else {
                 this.writeNode(
                     this.getFilterType(childFilter), childFilter, node
diff --git a/lib/OpenLayers/Format/Filter/v1_0_0.js b/lib/OpenLayers/Format/Filter/v1_0_0.js
index 02e9aea..1a4a066 100644
--- a/lib/OpenLayers/Format/Filter/v1_0_0.js
+++ b/lib/OpenLayers/Format/Filter/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/Filter/v1_1_0.js b/lib/OpenLayers/Format/Filter/v1_1_0.js
index 9c50b43..dea957b 100644
--- a/lib/OpenLayers/Format/Filter/v1_1_0.js
+++ b/lib/OpenLayers/Format/Filter/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -19,7 +19,8 @@
  *  - writes matchCase attribute from comparison filters of type EQUAL_TO,
  *        NOT_EQUAL_TO and LIKE.
  * 
- * Inherits from:
+ * Inherits from: 
+ *  - <OpenLayers.Format.GML.v3>
  *  - <OpenLayers.Format.Filter.v1>
  */
 OpenLayers.Format.Filter.v1_1_0 = OpenLayers.Class(
diff --git a/lib/OpenLayers/Format/GML.js b/lib/OpenLayers/Format/GML.js
index bdb3186..eb39180 100644
--- a/lib/OpenLayers/Format/GML.js
+++ b/lib/OpenLayers/Format/GML.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -12,8 +12,6 @@
  * @requires OpenLayers/Geometry/MultiLineString.js
  * @requires OpenLayers/Geometry/Polygon.js
  * @requires OpenLayers/Geometry/MultiPolygon.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -22,11 +20,11 @@
  *     constructor.  Supports the GML simple features profile.
  * 
  * Inherits from:
- *  - <OpenLayers.Format>
+ *  - <OpenLayers.Format.XML>
  */
 OpenLayers.Format.GML = OpenLayers.Class(OpenLayers.Format.XML, {
     
-    /*
+    /**
      * APIProperty: featureNS
      * {String} Namespace used for feature attributes.  Default is
      *     "http://mapserver.gis.umn.edu/mapserver".
@@ -40,13 +38,13 @@ OpenLayers.Format.GML = OpenLayers.Class(OpenLayers.Format.XML, {
      */
     featurePrefix: "feature",
     
-    /*
+    /**
      * APIProperty: featureName
      * {String} Element name for features. Default is "featureMember".
      */
     featureName: "featureMember", 
     
-    /*
+    /**
      * APIProperty: layerName
      * {String} Name of data layer. Default is "features".
      */
@@ -159,8 +157,7 @@ OpenLayers.Format.GML = OpenLayers.Class(OpenLayers.Format.XML, {
                                            this.internalProjection); 
                     }                       
                 } else {
-                    OpenLayers.Console.error(OpenLayers.i18n(
-                                "unsupportedGeometryType", {'geomType':type}));
+                    throw new TypeError("Unsupported geometry type: " + type);
                 }
                 // stop looking for different geometry types
                 break;
@@ -890,6 +887,7 @@ OpenLayers.Format.GML = OpenLayers.Class(OpenLayers.Format.XML, {
      * (code)
      * <gml:coordinates decimal="." cs="," ts=" ">...</gml:coordinates>
      * (end)
+     *
      * Parameters: 
      * geometry - {<OpenLayers.Geometry>} 
      *
diff --git a/lib/OpenLayers/Format/GML/Base.js b/lib/OpenLayers/Format/GML/Base.js
index cee7a47..b7608e3 100644
--- a/lib/OpenLayers/Format/GML/Base.js
+++ b/lib/OpenLayers/Format/GML/Base.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -615,7 +615,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
     },
     
     /**
-     * Function: setGeometryTypes
+     * Method: setGeometryTypes
      * Sets the <geometryTypes> mapping.
      */
     setGeometryTypes: function() {
diff --git a/lib/OpenLayers/Format/GML/v2.js b/lib/OpenLayers/Format/GML/v2.js
index d4a80be..ad0d7a6 100644
--- a/lib/OpenLayers/Format/GML/v2.js
+++ b/lib/OpenLayers/Format/GML/v2.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/GML/v3.js b/lib/OpenLayers/Format/GML/v3.js
index eaa2ca3..5be5297 100644
--- a/lib/OpenLayers/Format/GML/v3.js
+++ b/lib/OpenLayers/Format/GML/v3.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -444,7 +444,7 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
     },
 
     /**
-     * Function: setGeometryTypes
+     * Method: setGeometryTypes
      * Sets the <geometryTypes> mapping.
      */
     setGeometryTypes: function() {
diff --git a/lib/OpenLayers/Format/GPX.js b/lib/OpenLayers/Format/GPX.js
index 63170fe..c8d4478 100644
--- a/lib/OpenLayers/Format/GPX.js
+++ b/lib/OpenLayers/Format/GPX.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -20,6 +20,16 @@
  *  - <OpenLayers.Format.XML>
  */
 OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
+    
+
+    /** 
+     * APIProperty: defaultDesc
+     * {String} Default description for the waypoints/tracks in the case
+     *     where the feature has no "description" attribute.
+     *     Default is "No description available".
+     */
+    defaultDesc: "No description available",
+
    /**
     * APIProperty: extractWaypoints
     * {Boolean} Extract waypoints from GPX. (default: true)
@@ -45,6 +55,29 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
      *     be extracted.
      */
     extractAttributes: true,
+
+    /**
+     * Property: namespaces
+     * {Object} Mapping of namespace aliases to namespace URIs.
+     */
+    namespaces: {
+        gpx: "http://www.topografix.com/GPX/1/1",
+        xsi: "http://www.w3.org/2001/XMLSchema-instance"
+    },
+
+    /**
+     * Property: schemaLocation
+     * {String} Schema location. Defaults to
+     *  "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
+     */
+    schemaLocation: "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd",
+
+    /**
+     * APIProperty: creator
+     * {String} The creator attribute to be added to the written GPX files.
+     * Defaults to "OpenLayers"
+     */
+    creator: "OpenLayers",
     
     /**
      * Constructor: OpenLayers.Format.GPX
@@ -69,7 +102,7 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
      * doc - {Element} 
      *
      * Returns:
-     * An Array of <OpenLayers.Feature.Vector>s
+     * Array({<OpenLayers.Feature.Vector>})
      */
     read: function(doc) {
         if (typeof doc == "string") { 
@@ -164,7 +197,7 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
         var attributes = {};
         var attrNode = node.firstChild, value, name;
         while(attrNode) {
-            if(attrNode.nodeType == 1) {
+            if(attrNode.nodeType == 1 && attrNode.firstChild) {
                 value = attrNode.firstChild;
                 if(value.nodeType == 3 || value.nodeType == 4) {
                     name = (attrNode.prefix) ?
@@ -179,6 +212,174 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
         }
         return attributes;
     },
+
+    /**
+     * APIMethod: write
+     * Accepts Feature Collection, and returns a string. 
+     * 
+     * Parameters: 
+     * features - {Array(<OpenLayers.Feature.Vector>)} List of features to serialize into a string.
+     * metadata - {Object} A key/value pairs object to build a metadata node to
+     *      add to the gpx. Supported keys are 'name', 'desc', 'author'.
+     */
+    write: function(features, metadata) {
+        features = OpenLayers.Util.isArray(features) ?
+            features : [features];
+        var gpx = this.createElementNS(this.namespaces.gpx, "gpx");
+        gpx.setAttribute("version", "1.1");
+        gpx.setAttribute("creator", this.creator);
+        this.setAttributes(gpx, {
+            "xsi:schemaLocation": this.schemaLocation
+        });
+
+        if (metadata && typeof metadata == 'object') {
+            gpx.appendChild(this.buildMetadataNode(metadata));
+        }
+        for(var i=0, len=features.length; i<len; i++) {
+            gpx.appendChild(this.buildFeatureNode(features[i]));
+        }
+        return OpenLayers.Format.XML.prototype.write.apply(this, [gpx]);
+    },
+
+    /**
+     * Method: buildMetadataNode
+     * Creates a "metadata" node.
+     *
+     * Returns:
+     * {DOMElement}
+     */
+    buildMetadataNode: function(metadata) {
+        var types = ['name', 'desc', 'author'],
+            node = this.createElementNSPlus('gpx:metadata');
+        for (var i=0; i < types.length; i++) {
+            var type = types[i];
+            if (metadata[type]) {
+                var n = this.createElementNSPlus("gpx:" + type);
+                n.appendChild(this.createTextNode(metadata[type]));
+                node.appendChild(n);
+            }
+        }
+        return node;
+    },
+
+    /**
+     * Method: buildFeatureNode
+     * Accepts an <OpenLayers.Feature.Vector>, and builds a node for it.
+     * 
+     * Parameters:
+     * feature - {<OpenLayers.Feature.Vector>}
+     *
+     * Returns:
+     * {DOMElement} - The created node, either a 'wpt' or a 'trk'.
+     */
+    buildFeatureNode: function(feature) {
+        var geometry = feature.geometry;
+            geometry = geometry.clone();
+        if (this.internalProjection && this.externalProjection) {
+            geometry.transform(this.internalProjection, 
+                               this.externalProjection);
+        }
+        if (geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
+            var wpt = this.buildWptNode(geometry);
+            this.appendAttributesNode(wpt, feature);
+            return wpt;
+        } else {
+            var trkNode = this.createElementNSPlus("gpx:trk");
+            this.appendAttributesNode(trkNode, feature);
+            var trkSegNodes = this.buildTrkSegNode(geometry);
+            trkSegNodes = OpenLayers.Util.isArray(trkSegNodes) ?
+                trkSegNodes : [trkSegNodes];
+            for (var i = 0, len = trkSegNodes.length; i < len; i++) {
+                trkNode.appendChild(trkSegNodes[i]);
+            }
+            return trkNode;
+        }
+    },
+
+    /**
+     * Method: buildTrkSegNode
+     * Builds trkseg node(s) given a geometry
+     *
+     * Parameters:
+     * trknode
+     * geometry - {<OpenLayers.Geometry>}
+     */
+    buildTrkSegNode: function(geometry) {
+        var node,
+            i,
+            len,
+            point,
+            nodes;
+        if (geometry.CLASS_NAME == "OpenLayers.Geometry.LineString" ||
+            geometry.CLASS_NAME == "OpenLayers.Geometry.LinearRing") {
+            node = this.createElementNSPlus("gpx:trkseg");
+            for (i = 0, len=geometry.components.length; i < len; i++) {
+                point = geometry.components[i];
+                node.appendChild(this.buildTrkPtNode(point));
+            }
+            return node;
+        } else {
+            nodes = [];
+            for (i = 0, len = geometry.components.length; i < len; i++) {
+                nodes.push(this.buildTrkSegNode(geometry.components[i]));
+            }
+            return nodes;
+        }
+    },
     
+    /**
+     * Method: buildTrkPtNode
+     * Builds a trkpt node given a point 
+     *
+     * Parameters:
+     * point - {<OpenLayers.Geometry.Point>}
+     *
+     * Returns:
+     * {DOMElement} A trkpt node
+     */
+    buildTrkPtNode: function(point) {
+        var node = this.createElementNSPlus("gpx:trkpt");
+        node.setAttribute("lon", point.x);
+        node.setAttribute("lat", point.y);
+        return node;
+    },
+
+    /**
+     * Method: buildWptNode
+     * Builds a wpt node given a point
+     *
+     * Parameters:
+     * geometry - {<OpenLayers.Geometry.Point>}
+     *
+     * Returns:
+     * {DOMElement} A wpt node
+     */
+    buildWptNode: function(geometry) {
+        var node = this.createElementNSPlus("gpx:wpt");
+        node.setAttribute("lon", geometry.x);
+        node.setAttribute("lat", geometry.y);
+        return node;
+    },
+
+    /**
+     * Method: appendAttributesNode
+     * Adds some attributes node.
+     *
+     * Parameters:
+     * node - {DOMElement} the node to append the attribute nodes to.
+     * feature - {<OpenLayers.Feature.Vector>}
+     */
+    appendAttributesNode: function(node, feature) {
+        var name = this.createElementNSPlus('gpx:name');
+        name.appendChild(this.createTextNode(
+            feature.attributes.name || feature.id));
+        node.appendChild(name);
+        var desc = this.createElementNSPlus('gpx:desc');
+        desc.appendChild(this.createTextNode(
+            feature.attributes.description || this.defaultDesc));
+        node.appendChild(desc);
+        // TBD - deal with remaining (non name/description) attributes.
+    },
+
     CLASS_NAME: "OpenLayers.Format.GPX"
 });
diff --git a/lib/OpenLayers/Format/GeoJSON.js b/lib/OpenLayers/Format/GeoJSON.js
index 8e9f49a..30faeb9 100644
--- a/lib/OpenLayers/Format/GeoJSON.js
+++ b/lib/OpenLayers/Format/GeoJSON.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -287,7 +287,7 @@ OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, {
          *     <OpenLayers.Geometry>.
          *
          * Parameters:
-         * array {Object} The coordinates array from the GeoJSON fragment.
+         * array - {Object} The coordinates array from the GeoJSON fragment.
          *
          * Returns:
          * {<OpenLayers.Geometry>} A geometry.
@@ -635,7 +635,7 @@ OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, {
          * Return an array of linestring arrays from a linestring.
          * 
          * Parameters:
-         * linestring - {<OpenLayers.Geometry.MultiLineString>}
+         * multilinestring - {<OpenLayers.Geometry.MultiLineString>}
          * 
          * Returns:
          * {Array} An array of linestring arrays representing
diff --git a/lib/OpenLayers/Format/GeoRSS.js b/lib/OpenLayers/Format/GeoRSS.js
index 74ab9cc..c41c6cc 100644
--- a/lib/OpenLayers/Format/GeoRSS.js
+++ b/lib/OpenLayers/Format/GeoRSS.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -111,7 +111,7 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
         var box = this.getElementsByTagNameNS(item, 
                                               this.georssns, 
                                               "box");
-												
+
         if (point.length > 0 || (lat.length > 0 && lon.length > 0)) {
             var location;
             if (point.length > 0) {
@@ -126,26 +126,23 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
                                 parseFloat(lon[0].firstChild.nodeValue)];
             }    
 
-            var geometry = new OpenLayers.Geometry.Point(parseFloat(location[1]),
-                                                         parseFloat(location[0]));
+            var geometry = new OpenLayers.Geometry.Point(location[1], location[0]);
               
         } else if (line.length > 0) {
-            var coords = OpenLayers.String.trim(this.concatChildValues(line[0])).split(/\s+/);
+            var coords = OpenLayers.String.trim(this.getChildValue(line[0])).split(/\s+/);
             var components = []; 
             var point;
             for (var i=0, len=coords.length; i<len; i+=2) {
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[i+1]), 
-                                                     parseFloat(coords[i]));
+                point = new OpenLayers.Geometry.Point(coords[i+1], coords[i]);
                 components.push(point);
             }
             geometry = new OpenLayers.Geometry.LineString(components);
         } else if (polygon.length > 0) { 
-            var coords = OpenLayers.String.trim(this.concatChildValues(polygon[0])).split(/\s+/);
+            var coords = OpenLayers.String.trim(this.getChildValue(polygon[0])).split(/\s+/);
             var components = []; 
             var point;
             for (var i=0, len=coords.length; i<len; i+=2) {
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[i+1]), 
-                                                     parseFloat(coords[i]));
+                point = new OpenLayers.Geometry.Point(coords[i+1], coords[i]);
                 components.push(point);
             }
             geometry = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]);
@@ -160,23 +157,18 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
             var components = [];
             var point;
             if (coords.length > 3) {
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[1]), 
-                                                     parseFloat(coords[0]));
+                point = new OpenLayers.Geometry.Point(coords[1], coords[0]);
                 components.push(point);
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[1]), 
-                                                     parseFloat(coords[2]));
+                point = new OpenLayers.Geometry.Point(coords[1], coords[2]);
                 components.push(point);
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[3]), 
-                                                     parseFloat(coords[2]));
+                point = new OpenLayers.Geometry.Point(coords[3], coords[2]);
                 components.push(point);
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[3]), 
-                                                     parseFloat(coords[0]));
+                point = new OpenLayers.Geometry.Point(coords[3], coords[0]);
                 components.push(point);
-                point = new OpenLayers.Geometry.Point(parseFloat(coords[1]), 
-                                                     parseFloat(coords[0]));
+                point = new OpenLayers.Geometry.Point(coords[1], coords[0]);
                 components.push(point);
             }
-            geometry = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]);									 
+            geometry = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]);
         }
         
         if (geometry && this.internalProjection && this.externalProjection) {
@@ -201,17 +193,17 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
         var geometry = this.createGeometryFromItem(item);
      
         /* Provide defaults for title and description */
-        var title = this.getChildValue(item, "*", "title", this.featureTitle);
+        var title = this._getChildValue(item, "*", "title", this.featureTitle);
        
         /* First try RSS descriptions, then Atom summaries */
-        var description = this.getChildValue(
+        var description = this._getChildValue(
             item, "*", "description",
-            this.getChildValue(item, "*", "content",
-                this.getChildValue(item, "*", "summary", this.featureDescription)));
+            this._getChildValue(item, "*", "content",
+                this._getChildValue(item, "*", "summary", this.featureDescription)));
 
         /* If no link URL is found in the first child node, try the
            href attribute */
-        var link = this.getChildValue(item, "*", "link");
+        var link = this._getChildValue(item, "*", "link");
         if(!link) {
             try {
                 link = this.getElementsByTagNameNS(item, "*", "link")[0].getAttribute("href");
@@ -220,7 +212,7 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
             }
         }
 
-        var id = this.getChildValue(item, "*", "id", null);
+        var id = this._getChildValue(item, "*", "id", null);
         
         var data = {
             "title": title,
@@ -233,7 +225,7 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
     },        
     
     /**
-     * Method: getChildValue
+     * Method: _getChildValue
      *
      * Parameters:
      * node - {DOMElement}
@@ -245,12 +237,12 @@ OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
      * {String} The value of the first child with the given tag name.  Returns
      *     default value or empty string if none found.
      */
-    getChildValue: function(node, nsuri, name, def) {
+    _getChildValue: function(node, nsuri, name, def) {
         var value;
         var eles = this.getElementsByTagNameNS(node, nsuri, name);
         if(eles && eles[0] && eles[0].firstChild
             && eles[0].firstChild.nodeValue) {
-            value = OpenLayers.Format.XML.prototype.getChildValue(eles[0]);
+            value = this.getChildValue(eles[0]);
         } else {
             value = (def == undefined) ? "" : def;
         }
diff --git a/lib/OpenLayers/Format/JSON.js b/lib/OpenLayers/Format/JSON.js
index 10dee03..a99478f 100644
--- a/lib/OpenLayers/Format/JSON.js
+++ b/lib/OpenLayers/Format/JSON.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/KML.js b/lib/OpenLayers/Format/KML.js
index 5457cd0..8553fd1 100644
--- a/lib/OpenLayers/Format/KML.js
+++ b/lib/OpenLayers/Format/KML.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -12,8 +12,6 @@
  * @requires OpenLayers/Geometry/Polygon.js
  * @requires OpenLayers/Geometry/Collection.js
  * @requires OpenLayers/Request/XMLHttpRequest.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  * @requires OpenLayers/Projection.js
  */
 
@@ -66,10 +64,26 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
      * APIProperty: extractAttributes
      * {Boolean} Extract attributes from KML.  Default is true.
      *           Extracting styleUrls requires this to be set to true
+     *           Note that currently only Data and SimpleData 
+     *           elements are handled.
      */
     extractAttributes: true,
     
     /**
+     * APIProperty: kvpAttributes
+     * {Boolean} Only used if extractAttributes is true.
+     *           If set to true, attributes will be simple
+     *           key-value pairs, compatible with other formats,
+     *           Any displayName elements will be ignored.
+     *           If set to false, attributes will be objects,
+     *           retaining any displayName elements, but not
+     *           compatible with other formats. Any CDATA in
+     *           displayName will be read in as a string value.
+     *           Default is false.
+     */
+    kvpAttributes: false,
+    
+    /**
      * Property: extractStyles
      * {Boolean} Extract styles from KML.  Default is false.
      *           Extracting styleUrls also requires extractAttributes to be
@@ -575,9 +589,9 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
                         this.styles[(options.styleBaseUrl || "") + styleUrl];
                 }
 
-                if (styleUrl && key == "highlight") {
-                    // TODO: implement the "select" part
-                }
+                // TODO: implement the "select" part
+                //if (styleUrl && key == "highlight") {
+                //}
 
             }
         }
@@ -693,11 +707,15 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
                 }
                 this.readChildNodes(node, obj);
                 if (obj.whens.length !== obj.points.length) {
-                    throw new Error("gx:Track with unequal number of when (" + obj.whens.length + ") and gx:coord (" + obj.points.length + ") elements.");
+                    throw new Error("gx:Track with unequal number of when (" +
+                                    obj.whens.length + ") and gx:coord (" +
+                                    obj.points.length + ") elements.");
                 }
                 var hasAngles = obj.angles.length > 0;
                 if (hasAngles && obj.whens.length !== obj.angles.length) {
-                    throw new Error("gx:Track with unequal number of when (" + obj.whens.length + ") and gx:angles (" + obj.angles.length + ") elements.");
+                    throw new Error("gx:Track with unequal number of when (" +
+                                    obj.whens.length + ") and gx:angles (" +
+                                    obj.angles.length + ") elements.");
                 }
                 var feature, point, angles;
                 for (var i=0, ii=obj.whens.length; i<ii; ++i) {
@@ -778,8 +796,7 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
                                            this.internalProjection); 
                     }                       
                 } else {
-                    OpenLayers.Console.error(OpenLayers.i18n(
-                                "unsupportedGeometryType", {'geomType':type}));
+                    throw new TypeError("Unsupported geometry type: " + type);
                 }
                 // stop looking for different geometry types
                 break;
@@ -1077,12 +1094,16 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
             var valueNode = data.getElementsByTagName("value");
             if (valueNode.length) {
                 ed['value'] = this.getChildValue(valueNode[0]);
-            }    
-            var nameNode = data.getElementsByTagName("displayName");
-            if (nameNode.length) {
-                ed['displayName'] = this.getChildValue(nameNode[0]);
             }
-            attributes[key] = ed;
+            if (this.kvpAttributes) {
+                attributes[key] = ed['value'];
+            } else {
+                var nameNode = data.getElementsByTagName("displayName");
+                if (nameNode.length) {
+                    ed['displayName'] = this.getChildValue(nameNode[0]);
+                }
+                attributes[key] = ed;
+            } 
         }
         var simpleDataNodes = node.getElementsByTagName("SimpleData");
         for (i = 0, len = simpleDataNodes.length; i < len; i++) {
@@ -1090,8 +1111,12 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
             data = simpleDataNodes[i];
             key = data.getAttribute("name");
             ed['value'] = this.getChildValue(data);
-            ed['displayName'] = key;
-            attributes[key] = ed;
+            if (this.kvpAttributes) {
+                attributes[key] = ed['value'];
+            } else {
+                ed['displayName'] = key;
+                attributes[key] = ed;
+            }
         }
         
         return attributes;    
@@ -1208,7 +1233,14 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
         var geometryNode = this.buildGeometryNode(feature.geometry);
         placemarkNode.appendChild(geometryNode);        
         
-        // TBD - deal with remaining (non name/description) attributes.
+        // output attributes as extendedData
+        if (feature.attributes) {
+            var edNode = this.buildExtendedData(feature.attributes);
+            if (edNode) {
+                placemarkNode.appendChild(edNode);
+            }
+        }
+        
         return placemarkNode;
     },    
 
@@ -1392,7 +1424,7 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
      * Parameters:
      * geometry - {<OpenLayers.Geometry>}
      * 
-     * Return:
+     * Returns:
      * {DOMElement}
      */     
     buildCoordinatesNode: function(geometry) {
@@ -1439,5 +1471,48 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
         return point.x + "," + point.y;                     
     },
 
+    /**
+     * Method: buildExtendedData
+     *
+     * Parameters:
+     * attributes - {Object}
+     *
+     * Returns
+     * {DOMElement} A KML ExtendedData node or {null} if no attributes.
+     */
+    buildExtendedData: function(attributes) {
+        var extendedData = this.createElementNS(this.kmlns, "ExtendedData");
+        for (var attributeName in attributes) {
+            // empty, name, description, styleUrl attributes ignored
+            if (attributes[attributeName] && attributeName != "name" && attributeName != "description" && attributeName != "styleUrl") {
+                var data = this.createElementNS(this.kmlns, "Data");
+                data.setAttribute("name", attributeName);
+                var value = this.createElementNS(this.kmlns, "value");
+                if (typeof attributes[attributeName] == "object") {
+                    // cater for object attributes with 'value' properties
+                    // other object properties will output an empty node
+                    if (attributes[attributeName].value) {
+                        value.appendChild(this.createTextNode(attributes[attributeName].value));
+                    }
+                    if (attributes[attributeName].displayName) {
+                        var displayName = this.createElementNS(this.kmlns, "displayName");
+                        // displayName always written as CDATA
+                        displayName.appendChild(this.getXMLDoc().createCDATASection(attributes[attributeName].displayName));
+                        data.appendChild(displayName);
+                    }
+                } else {
+                    value.appendChild(this.createTextNode(attributes[attributeName]));
+                }
+                data.appendChild(value);
+                extendedData.appendChild(data);
+            }
+        }
+        if (this.isSimpleContent(extendedData)) {
+            return null;
+        } else {
+            return extendedData;
+        }
+    },
+    
     CLASS_NAME: "OpenLayers.Format.KML" 
 });
diff --git a/lib/OpenLayers/Format/OGCExceptionReport.js b/lib/OpenLayers/Format/OGCExceptionReport.js
index ac7dffc..a229af1 100644
--- a/lib/OpenLayers/Format/OGCExceptionReport.js
+++ b/lib/OpenLayers/Format/OGCExceptionReport.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/OSM.js b/lib/OpenLayers/Format/OSM.js
index ce408f7..3cc1392 100644
--- a/lib/OpenLayers/Format/OSM.js
+++ b/lib/OpenLayers/Format/OSM.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -87,10 +87,10 @@ OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, {
      * Return a list of features from a OSM doc
      
      * Parameters:
-     * data - {Element} 
+     * doc - {Element} 
      *
      * Returns:
-     * An Array of <OpenLayers.Feature.Vector>s
+     * Array({<OpenLayers.Feature.Vector>})
      */
     read: function(doc) {
         if (typeof doc == "string") { 
@@ -176,7 +176,7 @@ OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, {
      * Return the node items from a doc.  
      *
      * Parameters:
-     * node - {DOMElement} node to parse tags from
+     * doc - {DOMElement} node to parse tags from
      */
     getNodes: function(doc) {
         var node_list = doc.getElementsByTagName("node");
@@ -198,7 +198,7 @@ OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, {
      * Return the way items from a doc.  
      *
      * Parameters:
-     * node - {DOMElement} node to parse tags from
+     * doc - {DOMElement} node to parse tags from
      */
     getWays: function(doc) {
         var way_list = doc.getElementsByTagName("way");
@@ -229,7 +229,7 @@ OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, {
      * Return the tags list attached to a specific DOM element.
      *
      * Parameters:
-     * node - {DOMElement} node to parse tags from
+     * dom_node - {DOMElement} node to parse tags from
      * interesting_tags - {Boolean} whether the return from this function should
      *    return a boolean indicating that it has 'interesting tags' -- 
      *    tags like attribution and source are ignored. (To change the list
diff --git a/lib/OpenLayers/Format/OWSCommon.js b/lib/OpenLayers/Format/OWSCommon.js
index b5e4e85..cef0862 100644
--- a/lib/OpenLayers/Format/OWSCommon.js
+++ b/lib/OpenLayers/Format/OWSCommon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/OWSCommon/v1.js b/lib/OpenLayers/Format/OWSCommon/v1.js
index 7ee9759..bf24ea6 100644
--- a/lib/OpenLayers/Format/OWSCommon/v1.js
+++ b/lib/OpenLayers/Format/OWSCommon/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -10,6 +10,9 @@
 /**
  * Class: OpenLayers.Format.OWSCommon.v1
  * Common readers and writers for OWSCommon v1.X formats
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.XML>
  */
 OpenLayers.Format.OWSCommon.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
    
@@ -171,12 +174,24 @@ OpenLayers.Format.OWSCommon.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
                 this.readChildNodes(node, dcp.http);
             },
             "Get": function(node, http) {
-                http.get = this.getAttributeNS(node, 
-                    this.namespaces.xlink, "href");
+                if (!http.get) {
+                    http.get = [];
+                }
+                var obj = {
+                    url: this.getAttributeNS(node, this.namespaces.xlink, "href")
+                };
+                this.readChildNodes(node, obj);
+                http.get.push(obj);
             },
             "Post": function(node, http) {
-                http.post = this.getAttributeNS(node, 
-                    this.namespaces.xlink, "href");
+                if (!http.post) {
+                    http.post = [];
+                }
+                var obj = {
+                    url: this.getAttributeNS(node, this.namespaces.xlink, "href")
+                };
+                this.readChildNodes(node, obj);
+                http.post.push(obj);
             },
             "Parameter": function(node, operation) {
                 if (!operation.parameters) {
@@ -186,6 +201,14 @@ OpenLayers.Format.OWSCommon.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
                 operation.parameters[name] = {};
                 this.readChildNodes(node, operation.parameters[name]);
             },
+            "Constraint": function(node, obj) {
+                if (!obj.constraints) {
+                    obj.constraints = {};
+                }
+                var name = node.getAttribute("name");
+                obj.constraints[name] = {};
+                this.readChildNodes(node, obj.constraints[name]);
+            },
             "Value": function(node, allowedValues) {
                 allowedValues[this.getChildValue(node)] = true;
             },
diff --git a/lib/OpenLayers/Format/OWSCommon/v1_0_0.js b/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
index c628a3d..7555d90 100644
--- a/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
+++ b/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -10,6 +10,9 @@
 /**
  * Class: OpenLayers.Format.OWSCommon.v1_0_0
  * Parser for OWS Common version 1.0.0.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.OWSCommon.v1>
  */
 OpenLayers.Format.OWSCommon.v1_0_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, {
     
diff --git a/lib/OpenLayers/Format/OWSCommon/v1_1_0.js b/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
index c3ccae5..0a3e47e 100644
--- a/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
+++ b/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -10,6 +10,9 @@
 /**
  * Class: OpenLayers.Format.OWSCommon.v1_1_0
  * Parser for OWS Common version 1.1.0.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.OWSCommon.v1>
  */
 OpenLayers.Format.OWSCommon.v1_1_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, {
 
@@ -61,7 +64,7 @@ OpenLayers.Format.OWSCommon.v1_1_0 = OpenLayers.Class(OpenLayers.Format.OWSCommo
                 range.maxValue = this.getChildValue(node);
             },
             "Identifier": function(node, obj) {
-            	obj.identifier = this.getChildValue(node);
+                obj.identifier = this.getChildValue(node);
             },
             "SupportedCRS": function(node, obj) {
                 obj.supportedCRS = this.getChildValue(node);
diff --git a/lib/OpenLayers/Format/OWSContext.js b/lib/OpenLayers/Format/OWSContext.js
index 9f90332..199c00b 100644
--- a/lib/OpenLayers/Format/OWSContext.js
+++ b/lib/OpenLayers/Format/OWSContext.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -15,6 +15,9 @@
  * Web Map Context (WMC), since it is more generic and more types of layers
  * can be stored. Also, nesting of layers is supported since version 0.3.1.
  * For more information see: http://www.ogcnetwork.net/context
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.Context>
  */
 OpenLayers.Format.OWSContext = OpenLayers.Class(OpenLayers.Format.Context,{
     
diff --git a/lib/OpenLayers/Format/OWSContext/v0_3_1.js b/lib/OpenLayers/Format/OWSContext/v0_3_1.js
index 4f4948f..ec899d9 100644
--- a/lib/OpenLayers/Format/OWSContext/v0_3_1.js
+++ b/lib/OpenLayers/Format/OWSContext/v0_3_1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -228,7 +228,7 @@ OpenLayers.Format.OWSContext.v0_3_1 = OpenLayers.Class(OpenLayers.Format.XML, {
      *
      * Parameters:
      * layerArray - {Array({Object})} Array of layerContext objects
-     * layerContext - {Object} layerContext object
+     * layer - {Object} layerContext object
      */
     processLayer: function(layerArray, layer) {
         if (layer.layersContext) {
@@ -466,7 +466,7 @@ OpenLayers.Format.OWSContext.v0_3_1 = OpenLayers.Class(OpenLayers.Format.XML, {
                     name: layer.params.LAYERS,
                     queryable: layer.queryable ? "1" : "0",
                     hidden: layer.visibility ? "0" : "1",
-                    opacity: layer.opacity ? layer.opacity: null}
+                    opacity: layer.hasOwnProperty("opacity") ? layer.opacity : null}
                 });
                 this.writeNode("ows:Title", layer.name, node);
                 this.writeNode("ows:OutputFormat", layer.params.FORMAT, node);
diff --git a/lib/OpenLayers/Format/QueryStringFilter.js b/lib/OpenLayers/Format/QueryStringFilter.js
index 8f6f59d..6822aee 100644
--- a/lib/OpenLayers/Format/QueryStringFilter.js
+++ b/lib/OpenLayers/Format/QueryStringFilter.js
@@ -1,11 +1,14 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
+ * @requires OpenLayers/Console.js
  * @requires OpenLayers/Format.js
+ * @requires OpenLayers/Filter/Spatial.js
  * @requires OpenLayers/Filter/Comparison.js
+ * @requires OpenLayers/Filter/Logical.js
  */
 
 /**
@@ -177,4 +180,4 @@ OpenLayers.Format.QueryStringFilter = (function() {
     });
 
 
-})();
\ No newline at end of file
+})();
diff --git a/lib/OpenLayers/Format/SLD.js b/lib/OpenLayers/Format/SLD.js
index a6e4713..274c5bb 100644
--- a/lib/OpenLayers/Format/SLD.js
+++ b/lib/OpenLayers/Format/SLD.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -24,6 +24,15 @@
 OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
     
     /**
+     * APIProperty: profile
+     * {String} If provided, use a custom profile.
+     *
+     * Currently supported profiles:
+     * - GeoServer - parses GeoServer vendor specific capabilities for SLD.
+     */
+    profile: null,
+
+    /**
      * APIProperty: defaultVersion
      * {String} Version number to assume if none found.  Default is "1.0.0".
      */
diff --git a/lib/OpenLayers/Format/SLD/v1.js b/lib/OpenLayers/Format/SLD/v1.js
index 8f9f39d..79c9210 100644
--- a/lib/OpenLayers/Format/SLD/v1.js
+++ b/lib/OpenLayers/Format/SLD/v1.js
@@ -1,12 +1,17 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Rule.js
  * @requires OpenLayers/Format/SLD.js
  * @requires OpenLayers/Format/Filter/v1_0_0.js
+ * @requires OpenLayers/Symbolizer/Point.js
+ * @requires OpenLayers/Symbolizer/Line.js
+ * @requires OpenLayers/Symbolizer/Polygon.js
+ * @requires OpenLayers/Symbolizer/Text.js
+ * @requires OpenLayers/Symbolizer/Raster.js
  */
 
 /**
@@ -86,9 +91,6 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.Filter.v1_0_0.prototype.initialize.apply(this, [options]);
-    },
     
     /**
      * Method: read
@@ -218,17 +220,82 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                     );
                 }
             },
+            "LabelPlacement": function(node, symbolizer) {
+                this.readChildNodes(node, symbolizer);
+            },
+            "PointPlacement": function(node, symbolizer) {
+                var config = {};
+                this.readChildNodes(node, config);
+                config.labelRotation = config.rotation;
+                delete config.rotation;
+                var labelAlign,
+                    x = symbolizer.labelAnchorPointX,
+                    y = symbolizer.labelAnchorPointY;
+                if (x <= 1/3) {
+                    labelAlign = 'l';
+                } else if (x > 1/3 && x < 2/3) {
+                    labelAlign = 'c';
+                } else if (x >= 2/3) {
+                    labelAlign = 'r';
+                }
+                if (y <= 1/3) {
+                    labelAlign += 'b';
+                } else if (y > 1/3 && y < 2/3) {
+                    labelAlign += 'm';
+                } else if (y >= 2/3) {
+                    labelAlign += 't';
+                }
+                config.labelAlign = labelAlign;
+                OpenLayers.Util.applyDefaults(symbolizer, config);
+            },
+            "AnchorPoint": function(node, symbolizer) {
+                this.readChildNodes(node, symbolizer);
+            },
+            "AnchorPointX": function(node, symbolizer) {
+                var labelAnchorPointX = this.readers.ogc._expression.call(this, node);
+                // always string, could be empty string
+                if(labelAnchorPointX) {
+                    symbolizer.labelAnchorPointX = labelAnchorPointX;
+                }
+            },
+            "AnchorPointY": function(node, symbolizer) {
+                var labelAnchorPointY = this.readers.ogc._expression.call(this, node);
+                // always string, could be empty string
+                if(labelAnchorPointY) {
+                    symbolizer.labelAnchorPointY = labelAnchorPointY;
+                }
+            },
+            "Displacement": function(node, symbolizer) {
+                this.readChildNodes(node, symbolizer);
+            },
+            "DisplacementX": function(node, symbolizer) {
+                var labelXOffset = this.readers.ogc._expression.call(this, node);
+                // always string, could be empty string
+                if(labelXOffset) {
+                    symbolizer.labelXOffset = labelXOffset;
+                }
+            },
+            "DisplacementY": function(node, symbolizer) {
+                var labelYOffset = this.readers.ogc._expression.call(this, node);
+                // always string, could be empty string
+                if(labelYOffset) {
+                    symbolizer.labelYOffset = labelYOffset;
+                }
+            },
+            "LinePlacement": function(node, symbolizer) {
+                this.readChildNodes(node, symbolizer);
+            },
+            "PerpendicularOffset": function(node, symbolizer) {
+                var labelPerpendicularOffset = this.readers.ogc._expression.call(this, node);
+                // always string, could be empty string
+                if(labelPerpendicularOffset) {
+                    symbolizer.labelPerpendicularOffset = labelPerpendicularOffset;
+                }
+            },
             "Label": function(node, symbolizer) {
-                // only supporting literal or property name
-                var obj = {};
-                this.readChildNodes(node, obj);
-                if(obj.property) {
-                    symbolizer.label = "${" + obj.property + "}";
-                } else {
-                    var value = this.readOgcExpression(node);
-                    if(value) {
-                        symbolizer.label = value;
-                    }
+                var value = this.readers.ogc._expression.call(this, node);
+                if (value) {
+                    symbolizer.label = value;
                 }
             },
             "Font": function(node, symbolizer) {
@@ -243,7 +310,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 symbolizer.haloOpacity = obj.fillOpacity;
             },
             "Radius": function(node, symbolizer) {
-                var radius = this.readOgcExpression(node);
+                var radius = this.readers.ogc._expression.call(this, node);
                 if(radius != null) {
                     // radius is only used for halo
                     symbolizer.haloRadius = radius;
@@ -343,9 +410,18 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
             "CssParameter": function(node, symbolizer) {
                 var cssProperty = node.getAttribute("name");
                 var symProperty = this.cssMap[cssProperty];
+                // for labels, fill should map to fontColor and fill-opacity 
+                // to fontOpacity
+                if (symbolizer.label) {
+                    if (cssProperty === 'fill') {
+                        symProperty = "fontColor";
+                    } else if (cssProperty === 'fill-opacity') {
+                        symProperty = "fontOpacity";
+                    }
+                }
                 if(symProperty) {
                     // Limited support for parsing of OGC expressions
-                    var value = this.readOgcExpression(node);
+                    var value = this.readers.ogc._expression.call(this, node);
                     // always string, could be an empty string
                     if(value) {
                         symbolizer[symProperty] = value;
@@ -376,7 +452,13 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                     symbolizer.graphicOpacity = graphic.opacity;
                 }
                 if(graphic.size != undefined) {
-                    symbolizer.pointRadius = graphic.size / 2;
+                    var pointRadius = graphic.size / 2;
+                    if (isNaN(pointRadius)) {
+                        // likely a property name
+                        symbolizer.graphicWidth = graphic.size;
+                    } else {
+                        symbolizer.pointRadius = graphic.size / 2;
+                    }
                 }
                 if(graphic.href != undefined) {
                     symbolizer.externalGraphic = graphic.href;
@@ -395,21 +477,21 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 graphic.graphicName = this.getChildValue(node);
             },
             "Opacity": function(node, obj) {
-                var opacity = this.readOgcExpression(node);
+                var opacity = this.readers.ogc._expression.call(this, node);
                 // always string, could be empty string
                 if(opacity) {
                     obj.opacity = opacity;
                 }
             },
             "Size": function(node, obj) {
-                var size = this.readOgcExpression(node);
+                var size = this.readers.ogc._expression.call(this, node);
                 // always string, could be empty string
                 if(size) {
                     obj.size = size;
                 }
             },
             "Rotation": function(node, obj) {
-                var rotation = this.readOgcExpression(node);
+                var rotation = this.readers.ogc._expression.call(this, node);
                 // always string, could be empty string
                 if(rotation) {
                     obj.rotation = rotation;
@@ -471,7 +553,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
      * Method: getGraphicFormat
      * Given a href for an external graphic, try to determine the mime-type.
      *     This method doesn't try too hard, and will fall back to
-     *     <defautlGraphicFormat> if one of the known <graphicFormats> is not
+     *     <defaultGraphicFormat> if one of the known <graphicFormats> is not
      *     the file extension of the provided href.
      *
      * Parameters:
@@ -488,7 +570,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 break;
             }
         }
-        return format || this.defautlGraphicFormat;
+        return format || this.defaultGraphicFormat;
     },
     
     /**
@@ -530,6 +612,36 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
      */
     writers: OpenLayers.Util.applyDefaults({
         "sld": {
+            "_OGCExpression": function(nodeName, value) {
+                // only the simplest of ogc:expression handled
+                // {label: "some text and a ${propertyName}"}
+                var node = this.createElementNSPlus(nodeName);
+                var tokens = typeof value == "string" ?
+                    value.split("${") :
+                    [value];
+                node.appendChild(this.createTextNode(tokens[0]));
+                var item, last;
+                for(var i=1, len=tokens.length; i<len; i++) {
+                    item = tokens[i];
+                    last = item.indexOf("}"); 
+                    if(last > 0) {
+                        this.writeNode(
+                            "ogc:PropertyName",
+                            {property: item.substring(0, last)},
+                            node
+                        );
+                        node.appendChild(
+                            this.createTextNode(item.substring(++last))
+                        );
+                    } else {
+                        // no ending }, so this is a literal ${
+                        node.appendChild(
+                            this.createTextNode("${" + item)
+                        );
+                    }
+                }
+                return node;
+            },
             "StyledLayerDescriptor": function(sld) {
                 var root = this.createElementNSPlus(
                     "sld:StyledLayerDescriptor",
@@ -845,24 +957,142 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 }
                 // add in optional Font
                 if(symbolizer.fontFamily != null ||
-                   symbolizer.fontSize != null ||
-                   symbolizer.fontWeight != null ||
-                   symbolizer.fontStyle != null) {
-                    this.writeNode("Font", symbolizer, node);
+                    symbolizer.fontSize != null ||
+                    symbolizer.fontWeight != null ||
+                    symbolizer.fontStyle != null) {
+                        this.writeNode("Font", symbolizer, node);
+                }
+                // add in optional LabelPlacement
+                if (symbolizer.labelAnchorPointX != null ||
+                    symbolizer.labelAnchorPointY != null || 
+                    symbolizer.labelAlign != null ||
+                    symbolizer.labelXOffset != null ||
+                    symbolizer.labelYOffset != null ||
+                    symbolizer.labelRotation != null ||
+                    symbolizer.labelPerpendicularOffset != null) {
+                        this.writeNode("LabelPlacement", symbolizer, node);
                 }
                 // add in optional Halo
                 if(symbolizer.haloRadius != null ||
-                   symbolizer.haloColor != null ||
-                   symbolizer.haloOpacity != null) {
-                    this.writeNode("Halo", symbolizer, node);
+                    symbolizer.haloColor != null ||
+                    symbolizer.haloOpacity != null) {
+                        this.writeNode("Halo", symbolizer, node);
                 }
                 // add in optional Fill
-                if(symbolizer.fillColor != null ||
-                   symbolizer.fillOpacity != null) {
-                    this.writeNode("Fill", symbolizer, node);
+                if(symbolizer.fontColor != null ||
+                   symbolizer.fontOpacity != null) {
+                    this.writeNode("Fill", {
+                        fillColor: symbolizer.fontColor,
+                        fillOpacity: symbolizer.fontOpacity
+                    }, node);
+                }
+                return node;
+            },
+            "LabelPlacement": function(symbolizer) {
+                var node = this.createElementNSPlus("sld:LabelPlacement");
+                // PointPlacement and LinePlacement are choices, so don't output both
+                if ((symbolizer.labelAnchorPointX != null ||
+                    symbolizer.labelAnchorPointY != null ||
+                    symbolizer.labelAlign != null ||
+                    symbolizer.labelXOffset != null ||
+                    symbolizer.labelYOffset != null ||
+                    symbolizer.labelRotation != null) && 
+                    symbolizer.labelPerpendicularOffset == null) {
+                        this.writeNode("PointPlacement", symbolizer, node);
+                }
+                if (symbolizer.labelPerpendicularOffset != null) {
+                    this.writeNode("LinePlacement", symbolizer, node);
+                }
+                return node;
+            },
+            "LinePlacement": function(symbolizer) {
+                var node = this.createElementNSPlus("sld:LinePlacement");
+                this.writeNode("PerpendicularOffset", symbolizer.labelPerpendicularOffset, node);
+                return node;
+            },
+            "PerpendicularOffset": function(value) {
+                return this.createElementNSPlus("sld:PerpendicularOffset", {
+                    value: value
+                });
+            },
+            "PointPlacement": function(symbolizer) {
+                var node = this.createElementNSPlus("sld:PointPlacement");
+                if (symbolizer.labelAnchorPointX != null ||
+                    symbolizer.labelAnchorPointY != null ||
+                    symbolizer.labelAlign != null) {
+                        this.writeNode("AnchorPoint", symbolizer, node);
+                }
+                if (symbolizer.labelXOffset != null ||
+                    symbolizer.labelYOffset != null) {
+                        this.writeNode("Displacement", symbolizer, node);
+                }
+                if (symbolizer.labelRotation != null) {
+                    this.writeNode("Rotation", symbolizer.labelRotation, node);
                 }
                 return node;
             },
+            "AnchorPoint": function(symbolizer) {
+                var node = this.createElementNSPlus("sld:AnchorPoint");
+                var x = symbolizer.labelAnchorPointX,
+                    y = symbolizer.labelAnchorPointY;
+                if (x != null) {
+                    this.writeNode("AnchorPointX", x, node);
+                }
+                if (y != null) {
+                    this.writeNode("AnchorPointY", y, node);
+                }
+                if (x == null && y == null) {
+                    var xAlign = symbolizer.labelAlign.substr(0, 1),
+                        yAlign = symbolizer.labelAlign.substr(1, 1);
+                    if (xAlign === "l") {
+                        x = 0;
+                    } else if (xAlign === "c") {
+                        x = 0.5;
+                    } else if (xAlign === "r") {
+                        x = 1;
+                    }
+                    if (yAlign === "b") {
+                        y = 0;
+                    } else if (yAlign === "m") {
+                        y = 0.5;
+                    } else if (yAlign === "t") {
+                        y = 1;
+                    }
+                    this.writeNode("AnchorPointX", x, node);
+                    this.writeNode("AnchorPointY", y, node);
+                }
+                return node;
+            },
+            "AnchorPointX": function(value) {
+                return this.createElementNSPlus("sld:AnchorPointX", {
+                    value: value
+                }); 
+            },
+            "AnchorPointY": function(value) {
+                return this.createElementNSPlus("sld:AnchorPointY", {
+                    value: value
+                });
+            },
+            "Displacement": function(symbolizer) {
+                var node = this.createElementNSPlus("sld:Displacement");
+                if (symbolizer.labelXOffset != null) {
+                    this.writeNode("DisplacementX", symbolizer.labelXOffset, node);
+                }
+                if (symbolizer.labelYOffset != null) {
+                    this.writeNode("DisplacementY", symbolizer.labelYOffset, node);
+                }
+                return node;
+            },
+            "DisplacementX": function(value) {
+                return this.createElementNSPlus("sld:DisplacementX", {
+                    value: value
+                });
+            },
+            "DisplacementY": function(value) {
+                return this.createElementNSPlus("sld:DisplacementY", {
+                    value: value
+                });
+            },
             "Font": function(symbolizer) {
                 var node = this.createElementNSPlus("sld:Font");
                 // add in CssParameters
@@ -897,32 +1127,9 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 return node;
             },
             "Label": function(label) {
-                // only the simplest of ogc:expression handled
-                // {label: "some text and a ${propertyName}"}
-                var node = this.createElementNSPlus("sld:Label");
-                var tokens = label.split("${");
-                node.appendChild(this.createTextNode(tokens[0]));
-                var item, last;
-                for(var i=1, len=tokens.length; i<len; i++) {
-                    item = tokens[i];
-                    last = item.indexOf("}"); 
-                    if(last > 0) {
-                        this.writeNode(
-                            "ogc:PropertyName",
-                            {property: item.substring(0, last)},
-                            node
-                        );
-                        node.appendChild(
-                            this.createTextNode(item.substring(++last))
-                        );
-                    } else {
-                        // no ending }, so this is a literal ${
-                        node.appendChild(
-                            this.createTextNode("${" + item)
-                        );
-                    }
-                }
-                return node;
+                return this.writers.sld._OGCExpression.call(
+                    this, "sld:Label", label
+                );
             },
             "Halo": function(symbolizer) {
                 var node = this.createElementNSPlus("sld:Halo");
@@ -1030,6 +1237,8 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 }
                 if(symbolizer.pointRadius != undefined) {
                     this.writeNode("Size", symbolizer.pointRadius * 2, node);
+                } else if (symbolizer.graphicWidth != undefined) {
+                    this.writeNode("Size", symbolizer.graphicWidth, node);
                 }
                 if(symbolizer.rotation != undefined) {
                     this.writeNode("Rotation", symbolizer.rotation, node);
@@ -1070,9 +1279,9 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
                 });
             },
             "Size": function(value) {
-                return this.createElementNSPlus("sld:Size", {
-                    value: value
-                });
+                return this.writers.sld._OGCExpression.call(
+                    this, "sld:Size", value
+                );
             },
             "Rotation": function(value) {
                 return this.createElementNSPlus("sld:Rotation", {
@@ -1097,4 +1306,4 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
     
     CLASS_NAME: "OpenLayers.Format.SLD.v1" 
 
-});
\ No newline at end of file
+});
diff --git a/lib/OpenLayers/Format/SLD/v1_0_0.js b/lib/OpenLayers/Format/SLD/v1_0_0.js
index 9c82ad4..78685fd 100644
--- a/lib/OpenLayers/Format/SLD/v1_0_0.js
+++ b/lib/OpenLayers/Format/SLD/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -40,11 +40,6 @@ OpenLayers.Format.SLD.v1_0_0 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.SLD.v1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
 
     CLASS_NAME: "OpenLayers.Format.SLD.v1_0_0" 
 
diff --git a/lib/OpenLayers/Format/SLD/v1_0_0_GeoServer.js b/lib/OpenLayers/Format/SLD/v1_0_0_GeoServer.js
new file mode 100644
index 0000000..40e09bc
--- /dev/null
+++ b/lib/OpenLayers/Format/SLD/v1_0_0_GeoServer.js
@@ -0,0 +1,142 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Format/SLD/v1_0_0.js
+ */
+
+/**
+ * Class: OpenLayers.Format.SLD/v1_0_0_GeoServer
+ * Read and write SLD version 1.0.0 with GeoServer-specific enhanced options.
+ * See http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-sld/src/main/resources/org/geotools/sld/bindings/StyledLayerDescriptor.xsd
+ * for more information.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.SLD.v1_0_0>
+ */
+OpenLayers.Format.SLD.v1_0_0_GeoServer = OpenLayers.Class(
+    OpenLayers.Format.SLD.v1_0_0, {
+
+    /**
+     * Property: version
+     * {String} The specific parser version.
+     */
+    version: "1.0.0",
+
+    /**
+     * Property: profile
+     * {String} The specific profile
+     */
+    profile: "GeoServer",
+
+   /**
+     * Constructor: OpenLayers.Format.SLD.v1_0_0_GeoServer
+     * Create a new parser for GeoServer-enhanced SLD version 1.0.0.
+     *
+     * Parameters:
+     * options - {Object} An optional object whose properties will be set on
+     *     this instance.
+     */
+
+    /**
+     * 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: OpenLayers.Util.applyDefaults({
+        "sld": OpenLayers.Util.applyDefaults({
+            "Priority": function(node, obj) {
+                var value = this.readers.ogc._expression.call(this, node);
+                if (value) {
+                    obj.priority = value;
+                }
+            },
+            "VendorOption": function(node, obj) {
+                if (!obj.vendorOptions) {
+                    obj.vendorOptions = {};
+                }
+                obj.vendorOptions[node.getAttribute("name")] = this.getChildValue(node);
+            }
+        }, OpenLayers.Format.SLD.v1_0_0.prototype.readers["sld"])
+    }, OpenLayers.Format.SLD.v1_0_0.prototype.readers),
+
+    /**
+     * 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: OpenLayers.Util.applyDefaults({
+        "sld": OpenLayers.Util.applyDefaults({
+            "Priority": function(priority) {
+                return this.writers.sld._OGCExpression.call(
+                    this, "sld:Priority", priority
+                );
+            },
+            "VendorOption": function(option) {
+                return this.createElementNSPlus("sld:VendorOption", {
+                    attributes: {name: option.name},
+                    value: option.value
+                });
+            },
+            "TextSymbolizer": function(symbolizer) {
+                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
+                var node = writers["sld"]["TextSymbolizer"].apply(this, arguments);
+                if (symbolizer.graphic !== false && (symbolizer.externalGraphic || symbolizer.graphicName)) {
+                    this.writeNode("Graphic", symbolizer, node);
+                }
+                if ("priority" in symbolizer) {
+                    this.writeNode("Priority", symbolizer.priority, node);
+                }
+                return this.addVendorOptions(node, symbolizer);
+            },
+            "PointSymbolizer": function(symbolizer) {
+                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
+                var node = writers["sld"]["PointSymbolizer"].apply(this, arguments);
+                return this.addVendorOptions(node, symbolizer);
+            },
+            "LineSymbolizer": function(symbolizer) {
+                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
+                var node = writers["sld"]["LineSymbolizer"].apply(this, arguments);
+                return this.addVendorOptions(node, symbolizer);
+            },
+            "PolygonSymbolizer": function(symbolizer) {
+                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
+                var node = writers["sld"]["PolygonSymbolizer"].apply(this, arguments);
+                return this.addVendorOptions(node, symbolizer);
+            }
+        }, OpenLayers.Format.SLD.v1_0_0.prototype.writers["sld"])
+    }, OpenLayers.Format.SLD.v1_0_0.prototype.writers),
+
+    /**
+     * Method: addVendorOptions
+     * Add in the VendorOption tags and return the node again.
+     *
+     * Parameters:
+     * node - {DOMElement} A DOM node.
+     * symbolizer - {Object}
+     *
+     * Returns:
+     * {DOMElement} A DOM node.
+     */
+    addVendorOptions: function(node, symbolizer) {
+        var options = symbolizer.vendorOptions;
+        if (options) {
+            for (var key in symbolizer.vendorOptions) {
+                this.writeNode("VendorOption", {
+                    name: key, 
+                    value: symbolizer.vendorOptions[key]
+                }, node);
+            }
+        }
+        return node;
+    },
+
+    CLASS_NAME: "OpenLayers.Format.SLD.v1_0_0_GeoServer"
+
+});
diff --git a/lib/OpenLayers/Format/SOSCapabilities.js b/lib/OpenLayers/Format/SOSCapabilities.js
index ae7643b..9361416 100644
--- a/lib/OpenLayers/Format/SOSCapabilities.js
+++ b/lib/OpenLayers/Format/SOSCapabilities.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js b/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js
index 4119ae8..fdf5693 100644
--- a/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js
+++ b/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -147,7 +147,7 @@ OpenLayers.Format.SOSCapabilities.v1_0_0 = OpenLayers.Class(
                 offering.resultModels.push(this.getChildValue(node));
             },
             "responseMode": function(node, offering) {
-                offering.responseModes.push(this.getChildValue(node));;
+                offering.responseModes.push(this.getChildValue(node));
             }
         },
         "ows": OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers["ows"]
diff --git a/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js b/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
index 0f3997d..2e476f9 100644
--- a/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
+++ b/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
  
 /**
diff --git a/lib/OpenLayers/Format/SOSGetObservation.js b/lib/OpenLayers/Format/SOSGetObservation.js
index 3ff51d7..3a927c8 100644
--- a/lib/OpenLayers/Format/SOSGetObservation.js
+++ b/lib/OpenLayers/Format/SOSGetObservation.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/Text.js b/lib/OpenLayers/Format/Text.js
index 2a5d42c..52f7150 100644
--- a/lib/OpenLayers/Format/Text.js
+++ b/lib/OpenLayers/Format/Text.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -53,8 +53,7 @@ OpenLayers.Format.Text = OpenLayers.Class(OpenLayers.Format, {
 
         if(options.extractStyles !== false) {
             options.defaultStyle = {
-                'externalGraphic': OpenLayers.Util.getImagesLocation() +
-                                                                "marker.png",
+                'externalGraphic': OpenLayers.Util.getImageLocation("marker.png"),
                 'graphicWidth': 21,
                 'graphicHeight': 25,
                 'graphicXOffset': -10.5,
@@ -70,10 +69,10 @@ OpenLayers.Format.Text = OpenLayers.Class(OpenLayers.Format, {
      * Return a list of features from a Tab Seperated Values text string.
      * 
      * Parameters:
-     * data - {String} 
+     * text - {String} 
      *
      * Returns:
-     * An Array of <OpenLayers.Feature.Vector>s
+     * Array({<OpenLayers.Feature.Vector>})
      */
     read: function(text) {
         var lines = text.split('\n');
diff --git a/lib/OpenLayers/Format/WCSGetCoverage.js b/lib/OpenLayers/Format/WCSGetCoverage.js
index 12b75c9..024c1a1 100644
--- a/lib/OpenLayers/Format/WCSGetCoverage.js
+++ b/lib/OpenLayers/Format/WCSGetCoverage.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WFS.js b/lib/OpenLayers/Format/WFS.js
index b11ce11..c450028 100644
--- a/lib/OpenLayers/Format/WFS.js
+++ b/lib/OpenLayers/Format/WFS.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -20,20 +20,23 @@ OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, {
     
     /** 
      * Property: layer
+     * {<OpenLayers.Layer>}
      */
     layer: null,
     
     /**
      * APIProperty: wfsns
+     * {String}
      */
     wfsns: "http://www.opengis.net/wfs",
     
     /**
      * Property: ogcns
+     * {String}
      */
     ogcns: "http://www.opengis.net/ogc",
     
-    /*
+    /**
      * Constructor: OpenLayers.Format.WFS
      * Create a WFS-T formatter. This requires a layer: that layer should
      * have two properties: geometry_column and typename. The parser
@@ -45,7 +48,6 @@ OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, {
      * options - {Object} 
      * layer - {<OpenLayers.Layer>} 
      */
-    
     initialize: function(options, layer) {
         OpenLayers.Format.GML.prototype.initialize.apply(this, [options]);
         this.layer = layer;
diff --git a/lib/OpenLayers/Format/WFSCapabilities.js b/lib/OpenLayers/Format/WFSCapabilities.js
index ba65884..8c434b4 100644
--- a/lib/OpenLayers/Format/WFSCapabilities.js
+++ b/lib/OpenLayers/Format/WFSCapabilities.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WFSCapabilities/v1.js b/lib/OpenLayers/Format/WFSCapabilities/v1.js
index bcc7d41..bd52c61 100644
--- a/lib/OpenLayers/Format/WFSCapabilities/v1.js
+++ b/lib/OpenLayers/Format/WFSCapabilities/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -15,7 +15,23 @@
  *  - <OpenLayers.Format.XML>
  */
 OpenLayers.Format.WFSCapabilities.v1 = OpenLayers.Class(
-    OpenLayers.Format.WFSCapabilities, {
+    OpenLayers.Format.XML, {
+
+    /**
+     * Property: namespaces
+     * {Object} Mapping of namespace aliases to namespace URIs.
+     */
+    namespaces: {
+        wfs: "http://www.opengis.net/wfs",
+        xlink: "http://www.w3.org/1999/xlink",
+        xsi: "http://www.w3.org/2001/XMLSchema-instance",
+        ows: "http://www.opengis.net/ows"
+    },
+
+    /**
+     * Property: defaultPrefix
+     */
+    defaultPrefix: "wfs",
     
     /**
      * Constructor: OpenLayers.Format.WFSCapabilities.v1_1
@@ -25,10 +41,6 @@ OpenLayers.Format.WFSCapabilities.v1 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
-        this.options = options;
-    },
 
     /**
      * APIMethod: read
@@ -44,83 +56,64 @@ OpenLayers.Format.WFSCapabilities.v1 = OpenLayers.Class(
         if(typeof data == "string") {
             data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
         }
+        var raw = data;
+        if(data && data.nodeType == 9) {
+            data = data.documentElement;
+        }
         var capabilities = {};
-        var root = data.documentElement;
-        this.runChildNodes(capabilities, root);
+        this.readNode(data, capabilities);
         return capabilities;
     },
-    
+
     /**
-     * Method: runChildNodes
+     * 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.
      */
-    runChildNodes: function(obj, node) {
-        var children = node.childNodes;
-        var childNode, processor;
-        for(var i=0; i<children.length; ++i) {
-            childNode = children[i];
-            if(childNode.nodeType == 1) {
-                processor = this["read_cap_" + childNode.nodeName];
-                if(processor) {
-                    processor.apply(this, [obj, childNode]);
+    readers: {
+        "wfs": {
+            "WFS_Capabilities": function(node, obj) {
+                this.readChildNodes(node, obj);
+            },
+            "FeatureTypeList": function(node, request) {
+                request.featureTypeList = {
+                    featureTypes: []
+                };
+                this.readChildNodes(node, request.featureTypeList);
+            },
+            "FeatureType": function(node, featureTypeList) {
+                var featureType = {};
+                this.readChildNodes(node, featureType);
+                featureTypeList.featureTypes.push(featureType);
+            },
+            "Name": function(node, obj) {
+                var name = this.getChildValue(node);
+                if(name) {
+                    var parts = name.split(":");
+                    obj.name = parts.pop();
+                    if(parts.length > 0) {
+                        obj.featureNS = this.lookupNamespaceURI(node, parts[0]);
+                    }
+                }
+            },
+            "Title": function(node, obj) {
+                var title = this.getChildValue(node);
+                if(title) {
+                    obj.title = title;
+                }
+            },
+            "Abstract": function(node, obj) {
+                var abst = this.getChildValue(node);
+                if(abst) {
+                    obj["abstract"] = abst;
                 }
             }
         }
     },
-    
-    /**
-     * Method: read_cap_FeatureTypeList
-     */
-    read_cap_FeatureTypeList: function(request, node) {
-        var featureTypeList = {
-            featureTypes: []
-        };
-        this.runChildNodes(featureTypeList, node);
-        request.featureTypeList = featureTypeList;
-    },
-    
-    /**
-     * Method: read_cap_FeatureType
-     */
-    read_cap_FeatureType: function(featureTypeList, node, parentLayer) {
-        var featureType = {};
-        this.runChildNodes(featureType, node);
-        featureTypeList.featureTypes.push(featureType);
-    },
-    
-    /**
-     * Method: read_cap_Name
-     */
-    read_cap_Name: function(obj, node) {
-        var name = this.getChildValue(node);
-        if(name) {
-            var parts = name.split(":");
-            obj.name = parts.pop();
-            if(parts.length > 0) {
-                obj.featureNS = this.lookupNamespaceURI(node, parts[0]);
-            }
-        }
-    },
-
-    /**
-     * Method: read_cap_Title
-     */
-    read_cap_Title: function(obj, node) {
-        var title = this.getChildValue(node);
-        if(title) {
-            obj.title = title;
-        }
-    },
 
-    /**
-     * Method: read_cap_Abstract
-     */
-    read_cap_Abstract: function(obj, node) {
-        var abst = this.getChildValue(node);
-        if(abst) {
-            obj["abstract"] = abst;
-        }
-    },
-    
     CLASS_NAME: "OpenLayers.Format.WFSCapabilities.v1" 
 
 });
diff --git a/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js b/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js
index c0abe9d..8f44f6e 100644
--- a/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js
+++ b/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -12,7 +12,7 @@
  * Read WFS Capabilities version 1.0.0.
  * 
  * Inherits from:
- *  - <OpenLayers.Format.WFSCapabilities>
+ *  - <OpenLayers.Format.WFSCapabilities.v1>
  */
 OpenLayers.Format.WFSCapabilities.v1_0_0 = OpenLayers.Class(
     OpenLayers.Format.WFSCapabilities.v1, {
@@ -25,141 +25,89 @@ OpenLayers.Format.WFSCapabilities.v1_0_0 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.WFSCapabilities.v1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
-    
-    /**
-     * Method: read_cap_Service
-     */
-    read_cap_Service: function(capabilities, node) {
-        var service = {};
-        this.runChildNodes(service, node);
-        capabilities.service = service;
-    },
-
-    /**
-     * Method: read_cap_Fees
-     */
-    read_cap_Fees: function(service, node) {
-        var fees = this.getChildValue(node);
-        if (fees && fees.toLowerCase() != "none") {
-            service.fees = fees;
-        }
-    },
 
     /**
-     * Method: read_cap_AccessConstraints
+     * 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.
      */
-    read_cap_AccessConstraints: function(service, node) {
-        var constraints = this.getChildValue(node);
-        if (constraints && constraints.toLowerCase() != "none") {
-            service.accessConstraints = constraints;
-        }
-    },
-    
-    /**
-     * Method: read_cap_OnlineResource
-     */
-    read_cap_OnlineResource: function(service, node) {
-        var onlineResource = this.getChildValue(node);
-        if (onlineResource && onlineResource.toLowerCase() != "none") {
-            service.onlineResource = onlineResource;
-        }
-    },
-    
-    /**
-     * Method: read_cap_Keywords
-     */
-    read_cap_Keywords: function(service, node) {
-        var keywords = this.getChildValue(node);
-        if (keywords && keywords.toLowerCase() != "none") {
-            service.keywords = keywords.split(', ');
-        }
-    },
-    
-    /**
-     * Method: read_cap_Capability
-     */
-    read_cap_Capability: function(capabilities, node) {
-        var capability = {};
-        this.runChildNodes(capability, node);
-        capabilities.capability = capability;
-    },
-    
-    /**
-     * Method: read_cap_Request
-     */
-    read_cap_Request: function(obj, node) {
-        var request = {};
-        this.runChildNodes(request, node);
-        obj.request = request;
-    },
-    
-    /**
-     * Method: read_cap_GetFeature
-     */
-    read_cap_GetFeature: function(request, node) {
-        var getfeature = {
-            href: {}, // DCPType
-            formats: [] // ResultFormat
-        };
-        this.runChildNodes(getfeature, node);
-        request.getfeature = getfeature;
-    },
-    
-    /**
-     * Method: read_cap_ResultFormat
-     */
-    read_cap_ResultFormat: function(obj, node) {
-        var children = node.childNodes;
-        var childNode;
-        for(var i=0; i<children.length; i++) {
-            childNode = children[i];
-            if(childNode.nodeType == 1) {
-                obj.formats.push(childNode.nodeName);
+    readers: {
+        "wfs": OpenLayers.Util.applyDefaults({
+            "Service": function(node, capabilities) {
+                capabilities.service = {};
+                this.readChildNodes(node, capabilities.service);
+            },
+            "Fees": function(node, service) {
+                var fees = this.getChildValue(node);
+                if (fees && fees.toLowerCase() != "none") {
+                    service.fees = fees;
+                }
+            },
+            "AccessConstraints": function(node, service) {
+                var constraints = this.getChildValue(node);
+                if (constraints && constraints.toLowerCase() != "none") {
+                    service.accessConstraints = constraints;
+                }
+            },
+            "OnlineResource": function(node, service) {
+                var onlineResource = this.getChildValue(node);
+                if (onlineResource && onlineResource.toLowerCase() != "none") {
+                    service.onlineResource = onlineResource;
+                }
+            },
+            "Keywords": function(node, service) {
+                var keywords = this.getChildValue(node);
+                if (keywords && keywords.toLowerCase() != "none") {
+                    service.keywords = keywords.split(', ');
+                }
+            },
+            "Capability": function(node, capabilities) {
+                capabilities.capability = {};
+                this.readChildNodes(node, capabilities.capability);
+            },
+            "Request": function(node, obj) {
+                obj.request = {};
+                this.readChildNodes(node, obj.request);
+            },
+            "GetFeature": function(node, request) {
+                request.getfeature = {
+                    href: {}, // DCPType
+                    formats: [] // ResultFormat
+                };
+                this.readChildNodes(node, request.getfeature);
+            },
+            "ResultFormat": function(node, obj) {
+                var children = node.childNodes;
+                var childNode;
+                for(var i=0; i<children.length; i++) {
+                    childNode = children[i];
+                    if(childNode.nodeType == 1) {
+                        obj.formats.push(childNode.nodeName);
+                    }
+                }
+            },
+            "DCPType": function(node, obj) {
+                this.readChildNodes(node, obj);
+            },
+            "HTTP": function(node, obj) {
+                this.readChildNodes(node, obj.href);
+            },
+            "Get": function(node, obj) {
+                obj.get = node.getAttribute("onlineResource");
+            },
+            "Post": function(node, obj) {
+                obj.post = node.getAttribute("onlineResource");
+            },
+            "SRS": function(node, obj) {
+                var srs = this.getChildValue(node);
+                if (srs) {
+                    obj.srs = srs;
+                }
             }
-        }
-    },
-    
-    /**
-     * Method: read_cap_DCPType
-     */
-    read_cap_DCPType: function(obj, node) {
-        this.runChildNodes(obj, node);
-    },
-    
-    /**
-     * Method: read_cap_HTTP
-     */
-    read_cap_HTTP: function(obj, node) {
-        this.runChildNodes(obj.href, node);
-    },
-    
-    /**
-     * Method: read_cap_Get
-     */
-    read_cap_Get: function(obj, node) {
-        obj.get = node.getAttribute("onlineResource");
-    },
-    
-    /**
-     * Method: read_cap_Post
-     */
-    read_cap_Post: function(obj, node) {
-        obj.post = node.getAttribute("onlineResource");
-    },
-
-    /**
-     * Method: read_cap_SRS
-     */
-    read_cap_SRS: function(obj, node) {
-        var srs = this.getChildValue(node);
-        if (srs) {
-            obj.srs = srs;
-        }
+        }, OpenLayers.Format.WFSCapabilities.v1.prototype.readers["wfs"])
     },
     
     CLASS_NAME: "OpenLayers.Format.WFSCapabilities.v1_0_0" 
diff --git a/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js b/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js
index 0d36ccc..1caf76e 100644
--- a/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js
+++ b/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js
@@ -1,10 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/WFSCapabilities/v1.js
+ * @requires OpenLayers/Format/OWSCommon/v1.js
  */
 
 /**
@@ -16,6 +17,17 @@
  */
 OpenLayers.Format.WFSCapabilities.v1_1_0 = OpenLayers.Class(
     OpenLayers.Format.WFSCapabilities.v1, {
+
+    /**
+     * Property: regExes
+     * Compiled regular expressions for manipulating strings.
+     */
+    regExes: {
+        trimSpace: (/^\s*|\s*$/g),
+        removeSpace: (/\s*/g),
+        splitSpace: (/\s+/),
+        trimComma: (/\s*,\s*/g)
+    },
     
     /**
      * Constructor: OpenLayers.Format.WFSCapabilities.v1_1_0
@@ -25,20 +37,25 @@ OpenLayers.Format.WFSCapabilities.v1_1_0 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.WFSCapabilities.v1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
 
     /**
-     * Method: read_cap_DefaultSRS
+     * 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.
      */
-    read_cap_DefaultSRS: function(obj, node) {
-        var defaultSRS = this.getChildValue(node);
-        if (defaultSRS) {
-            obj.srs = defaultSRS;
-        }
+    readers: {
+        "wfs": OpenLayers.Util.applyDefaults({
+            "DefaultSRS": function(node, obj) {
+                var defaultSRS = this.getChildValue(node);
+                if (defaultSRS) {
+                    obj.srs = defaultSRS;
+                }
+            }
+        }, OpenLayers.Format.WFSCapabilities.v1.prototype.readers["wfs"]),
+        "ows": OpenLayers.Format.OWSCommon.v1.prototype.readers.ows
     },
 
     CLASS_NAME: "OpenLayers.Format.WFSCapabilities.v1_1_0" 
diff --git a/lib/OpenLayers/Format/WFSDescribeFeatureType.js b/lib/OpenLayers/Format/WFSDescribeFeatureType.js
index 695a36c..697035a 100644
--- a/lib/OpenLayers/Format/WFSDescribeFeatureType.js
+++ b/lib/OpenLayers/Format/WFSDescribeFeatureType.js
@@ -1,11 +1,13 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/XML.js
- *
+ */
+ 
+/**
  * Class: OpenLayers.Format.WFSDescribeFeatureType
  * Read WFS DescribeFeatureType response
  * 
@@ -145,8 +147,8 @@ OpenLayers.Format.WFSDescribeFeatureType = OpenLayers.Class(
      * Reads restriction defined in the child nodes of a restriction element
      * 
      * Parameters:
-     * node {DOMElement} - the node to parse
-     * obj {Object} - the object that receives the read result
+     * node - {DOMElement} the node to parse
+     * obj - {Object} the object that receives the read result
      */
     readRestriction: function(node, obj) {
         var children = node.childNodes;
diff --git a/lib/OpenLayers/Format/WFST.js b/lib/OpenLayers/Format/WFST.js
index a14d470..1e94fd8 100644
--- a/lib/OpenLayers/Format/WFST.js
+++ b/lib/OpenLayers/Format/WFST.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WFST/v1.js b/lib/OpenLayers/Format/WFST/v1.js
index 2b5c04e..ee9b614 100644
--- a/lib/OpenLayers/Format/WFST/v1.js
+++ b/lib/OpenLayers/Format/WFST/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -429,11 +429,11 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
     setFilterProperty: function(filter) {
         if(filter.filters) {
             for(var i=0, len=filter.filters.length; i<len; ++i) {
-                this.setFilterProperty(filter.filters[i]);
+                OpenLayers.Format.WFST.v1.prototype.setFilterProperty.call(this, filter.filters[i]);
             }
         } else {
-            if(filter instanceof OpenLayers.Filter.Spatial) {
-                // got a spatial filter, set its property
+            if(filter instanceof OpenLayers.Filter.Spatial && !filter.property) {
+                // got a spatial filter without property, so set it
                 filter.property = this.geometryName;
             }
         }
diff --git a/lib/OpenLayers/Format/WFST/v1_0_0.js b/lib/OpenLayers/Format/WFST/v1_0_0.js
index a89d930..5717b29 100644
--- a/lib/OpenLayers/Format/WFST/v1_0_0.js
+++ b/lib/OpenLayers/Format/WFST/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WFST/v1_1_0.js b/lib/OpenLayers/Format/WFST/v1_1_0.js
index c759fcf..8185f8d 100644
--- a/lib/OpenLayers/Format/WFST/v1_1_0.js
+++ b/lib/OpenLayers/Format/WFST/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -169,7 +169,7 @@ OpenLayers.Format.WFST.v1_1_0 = OpenLayers.Class(
                     }
                 }
                 if(options.filter) {
-                    this.setFilterProperty(options.filter);
+                    OpenLayers.Format.WFST.v1_1_0.prototype.setFilterProperty.call(this, options.filter);
                     this.writeNode("ogc:Filter", options.filter, node);
                 }
                 return node;
diff --git a/lib/OpenLayers/Format/WKT.js b/lib/OpenLayers/Format/WKT.js
index f9fe75c..33cdd24 100644
--- a/lib/OpenLayers/Format/WKT.js
+++ b/lib/OpenLayers/Format/WKT.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -151,7 +151,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
     extract: {
         /**
          * Return a space delimited string of point coordinates.
-         * @param {<OpenLayers.Geometry.Point>} point
+         * @param {OpenLayers.Geometry.Point} point
          * @returns {String} A string of coordinates representing the point
          */
         'point': function(point) {
@@ -160,7 +160,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return a comma delimited string of point coordinates from a multipoint.
-         * @param {<OpenLayers.Geometry.MultiPoint>} multipoint
+         * @param {OpenLayers.Geometry.MultiPoint} multipoint
          * @returns {String} A string of point coordinate strings representing
          *                  the multipoint
          */
@@ -176,7 +176,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
         
         /**
          * Return a comma delimited string of point coordinates from a line.
-         * @param {<OpenLayers.Geometry.LineString>} linestring
+         * @param {OpenLayers.Geometry.LineString} linestring
          * @returns {String} A string of point coordinate strings representing
          *                  the linestring
          */
@@ -190,7 +190,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return a comma delimited string of linestring strings from a multilinestring.
-         * @param {<OpenLayers.Geometry.MultiLineString>} multilinestring
+         * @param {OpenLayers.Geometry.MultiLineString} multilinestring
          * @returns {String} A string of of linestring strings representing
          *                  the multilinestring
          */
@@ -206,7 +206,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
         
         /**
          * Return a comma delimited string of linear ring arrays from a polygon.
-         * @param {<OpenLayers.Geometry.Polygon>} polygon
+         * @param {OpenLayers.Geometry.Polygon} polygon
          * @returns {String} An array of linear ring arrays representing the polygon
          */
         'polygon': function(polygon) {
@@ -221,7 +221,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return an array of polygon arrays from a multipolygon.
-         * @param {<OpenLayers.Geometry.MultiPolygon>} multipolygon
+         * @param {OpenLayers.Geometry.MultiPolygon} multipolygon
          * @returns {String} An array of polygon arrays representing
          *                  the multipolygon
          */
@@ -237,7 +237,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an <OpenLayers.Geometry.Collection>
-         * @param {<OpenLayers.Geometry.Collection>} collection
+         * @param {OpenLayers.Geometry.Collection} collection
          * @returns {String} internal WKT representation of the collection
          */
         'collection': function(collection) {
@@ -258,7 +258,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
         /**
          * Return point feature given a point WKT fragment.
          * @param {String} str A WKT fragment representing the point
-         * @returns {<OpenLayers.Feature.Vector>} A point feature
+         * @returns {OpenLayers.Feature.Vector} A point feature
          * @private
          */
         'point': function(str) {
@@ -270,8 +270,8 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return a multipoint feature given a multipoint WKT fragment.
-         * @param {String} A WKT fragment representing the multipoint
-         * @returns {<OpenLayers.Feature.Vector>} A multipoint feature
+         * @param {String} str A WKT fragment representing the multipoint
+         * @returns {OpenLayers.Feature.Vector} A multipoint feature
          * @private
          */
         'multipoint': function(str) {
@@ -289,8 +289,8 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
         
         /**
          * Return a linestring feature given a linestring WKT fragment.
-         * @param {String} A WKT fragment representing the linestring
-         * @returns {<OpenLayers.Feature.Vector>} A linestring feature
+         * @param {String} str A WKT fragment representing the linestring
+         * @returns {OpenLayers.Feature.Vector} A linestring feature
          * @private
          */
         'linestring': function(str) {
@@ -306,8 +306,8 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return a multilinestring feature given a multilinestring WKT fragment.
-         * @param {String} A WKT fragment representing the multilinestring
-         * @returns {<OpenLayers.Feature.Vector>} A multilinestring feature
+         * @param {String} str A WKT fragment representing the multilinestring
+         * @returns {OpenLayers.Feature.Vector} A multilinestring feature
          * @private
          */
         'multilinestring': function(str) {
@@ -325,8 +325,8 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
         
         /**
          * Return a polygon feature given a polygon WKT fragment.
-         * @param {String} A WKT fragment representing the polygon
-         * @returns {<OpenLayers.Feature.Vector>} A polygon feature
+         * @param {String} str A WKT fragment representing the polygon
+         * @returns {OpenLayers.Feature.Vector} A polygon feature
          * @private
          */
         'polygon': function(str) {
@@ -346,8 +346,8 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return a multipolygon feature given a multipolygon WKT fragment.
-         * @param {String} A WKT fragment representing the multipolygon
-         * @returns {<OpenLayers.Feature.Vector>} A multipolygon feature
+         * @param {String} str A WKT fragment representing the multipolygon
+         * @returns {OpenLayers.Feature.Vector} A multipolygon feature
          * @private
          */
         'multipolygon': function(str) {
@@ -365,7 +365,7 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
 
         /**
          * Return an array of features given a geometrycollection WKT fragment.
-         * @param {String} A WKT fragment representing the geometrycollection
+         * @param {String} str A WKT fragment representing the geometrycollection
          * @returns {Array} An array of OpenLayers.Feature.Vector
          * @private
          */
diff --git a/lib/OpenLayers/Format/WMC.js b/lib/OpenLayers/Format/WMC.js
index 8b3ad62..5b6ea6d 100644
--- a/lib/OpenLayers/Format/WMC.js
+++ b/lib/OpenLayers/Format/WMC.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -13,7 +13,7 @@
  * Read and write Web Map Context documents.
  *
  * Inherits from:
- *  - <OpenLayers.Format.XML>
+ *  - <OpenLayers.Format.Context>
  */
 OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, {
     
@@ -37,7 +37,7 @@ OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, {
      * Create a layer context object given a wms layer object.
      *
      * Parameters:
-     * obj - {<OpenLayers.Layer.WMS>} The layer.
+     * layer - {<OpenLayers.Layer.WMS>} The layer.
      *
      * Returns:
      * {Object} A layer context object.
@@ -61,7 +61,7 @@ OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, {
             numZoomLevels: layer.numZoomLevels,
             units: layer.units,
             isBaseLayer: layer.isBaseLayer,
-            opacity: layer.opacity,
+            opacity: layer.opacity == 1 ? undefined : layer.opacity,
             displayInLayerSwitcher: layer.displayInLayerSwitcher,
             singleTile: layer.singleTile,
             tileSize: (layer.singleTile || !layer.tileSize) ? 
diff --git a/lib/OpenLayers/Format/WMC/v1.js b/lib/OpenLayers/Format/WMC/v1.js
index da72668..503f970 100644
--- a/lib/OpenLayers/Format/WMC/v1.js
+++ b/lib/OpenLayers/Format/WMC/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -147,10 +147,8 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
     read_wmc_BoundingBox: function(context, node) {
         context.projection = node.getAttribute("SRS");
         context.bounds = new OpenLayers.Bounds(
-            parseFloat(node.getAttribute("minx")),
-            parseFloat(node.getAttribute("miny")),
-            parseFloat(node.getAttribute("maxx")),
-            parseFloat(node.getAttribute("maxy"))
+            node.getAttribute("minx"), node.getAttribute("miny"),
+            node.getAttribute("maxx"), node.getAttribute("maxy")
         );
     },
     
@@ -1013,7 +1011,7 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
      *     null or undefined, null will be returned.
      *
      * Parameters:
-     * object - {Object} An object.
+     * obj - {Object} An object.
      * prop - {String} A property.
      *
      * Returns:
@@ -1046,7 +1044,7 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
              version: server.version
          };
          if (server.title) {
-             attributes.title = server.title
+             attributes.title = server.title;
          }
          this.setAttributes(node, attributes);
         
@@ -1057,15 +1055,16 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
     },
 
     /**
-      * Method: write_wmc_URLType
-      * Create a LogoURL/DescriptionURL/MetadataURL/DataURL/LegendURL node given a object and elementName.
+     * Method: write_wmc_URLType
+     * Create a LogoURL/DescriptionURL/MetadataURL/DataURL/LegendURL node given a object and elementName.
      *
      * Parameters:
-      * elName - {String} Name of element (LogoURL/DescriptionURL/MetadataURL/LegendURL)
-      * url - {String} URL string value
-      * attr - {Object} Optional attributes (width, height, format)
+     * elName - {String} Name of element (LogoURL/DescriptionURL/MetadataURL/LegendURL)
+     * url - {String} URL string value
+     * attr - {Object} Optional attributes (width, height, format)
+     *
      * Returns:
-      * {Element} A WMC element node.
+     * {Element} A WMC element node.
      */
      write_wmc_URLType: function(elName, url, attr) {
          var node = this.createElementDefaultNS(elName);
@@ -1145,7 +1144,7 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
      * Create a StyleList node given a layer context.
      *
      * Parameters:
-     * context - {Object} Layer context object.
+     * layer - {Object} Layer context object.
      *
      * Returns:
      * {Element} A WMC StyleList element node.
diff --git a/lib/OpenLayers/Format/WMC/v1_0_0.js b/lib/OpenLayers/Format/WMC/v1_0_0.js
index 9968e63..003decb 100644
--- a/lib/OpenLayers/Format/WMC/v1_0_0.js
+++ b/lib/OpenLayers/Format/WMC/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMC/v1_1_0.js b/lib/OpenLayers/Format/WMC/v1_1_0.js
index 24c65e3..d591c7f 100644
--- a/lib/OpenLayers/Format/WMC/v1_1_0.js
+++ b/lib/OpenLayers/Format/WMC/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSCapabilities.js b/lib/OpenLayers/Format/WMSCapabilities.js
index 5315c21..a926fe0 100644
--- a/lib/OpenLayers/Format/WMSCapabilities.js
+++ b/lib/OpenLayers/Format/WMSCapabilities.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1.js b/lib/OpenLayers/Format/WMSCapabilities/v1.js
index 7283760..bfa5506 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -43,9 +43,6 @@ OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
-    },
 
     /**
      * APIMethod: read
@@ -71,115 +68,11 @@ OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(
             // an exception must have occurred, so parse it
             var parser = new OpenLayers.Format.OGCExceptionReport();
             capabilities.error = parser.read(raw);
-        } else {
-            // postprocess the layer list
-            this.postProcessLayers(capabilities);
         }
         return capabilities;
     },
 
     /**
-     * Method: postProcessLayers
-     * Post process the layers, so that the nested layer structure is converted
-     * to a flat layer list with only named layers.
-     *
-     * Parameters:
-     * capabilities - {Object} The object (structure) returned by the parser with
-     *     all the info from the GetCapabilities response.
-     */
-    postProcessLayers: function(capabilities) {
-        if (capabilities.capability) {
-            capabilities.capability.layers = [];
-            var layers = capabilities.capability.nestedLayers;
-            for (var i=0, len = layers.length; i<len; ++i) {
-                var layer = layers[i];
-                this.processLayer(capabilities.capability, layer);
-            }
-        }
-    },
-
-    /**
-     * Method: processLayer
-     * Recursive submethod of postProcessLayers. This function will among
-     * others deal with property inheritance.
-     *
-     * Parameters:
-     * capability - {Object} The capability part of the capabilities object
-     * layer - {Object} The layer that needs processing
-     * parentLayer - {Object} The parent layer of the respective layer
-    */
-    processLayer: function(capability, layer, parentLayer) {
-        if (layer.formats === undefined) {
-            layer.formats = capability.request.getmap.formats;
-        }
-
-        var i, len;
-
-        // deal with property inheritance
-        if(parentLayer) {
-            // add style
-            layer.styles = layer.styles.concat(parentLayer.styles);
-            var attributes = ["queryable",
-                              "cascaded",
-                              "fixedWidth",
-                              "fixedHeight",
-                              "opaque",
-                              "noSubsets",
-                              "llbbox",
-                              "minScale",
-                              "maxScale",
-                              "attribution"];
-
-            var complexAttr = ["srs",
-                               "bbox",
-                               "dimensions",
-                               "authorityURLs"];
-            
-            var key;
-
-            for (i=0, len=attributes.length; i<len; i++) {
-                key = attributes[i];
-                if (key in parentLayer) {
-                    // only take parent value if not present (null or undefined)
-                    if (layer[key] == null) {
-                        layer[key] = parentLayer[key];
-                    }
-                    // if attribute isn't present, and we haven't
-                    // inherited anything from a parent layer
-                    // set to default value
-                    if (layer[key] == null) {
-                        var intAttr = ["cascaded", "fixedWidth", "fixedHeight"];
-                        var boolAttr = ["queryable", "opaque", "noSubsets"];
-                        if (OpenLayers.Util.indexOf(intAttr, key) != -1) {
-                            layer[key] = 0;
-                        }
-                        if (OpenLayers.Util.indexOf(boolAttr, key) != -1) {
-                            layer[key] = false;
-                        }
-                    }
-                }
-            }
-
-            for (i=0, len=complexAttr.length; i<len; i++) {
-                key = complexAttr[i];
-                layer[key] = OpenLayers.Util.applyDefaults(
-                    layer[key], parentLayer[key]);
-            }
-        }
-
-        // process sublayers
-        for (i=0, len=layer.nestedLayers.length; i<len; i++) {
-            var childLayer = layer.nestedLayers[i];
-            this.processLayer(capability, childLayer, layer);
-        }
-        
-        if (layer.name) {
-            capability.layers.push(layer);
-        }
-    
-    },
-    
-    /**
      * Property: readers
      * Contains public functions, grouped by namespace prefix, that will
      *     be applied when a namespaced node is found matching the function
@@ -287,7 +180,10 @@ OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(
                 }
             },
             "Capability": function(node, obj) {
-                obj.capability = {nestedLayers: []};
+                obj.capability = {
+                    nestedLayers: [],
+                    layers: []
+                };
                 this.readChildNodes(node, obj.capability);
             },
             "Request": function(node, obj) {
@@ -340,6 +236,13 @@ OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(
                 this.readChildNodes(node, obj.exception);
             },
             "Layer": function(node, obj) {
+                var parentLayer, capability;
+                if (obj.capability) {
+                    capability = obj.capability;
+                    parentLayer = obj;
+                } else {
+                    capability = obj;
+                }
                 var attrNode = node.getAttributeNode("queryable");
                 var queryable = (attrNode && attrNode.specified) ? 
                     node.getAttribute("queryable") : null;
@@ -352,28 +255,56 @@ OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(
                 var noSubsets = node.getAttribute('noSubsets');
                 var fixedWidth = node.getAttribute('fixedWidth');
                 var fixedHeight = node.getAttribute('fixedHeight');
-                var layer = {nestedLayers: [], styles: [], srs: {}, 
-                    metadataURLs: [], bbox: {}, dimensions: {},
-                    authorityURLs: {}, identifiers: {}, keywords: [],
+                var parent = parentLayer || {},
+                    extend = OpenLayers.Util.extend;
+                var layer = {
+                    nestedLayers: [],
+                    styles: parentLayer ? [].concat(parentLayer.styles) : [],
+                    srs: parentLayer ? extend({}, parent.srs) : {}, 
+                    metadataURLs: [],
+                    bbox: parentLayer ? extend({}, parent.bbox) : {},
+                    llbbox: parent.llbbox,
+                    dimensions: parentLayer ? extend({}, parent.dimensions) : {},
+                    authorityURLs: parentLayer ? extend({}, parent.authorityURLs) : {},
+                    identifiers: {},
+                    keywords: [],
                     queryable: (queryable && queryable !== "") ? 
-                        ( queryable === "1" || queryable === "true" ) : null,
-                    cascaded: (cascaded !== null) ? parseInt(cascaded) : null,
+                        (queryable === "1" || queryable === "true" ) :
+                        (parent.queryable || false),
+                    cascaded: (cascaded !== null) ? parseInt(cascaded) :
+                        (parent.cascaded || 0),
                     opaque: opaque ? 
-                        (opaque === "1" || opaque === "true" ) : null,
+                        (opaque === "1" || opaque === "true" ) :
+                        (parent.opaque || false),
                     noSubsets: (noSubsets !== null) ? 
-                        ( noSubsets === "1" || noSubsets === "true" ) : null,
+                        (noSubsets === "1" || noSubsets === "true" ) :
+                        (parent.noSubsets || false),
                     fixedWidth: (fixedWidth != null) ? 
-                        parseInt(fixedWidth) : null,
+                        parseInt(fixedWidth) : (parent.fixedWidth || 0),
                     fixedHeight: (fixedHeight != null) ? 
-                        parseInt(fixedHeight) : null
+                        parseInt(fixedHeight) : (parent.fixedHeight || 0),
+                    minScale: parent.minScale,
+                    maxScale: parent.maxScale,
+                    attribution: parent.attribution
                 };
                 obj.nestedLayers.push(layer);
+                layer.capability = capability;
                 this.readChildNodes(node, layer);
+                delete layer.capability;
                 if(layer.name) {
-                    var parts = layer.name.split(":");
+                    var parts = layer.name.split(":"),
+                        request = capability.request,
+                        gfi = request.getfeatureinfo;
                     if(parts.length > 0) {
                         layer.prefix = parts[0];
                     }
+                    capability.layers.push(layer);
+                    if (layer.formats === undefined) {
+                        layer.formats = request.getmap.formats;
+                    }
+                    if (layer.infoFormats === undefined && gfi) {
+                        layer.infoFormats = gfi.formats;
+                    }
                 }
             },
             "Attribution": function(node, obj) {
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1_1.js b/lib/OpenLayers/Format/WMSCapabilities/v1_1.js
index 3860b4f..8607c61 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1_1.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1_1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js b/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js
index a211500..94ccd5d 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -31,11 +31,6 @@ OpenLayers.Format.WMSCapabilities.v1_1_0 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.WMSCapabilities.v1_1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
 
     /**
      * Property: readers
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js b/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js
index cf3e85c..30eee65 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -31,11 +31,6 @@ OpenLayers.Format.WMSCapabilities.v1_1_1 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.WMSCapabilities.v1_1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
 
     /**
      * Property: readers
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js b/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js
index 5aab8bd..eff29a1 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -37,11 +37,6 @@ OpenLayers.Format.WMSCapabilities.v1_1_1_WMSC = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.WMSCapabilities.v1_1_1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
 
     /**
      * Property: readers
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1_3.js b/lib/OpenLayers/Format/WMSCapabilities/v1_3.js
index 33a002b..3e10064 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1_3.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1_3.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js b/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js
index 8f902d5..82da245 100644
--- a/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js
+++ b/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSDescribeLayer.js b/lib/OpenLayers/Format/WMSDescribeLayer.js
index 02461c9..b382d3a 100644
--- a/lib/OpenLayers/Format/WMSDescribeLayer.js
+++ b/lib/OpenLayers/Format/WMSDescribeLayer.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js b/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js
index 94d09a1..a5f191f 100644
--- a/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js
+++ b/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WMSGetFeatureInfo.js b/lib/OpenLayers/Format/WMSGetFeatureInfo.js
index 10f4b02..da08213 100644
--- a/lib/OpenLayers/Format/WMSGetFeatureInfo.js
+++ b/lib/OpenLayers/Format/WMSGetFeatureInfo.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -190,7 +190,7 @@ OpenLayers.Format.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Format.XML, {
      * criteria - {String} Search string which will match some part of a tagName 
      *                                       
      * Returns:
-     * Array({DOMElement)) An array of sibling xml nodes
+     * Array({DOMElement}) An array of sibling xml nodes
      */                
     getSiblingNodesByTagCriteria: function(node, criteria){
         var nodes = [];
@@ -248,7 +248,7 @@ OpenLayers.Format.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Format.XML, {
                     var name = (child.prefix) ?
                         child.nodeName.split(":")[1] : child.nodeName;
                     if (grandchildren.length == 0) {
-                        attributes[name] = null
+                        attributes[name] = null;
                     } else if (grandchildren.length == 1) {
                         var grandchild = grandchildren[0];
                         if (grandchild.nodeType == 3 ||
diff --git a/lib/OpenLayers/Format/WMTSCapabilities.js b/lib/OpenLayers/Format/WMTSCapabilities.js
index bc5d35d..1d2b82c 100644
--- a/lib/OpenLayers/Format/WMTSCapabilities.js
+++ b/lib/OpenLayers/Format/WMTSCapabilities.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -114,10 +114,13 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
             
             layer = new OpenLayers.Layer.WMTS(
                 OpenLayers.Util.applyDefaults(config, {
-                    url: capabilities.operationsMetadata.GetTile.dcp.http.get,
+                    url: config.requestEncoding === "REST" && layerDef.resourceUrl ?
+                        layerDef.resourceUrl.tile.template :
+                        capabilities.operationsMetadata.GetTile.dcp.http.get[0].url,
                     name: layerDef.title,
                     style: style.identifier,
-                    matrixIds: matrixSet.matrixIds
+                    matrixIds: matrixSet.matrixIds,
+                    tileFullExtent: matrixSet.bounds
                 })
             );
         }
diff --git a/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js b/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
index b436615..d65409e 100644
--- a/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
+++ b/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -112,6 +112,7 @@ OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class(
                 var layer = {
                     styles: [],
                     formats: [],
+                    dimensions: [],
                     tileMatrixSetLinks: []
                 };
                 layer.layers = [];
@@ -218,7 +219,23 @@ OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class(
                 obj.serviceMetadataUrl = {};
                 obj.serviceMetadataUrl.href = node.getAttribute("xlink:href");
                 // TODO: other attributes of <ServiceMetadataURL> element                
-            }            
+            },
+            "LegendURL": function(node, obj) {
+                obj.legend = {};
+                obj.legend.href = node.getAttribute("xlink:href");
+                obj.legend.format = node.getAttribute("format");
+            },
+            "Dimension": function(node, obj) {
+                var dimension = {values: []};
+                this.readChildNodes(node, dimension);
+                obj.dimensions.push(dimension);
+            },
+            "Default": function(node, obj) {
+                obj["default"] = this.getChildValue(node);
+            },
+            "Value": function(node, obj) {
+                obj.values.push(this.getChildValue(node));
+            }
         },
         "ows": OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers["ows"]
     },    
diff --git a/lib/OpenLayers/Format/WPSCapabilities.js b/lib/OpenLayers/Format/WPSCapabilities.js
index aa55130..70fae1b 100644
--- a/lib/OpenLayers/Format/WPSCapabilities.js
+++ b/lib/OpenLayers/Format/WPSCapabilities.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js b/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js
index 80ef888..db93f27 100644
--- a/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js
+++ b/lib/OpenLayers/Format/WPSCapabilities/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/WPSDescribeProcess.js b/lib/OpenLayers/Format/WPSDescribeProcess.js
index 2a31573..9534a24 100644
--- a/lib/OpenLayers/Format/WPSDescribeProcess.js
+++ b/lib/OpenLayers/Format/WPSDescribeProcess.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
  
 /**
diff --git a/lib/OpenLayers/Format/WPSExecute.js b/lib/OpenLayers/Format/WPSExecute.js
index 9b0d6e7..c537950 100644
--- a/lib/OpenLayers/Format/WPSExecute.js
+++ b/lib/OpenLayers/Format/WPSExecute.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -203,9 +203,14 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
                         schema: complexData.schema
                     } 
                 });
-                node.appendChild(
-                    this.getXMLDoc().createCDATASection(complexData.value)
-                );
+                var data = complexData.value;
+                if (typeof data === "string") {
+                    node.appendChild(
+                        this.getXMLDoc().createCDATASection(complexData.value)
+                    );
+                } else {
+                    node.appendChild(data);
+                }
                 return node;
             },
             "Reference": function(reference) {
@@ -242,6 +247,7 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
         },
         "wcs": OpenLayers.Format.WCSGetCoverage.prototype.writers.wcs,
         "wfs": OpenLayers.Format.WFST.v1_1_0.prototype.writers.wfs,
+        "ogc": OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc,
         "ows": OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows
     },
     
diff --git a/lib/OpenLayers/Format/XLS.js b/lib/OpenLayers/Format/XLS.js
index 3329491..118b26d 100644
--- a/lib/OpenLayers/Format/XLS.js
+++ b/lib/OpenLayers/Format/XLS.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Format/XLS/v1.js b/lib/OpenLayers/Format/XLS/v1.js
index 47026c5..f101b65 100644
--- a/lib/OpenLayers/Format/XLS/v1.js
+++ b/lib/OpenLayers/Format/XLS/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -65,9 +65,6 @@ OpenLayers.Format.XLS.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
      * 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
@@ -231,7 +228,7 @@ OpenLayers.Format.XLS.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
                     }
                 });
                 if (address.freeFormAddress) {
-                    this.writeNode("freeFormAddess", address.freeFormAddress, node);
+                    this.writeNode("freeFormAddress", address.freeFormAddress, node);
                 } else {
                     if (address.street) {
                         this.writeNode("StreetAddress", address, node);
diff --git a/lib/OpenLayers/Format/XLS/v1_1_0.js b/lib/OpenLayers/Format/XLS/v1_1_0.js
index fa9b1ad..29550af 100644
--- a/lib/OpenLayers/Format/XLS/v1_1_0.js
+++ b/lib/OpenLayers/Format/XLS/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -39,11 +39,6 @@ OpenLayers.Format.XLS.v1_1_0 = OpenLayers.Class(
      * options - {Object} An optional object whose properties will be set on
      *     this instance.
      */
-    initialize: function(options) {
-        OpenLayers.Format.XLS.v1.prototype.initialize.apply(
-            this, [options]
-        );
-    },
 
     CLASS_NAME: "OpenLayers.Format.XLS.v1_1_0"
 
diff --git a/lib/OpenLayers/Format/XML.js b/lib/OpenLayers/Format/XML.js
index d06e1e8..c2969f1 100644
--- a/lib/OpenLayers/Format/XML.js
+++ b/lib/OpenLayers/Format/XML.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -380,40 +380,6 @@ OpenLayers.Format.XML = OpenLayers.Class(OpenLayers.Format, {
     },
 
     /**
-     * APIMethod: concatChildValues
-     * *Deprecated*. Use <getChildValue> instead.
-     *
-     * Concatenate the value of all child nodes if any exist, or return an
-     *     optional default string.  Returns an empty string if no children
-     *     exist and no default value is supplied.  Not optimized for large
-     *     numbers of child nodes.
-     *
-     * Parameters:
-     * node - {DOMElement} The element used to look for child values.
-     * def - {String} Optional string to return in the event that no
-     *     child exist.
-     *
-     * Returns:
-     * {String} The concatenated value of all child nodes of the given node.
-     */
-    concatChildValues: function(node, def) {
-        var value = "";
-        var child = node.firstChild;
-        var childValue;
-        while(child) {
-            childValue = child.nodeValue;
-            if(childValue) {
-                value += childValue;
-            }
-            child = child.nextSibling;
-        }
-        if(value == "" && def != undefined) {
-            value = def;
-        }
-        return value;
-    },
-    
-    /**
      * APIMethod: isSimpleContent
      * Test if the given node has only simple content (i.e. no child element
      *     nodes).
diff --git a/lib/OpenLayers/Format/XML/VersionedOGC.js b/lib/OpenLayers/Format/XML/VersionedOGC.js
index c0fc4d1..7b9ef90 100644
--- a/lib/OpenLayers/Format/XML/VersionedOGC.js
+++ b/lib/OpenLayers/Format/XML/VersionedOGC.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Geometry.js b/lib/OpenLayers/Geometry.js
index 17e10a4..bbce8b3 100644
--- a/lib/OpenLayers/Geometry.js
+++ b/lib/OpenLayers/Geometry.js
@@ -1,12 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
  
 /**
  * @requires OpenLayers/BaseTypes/Class.js
- * @requires OpenLayers/Format/WKT.js
- * @requires OpenLayers/Feature/Vector.js
  */
 
 /**
@@ -14,6 +12,9 @@
  * A Geometry is a description of a geographic object.  Create an instance of
  * this class with the <OpenLayers.Geometry> constructor.  This is a base class,
  * typical geometry types are described by subclasses of this class.
+ *
+ * Note that if you use the <OpenLayers.Geometry.fromWKT> method, you must
+ * explicitly include the OpenLayers.Format.WKT in your build.
  */
 OpenLayers.Geometry = OpenLayers.Class({
 
@@ -66,10 +67,11 @@ OpenLayers.Geometry = OpenLayers.Class({
     },
     
     /**
+     * Method: setBounds
      * Set the bounds for this Geometry.
      * 
      * Parameters:
-     * object - {<OpenLayers.Bounds>} 
+     * bounds - {<OpenLayers.Bounds>} 
      */
     setBounds: function(bounds) {
         if (bounds) {
@@ -174,7 +176,8 @@ OpenLayers.Geometry = OpenLayers.Class({
      * geometry.
      * 
      * Parameters:
-     * lonlat - {<OpenLayers.LonLat>} 
+     * lonlat - {<OpenLayers.LonLat>|Object} OpenLayers.LonLat or an
+     *     object with a 'lon' and 'lat' properties.
      * toleranceLon - {float} Optional tolerance in Geometric Coords
      * toleranceLat - {float} Optional tolerance in Geographic Coords
      * 
@@ -240,15 +243,23 @@ OpenLayers.Geometry = OpenLayers.Class({
 
     /**
      * Method: toString
-     * Returns the Well-Known Text representation of a geometry
+     * Returns a text representation of the geometry.  If the WKT format is
+     *     included in a build, this will be the Well-Known Text 
+     *     representation.
      *
      * Returns:
-     * {String} Well-Known Text
+     * {String} String representation of this geometry.
      */
     toString: function() {
-        return OpenLayers.Format.WKT.prototype.write(
-            new OpenLayers.Feature.Vector(this)
-        );
+        var string;
+        if (OpenLayers.Format && OpenLayers.Format.WKT) {
+            string = OpenLayers.Format.WKT.prototype.write(
+                new OpenLayers.Feature.Vector(this)
+            );
+        } else {
+            string = Object.prototype.toString.call(this);
+        }
+        return string;
     },
 
     CLASS_NAME: "OpenLayers.Geometry"
@@ -256,7 +267,9 @@ OpenLayers.Geometry = OpenLayers.Class({
 
 /**
  * Function: OpenLayers.Geometry.fromWKT
- * Generate a geometry given a Well-Known Text string.
+ * Generate a geometry given a Well-Known Text string.  For this method to
+ *     work, you must include the OpenLayers.Format.WKT in your build 
+ *     explicitly.
  *
  * Parameters:
  * wkt - {String} A string representing the geometry in Well-Known Text.
@@ -265,22 +278,24 @@ OpenLayers.Geometry = OpenLayers.Class({
  * {<OpenLayers.Geometry>} A geometry of the appropriate class.
  */
 OpenLayers.Geometry.fromWKT = function(wkt) {
-    var format = arguments.callee.format;
-    if(!format) {
-        format = new OpenLayers.Format.WKT();
-        arguments.callee.format = format;
-    }
     var geom;
-    var result = format.read(wkt);
-    if(result instanceof OpenLayers.Feature.Vector) {
-        geom = result.geometry;
-    } else if(OpenLayers.Util.isArray(result)) {
-        var len = result.length;
-        var components = new Array(len);
-        for(var i=0; i<len; ++i) {
-            components[i] = result[i].geometry;
+    if (OpenLayers.Format && OpenLayers.Format.WKT) {
+        var format = OpenLayers.Geometry.fromWKT.format;
+        if (!format) {
+            format = new OpenLayers.Format.WKT();
+            OpenLayers.Geometry.fromWKT.format = format;
+        }
+        var result = format.read(wkt);
+        if (result instanceof OpenLayers.Feature.Vector) {
+            geom = result.geometry;
+        } else if (OpenLayers.Util.isArray(result)) {
+            var len = result.length;
+            var components = new Array(len);
+            for (var i=0; i<len; ++i) {
+                components[i] = result[i].geometry;
+            }
+            geom = new OpenLayers.Geometry.Collection(components);
         }
-        geom = new OpenLayers.Geometry.Collection(components);
     }
     return geom;
 };
diff --git a/lib/OpenLayers/Geometry/Collection.js b/lib/OpenLayers/Geometry/Collection.js
index 3d05ff1..f6389f3 100644
--- a/lib/OpenLayers/Geometry/Collection.js
+++ b/lib/OpenLayers/Geometry/Collection.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -22,7 +22,7 @@
  *
  * Create a new instance with the <OpenLayers.Geometry.Collection> constructor.
  *
- * Inerhits from:
+ * Inherits from:
  *  - <OpenLayers.Geometry> 
  */
 OpenLayers.Geometry.Collection = OpenLayers.Class(OpenLayers.Geometry, {
@@ -407,7 +407,7 @@ OpenLayers.Geometry.Collection = OpenLayers.Class(OpenLayers.Geometry, {
      * ratio - {Float} Optional x:y ratio for resizing.  Default ratio is 1.
      * 
      * Returns:
-     * {OpenLayers.Geometry} - The current geometry. 
+     * {<OpenLayers.Geometry>} - The current geometry. 
      */
     resize: function(scale, origin, ratio) {
         for(var i=0; i<this.components.length; ++i) {
@@ -468,7 +468,7 @@ OpenLayers.Geometry.Collection = OpenLayers.Class(OpenLayers.Geometry, {
      *     are considered equivalent if all components have the same coordinates.
      * 
      * Parameters:
-     * geom - {<OpenLayers.Geometry>} The geometry to test. 
+     * geometry - {<OpenLayers.Geometry>} The geometry to test. 
      *
      * Returns:
      * {Boolean} The supplied geometry is equivalent to this geometry.
diff --git a/lib/OpenLayers/Geometry/Curve.js b/lib/OpenLayers/Geometry/Curve.js
index 01ef2ec..16a3c47 100644
--- a/lib/OpenLayers/Geometry/Curve.js
+++ b/lib/OpenLayers/Geometry/Curve.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -32,10 +32,6 @@ OpenLayers.Geometry.Curve = OpenLayers.Class(OpenLayers.Geometry.MultiPoint, {
      * Parameters:
      * point - {Array(<OpenLayers.Geometry.Point>)}
      */
-    initialize: function(points) {
-        OpenLayers.Geometry.MultiPoint.prototype.initialize.apply(this, 
-                                                                  arguments);
-    },
     
     /**
      * APIMethod: getLength
diff --git a/lib/OpenLayers/Geometry/LineString.js b/lib/OpenLayers/Geometry/LineString.js
index dc16f25..1d5a0fc 100644
--- a/lib/OpenLayers/Geometry/LineString.js
+++ b/lib/OpenLayers/Geometry/LineString.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -26,9 +26,6 @@ OpenLayers.Geometry.LineString = OpenLayers.Class(OpenLayers.Geometry.Curve, {
      *          generate the linestring
      *
      */
-    initialize: function(points) {
-        OpenLayers.Geometry.Curve.prototype.initialize.apply(this, arguments);        
-    },
 
     /**
      * APIMethod: removeComponent
diff --git a/lib/OpenLayers/Geometry/LinearRing.js b/lib/OpenLayers/Geometry/LinearRing.js
index dd19c92..f16347d 100644
--- a/lib/OpenLayers/Geometry/LinearRing.js
+++ b/lib/OpenLayers/Geometry/LinearRing.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -42,10 +42,6 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class(
      * Parameters:
      * points - {Array(<OpenLayers.Geometry.Point>)} points
      */
-    initialize: function(points) {
-        OpenLayers.Geometry.LineString.prototype.initialize.apply(this, 
-                                                                  arguments);
-    },
 
     /**
      * APIMethod: addComponent
@@ -57,7 +53,7 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class(
      *     be overridden by calling the method with a non-null index as the 
      *     second argument.
      *
-     * Parameter:
+     * Parameters:
      * point - {<OpenLayers.Geometry.Point>}
      * index - {Integer} Index into the array to insert the component
      * 
@@ -157,7 +153,7 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class(
      * ratio - {Float} Optional x:y ratio for resizing.  Default ratio is 1.
      * 
      * Returns:
-     * {OpenLayers.Geometry} - The current geometry. 
+     * {<OpenLayers.Geometry>} - The current geometry. 
      */
     resize: function(scale, origin, ratio) {
         for(var i=0, len=this.components.length; i<len - 1; ++i) {
@@ -298,7 +294,7 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class(
         var px = approx(point.x, digs);
         var py = approx(point.y, digs);
         function getX(y, x1, y1, x2, y2) {
-            return (((x1 - x2) * y) + ((x2 * y1) - (x1 * y2))) / (y1 - y2);
+            return (y - y2) * ((x2 - x1) / (y2 - y1)) + x2;
         }
         var numSeg = this.components.length - 1;
         var start, end, x1, y1, x2, y2, cx, cy;
diff --git a/lib/OpenLayers/Geometry/MultiLineString.js b/lib/OpenLayers/Geometry/MultiLineString.js
index f0e013c..6629977 100644
--- a/lib/OpenLayers/Geometry/MultiLineString.js
+++ b/lib/OpenLayers/Geometry/MultiLineString.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -36,17 +36,13 @@ OpenLayers.Geometry.MultiLineString = OpenLayers.Class(
      * components - {Array(<OpenLayers.Geometry.LineString>)} 
      *
      */
-    initialize: function(components) {
-        OpenLayers.Geometry.Collection.prototype.initialize.apply(this, 
-                                                                  arguments);        
-    },
     
     /**
      * Method: split
      * Use this geometry (the source) to attempt to split a target geometry.
      * 
      * Parameters:
-     * target - {<OpenLayers.Geometry>} The target geometry.
+     * geometry - {<OpenLayers.Geometry>} The target geometry.
      * options - {Object} Properties of this object will be used to determine
      *     how the split is conducted.
      *
diff --git a/lib/OpenLayers/Geometry/MultiPoint.js b/lib/OpenLayers/Geometry/MultiPoint.js
index 9b5c112..390ba30 100644
--- a/lib/OpenLayers/Geometry/MultiPoint.js
+++ b/lib/OpenLayers/Geometry/MultiPoint.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -38,10 +38,6 @@ OpenLayers.Geometry.MultiPoint = OpenLayers.Class(
      * Returns:
      * {<OpenLayers.Geometry.MultiPoint>}
      */
-    initialize: function(components) {
-        OpenLayers.Geometry.Collection.prototype.initialize.apply(this, 
-                                                                  arguments);
-    },
 
     /**
      * APIMethod: addPoint
diff --git a/lib/OpenLayers/Geometry/MultiPolygon.js b/lib/OpenLayers/Geometry/MultiPolygon.js
index 534172f..4607126 100644
--- a/lib/OpenLayers/Geometry/MultiPolygon.js
+++ b/lib/OpenLayers/Geometry/MultiPolygon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -37,10 +37,6 @@ OpenLayers.Geometry.MultiPolygon = OpenLayers.Class(
      *              used to generate the MultiPolygon
      *
      */
-    initialize: function(components) {
-        OpenLayers.Geometry.Collection.prototype.initialize.apply(this, 
-                                                                  arguments);
-    },
 
     CLASS_NAME: "OpenLayers.Geometry.MultiPolygon"
 });
diff --git a/lib/OpenLayers/Geometry/Point.js b/lib/OpenLayers/Geometry/Point.js
index 7ef1b52..b629b8d 100644
--- a/lib/OpenLayers/Geometry/Point.js
+++ b/lib/OpenLayers/Geometry/Point.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -212,7 +212,7 @@ OpenLayers.Geometry.Point = OpenLayers.Class(OpenLayers.Geometry, {
      * ratio - {Float} Optional x:y ratio for resizing.  Default ratio is 1.
      * 
      * Returns:
-     * {OpenLayers.Geometry} - The current geometry. 
+     * {<OpenLayers.Geometry>} - The current geometry. 
      */
     resize: function(scale, origin, ratio) {
         ratio = (ratio == undefined) ? 1 : ratio;
diff --git a/lib/OpenLayers/Geometry/Polygon.js b/lib/OpenLayers/Geometry/Polygon.js
index 467fb9f..adc8318 100644
--- a/lib/OpenLayers/Geometry/Polygon.js
+++ b/lib/OpenLayers/Geometry/Polygon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -37,11 +37,7 @@ OpenLayers.Geometry.Polygon = OpenLayers.Class(
      * Parameters:
      * components - {Array(<OpenLayers.Geometry.LinearRing>)} 
      */
-    initialize: function(components) {
-        OpenLayers.Geometry.Collection.prototype.initialize.apply(this, 
-                                                                  arguments);
-    },
-    
+
     /** 
      * APIMethod: getArea
      * Calculated by subtracting the areas of the internal holes from the 
diff --git a/lib/OpenLayers/Geometry/Rectangle.js b/lib/OpenLayers/Geometry/Rectangle.js
deleted file mode 100644
index 5f05cbe..0000000
--- a/lib/OpenLayers/Geometry/Rectangle.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (c) 2006-2011 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/Geometry.js
- */
-
-/**
- * Class: OpenLayers.Geometry.Rectangle
- * This class is *not supported*, and probably isn't what you're looking for.
- *     Instead, most users probably want something like:
- *     (code)
- *     var poly = new OpenLayers.Bounds(0,0,10,10).toGeometry();
- *     (end)
- *     This will create a rectangular Polygon geometry. 
- * 
- * Inherits:
- *  - <OpenLayers.Geometry>
- */
-
-OpenLayers.Geometry.Rectangle = OpenLayers.Class(OpenLayers.Geometry, {
-
-    /** 
-     * Property: x
-     * {Float}
-     */
-    x: null,
-
-    /** 
-     * Property: y
-     * {Float}
-     */
-    y: null,
-
-    /** 
-     * Property: width
-     * {Float}
-     */
-    width: null,
-
-    /** 
-     * Property: height
-     * {Float}
-     */
-    height: null,
-
-    /**
-     * Constructor: OpenLayers.Geometry.Rectangle
-     * 
-     * Parameters:
-     * points - {Array(<OpenLayers.Geometry.Point>)}
-     */
-    initialize: function(x, y, width, height) {
-        OpenLayers.Geometry.prototype.initialize.apply(this, arguments);
-        
-        this.x = x;
-        this.y = y;
-
-        this.width = width;
-        this.height = height;
-    },
-    
-    /**
-     * Method: calculateBounds
-     * Recalculate the bounds for the geometry.
-     */
-    calculateBounds: function() {
-        this.bounds = new OpenLayers.Bounds(this.x, this.y,
-                                            this.x + this.width, 
-                                            this.y + this.height);
-    },
-    
-    
-    /**
-     * APIMethod: getLength
-     * 
-     * Returns:
-     * {Float} The length of the geometry
-     */
-    getLength: function() {
-        var length = (2 * this.width) + (2 * this.height);
-        return length;
-    },
-
-    /**
-     * APIMethod: getArea
-     * 
-     * Returns:
-     * {Float} The area of the geometry
-     */
-    getArea: function() {
-        var area = this.width * this.height;
-        return area;
-    },    
-
-    CLASS_NAME: "OpenLayers.Geometry.Rectangle"
-});
diff --git a/lib/OpenLayers/Geometry/Surface.js b/lib/OpenLayers/Geometry/Surface.js
deleted file mode 100644
index 626c005..0000000
--- a/lib/OpenLayers/Geometry/Surface.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright (c) 2006-2011 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/Geometry.js
- */
-
-OpenLayers.Geometry.Surface = OpenLayers.Class(OpenLayers.Geometry, {
-
-    initialize: function() {
-        OpenLayers.Geometry.prototype.initialize.apply(this, arguments);
-    },
-
-    CLASS_NAME: "OpenLayers.Geometry.Surface"
-});
diff --git a/lib/OpenLayers/Handler.js b/lib/OpenLayers/Handler.js
index a62527f..ae4c3c0 100644
--- a/lib/OpenLayers/Handler.js
+++ b/lib/OpenLayers/Handler.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Handler/Box.js b/lib/OpenLayers/Handler/Box.js
index ca89c5e..8ff47c4 100644
--- a/lib/OpenLayers/Handler/Box.js
+++ b/lib/OpenLayers/Handler/Box.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -97,15 +97,16 @@ OpenLayers.Handler.Box = OpenLayers.Class(OpenLayers.Handler, {
     */
     startBox: function (xy) {
         this.callback("start", []);
-        this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
-             new OpenLayers.Pixel(-9999, -9999));
+        this.zoomBox = OpenLayers.Util.createDiv('zoomBox', {
+            x: -9999, y: -9999
+        });
         this.zoomBox.className = this.boxDivClassName;                                         
         this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
         
-        this.map.eventsDiv.appendChild(this.zoomBox);
+        this.map.viewPortDiv.appendChild(this.zoomBox);
         
         OpenLayers.Element.addClass(
-            this.map.eventsDiv, "olDrawBox"
+            this.map.viewPortDiv, "olDrawBox"
         );
     },
 
@@ -153,11 +154,11 @@ OpenLayers.Handler.Box = OpenLayers.Class(OpenLayers.Handler, {
      * Remove the zoombox from the screen and nullify our reference to it.
      */
     removeBox: function() {
-        this.map.eventsDiv.removeChild(this.zoomBox);
+        this.map.viewPortDiv.removeChild(this.zoomBox);
         this.zoomBox = null;
         this.boxOffsets = null;
         OpenLayers.Element.removeClass(
-            this.map.eventsDiv, "olDrawBox"
+            this.map.viewPortDiv, "olDrawBox"
         );
 
     },
diff --git a/lib/OpenLayers/Handler/Click.js b/lib/OpenLayers/Handler/Click.js
index b2a1a04..37d15c6 100644
--- a/lib/OpenLayers/Handler/Click.js
+++ b/lib/OpenLayers/Handler/Click.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -146,9 +146,6 @@ OpenLayers.Handler.Click = OpenLayers.Class(OpenLayers.Handler, {
      * options - {Object} Optional object whose properties will be set on the
      *     handler.
      */
-    initialize: function(control, callbacks, options) {
-        OpenLayers.Handler.prototype.initialize.apply(this, arguments);
-    },
     
     /**
      * Method: touchstart
@@ -334,8 +331,12 @@ OpenLayers.Handler.Click = OpenLayers.Class(OpenLayers.Handler, {
      * Handle double-click sequence.
      */
     handleDouble: function(evt) {
-        if (this["double"] && this.passesDblclickTolerance(evt)) {
-            this.callback("dblclick", [evt]);
+        if (this.passesDblclickTolerance(evt)) {
+            if (this["double"]) {
+                this.callback("dblclick", [evt]);
+            }
+            // to prevent a dblclick from firing the click callback in IE
+            this.clearTimer();
         }
     },
     
diff --git a/lib/OpenLayers/Handler/Drag.js b/lib/OpenLayers/Handler/Drag.js
index 9082d9c..59456a8 100644
--- a/lib/OpenLayers/Handler/Drag.js
+++ b/lib/OpenLayers/Handler/Drag.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -442,7 +442,7 @@ OpenLayers.Handler.Drag = OpenLayers.Class(OpenLayers.Handler, {
      * {Boolean} Let the event propagate.
      */
     mouseout: function (evt) {
-        if (this.started && OpenLayers.Util.mouseLeft(evt, this.map.eventsDiv)) {
+        if (this.started && OpenLayers.Util.mouseLeft(evt, this.map.viewPortDiv)) {
             if(this.documentDrag === true) {
                 this.addDocumentEvents();
             } else {
diff --git a/lib/OpenLayers/Handler/Feature.js b/lib/OpenLayers/Handler/Feature.js
index d4c65e7..63d64b1 100644
--- a/lib/OpenLayers/Handler/Feature.js
+++ b/lib/OpenLayers/Handler/Feature.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -16,6 +16,9 @@
  *
  * This handler stops event propagation for mousedown and mouseup if those
  *     browser events target features that can be selected.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Handler>
  */
 OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, {
 
@@ -173,7 +176,13 @@ OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, {
      * evt - {Event} 
      */
     mousedown: function(evt) {
-        this.down = evt.xy;
+        // Feature selection is only done with a left click. Other handlers may stop the
+        // propagation of left-click mousedown events but not right-click mousedown events.
+        // This mismatch causes problems when comparing the location of the down and up
+        // events in the click function so it is important ignore right-clicks.
+        if (OpenLayers.Event.isLeftClick(evt) || OpenLayers.Event.isSingleTouch(evt)) {
+            this.down = evt.xy;
+        }
         return this.handle(evt) ? !this.stopDown : true;
     },
     
@@ -398,7 +407,7 @@ OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, {
     },
     
     /**
-     * Method handleMapEvents
+     * Method: handleMapEvents
      * 
      * Parameters:
      * evt - {Object}
diff --git a/lib/OpenLayers/Handler/Hover.js b/lib/OpenLayers/Handler/Hover.js
index a508cbd..8f230e1 100644
--- a/lib/OpenLayers/Handler/Hover.js
+++ b/lib/OpenLayers/Handler/Hover.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -69,9 +69,6 @@ OpenLayers.Handler.Hover = OpenLayers.Class(OpenLayers.Handler, {
      * options - {Object} An optional object whose properties will be set on
      *     the handler.
      */
-    initialize: function(control, callbacks, options) {
-        OpenLayers.Handler.prototype.initialize.apply(this, arguments);
-    },
 
     /**
      * Method: mousemove
@@ -110,7 +107,7 @@ OpenLayers.Handler.Hover = OpenLayers.Class(OpenLayers.Handler, {
      * {Boolean} Continue propagating this event.
      */
     mouseout: function(evt) {
-        if (OpenLayers.Util.mouseLeft(evt, this.map.eventsDiv)) {
+        if (OpenLayers.Util.mouseLeft(evt, this.map.viewPortDiv)) {
             this.clearTimer();
             this.callback('move', [evt]);
         }
diff --git a/lib/OpenLayers/Handler/Keyboard.js b/lib/OpenLayers/Handler/Keyboard.js
index 127a403..e8fabfe 100644
--- a/lib/OpenLayers/Handler/Keyboard.js
+++ b/lib/OpenLayers/Handler/Keyboard.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -34,6 +34,13 @@ OpenLayers.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, {
     eventListener: null,
 
     /**
+     * Property: observeElement
+     * {DOMElement|String} The DOM element on which we listen for
+     *     key events. Default to the document.
+     */
+    observeElement: null,
+
+    /**
      * Constructor: OpenLayers.Handler.Keyboard
      * Returns a new keyboard handler.
      * 
@@ -71,9 +78,10 @@ OpenLayers.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, {
      */
     activate: function() {
         if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
+            this.observeElement = this.observeElement || document;
             for (var i=0, len=this.KEY_EVENTS.length; i<len; i++) {
                 OpenLayers.Event.observe(
-                    document, this.KEY_EVENTS[i], this.eventListener);
+                    this.observeElement, this.KEY_EVENTS[i], this.eventListener);
             }
             return true;
         } else {
@@ -89,7 +97,7 @@ OpenLayers.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, {
         if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {
             for (var i=0, len=this.KEY_EVENTS.length; i<len; i++) {
                 OpenLayers.Event.stopObserving(
-                    document, this.KEY_EVENTS[i], this.eventListener);
+                    this.observeElement, this.KEY_EVENTS[i], this.eventListener);
             }
             deactivated = true;
         }
diff --git a/lib/OpenLayers/Handler/MouseWheel.js b/lib/OpenLayers/Handler/MouseWheel.js
index 3ab90d5..e75ce0a 100644
--- a/lib/OpenLayers/Handler/MouseWheel.js
+++ b/lib/OpenLayers/Handler/MouseWheel.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Handler/Path.js b/lib/OpenLayers/Handler/Path.js
index 955e5a8..351a467 100644
--- a/lib/OpenLayers/Handler/Path.js
+++ b/lib/OpenLayers/Handler/Path.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -30,8 +30,7 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
      * APIProperty: maxVertices
      * {Number} The maximum number of vertices which can be drawn by this
      * handler. When the number of vertices reaches maxVertices, the
-     * geometry is automatically finalized. This property doesn't
-     * apply if freehand is set. Default is null.
+     * geometry is automatically finalized. Default is null.
      */
     maxVertices: null,
 
@@ -95,10 +94,7 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
      * cancel - Called when the handler is deactivated while drawing.  The
      *     cancel callback will receive a geometry.
      */
-    initialize: function(control, callbacks, options) {
-        OpenLayers.Handler.Point.prototype.initialize.apply(this, arguments);
-    },
-        
+
     /**
      * Method: createFeature
      * Add temporary geometries
@@ -108,7 +104,7 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
      *     feature.
      */
     createFeature: function(pixel) {
-        var lonlat = this.map.getLonLatFromPixel(pixel);
+        var lonlat = this.layer.getLonLatFromViewPortPx(pixel); 
         var geometry = new OpenLayers.Geometry.Point(
             lonlat.lon, lonlat.lat
         );
@@ -165,7 +161,7 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
      */
     addPoint: function(pixel) {
         this.layer.removeFeatures([this.point]);
-        var lonlat = this.control.map.getLonLatFromPixel(pixel);
+        var lonlat = this.layer.getLonLatFromViewPortPx(pixel); 
         this.point = new OpenLayers.Feature.Vector(
             new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat)
         );
@@ -326,7 +322,7 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
         if(!this.line) {
             this.createFeature(pixel);
         }
-        var lonlat = this.control.map.getLonLatFromPixel(pixel);
+        var lonlat = this.layer.getLonLatFromViewPortPx(pixel); 
         this.point.geometry.x = lonlat.lon;
         this.point.geometry.y = lonlat.lat;
         this.callback("modify", [this.point.geometry, this.getSketch(), drawing]);
@@ -417,6 +413,10 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
         var stopDown = this.stopDown;
         if(this.freehandMode(evt)) {
             stopDown = true;
+            if (this.touch) {
+                this.modifyFeature(evt.xy, !!this.lastUp);
+                OpenLayers.Event.stop(evt);
+            }
         }
         if (!this.touch && (!this.lastDown ||
                             !this.passesTolerance(this.lastDown, evt.xy,
@@ -445,7 +445,13 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
             if(this.persist) {
                 this.destroyPersistedFeature();
             }
-            this.addPoint(evt.xy);
+            if(this.maxVertices && this.line &&
+                    this.line.geometry.components.length === this.maxVertices) {
+                this.removePoint();
+                this.finalize();
+            } else {
+                this.addPoint(evt.xy);
+            }
             return false;
         }
         if (!this.touch && (!this.mouseDown || this.stoppedDown)) {
diff --git a/lib/OpenLayers/Handler/Pinch.js b/lib/OpenLayers/Handler/Pinch.js
index 2138a45..1d115a2 100644
--- a/lib/OpenLayers/Handler/Pinch.js
+++ b/lib/OpenLayers/Handler/Pinch.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -74,9 +74,6 @@ OpenLayers.Handler.Pinch = OpenLayers.Class(OpenLayers.Handler, {
      *     information about scale, distance, and position of touch points.
      * options - {Object}
      */
-    initialize: function(control, callbacks, options) {
-        OpenLayers.Handler.prototype.initialize.apply(this, arguments);
-    },
 
     /**
      * Method: touchstart
diff --git a/lib/OpenLayers/Handler/Point.js b/lib/OpenLayers/Handler/Point.js
index da31296..903987e 100644
--- a/lib/OpenLayers/Handler/Point.js
+++ b/lib/OpenLayers/Handler/Point.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -43,6 +43,13 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
     multi: false,
     
     /**
+     * APIProperty: citeCompliant
+     * {Boolean} If set to true, coordinates of features drawn in a map extent
+     * crossing the date line won't exceed the world bounds. Default is false.
+     */
+    citeCompliant: false,
+    
+    /**
      * Property: mouseDown
      * {Boolean} The mouse is down
      */
@@ -164,7 +171,8 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
             // without this, resolution properties must be specified at the
             // map-level for this temporary layer to init its resolutions
             // correctly
-            calculateInRange: OpenLayers.Function.True
+            calculateInRange: OpenLayers.Function.True,
+            wrapDateLine: this.citeCompliant
         }, this.layerOptions);
         this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME, options);
         this.map.addLayer(this.layer);
@@ -179,7 +187,7 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
      * pixel - {<OpenLayers.Pixel>} A pixel location on the map.
      */
     createFeature: function(pixel) {
-        var lonlat = this.map.getLonLatFromPixel(pixel);
+        var lonlat = this.layer.getLonLatFromViewPortPx(pixel); 
         var geometry = new OpenLayers.Geometry.Point(
             lonlat.lon, lonlat.lat
         );
@@ -306,7 +314,7 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
         if(!this.point) {
             this.createFeature(pixel);
         }
-        var lonlat = this.map.getLonLatFromPixel(pixel);
+        var lonlat = this.layer.getLonLatFromViewPortPx(pixel); 
         this.point.geometry.x = lonlat.lon;
         this.point.geometry.y = lonlat.lat;
         this.callback("modify", [this.point.geometry, this.point, false]);
@@ -537,7 +545,7 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
      * evt - {Event} The browser event
      */
     mouseout: function(evt) {
-        if(OpenLayers.Util.mouseLeft(evt, this.map.eventsDiv)) {
+        if(OpenLayers.Util.mouseLeft(evt, this.map.viewPortDiv)) {
             this.stoppedDown = this.stopDown;
             this.mouseDown = false;
         }
diff --git a/lib/OpenLayers/Handler/Polygon.js b/lib/OpenLayers/Handler/Polygon.js
index 64e626e..dffaa1a 100644
--- a/lib/OpenLayers/Handler/Polygon.js
+++ b/lib/OpenLayers/Handler/Polygon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -35,7 +35,7 @@ OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, {
     drawingHole: false,
     
     /**
-     * Parameter: polygon
+     * Property: polygon
      * {<OpenLayers.Feature.Vector>}
      */
     polygon: null,
@@ -62,9 +62,6 @@ OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, {
      * cancel - Called when the handler is deactivated while drawing.  The
      *     cancel callback will receive a geometry.
      */
-    initialize: function(control, callbacks, options) {
-        OpenLayers.Handler.Path.prototype.initialize.apply(this, arguments);
-    },
     
     /**
      * Method: createFeature
@@ -75,7 +72,7 @@ OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, {
      *     feature.
      */
     createFeature: function(pixel) {
-        var lonlat = this.map.getLonLatFromPixel(pixel);
+        var lonlat = this.layer.getLonLatFromViewPortPx(pixel);
         var geometry = new OpenLayers.Geometry.Point(
             lonlat.lon, lonlat.lat
         );
diff --git a/lib/OpenLayers/Handler/RegularPolygon.js b/lib/OpenLayers/Handler/RegularPolygon.js
index 3627497..b7232a6 100644
--- a/lib/OpenLayers/Handler/RegularPolygon.js
+++ b/lib/OpenLayers/Handler/RegularPolygon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -84,6 +84,13 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
     irregular: false,
 
     /**
+     * APIProperty: citeCompliant
+     * {Boolean} If set to true, coordinates of features drawn in a map extent
+     * crossing the date line won't exceed the world bounds. Default is false.
+     */
+    citeCompliant: false,
+
+    /**
      * Property: angle
      * {Float} The angle from the origin (mouse down) to the current mouse
      *     position, in radians.  This is measured counterclockwise from the
@@ -161,7 +168,7 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
      * APIMethod: activate
      * Turn on the handler.
      *
-     * Return:
+     * Returns:
      * {Boolean} The handler was successfully activated
      */
     activate: function() {
@@ -174,7 +181,8 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
                 // without this, resolution properties must be specified at the
                 // map-level for this temporary layer to init its resolutions
                 // correctly
-                calculateInRange: OpenLayers.Function.True
+                calculateInRange: OpenLayers.Function.True,
+                wrapDateLine: this.citeCompliant
             }, this.layerOptions);
             this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME, options);
             this.map.addLayer(this.layer);
@@ -187,7 +195,7 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
      * APIMethod: deactivate
      * Turn off the handler.
      *
-     * Return:
+     * Returns:
      * {Boolean} The handler was successfully deactivated
      */
     deactivate: function() {
@@ -224,7 +232,7 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
      */
     down: function(evt) {
         this.fixedRadius = !!(this.radius);
-        var maploc = this.map.getLonLatFromPixel(evt.xy);
+        var maploc = this.layer.getLonLatFromViewPortPx(evt.xy); 
         this.origin = new OpenLayers.Geometry.Point(maploc.lon, maploc.lat);
         // create the new polygon
         if(!this.fixedRadius || this.irregular) {
@@ -250,7 +258,7 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
      * evt - {Evt} The move event
      */
     move: function(evt) {
-        var maploc = this.map.getLonLatFromPixel(evt.xy);
+        var maploc = this.layer.getLonLatFromViewPortPx(evt.xy); 
         var point = new OpenLayers.Geometry.Point(maploc.lon, maploc.lat);
         if(this.irregular) {
             var ry = Math.sqrt(2) * Math.abs(point.y - this.origin.y) / 2;
diff --git a/lib/OpenLayers/Icon.js b/lib/OpenLayers/Icon.js
index c5d4d44..2e7f487 100644
--- a/lib/OpenLayers/Icon.js
+++ b/lib/OpenLayers/Icon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -29,19 +29,22 @@ OpenLayers.Icon = OpenLayers.Class({
     
     /** 
      * Property: size 
-     * {<OpenLayers.Size>} 
+     * {<OpenLayers.Size>|Object} An OpenLayers.Size or
+     * an object with a 'w' and 'h' properties.
      */
     size: null,
 
     /** 
      * Property: offset 
-     * {<OpenLayers.Pixel>} distance in pixels to offset the image when being rendered
+     * {<OpenLayers.Pixel>|Object} distance in pixels to offset the
+     * image when being rendered. An OpenLayers.Pixel or an object
+     * with a 'x' and 'y' properties.
      */
     offset: null,    
     
     /** 
      * Property: calculateOffset 
-     * {<OpenLayers.Pixel>} Function to calculate the offset (based on the size) 
+     * {Function} Function to calculate the offset (based on the size)
      */
     calculateOffset: null,    
     
@@ -53,7 +56,8 @@ OpenLayers.Icon = OpenLayers.Class({
 
     /** 
      * Property: px 
-     * {<OpenLayers.Pixel>} 
+     * {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an object
+     * with a 'x' and 'y' properties.
      */
     px: null,
     
@@ -62,14 +66,18 @@ OpenLayers.Icon = OpenLayers.Class({
      * Creates an icon, which is an image tag in a div.  
      *
      * url - {String} 
-     * size - {<OpenLayers.Size>} 
-     * offset - {<OpenLayers.Pixel>}
+     * size - {<OpenLayers.Size>|Object} An OpenLayers.Size or an
+     *                                   object with a 'w' and 'h'
+     *                                   properties.
+     * offset - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an
+     *                                      object with a 'x' and 'y'
+     *                                      properties.
      * calculateOffset - {Function} 
      */
     initialize: function(url, size, offset, calculateOffset) {
         this.url = url;
-        this.size = (size) ? size : new OpenLayers.Size(20,20);
-        this.offset = offset ? offset : new OpenLayers.Pixel(-(this.size.w/2), -(this.size.h/2));
+        this.size = size || {w: 20, h: 20};
+        this.offset = offset || {x: -(this.size.w/2), y: -(this.size.h/2)};
         this.calculateOffset = calculateOffset;
 
         var id = OpenLayers.Util.createUniqueID("OL_Icon_");
@@ -107,7 +115,8 @@ OpenLayers.Icon = OpenLayers.Class({
      * Method: setSize
      * 
      * Parameters:
-     * size - {<OpenLayers.Size>} 
+     * size - {<OpenLayers.Size>|Object} An OpenLayers.Size or
+     * an object with a 'w' and 'h' properties.
      */
     setSize: function(size) {
         if (size != null) {
@@ -134,7 +143,8 @@ OpenLayers.Icon = OpenLayers.Class({
      * Move the div to the given pixel.
      * 
      * Parameters:
-     * px - {<OpenLayers.Pixel>} 
+     * px - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an
+     *                                  object with a 'x' and 'y' properties.
      * 
      * Returns:
      * {DOMElement} A new DOM Image of this icon set at the location passed-in
@@ -153,7 +163,6 @@ OpenLayers.Icon = OpenLayers.Class({
     /** 
      * Method: erase
      * Erase the underlying image element.
-     *
      */
     erase: function() {
         if (this.imageDiv != null && this.imageDiv.parentNode != null) {
@@ -179,7 +188,8 @@ OpenLayers.Icon = OpenLayers.Class({
      * move icon to passed in px.
      *
      * Parameters:
-     * px - {<OpenLayers.Pixel>} 
+     * px - {<OpenLayers.Pixel>|Object} the pixel position to move to.
+     * An OpenLayers.Pixel or an object with a 'x' and 'y' properties.
      */
     moveTo: function (px) {
         //if no px passed in, use stored location
@@ -194,8 +204,10 @@ OpenLayers.Icon = OpenLayers.Class({
                 if (this.calculateOffset) {
                     this.offset = this.calculateOffset(this.size);  
                 }
-                var offsetPx = this.px.offset(this.offset);
-                OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, offsetPx);
+                OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, {
+                    x: this.px.x + this.offset.x,
+                    y: this.px.y + this.offset.y
+                });
             }
         }
     },
diff --git a/lib/OpenLayers/Kinetic.js b/lib/OpenLayers/Kinetic.js
index 7b6a3e7..14f293b 100644
--- a/lib/OpenLayers/Kinetic.js
+++ b/lib/OpenLayers/Kinetic.js
@@ -1,8 +1,13 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
+/**
+ * @requires OpenLayers/BaseTypes/Class.js
+ * @requires OpenLayers/Animation.js
+ */
+
 OpenLayers.Kinetic = OpenLayers.Class({
 
     /**
@@ -13,13 +18,6 @@ OpenLayers.Kinetic = OpenLayers.Class({
     threshold: 0,
 
     /**
-     * Property: interval
-     * {Integer} Interval in milliseconds between 2 steps in the "kinetic
-     *     dragging". Defaults to 10 milliseconds.
-     */
-    interval: 10,
-
-    /**
      * Property: deceleration
      * {Float} the deseleration in px/ms², default to 0.0035.
      */
@@ -66,7 +64,7 @@ OpenLayers.Kinetic = OpenLayers.Class({
      * Begins the dragging.
      */
     begin: function() {
-        clearInterval(this.timerId);
+        OpenLayers.Animation.stop(this.timerId);
         this.timerId = undefined;
         this.points = [];
     },
@@ -138,7 +136,6 @@ OpenLayers.Kinetic = OpenLayers.Class({
         var fx = Math.cos(info.theta);
         var fy = -Math.sin(info.theta);
 
-        var time = 0;
         var initialTime = new Date().getTime();
 
         var lastX = 0;
@@ -149,9 +146,7 @@ OpenLayers.Kinetic = OpenLayers.Class({
                 return;
             }
 
-            time += this.interval;
-            var realTime = new Date().getTime() - initialTime;
-            var t = (time + realTime) / 2.0;
+            var t = new Date().getTime() - initialTime;
 
             var p = (-this.deceleration * Math.pow(t, 2)) / 2.0 + v0 * t;
             var x = p * fx;
@@ -162,7 +157,7 @@ OpenLayers.Kinetic = OpenLayers.Class({
             var v = -this.deceleration * t + v0;
 
             if (v <= 0) {
-                clearInterval(this.timerId);
+                OpenLayers.Animation.stop(this.timerId);
                 this.timerId = null;
                 args.end = true;
             }
@@ -174,9 +169,9 @@ OpenLayers.Kinetic = OpenLayers.Class({
             callback(args.x, args.y, args.end);
         };
 
-        this.timerId = window.setInterval(
-            OpenLayers.Function.bind(timerCallback, this),
-            this.interval);
+        this.timerId = OpenLayers.Animation.start(
+            OpenLayers.Function.bind(timerCallback, this)
+        );
     },
 
     CLASS_NAME: "OpenLayers.Kinetic"
diff --git a/lib/OpenLayers/Lang.js b/lib/OpenLayers/Lang.js
index 82230e0..789ce4f 100644
--- a/lib/OpenLayers/Lang.js
+++ b/lib/OpenLayers/Lang.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -35,7 +35,7 @@ OpenLayers.Lang = {
      * Get the current language code.
      *
      * Returns:
-     * The current language code.
+     * {String} The current language code.
      */
     getCode: function() {
         if(!OpenLayers.Lang.code) {
@@ -49,7 +49,7 @@ OpenLayers.Lang = {
      * Set the language code for string translation.  This code is used by
      *     the <OpenLayers.Lang.translate> method.
      *
-     * Parameters-
+     * Parameters:
      * code - {String} These codes follow the IETF recommendations at
      *     http://www.ietf.org/rfc/rfc3066.txt.  If no value is set, the
      *     browser's language setting will be tested.  If no <OpenLayers.Lang>
diff --git a/lib/OpenLayers/Lang/ar.js b/lib/OpenLayers/Lang/ar.js
index 6317d06..b9fe224 100644
--- a/lib/OpenLayers/Lang/ar.js
+++ b/lib/OpenLayers/Lang/ar.js
@@ -19,12 +19,6 @@ OpenLayers.Lang["ar"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "الطبقة الاساسية",
 
-    'readNotImplemented': "القراءة غير محققة.",
-
-    'writeNotImplemented': "الكتابة غير محققة",
-
-    'errorLoadingGML': "خطأ عند تحميل الملف جي ام ال ${url}",
-
     'Scale = 1 : ${scaleDenom}': "النسبة = 1 : ${scaleDenom}",
 
     'W': "غ",
diff --git a/lib/OpenLayers/Lang/be-tarask.js b/lib/OpenLayers/Lang/be-tarask.js
index 03e5a63..29fc1a3 100644
--- a/lib/OpenLayers/Lang/be-tarask.js
+++ b/lib/OpenLayers/Lang/be-tarask.js
@@ -23,20 +23,10 @@ OpenLayers.Lang["be-tarask"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Базавы слой",
 
-    'readNotImplemented': "Функцыянальнасьць чытаньня ня створаная.",
-
-    'writeNotImplemented': "Функцыянальнасьць запісу ня створаная.",
-
     'noFID': "Немагчыма абнавіць магчымасьць, для якога не існуе FID.",
 
-    'errorLoadingGML': "Памылка загрузкі файла GML ${url}",
-
     'browserNotSupported': "Ваш браўзэр не падтрымлівае вэктарную графіку. У цяперашні момант падтрымліваюцца: ${renderers}",
 
-    'componentShouldBe': "addFeatures : кампанэнт павінен быць ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent выкліканы для слоя бяз рэндэру. Звычайна гэта азначае, што Вы зьнішчылі слой, але пакінулі зьвязаны зь ім апрацоўшчык.",
-
     'minZoomLevelError': "Уласьцівасьць minZoomLevel прызначана толькі для выкарыстаньня са слаямі вытворнымі ад FixedZoomLevels. Тое, што  гэты wfs-слой правяраецца на minZoomLevel — рэха прошлага. Але мы ня можам выдаліць гэтую магчымасьць, таму што ад яе залежаць некаторыя заснаваныя на OL дастасаваньні. Тым ня менш, праверка minZoomLevel будзе выдаленая ў вэрсіі 3.0. Калі ласка, выкарыстоўваеце замест яе ўстаноўкі мінімальнага/максымальнага памераў, як апісана тут: http://trac.openla [...]
 
     'commitSuccess': "WFS-транзакцыя: ПОСЬПЕХ ${response}",
@@ -57,20 +47,8 @@ OpenLayers.Lang["be-tarask"] = OpenLayers.Util.applyDefaults({
 
     'S': "Пд",
 
-    'layerAlreadyAdded': "Вы паспрабавалі дадаць слой ${layerName} на мапу, але ён ужо дададзены",
-
     'reprojectDeprecated': "Вы выкарыстоўваеце ўстаноўку \'reproject\' для слоя ${layerName}. Гэтая ўстаноўка зьяўляецца састарэлай: яна выкарыстоўвалася для падтрымкі паказу зьвестак на камэрцыйных базавых мапах, але гэта функцыя цяпер рэалізаваная ў убудаванай падтрымцы сфэрычнай праекцыі Мэркатара. Дадатковая інфармацыя ёсьць на http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Гэты мэтад састарэлы і будзе выдалены ў вэрсіі 3.0. Калі ласка, замест яго выкарыстоўвайце ${newMethod}.",
-
-    'boundsAddError': "Вам неабходна падаць абодва значэньні x і y для функцыі складаньня.",
-
-    'lonlatAddError': "Вам неабходна падаць абодва значэньні lon і lat для функцыі складаньня.",
-
-    'pixelAddError': "Вам неабходна падаць абодва значэньні x і y для функцыі складаньня.",
-
-    'unsupportedGeometryType': "Тып геамэтрыі не падтрымліваецца: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluate не рэалізаваны для гэтага тыпу фільтру."
+    'methodDeprecated': "Гэты мэтад састарэлы і будзе выдалены ў вэрсіі 3.0. Калі ласка, замест яго выкарыстоўвайце ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/bg.js b/lib/OpenLayers/Lang/bg.js
index 17044d8..86f53aa 100644
--- a/lib/OpenLayers/Lang/bg.js
+++ b/lib/OpenLayers/Lang/bg.js
@@ -18,12 +18,8 @@ OpenLayers.Lang["bg"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Основен слой",
 
-    'errorLoadingGML': "Грешка при зареждане на GML файл ${url}",
-
     'Scale = 1 : ${scaleDenom}': "Мащаб = 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Опитахте да добавите слой ${layerName} в картата, но той вече е добавен",
-
     'methodDeprecated': "Този метод е остарял и ще бъде премахват в 3.0. Вместо него използвайте ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/br.js b/lib/OpenLayers/Lang/br.js
index a781de0..1e81559 100644
--- a/lib/OpenLayers/Lang/br.js
+++ b/lib/OpenLayers/Lang/br.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["br"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Gwiskad diazez",
 
-    'readNotImplemented': "N\'eo ket emplementet al lenn.",
-
-    'writeNotImplemented': "N\'eo ket emplementet ar skrivañ.",
-
     'noFID': "N\'haller ket hizivaat un elfenn ma n\'eus ket a niverenn-anaout (FID) eviti.",
 
-    'errorLoadingGML': "Fazi e-ser kargañ ar restr GML ${url}",
-
     'browserNotSupported': "N\'eo ket skoret an daskor vektorel gant ho merdeer. Setu aze an daskorerioù skoret evit ar poent :\n${renderers}",
 
-    'componentShouldBe': "addFeatures : bez\' e tlefe ar parzh besañ eus ar seurt ${geomType}",
-
-    'getFeatureError': "Galvet eo bet getFeatureFromEvent called war ur gwiskad hep daskorer. Kement-se a dalvez ez eus bet freuzet ur gwiskad hag hoc\'h eus miret un embreger bennak stag outañ.",
-
     'minZoomLevelError': "Ne zleer implijout ar perzh minZoomLevel nemet evit gwiskadoù FixedZoomLevels-descendent. Ar fed ma wiria ar gwiskad WHS-se hag-eñ ez eus eus minZoomLevel zo un aspadenn gozh. Koulskoude n\'omp ket evit e ziverkañ kuit da derriñ arloadoù diazezet war OL a c\'hallfe bezañ stag outañ. Setu perak eo dispredet -- Lamet kuit e vo ar gwiriañ minZoomLevel a-is er stumm 3.0. Ober gant an arventennoù bihanañ/brasañ evel deskrivet amañ e plas : http://trac.openlayers.org/ [...]
 
     'commitSuccess': "Treuzgread WFS : MAT EO ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["br"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Klasket hoc\'h eus ouzhpennañ ar gwiskad : ${layerName} d\'ar gartenn, met ouzhpennet e oa bet c\'hoazh",
-
     'reprojectDeprecated': "Emaoc\'h oc\'h implijout an dibarzh \'reproject\' war ar gwiskad ${layerName}. Dispredet eo an dibarzh-mañ : bet eo hag e talveze da ziskwel roadennoù war-c\'horre kartennoù diazez kenwerzhel, un dra hag a c\'haller ober bremañ gant an arc\'hwel dre skor banndres boullek Mercator. Muioc\'h a ditouroù a c\'haller da gaout war http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Dispredet eo an daore-se ha tennet e vo kuit eus ar stumm 3.0. Grit gant ${newMethod} e plas.",
-
-    'boundsAddError': "Rekis eo tremen an div dalvoudenn x ha y d\'an arc\'hwel add.",
-
-    'lonlatAddError': "Rekis eo tremen an div dalvoudenn hedred ha ledred d\'an arc\'hwel add.",
-
-    'pixelAddError': "Rekis eo tremen an div dalvoudenn x ha y d\'an arc\'hwel add.",
-
-    'unsupportedGeometryType': "Seurt mentoniezh anskoret : ${geomType}",
-
-    'filterEvaluateNotImplemented': "N\'eo ket bet emplementet ar priziañ evit seurt siloù c\'hoazh."
+    'methodDeprecated': "Dispredet eo an daore-se ha tennet e vo kuit eus ar stumm 3.0. Grit gant ${newMethod} e plas."
 
 });
diff --git a/lib/OpenLayers/Lang/ca.js b/lib/OpenLayers/Lang/ca.js
index 5bb2b24..75bcf8a 100644
--- a/lib/OpenLayers/Lang/ca.js
+++ b/lib/OpenLayers/Lang/ca.js
@@ -18,24 +18,11 @@ OpenLayers.Lang.ca = {
 
     'Base Layer': "Capa Base",
 
-    'readNotImplemented': "Lectura no implementada.",
-
-    'writeNotImplemented': "Escriptura no implementada.",
-
     'noFID': "No es pot actualitzar un element per al que no existeix FID.",
 
-    'errorLoadingGML': "Error carregant el fitxer GML ${url}",
-
     'browserNotSupported':
         "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 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 " +
@@ -83,10 +70,6 @@ OpenLayers.Lang.ca = {
     'Graticule': 'Retícula',    
         
     // console message
-    'layerAlreadyAdded':
-        "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 " +
@@ -100,21 +83,6 @@ OpenLayers.Lang.ca = {
         "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
-    'boundsAddError': "Ha de proporcionar els valors x i y a la funció add.",
-
-    // console message
-    'lonlatAddError': "Ha de proporcionar els valors lon i lat a la funció add.",
-
-    // console message
-    'pixelAddError': "Ha de proporcionar els valors x i y a la funció add.",
-
-    // console message
-    'unsupportedGeometryType': "Tipus de geometria no suportada: ${geomType}",
-
-    // console message
-    'filterEvaluateNotImplemented': "evaluate no està implementat per aquest tipus de filtre.",
-
     // **** end ****
     'end': ''
 
diff --git a/lib/OpenLayers/Lang/cs-CZ.js b/lib/OpenLayers/Lang/cs-CZ.js
index 52bf309..85a55da 100644
--- a/lib/OpenLayers/Lang/cs-CZ.js
+++ b/lib/OpenLayers/Lang/cs-CZ.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["cs-CZ"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Podkladové vrstvy",
 
-    'readNotImplemented': "Read není implementováno.",
-
-    'writeNotImplemented': "Write není implementováno.",
-
     'noFID': "Nelze aktualizovat prvek, pro který neexistuje FID.",
 
-    'errorLoadingGML': "Chyba při načítání souboru GML ${url}",
-
     'browserNotSupported': "Váš prohlížeč nepodporuje vykreslování vektorů. Momentálně podporované nástroje jsou::\n${renderers}",
 
-    'componentShouldBe': "addFeatures : komponenta by měla být ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent bylo zavoláno na vrstvě, která nemá vykreslovač. To obyčejně znamená, že jste odstranil vrstvu, ale ne rutinu s ní asociovanou.",
-
     'minZoomLevelError': "Vlastnost minZoomLevel by se měla používat pouze s potomky FixedZoomLevels vrstvami. To znamená, že vrstva wfs kontroluje, zda-li minZoomLevel není zbytek z minulosti.Nelze to ovšem vyjmout bez možnosti, že bychom rozbili aplikace postavené na OL, které by na tom mohly záviset. Proto tuto vlastnost nedoporučujeme používat --  kontrola minZoomLevel bude odstraněna ve verzi 3.0. Použijte prosím raději nastavení min/max podle příkaldu popsaného na: http://trac.open [...]
 
     'commitSuccess': "WFS Transaction: ÚSPĚCH ${response}",
@@ -48,18 +38,8 @@ OpenLayers.Lang["cs-CZ"] = OpenLayers.Util.applyDefaults({
 
     'Scale = 1 : ${scaleDenom}': "Měřítko = 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Pokusili jste se přidat vrstvu: ${layerName} do mapy, ale tato vrstva je již v mapě přítomna.",
-
     'reprojectDeprecated': "Použil jste volbu \'reproject\' ve vrstvě ${layerName}. Tato volba není doporučená: byla zde proto, aby bylo možno zobrazovat data z okomerčních serverů, ale tato funkce je nyní zajištěna pomocí podpory Spherical Mercator. Více informací naleznete na http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Tato metoda je zavržená a bude ve verzi 3.0 odstraněna. Prosím, použijte raději ${newMethod}.",
-
-    'boundsAddError': "Pro přídavnou funkci musíte zadat obě souřadnice x a y.",
-
-    'lonlatAddError': "Pro přídavnou funkci musíte zadat obě souřadnice lon a lat.",
-
-    'pixelAddError': "Pro přídavnou funkci musíte zadat obě souřadnice x a y.",
-
-    'unsupportedGeometryType': "Nepodporovaný typ geometrie: ${geomType}"
+    'methodDeprecated': "Tato metoda je zavržená a bude ve verzi 3.0 odstraněna. Prosím, použijte raději ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/da-DK.js b/lib/OpenLayers/Lang/da-DK.js
index 6e04f89..3ba42c3 100644
--- a/lib/OpenLayers/Lang/da-DK.js
+++ b/lib/OpenLayers/Lang/da-DK.js
@@ -18,24 +18,11 @@ OpenLayers.Lang['da-DK'] = {
 
     'Base Layer': "Baggrundslag",
 
-    'readNotImplemented': "Læsning er ikke implementeret.",
-
-    'writeNotImplemented': "Skrivning er ikke implementeret.",
-
     'noFID': "Kan ikke opdateret en feature (et objekt) der ikke har et FID.",
 
-    'errorLoadingGML': "Fejlede under indlæsning af GML fil ${url}",
-
     'browserNotSupported':
         "Din browser understøtter ikke vektor visning. Følgende vektor visninger understøttes:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : komponenten skal være en ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "getFeatureFromEvent blev kaldt på et lag uden en visning. Dette betyder som regel at du " +
-        "har destrueret et lag, men ikke de håndteringer der var tilknyttet.",
-
     // console message
     'minZoomLevelError':
         "Egenskaben minZoomLevel er kun beregnet til brug " +
@@ -78,10 +65,6 @@ OpenLayers.Lang['da-DK'] = {
     'Scale = 1 : ${scaleDenom}': "Målforhold = 1 : ${scaleDenom}",
 
     // console message
-    'layerAlreadyAdded':
-        "Du har forsøgt at tilføje laget: ${layerName} til kortet, men det er allerede tilføjet",
-
-    // console message
     'reprojectDeprecated':
         "Du anvender indstillingen 'reproject' på laget ${layerName}." + 
         "Denne indstilling bør ikke længere anvendes. Den var beregnet " +
@@ -93,20 +76,5 @@ OpenLayers.Lang['da-DK'] = {
     // console message
     'methodDeprecated':
         "Denne funktion bør ikke længere anvendes, og vil blive fjernet i version 3.0. " +
-        "Anvend venligst funktionen ${newMethod} istedet.",
-
-    // console message
-    'boundsAddError': "Du skal angive både x og y værdier i kaldet til add funktionen.",
-
-    // console message
-    'lonlatAddError': "Du skal angive både lon og lat værdier i kaldet til add funktionen.",
-
-    // console message
-    'pixelAddError': "Du skal angive både x og y værdier i kaldet til add funktionen.",
-
-    // console message
-    'unsupportedGeometryType': "Geometri typen: ${geomType} er ikke understøttet.",
-
-    // console message
-    'filterEvaluateNotImplemented': "evaluering er ikke implementeret for denne filter type."
+        "Anvend venligst funktionen ${newMethod} istedet."
 };
diff --git a/lib/OpenLayers/Lang/de.js b/lib/OpenLayers/Lang/de.js
index e83cadf..62011c2 100644
--- a/lib/OpenLayers/Lang/de.js
+++ b/lib/OpenLayers/Lang/de.js
@@ -24,20 +24,10 @@ OpenLayers.Lang["de"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Grundkarte",
 
-    'readNotImplemented': "Lesen nicht implementiert.",
-
-    'writeNotImplemented': "Schreiben nicht implementiert.",
-
     'noFID': "Ein Feature, für das keine FID existiert, kann nicht aktualisiert werden.",
 
-    'errorLoadingGML': "Fehler beim Laden der GML-Datei ${url}",
-
     'browserNotSupported': "Ihr Browser unterstützt keine Vektordarstellung. Aktuell unterstützte Renderer:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: Komponente muss vom Typ ${geomType} sein",
-
-    'getFeatureError': "getFeatureFromEvent wurde vom einem Layer ohne Renderer aufgerufen. Dies bedeutet normalerweise, dass ein Layer entfernt wurde, aber nicht Handler, die auf ihn verweisen.",
-
     'minZoomLevelError': "Die \x3ccode\x3eminZoomLevel\x3c/code\x3e-Eigenschaft ist nur für die Verwendung mit \x3ccode\x3eFixedZoomLevels\x3c/code\x3e-untergeordneten Layers vorgesehen. Das dieser \x3ctt\x3ewfs\x3c/tt\x3e-Layer die \x3ccode\x3eminZoomLevel\x3c/code\x3e-Eigenschaft überprüft ist ein Relikt der Vergangenheit. Wir können diese Überprüfung nicht entfernen, ohne das OL basierende Applikationen nicht mehr funktionieren. Daher markieren wir es als veraltet - die \x3ccode\x3emi [...]
 
     'commitSuccess': "WFS-Transaktion: Erfolgreich ${response}",
@@ -58,20 +48,8 @@ OpenLayers.Lang["de"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Sie versuchen den Layer „${layerName}“ zur Karte hinzuzufügen, er wurde aber bereits hinzugefügt",
-
     'reprojectDeprecated': "Sie verwenden die „Reproject“-Option des Layers ${layerName}. Diese Option ist veraltet: Sie wurde entwickelt um die Anzeige von Daten auf kommerziellen Basiskarten zu unterstützen, aber diese Funktion sollte jetzt durch Unterstützung der „Spherical Mercator“ erreicht werden. Weitere Informationen sind unter http://trac.openlayers.org/wiki/SphericalMercator verfügbar.",
 
-    'methodDeprecated': "Die Methode ist veraltet und wird in 3.0 entfernt. Bitte verwende stattdessen ${newMethod}.",
-
-    'boundsAddError': "Beide Werte (x und y) müssen der add-Funktion übergeben werden.",
-
-    'lonlatAddError': "Beide Werte (lon und lat) müssen der add-Funktion übergeben werden.",
-
-    'pixelAddError': "Beide Werte (x und y) müssen der add-Funktion übergeben werden.",
-
-    'unsupportedGeometryType': "Nicht unterstützter Geometrie-Typ: ${geomType}",
-
-    'filterEvaluateNotImplemented': "„evaluate“ ist für diesen Filter-Typ nicht implementiert."
+    'methodDeprecated': "Die Methode ist veraltet und wird in 3.0 entfernt. Bitte verwende stattdessen ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/en.js b/lib/OpenLayers/Lang/en.js
index b1ebf15..9ef40f5 100644
--- a/lib/OpenLayers/Lang/en.js
+++ b/lib/OpenLayers/Lang/en.js
@@ -18,24 +18,11 @@ OpenLayers.Lang.en = {
 
     'Base Layer': "Base Layer",
 
-    'readNotImplemented': "Read not implemented.",
-
-    'writeNotImplemented': "Write not implemented.",
-
     'noFID': "Can't update a feature for which there is no FID.",
 
-    'errorLoadingGML': "Error in loading GML file ${url}",
-
     'browserNotSupported':
         "Your browser does not support vector rendering. Currently supported renderers are:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : component should be an ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "getFeatureFromEvent called on layer with no renderer. This usually means you " +
-        "destroyed a layer, but not some handler which is associated with it.",
-
     // console message
     'minZoomLevelError':
         "The minZoomLevel property is only intended for use " +
@@ -83,10 +70,6 @@ OpenLayers.Lang.en = {
     'Graticule': 'Graticule',
 
     // console message
-    'layerAlreadyAdded':
-        "You tried to add the layer: ${layerName} to the map, but it has already been added",
-
-    // console message
     'reprojectDeprecated':
         "You are using the 'reproject' option " +
         "on the ${layerName} layer. This option is deprecated: " +
@@ -100,21 +83,6 @@ OpenLayers.Lang.en = {
         "This method has been deprecated and will be removed in 3.0. " +
         "Please use ${newMethod} instead.",
 
-    // console message
-    'boundsAddError': "You must pass both x and y values to the add function.",
-
-    // console message
-    'lonlatAddError': "You must pass both lon and lat values to the add function.",
-
-    // console message
-    'pixelAddError': "You must pass both x and y values to the add function.",
-
-    // console message
-    'unsupportedGeometryType': "Unsupported geometry type: ${geomType}",
-
-    // console message
-    'filterEvaluateNotImplemented': "evaluate is not implemented for this filter type.",
-
     'proxyNeeded': "You probably need to set OpenLayers.ProxyHost to access ${url}."+
         "See http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost",
 
diff --git a/lib/OpenLayers/Lang/es.js b/lib/OpenLayers/Lang/es.js
index 47c2af2..7d64367 100644
--- a/lib/OpenLayers/Lang/es.js
+++ b/lib/OpenLayers/Lang/es.js
@@ -18,24 +18,11 @@ OpenLayers.Lang.es = {
 
     'Base Layer': "Capa Base",
 
-    'readNotImplemented': "Lectura no implementada.",
-
-    'writeNotImplemented': "Escritura no implementada.",
-
     'noFID': "No se puede actualizar un elemento para el que no existe FID.",
 
-    'errorLoadingGML': "Error cargando el fichero GML ${url}",
-
     'browserNotSupported':
         "Su navegador no soporta renderización vectorial. Los renderizadores soportados actualmente son:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : el componente debe ser del tipo ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "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 " +
@@ -84,10 +71,6 @@ OpenLayers.Lang.es = {
     'Graticule': 'Retícula',
     
     // console message
-    'layerAlreadyAdded':
-        "Intentó añadir la capa: ${layerName} al mapa, pero ya había sido añadida previamente",
-
-    // console message
     'reprojectDeprecated':
         "Está usando la opción 'reproject' en la capa " +
         "${layerName}. Esta opción es obsoleta: su uso fue diseñado " +
@@ -101,21 +84,6 @@ OpenLayers.Lang.es = {
         "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
-    'boundsAddError': "Debe proporcionar los valores x e y a la función add.",
-
-    // console message
-    'lonlatAddError': "Debe proporcionar los valores lon y lat a la función add.",
-
-    // console message
-    'pixelAddError': "Debe proporcionar los valores x e y a la función add.",
-
-    // console message
-    'unsupportedGeometryType': "Tipo de geometría no soportada: ${geomType}",
-
-    // console message
-    'filterEvaluateNotImplemented': "evaluate no está implementado para este tipo de filtro.",
-
     // **** end ****
     'end': ''
 
diff --git a/lib/OpenLayers/Lang/fr.js b/lib/OpenLayers/Lang/fr.js
index d197206..1042981 100644
--- a/lib/OpenLayers/Lang/fr.js
+++ b/lib/OpenLayers/Lang/fr.js
@@ -23,20 +23,10 @@ OpenLayers.Lang["fr"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Calque de base",
 
-    'readNotImplemented': "Lecture non implémentée.",
-
-    'writeNotImplemented': "Ecriture non implémentée.",
-
     'noFID': "Impossible de mettre à jour un objet sans identifiant (fid).",
 
-    'errorLoadingGML': "Erreur au chargement du fichier GML ${url}",
-
     'browserNotSupported': "Votre navigateur ne supporte pas le rendu vectoriel. Les renderers actuellement supportés sont : \n${renderers}",
 
-    'componentShouldBe': "addFeatures : le composant devrait être de type ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent a été appelé sur un calque sans renderer. Cela signifie généralement que vous avez détruit cette couche, mais que vous avez conservé un handler qui lui était associé.",
-
     'minZoomLevelError': "La propriété minZoomLevel doit seulement être utilisée pour des couches FixedZoomLevels-descendent. Le fait que cette couche WFS vérifie la présence de minZoomLevel est une relique du passé. Nous ne pouvons toutefois la supprimer sans casser des applications qui pourraient en dépendre. C\'est pourquoi nous la déprécions -- la vérification du minZoomLevel sera supprimée en version 3.0. A la place, merci d\'utiliser les paramètres de résolutions min/max tel que dé [...]
 
     'commitSuccess': "Transaction WFS : SUCCES ${response}",
@@ -57,21 +47,9 @@ OpenLayers.Lang["fr"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Vous avez essayé d\'ajouter à la carte le calque : ${layerName}, mais il est déjà présent",
-
     'reprojectDeprecated': "Vous utilisez l\'option \'reproject\' sur la couche ${layerName}. Cette option est dépréciée : Son usage permettait d\'afficher des données au dessus de couches raster commerciales.Cette fonctionalité est maintenant supportée en utilisant le support de la projection Mercator Sphérique. Plus d\'information est disponible sur http://trac.openlayers.org/wiki/SphericalMercator.",
 
     'methodDeprecated': "Cette méthode est dépréciée, et sera supprimée à la version 3.0. Merci d\'utiliser ${newMethod} à la place.",
 
-    'boundsAddError': "Vous devez passer les deux valeurs x et y à la fonction add.",
-
-    'lonlatAddError': "Vous devez passer les deux valeurs lon et lat à la fonction add.",
-
-    'pixelAddError': "Vous devez passer les deux valeurs x et y à la fonction add.",
-
-    'unsupportedGeometryType': "Type de géométrie non supporté : ${geomType}",
-
-    'filterEvaluateNotImplemented': "évaluer n\'a pas encore été implémenté pour ce type de filtre.",
-
     'proxyNeeded': "Vous avez très probablement besoin de renseigner OpenLayers.ProxyHost pour accéder à ${url}. Voir http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost"
 });
diff --git a/lib/OpenLayers/Lang/gl.js b/lib/OpenLayers/Lang/gl.js
index ba09e24..d6e74d8 100644
--- a/lib/OpenLayers/Lang/gl.js
+++ b/lib/OpenLayers/Lang/gl.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["gl"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Capa base",
 
-    'readNotImplemented': "Lectura non implementada.",
-
-    'writeNotImplemented': "Escritura non implementada.",
-
     'noFID': "Non se pode actualizar a funcionalidade para a que non hai FID.",
 
-    'errorLoadingGML': "Erro ao cargar o ficheiro GML ${url}",
-
     'browserNotSupported': "O seu navegador non soporta a renderización de vectores. Os renderizadores soportados actualmente son:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: o compoñente debera ser de tipo ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent ten sido chamado a unha capa sen renderizador. Isto normalmente significa que destruíu unha capa, mais non o executador que está asociado con ela.",
-
     'minZoomLevelError': "A propiedade minZoomLevel é só para uso conxuntamente coas capas FixedZoomLevels-descendent. O feito de que esa capa wfs verifique o minZoomLevel é unha reliquia do pasado. Non podemos, con todo, eliminala sen a posibilidade de non romper as aplicacións baseadas en OL que poidan depender dela. Por iso a estamos deixando obsoleta (a comprobación minZoomLevel de embaixo será eliminada na versión 3.0). Por favor, no canto diso use o axuste de resolución mín/máx tal [...]
 
     'commitSuccess': "Transacción WFS: ÉXITO ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["gl"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Intentou engadir a capa: ${layerName} ao mapa, pero xa fora engadida",
-
     'reprojectDeprecated': "Está usando a opción \"reproject\" na capa ${layerName}. Esta opción está obsoleta: o seu uso foi deseñado para a visualización de datos sobre mapas base comerciais, pero esta funcionalidade debera agora ser obtida utilizando a proxección Spherical Mercator. Hai dispoñible máis información en http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Este método está obsoleto e será eliminado na versión 3.0. Por favor, no canto deste use ${newMethod}.",
-
-    'boundsAddError': "Debe achegar os valores x e y á función add.",
-
-    'lonlatAddError': "Debe achegar tanto o valor lon coma o lat á función add.",
-
-    'pixelAddError': "Debe achegar os valores x e y á función add.",
-
-    'unsupportedGeometryType': "Tipo xeométrico non soportado: ${geomType}",
-
-    'filterEvaluateNotImplemented': "avaliar non está implementado para este tipo de filtro."
+    'methodDeprecated': "Este método está obsoleto e será eliminado na versión 3.0. Por favor, no canto deste use ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/gsw.js b/lib/OpenLayers/Lang/gsw.js
index 62f9d40..4508501 100644
--- a/lib/OpenLayers/Lang/gsw.js
+++ b/lib/OpenLayers/Lang/gsw.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["gsw"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Grundcharte",
 
-    'readNotImplemented': "Läse nit implementiert.",
-
-    'writeNotImplemented': "Schrybe nit implementiert.",
-
     'noFID': "E Feature, wu s kei FID derfir git, cha nit aktualisiert wäre.",
 
-    'errorLoadingGML': "Fähler bim Lade vu dr GML-Datei ${url}",
-
     'browserNotSupported': "Dyy Browser unterstitzt kei Vektordarstellig. Aktuäll unterstitzti Renderer:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : Komponänt sott dr Typ ${geomType} syy",
-
-    'getFeatureError': "getFeatureFromEvent isch uf eme Layer ohni Renderer ufgruefe wore. Des heisst normalerwys, ass Du e Layer kaputt gmacht hesch, aber nit dr Handler, wu derzue ghert.",
-
     'minZoomLevelError': "D minZoomLevel-Eigeschaft isch nume dänk fir d Layer, wu vu dr FixedZoomLevels abstamme. Ass dää wfs-Layer minZoomLevel prieft, scih e Relikt us dr Vergangeheit. Mir chenne s aber nit ändere ohni OL_basierti Aawändige villicht kaputt gehn, wu dervu abhänge.  Us däm Grund het die Funktion d Eigeschaft \'deprecated\' iberchuu. D minZoomLevel-Priefig unte wird in dr Version 3.0 usegnuu. Bitte verwänd statt däm e min/max-Uflesig wie s do bschriben isch: http://trac. [...]
 
     'commitSuccess': "WFS-Transaktion: ERFOLGRYCH ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["gsw"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Du hesch versuecht dää Layer in d Charte yyzfiege: ${layerName}, aber är isch schoi yygfiegt",
-
     'reprojectDeprecated': "Du bruchsch d \'reproject\'-Option bim ${layerName}-Layer. Die Option isch nimi giltig: si isch aagleit wore go   Date iber kommerziälli Grundcharte lege, aber des sott mer jetz mache mit dr Unterstitzig vu Spherical Mercator. Meh Informatione git s uf http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Die Methode isch veraltet un wird us dr Version 3.0 usegnuu. Bitte verwäbnd statt däm ${newMethod}.",
-
-    'boundsAddError': "Du muesch e x-Wärt un e y-Wärt yygee bi dr Zuefieg-Funktion",
-
-    'lonlatAddError': "Du meusch e Lengi- un e Breiti-Grad yygee bi dr Zuefieg-Funktion.",
-
-    'pixelAddError': "Du muesch x- un y-Wärt aagee bi dr Zuefieg-Funktion.",
-
-    'unsupportedGeometryType': "Nit unterstitze Geometrii-Typ: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluiere isch nit implemäntiert in däm Filtertyp."
+    'methodDeprecated': "Die Methode isch veraltet un wird us dr Version 3.0 usegnuu. Bitte verwäbnd statt däm ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/hr.js b/lib/OpenLayers/Lang/hr.js
index b763b44..d56085a 100644
--- a/lib/OpenLayers/Lang/hr.js
+++ b/lib/OpenLayers/Lang/hr.js
@@ -22,36 +22,16 @@ OpenLayers.Lang["hr"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Osnovna karta",
 
-    'readNotImplemented': "Čitanje nije implementirano.",
-
-    'writeNotImplemented': "Pisanje nije implementirano.",
-
     'noFID': "Ne mogu ažurirati značajku za koju ne postoji FID.",
 
-    'errorLoadingGML': "Greška u učitavanju GML datoteke ${url}",
-
     'browserNotSupported': "Vaš preglednik ne podržava vektorsko renderiranje. Trenutno podržani rendereri su: ${renderers}",
 
-    'componentShouldBe': "addFeatures : komponenta bi trebala biti ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent je pozvao Layer bez renderera. Ovo obično znači da ste uništiili Layer, a ne neki Handler koji je povezan s njim.",
-
     'commitSuccess': "WFS Transakcija: USPJEŠNA ${response}",
 
     'commitFailed': "WFS Transakcija: NEUSPJEŠNA ${response}",
 
     'Scale = 1 : ${scaleDenom}': "Mjerilo = 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Pokušali ste dodati layer:  ${layerName} na kartu, ali je već dodan",
-
-    'methodDeprecated': "Ova metoda nije odobrena i biti će maknuta u 3.0. Koristite ${newMethod}.",
-
-    'boundsAddError': "Morate dati obje vrijednosti ,  x i y  da bi dodali funkciju.",
-
-    'lonlatAddError': "Morate dati obje vrijednosti , (lon i lat) da bi dodali funkciju.",
-
-    'pixelAddError': "Morate dati obje vrijednosti ,  x i y  da bi dodali funkciju.",
-
-    'unsupportedGeometryType': "Nepodržani tip geometrije: ${geomType}"
+    'methodDeprecated': "Ova metoda nije odobrena i biti će maknuta u 3.0. Koristite ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/hsb.js b/lib/OpenLayers/Lang/hsb.js
index 1534f01..7a8e888 100644
--- a/lib/OpenLayers/Lang/hsb.js
+++ b/lib/OpenLayers/Lang/hsb.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["hsb"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Zakładna runina",
 
-    'readNotImplemented': "Čitanje njeimplementowane.",
-
-    'writeNotImplemented': "Pisanje njeimplementowane.",
-
     'noFID': "Funkcija, za kotruž FID njeje, njeda so aktualizować.",
 
-    'errorLoadingGML': "Zmylk při začitowanju dataje ${url}",
-
     'browserNotSupported': "Twój wobhladowak wektorowe rysowanje njepodpěruje. Tuchwilu podpěrowane rysowaki su:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: komponenta měła ${geomType} być",
-
-    'getFeatureError': "getFeatureFromEvent bu na woršće bjez rysowak zawołany. To zwjetša woznamjenja, zo sy worštu zničił, ale nic wobdźěłak, kotryž je z njej zwjazany.",
-
     'minZoomLevelError': "Kajkosć minZoomLevel je jenož za wužiwanje z worštami myslena, kotrež wot FixedZoomLevels pochadźeja. Zo tuta woršta wfs za minZoomLevel přepruwuje, je relikt zańdźenosće. Njemóžemy wšak ju wotstronić, bjeztoho zo aplikacije, kotrež na OpenLayers bazěruja a snano tutu kajkosć wužiwaja, hižo njefunguja. Tohodla smy ju jako zestarjenu woznamjenili -- přepruwowanje za minZoomLevel budu so we wersiji 3.0 wotstronjeć. Prošu wužij město toho nastajenje min/max, kaž je [...]
 
     'commitSuccess': "WFS-Transakcija: WUSPĚŠNA ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["hsb"] = OpenLayers.Util.applyDefaults({
 
     'S': "J",
 
-    'layerAlreadyAdded': "Sy spytał runinu ${layerName} karće dodać, ale je so hižo dodała",
-
     'reprojectDeprecated': "Wužiwaš opciju \"reproject\" wořšty ${layerName}. Tuta opcija je zestarjena: jeje wužiwanje bě myslene, zo by zwobraznjenje datow nad komercielnymi bazowymi kartami podpěrało, ale funkcionalnosć měła so nětko z pomocu Sperical Mercator docpěć. Dalše informacije steja na http://trac.openlayers.org/wiki/SphericalMercator k dispoziciji.",
 
-    'methodDeprecated': "Tuta metoda je so njeschwaliła a budźe so w 3.0 wotstronjeć. Prošu wužij ${newMethod} město toho.",
-
-    'boundsAddError': "Dyrbiš hódnotu x kaž tež y funkciji \"add\" přepodać.",
-
-    'lonlatAddError': "Dyrbiš hódnotu lon kaž tež lat funkciji \"add\" přepodać.",
-
-    'pixelAddError': "Dyrbiš hódnotu x kaž tež y funkciji \"add\" přepodać.",
-
-    'unsupportedGeometryType': "Njepodpěrowany geometrijowy typ: ${geomType}",
-
-    'filterEvaluateNotImplemented': "wuhódnoćenje njeje za tutón filtrowy typ implementowany."
+    'methodDeprecated': "Tuta metoda je so njeschwaliła a budźe so w 3.0 wotstronjeć. Prošu wužij ${newMethod} město toho."
 
 });
diff --git a/lib/OpenLayers/Lang/hu.js b/lib/OpenLayers/Lang/hu.js
index 9e0ba11..10c9f5f 100644
--- a/lib/OpenLayers/Lang/hu.js
+++ b/lib/OpenLayers/Lang/hu.js
@@ -23,20 +23,10 @@ OpenLayers.Lang["hu"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Alapréteg",
 
-    'readNotImplemented': "Olvasás nincs végrehajtva.",
-
-    'writeNotImplemented': "Írás nincs végrehajtva.",
-
     'noFID': "Nem frissíthető olyan jellemző, amely nem rendelkezik FID-del.",
 
-    'errorLoadingGML': "Hiba GML-fájl betöltésekor ${url}",
-
     'browserNotSupported': "A böngészője nem támogatja a vektoros renderelést. A jelenleg támogatott renderelők:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : az összetevőnek ilyen típusúnak kell lennie: ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent réteget hívott meg renderelő nélkül. Ez rendszerint azt jelenti, hogy megsemmisített egy fóliát, de néhány ahhoz társított kezelőt nem.",
-
     'minZoomLevelError': "A minZoomLevel tulajdonságot csak a következővel való használatra szánták: FixedZoomLevels-leszármazott fóliák. Ez azt jelenti, hogy a minZoomLevel wfs fólia jelölőnégyzetei már a múlté. Mi azonban nem távolíthatjuk el annak a veszélye nélkül, hogy az esetlegesen ettől függő OL alapú alkalmazásokat tönkretennénk. Ezért ezt érvénytelenítjük -- a minZoomLevel az alul levő jelölőnégyzet a 3.0-s verzióból el lesz távolítva. Kérjük, helyette használja a  min/max felb [...]
 
     'commitSuccess': "WFS tranzakció: SIKERES ${response}",
@@ -57,20 +47,8 @@ OpenLayers.Lang["hu"] = OpenLayers.Util.applyDefaults({
 
     'S': "D",
 
-    'layerAlreadyAdded': "Megpróbálta hozzáadni a(z) ${layerName} fóliát a térképhez, de az már hozzá van adva",
-
     'reprojectDeprecated': "Ön a \'reproject\' beállítást használja a(z) ${layerName} fólián. Ez a beállítás érvénytelen: használata az üzleti alaptérképek fölötti adatok megjelenítésének támogatására szolgált, de ezt a funkció ezentúl a Gömbi Mercator használatával érhető el. További információ az alábbi helyen érhető el: http://trac.openlayers.org/wiki/SphericalMercator",
 
-    'methodDeprecated': "Ez a módszer érvénytelenítve lett és a 3.0-s verzióból el lesz távolítva. Használja a(z) ${newMethod} módszert helyette.",
-
-    'boundsAddError': "Az x és y értékeknek egyaránt meg kell felelnie, hogy a funkciót hozzáadhassa.",
-
-    'lonlatAddError': "A hossz. és szél. értékeknek egyaránt meg kell felelnie, hogy a funkciót hozzáadhassa.",
-
-    'pixelAddError': "Az x és y értékeknek egyaránt meg kell felelnie, hogy a funkciót hozzáadhassa.",
-
-    'unsupportedGeometryType': "Nem támogatott geometriatípus: ${geomType}",
-
-    'filterEvaluateNotImplemented': "ennél a szűrőtípusnál kiértékelés nem hajtódik végre."
+    'methodDeprecated': "Ez a módszer érvénytelenítve lett és a 3.0-s verzióból el lesz távolítva. Használja a(z) ${newMethod} módszert helyette."
 
 });
diff --git a/lib/OpenLayers/Lang/ia.js b/lib/OpenLayers/Lang/ia.js
index ec9012b..02dfbc8 100644
--- a/lib/OpenLayers/Lang/ia.js
+++ b/lib/OpenLayers/Lang/ia.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["ia"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Strato de base",
 
-    'readNotImplemented': "Lectura non implementate.",
-
-    'writeNotImplemented': "Scriptura non implementate.",
-
     'noFID': "Non pote actualisar un elemento sin FID.",
 
-    'errorLoadingGML': "Error al cargamento del file GML ${url}",
-
     'browserNotSupported': "Tu navigator non supporta le rendition de vectores. Le renditores actualmente supportate es:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: le componente debe esser del typo ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent ha essite appellate in un strato sin renditor. Isto significa generalmente que tu ha destruite un strato, ma lassava un gestor associate con illo.",
-
     'minZoomLevelError': "Le proprietate minZoomLevel es solmente pro uso con le stratos descendente de FixedZoomLevels. Le facto que iste strato WFS verifica minZoomLevel es un reliquia del passato. Nonobstante, si nos lo remove immediatemente, nos pote rumper applicationes a base de OL que depende de illo. Ergo nos lo declara obsolete; le verification de minZoomLevel in basso essera removite in version 3.0. Per favor usa in su loco le configuration de resolutiones min/max como describi [...]
 
     'commitSuccess': "Transaction WFS: SUCCESSO ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["ia"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Tu tentava adder le strato: ${layerName} al carta, ma illo es ja presente",
-
     'reprojectDeprecated': "Tu usa le option \'reproject\' in le strato ${layerName} layer. Iste option es obsolescente: illo esseva pro poter monstrar datos super cartas de base commercial, ma iste functionalitate pote ora esser attingite con le uso de Spherical Mercator. Ulterior information es disponibile a http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Iste methodo ha essite declarate obsolescente e essera removite in version 3.0. Per favor usa ${newMethod} in su loco.",
-
-    'boundsAddError': "Tu debe passar le duo valores x e y al function add.",
-
-    'lonlatAddError': "Tu debe passar le duo valores lon e lat al function add.",
-
-    'pixelAddError': "Tu debe passar le duo valores x e y al function add.",
-
-    'unsupportedGeometryType': "Typo de geometria non supportate: ${geomType}",
-
-    'filterEvaluateNotImplemented': "\"evaluate\" non es implementate pro iste typo de filtro."
+    'methodDeprecated': "Iste methodo ha essite declarate obsolescente e essera removite in version 3.0. Per favor usa ${newMethod} in su loco."
 
 });
diff --git a/lib/OpenLayers/Lang/id.js b/lib/OpenLayers/Lang/id.js
index c460838..49b7f43 100644
--- a/lib/OpenLayers/Lang/id.js
+++ b/lib/OpenLayers/Lang/id.js
@@ -23,20 +23,10 @@ OpenLayers.Lang["id"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Lapisan Dasar",
 
-    'readNotImplemented': "Membaca tidak diterapkan.",
-
-    'writeNotImplemented': "Menyimpan tidak diterapkan.",
-
     'noFID': "Tidak dapat memperbarui fitur yang tidak memiliki FID.",
 
-    'errorLoadingGML': "Kesalahan dalam memuat berkas GML ${url}",
-
     'browserNotSupported': "Peramban Anda tidak mendukung penggambaran vektor. Penggambar yang didukung saat ini adalah:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : komponen harus berupa ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent diterapkan pada lapisan tanpa penggambar. Ini biasanya berarti Anda menghapus sebuah lapisan, tetapi tidak menghapus penangan yang terkait dengannya.",
-
     'minZoomLevelError': "Properti minZoomLevel hanya ditujukan bekerja dengan lapisan FixedZoomLevels-descendent. Pengecekan minZoomLevel oleh lapisan wfs adalah peninggalan masa lalu. Kami tidak dapat menghapusnya tanpa kemungkinan merusak aplikasi berbasis OL yang mungkin bergantung padanya. Karenanya, kami menganggapnya tidak berlaku -- Cek minZoomLevel di bawah ini akan dihapus pada 3.0. Silakan gunakan penyetelan resolusi min/maks seperti dijabarkan di sini: http://trac.openlayers. [...]
 
     'commitSuccess': "WFS Transaksi: BERHASIL ${respon}",
@@ -57,20 +47,8 @@ OpenLayers.Lang["id"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Anda mencoba menambahkan lapisan: ${layerName} ke dalam peta, tapi lapisan itu telah ditambahkan",
-
     'reprojectDeprecated': "Anda menggunakan opsi \'reproject\' pada lapisan ${layerName}. Opsi ini telah ditinggalkan: penggunaannya dirancang untuk mendukung tampilan data melalui peta dasar komersial, tapi fungsionalitas tersebut saat ini harus dilakukan dengan menggunakan dukungan Spherical Mercator. Informasi lebih lanjut tersedia di http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Metode ini telah usang dan akan dihapus di 3.0. Sebaliknya, harap gunakan ${newMethod}.",
-
-    'boundsAddError': "Anda harus memberikan kedua nilai x dan y ke fungsi penambah.",
-
-    'lonlatAddError': "Anda harus memberikan kedua nilai lon dan lat ke fungsi penambah.",
-
-    'pixelAddError': "Anda harus memberikan kedua nilai x dan y ke fungsi penambah.",
-
-    'unsupportedGeometryType': "Tipe geometri tak didukung: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluasi tidak tersedia untuk tipe filter ini."
+    'methodDeprecated': "Metode ini telah usang dan akan dihapus di 3.0. Sebaliknya, harap gunakan ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/is.js b/lib/OpenLayers/Lang/is.js
index 61b8a92..e2bc536 100644
--- a/lib/OpenLayers/Lang/is.js
+++ b/lib/OpenLayers/Lang/is.js
@@ -20,16 +20,8 @@ OpenLayers.Lang["is"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Grunnlag",
 
-    'readNotImplemented': "Skrifun er óútfærð.",
-
-    'writeNotImplemented': "Lestur er óútfærður.",
-
-    'errorLoadingGML': "Villa kom upp við að hlaða inn GML skránni ${url}",
-
     'Scale = 1 : ${scaleDenom}': "Skali = 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Þú reyndir að bæta laginu ${layerName} á kortið en það er þegar búið að bæta því við",
-
     'methodDeprecated': "Þetta fall hefur verið úrelt og verður fjarlægt í 3.0. Notaðu ${newMethod} í staðin."
 
 });
diff --git a/lib/OpenLayers/Lang/it.js b/lib/OpenLayers/Lang/it.js
index 1a79897..a56ef0f 100644
--- a/lib/OpenLayers/Lang/it.js
+++ b/lib/OpenLayers/Lang/it.js
@@ -18,24 +18,11 @@ OpenLayers.Lang.it = {
 
     'Base Layer': "Livello base",
 
-    'readNotImplemented': "Lettura non implementata.",
-
-    'writeNotImplemented': "Scrittura non implementata.",
-
     'noFID': "Impossibile aggiornare un elemento grafico che non abbia il FID.",
 
-    'errorLoadingGML': "Errore nel caricamento del file GML ${url}",
-
     'browserNotSupported':
         "Il tuo browser non supporta il rendering vettoriale. I renderizzatore attualemnte supportati sono:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : il componente dovrebbe essere di tipo ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "getFeatureFromEvent chiamata su di un livello senza renderizzatore. Ciò significa che " +
-        "il livello è stato cancellato, ma non i gestori associati ad esso.",
-
     // console message
     'minZoomLevelError':
         "La proprietà minZoomLevel è da utilizzare solamente " +
@@ -76,10 +63,6 @@ OpenLayers.Lang.it = {
     'Scale = 1 : ${scaleDenom}': "Scala = 1 : ${scaleDenom}",
 
     // console message
-    'layerAlreadyAdded':
-        "Stai cercando di aggiungere il livello: ${layerName} alla mappa, ma tale livello è già stato aggiunto.",
-
-    // console message
     'reprojectDeprecated':
         "Stai utilizzando l'opzione 'reproject' sul livello ${layerName}. " +
         "Questa opzione è deprecata: il suo utilizzo è stato introdotto per" +
@@ -93,17 +76,5 @@ OpenLayers.Lang.it = {
         "Questo metodo è stato deprecato e sarà rimosso dalla versione 3.0. " +
         "Si prega di utilizzare il metodo ${newMethod} in alternativa.",
 
-    // console message
-    'boundsAddError': "Devi specificare i valori di x e y alla funzione add.",
-
-    // console message
-    'lonlatAddError': "Devi specificare i valori di lon e lat alla funzione add.",
-
-    // console message
-    'pixelAddError': "Devi specificare i valori di x e y alla funzione add.",
-
-    // console message
-    'unsupportedGeometryType': "Tipo di geometria non supportata: ${geomType}",
-
     'end': ''
 };
diff --git a/lib/OpenLayers/Lang/ja.js b/lib/OpenLayers/Lang/ja.js
index a917f0d..75cc1e3 100644
--- a/lib/OpenLayers/Lang/ja.js
+++ b/lib/OpenLayers/Lang/ja.js
@@ -23,20 +23,10 @@ OpenLayers.Lang["ja"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "基底レイヤー",
 
-    'readNotImplemented': "読み込みは実装されていません。",
-
-    'writeNotImplemented': "書き込みは実装されていません。",
-
     'noFID': "FID のない地物は更新できません。",
 
-    'errorLoadingGML': "GML ファイル ${url} の読み込みエラー",
-
     'browserNotSupported': "あなたのブラウザはベクターグラフィックスの描写に対応していません。現時点で対応しているソフトウェアは以下のものです。\n${renderers}",
 
-    'componentShouldBe': "addFeatures: 要素は ${geomType} であるべきです",
-
-    'getFeatureError': "getFeatureFromEvent がレンダラーのないレイヤーから呼ばれました。通常、これはあなたがレイヤーを、それに関連づけられたいくつかのハンドラを除いて、破壊してしまったことを意味します。",
-
     'minZoomLevelError': "minZoomLevel プロパティは FixedZoomLevels を継承するレイヤーでの使用のみを想定しています。この minZoomLevel に対する WFS レイヤーの検査は歴史的なものです。しかしながら、この検査を除去するとそれに依存する OpenLayers ベースのアプリケーションを破壊してしまう可能性があります。よって廃止が予定されており、この minZoomLevel 検査はバージョン3.0で除去されます。代わりに、http://trac.openlayers.org/wiki/SettingZoomLevels で解説されている、最小および最大解像度設定を使用してください。",
 
     'commitSuccess': "WFS トランザクション: 成功 ${response}",
@@ -57,20 +47,8 @@ OpenLayers.Lang["ja"] = OpenLayers.Util.applyDefaults({
 
     'S': "南",
 
-    'layerAlreadyAdded': "あなたは「${layerName}」を地図に追加しようと試みましたが、そのレイヤーは既に追加されています",
-
     'reprojectDeprecated': "あなたは「${layerName}」レイヤーで reproject オプションを使っています。このオプションは商用の基底地図上に情報を表示する目的で設計されましたが、現在ではその機能は Spherical Mercator サポートを利用して実現されており、このオプションの使用は非推奨です。追加の情報は http://trac.openlayers.org/wiki/SphericalMercator で入手できます。",
 
-    'methodDeprecated': "このメソッドは廃止が予定されており、バージョン3.0で除去されます。代わりに ${newMethod} を使用してください。",
-
-    'boundsAddError': "x と y 両方の値を add 関数に渡さなければなりません。",
-
-    'lonlatAddError': "lon と lat 両方の値を add 関数に渡さなければなりません。",
-
-    'pixelAddError': "x と y の値両方を add 関数に渡さなければなりません。",
-
-    'unsupportedGeometryType': "未対応の形状型: ${geomType}",
-
-    'filterEvaluateNotImplemented': "このフィルター型について evaluate は実装されていません。"
+    'methodDeprecated': "このメソッドは廃止が予定されており、バージョン3.0で除去されます。代わりに ${newMethod} を使用してください。"
 
 });
diff --git a/lib/OpenLayers/Lang/km.js b/lib/OpenLayers/Lang/km.js
index 70907f5..8835177 100644
--- a/lib/OpenLayers/Lang/km.js
+++ b/lib/OpenLayers/Lang/km.js
@@ -18,8 +18,6 @@ OpenLayers.Lang["km"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "ស្រទាប់បាត​",
 
-    'errorLoadingGML': "កំហុសកំឡុងពេលផ្ទុកឯកសារ GML ${url}",
-
     'Scale = 1 : ${scaleDenom}': "មាត្រដ្ឋាន = ១ ៖ ${scaleDenom}"
 
 });
diff --git a/lib/OpenLayers/Lang/ksh.js b/lib/OpenLayers/Lang/ksh.js
index 42f9a1c..3ba94f4 100644
--- a/lib/OpenLayers/Lang/ksh.js
+++ b/lib/OpenLayers/Lang/ksh.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["ksh"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Jrund-Nivoh",
 
-    'readNotImplemented': "„\x3ccode lang=\"en\"\x3eread\x3c/code\x3e“ is em Projramm nit fürjesinn.",
-
-    'writeNotImplemented': "„\x3ccode lang=\"en\"\x3ewrite\x3c/code\x3e“ is em Projramm nit fürjesinn.",
-
     'noFID': "En Saach, woh kein \x3ci lang=\"en\"\x3eFID\x3c/i\x3e för doh es, löht sesch nit ändere.",
 
-    'errorLoadingGML': "Fähler beim \x3ci lang=\"en\"\x3eGML\x3c/i\x3e-Datei-Laade vun \x3ccode\x3e${url}\x3c/code\x3e",
-
     'browserNotSupported': "Dinge Brauser kann kein Väktore ußjävve. De Zoote Ußjaabe, di em Momang jon, sen:\n${renderers}",
 
-    'componentShouldBe': "\x3ccode lang=\"en\"\x3eaddFeatures\x3c/code\x3e: dä Aandeil sullt vun dä Zoot „\x3ccode lang=\"en\"\x3e${geomType}\x3c/code\x3e“ sin.",
-
-    'getFeatureError': "\x3ccode lang=\"en\"\x3egetFeatureFromEvent\x3c/code\x3e es vun enem Nivoh opjeroofe woode, woh et kei Projramm zom Ußjävve jit. Dat bedügg för jewöhnlesch, dat De e Nivoh kapott jemaat häs, ävver nit e Projramm för domet ömzejonn, wat domet verbonge es.",
-
     'minZoomLevelError': "De Eijeschaff „\x3ccode lang=\"en\"\x3eminZoomLevel\x3c/code\x3e“ es bloß doför jedaach, dat mer se met dä Nivvohß bruch, di vun \x3ccode lang=\"en\"\x3eFixedZoomLevels\x3c/code\x3e affhange don. Dat dat \x3ci lang=\"en\"\x3eWFS\x3c/i\x3e-Nivvoh övverhoup de Eijeschaff „\x3ccode lang=\"en\"\x3eminZoomLevel\x3c/code\x3e“ pröhfe deiht, es noch övveresch vun fröhjer. Mer künne dat ävver jez nit fott lohße, oohne dat mer Jevaa loufe, dat Aanwendunge vun OpenLayers n [...]
 
     'commitSuccess': "Dä \x3ci lang=\"en\"\x3eWFS\x3c/i\x3e-Vörjang es joot jeloufe: ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["ksh"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Do häß versöhk, dat Nivvoh \x3ccode\x3e${layerName}\x3c/code\x3e en di Kaat eren ze bränge, et wohr ävver ald do dren.",
-
     'reprojectDeprecated': "Do bruchs de Ußwahl \x3ccode\x3ereproject\x3c/code\x3e op däm Nivvoh \x3ccode\x3e${layerName}\x3c/code\x3e. Di Ußwahl es nit mieh jähn jesinn. Se wohr doför jedaach, öm Date op jeschääfsmäßesch eruß jejovve Kaate bovve drop ze moole, wat ävver enzwesche besser met dä Öngershtözung för de ßfääresche Mäkaator Beldscher jeiht. Doh kanns De mieh drövver fenge op dä Sigg: http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Hee di Metood es nim_mih aktoäll un et weed se en dä Version 3.0 nit mieh jävve. Nemm \x3ccode\x3e${newMethod}\x3c/code\x3e doföör.",
-
-    'boundsAddError': "Do moß beeds vun de \x3ccode\x3ex\x3c/code\x3e un \x3ccode\x3ey\x3c/code\x3e Wääte aan de Fungkßjohn \x3ccode\x3eadd\x3c/code\x3e jävve.",
-
-    'lonlatAddError': "Do moß beeds \x3ccode\x3elon\x3c/code\x3e un \x3ccode\x3elat\x3c/code\x3e aan de Fungkßjohn \x3ccode\x3eadd\x3c/code\x3e jävve.",
-
-    'pixelAddError': "Do moß beeds \x3ccode\x3ex\x3c/code\x3e un \x3ccode\x3ey\x3c/code\x3e aan de Fungkßjohn \x3ccode\x3eadd\x3c/code\x3e jävve.",
-
-    'unsupportedGeometryType': "De Zoot Jommetrii dom_mer nit ongershtöze: \x3ccode\x3e${geomType}\x3c/code\x3e",
-
-    'filterEvaluateNotImplemented': "„\x3ccode lang=\"en\"\x3eevaluate\x3c/code\x3e“ es för di Zoot Fellter nit enjereschdt."
+    'methodDeprecated': "Hee di Metood es nim_mih aktoäll un et weed se en dä Version 3.0 nit mieh jävve. Nemm \x3ccode\x3e${newMethod}\x3c/code\x3e doföör."
 
 });
diff --git a/lib/OpenLayers/Lang/lt.js b/lib/OpenLayers/Lang/lt.js
index a240b55..c3e896f 100644
--- a/lib/OpenLayers/Lang/lt.js
+++ b/lib/OpenLayers/Lang/lt.js
@@ -18,23 +18,11 @@ OpenLayers.Lang['lt'] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Pagrindinis sluoksnis",
 
-    'readNotImplemented': "Skaitymas nėra įgyvendintas.",
-
-    'writeNotImplemented': "Rašymas nėra įgyvendintas.",
-
     'noFID': "Negaliu atnaujinti objekto, kuris neturi FID.",
 
-    'errorLoadingGML': "Klaida užkraunant GML failą ${url}",
-
     'browserNotSupported':
 	"Jūsų naršyklė nemoka parodyti vektorių. Šiuo metu galima naudotis tokiais rodymo varikliais:\n{renderers}",
 
-    'componentShouldBe': "addFeatures : komponentas turi būti ${geomType}",
-
-    // console message
-    'getFeatureError':
-	"getFeatureFromEvent buvo iškviestas sluoksniui, kuris neturi priskirto paišymo variklio. Tai paprastai nutinka, kai jūs pašalinate sluoksnį, bet paliekate su juo susijusį [handler]",
-
     'commitSuccess': "WFS Tranzakcija: PAVYKO ${response}",
 
     'commitFailed': "WFS Tranzakcija: ŽLUGO ${response}",
@@ -49,26 +37,10 @@ OpenLayers.Lang['lt'] = OpenLayers.Util.applyDefaults({
     'Graticule': 'Tinklelis',
 
     // console message
-    'layerAlreadyAdded':
-        "Bandėte pridėti prie žemėlapio sluoksnį ${layerName}, tačiau jis jau yra pridėtas",
-
-    // console message
     'methodDeprecated':
 	"Šis metodas yra pasenęs ir 3.0 versijoje bus pašalintas. " +
 	"Prašome naudoti ${newMethod}.",
 
-    // console message
-    'boundsAddError': "Add funkcijai reikia pateikti tiek x, tiek y reikšmes.",
-
-    // console message
-    'lonlatAddError': "Add funkcijai reikia pateikti tiek lon, tiek lat reikšmes",
-
-    // console message
-    'pixelAddError': "Add funkcijai būtina perduoti tiek x, tiek y reikšmes.",
-
-    // console message
-    'unsupportedGeometryType': "Nepalaikomas geometrijos tipas: ${geomType}",
-
     // **** end ****
     'end': ''
     
diff --git a/lib/OpenLayers/Lang/nb.js b/lib/OpenLayers/Lang/nb.js
index 9f8f652..24a4a7e 100644
--- a/lib/OpenLayers/Lang/nb.js
+++ b/lib/OpenLayers/Lang/nb.js
@@ -18,24 +18,11 @@ OpenLayers.Lang["nb"] = {
 
     'Base Layer': "Bakgrunnskart",
 
-    'readNotImplemented': "Lesing er ikke implementert.",
-
-    'writeNotImplemented': "Skriving er ikke implementert.",
-
     'noFID': "Kan ikke oppdatere et feature (et objekt) som ikke har FID.",
 
-    'errorLoadingGML': "Feil under lasting av GML-fil ${url}",
-
     'browserNotSupported':
         "Din nettleser støtter ikke vektortegning. Tegnemetodene som støttes er:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : komponenten må være en ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "getFeatureFromEvent har blitt kjørt mot et lag uten noen tegnemetode. Dette betyr som regel at du " +
-        "fjernet et lag uten å fjerne alle håndterere tilknyttet laget.",
-
     // console message
     'minZoomLevelError':
         "Egenskapen minZoomLevel er kun ment til bruk på lag " +
@@ -77,10 +64,6 @@ OpenLayers.Lang["nb"] = {
     'Scale = 1 : ${scaleDenom}': "<strong>Skala</strong> 1 : ${scaleDenom}",
 
     // console message
-    'layerAlreadyAdded':
-        "Du forsøkte å legge til laget ${layerName} på kartet, men det er allerede lagt til",
-
-    // console message
     'reprojectDeprecated':
         "Du bruker innstillingen 'reproject' på laget ${layerName}. " +
         "Denne innstillingen er foreldet, den var ment for å støtte " +
@@ -93,18 +76,6 @@ OpenLayers.Lang["nb"] = {
         "Denne metoden er markert som foreldet og vil bli fjernet i 3.0. " +
         "Vennligst bruk ${newMethod} i stedet.",
 
-    // console message
-    'boundsAddError': "Du må gi både x- og y-verdier til funksjonen add.",
-
-    // console message
-    'lonlatAddError': "Du må gi både lon- og lat-verdier til funksjonen add.",
-
-    // console message
-    'pixelAddError': "Du må gi både x- og y-verdier til funksjonen add.",
-
-    // console message
-    'unsupportedGeometryType': "Geometritypen ${geomType} er ikke støttet",
-
     'end': ''
 };
 
diff --git a/lib/OpenLayers/Lang/nds.js b/lib/OpenLayers/Lang/nds.js
index 380eba2..9be21b9 100644
--- a/lib/OpenLayers/Lang/nds.js
+++ b/lib/OpenLayers/Lang/nds.js
@@ -22,36 +22,16 @@ OpenLayers.Lang["nds"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Achtergrundkoort",
 
-    'readNotImplemented': "Lesen is nich inricht.",
-
-    'writeNotImplemented': "Schrieven is nich inricht.",
-
     'noFID': "En Feature, dat keen FID hett, kann nich aktuell maakt warrn.",
 
-    'errorLoadingGML': "Fehler bi’t Laden vun de GML-Datei ${url}",
-
     'browserNotSupported': "Dien Browser ünnerstütt keen Vektorbiller. Ünnerstütt Renderers:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : Kumponent schull man den Typ ${geomType} hebben",
-
-    'getFeatureError': "getFeatureFromEvent is von en Laag ahn Render opropen worrn. Dat bedüüdt normalerwies, dat en Laag wegmaakt worrn is, aver nich de Handler, de dor op verwiest.",
-
     'commitSuccess': "WFS-Transakschoon: hett klappt ${response}",
 
     'commitFailed': "WFS-Transakschoon: hett nich klappt ${response}",
 
     'Scale = 1 : ${scaleDenom}': "Skaal = 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Du versöchst de Laag „${layerName}“ to de Koort totofögen, man de is al toföögt",
-
-    'methodDeprecated': "Disse Methood is oold un schall dat in 3.0 nich mehr geven. Bruuk dor man beter ${newMethod} för.",
-
-    'boundsAddError': "De Weert x un y, de mööt all beid an de add-Funkschoon övergeven warrn.",
-
-    'lonlatAddError': "De Weert lon un lat, de mööt all beid an de add-Funkschoon övergeven warrn.",
-
-    'pixelAddError': "De Weert x un y, de mööt all beid an de add-Funkschoon övergeven warrn.",
-
-    'unsupportedGeometryType': "Nich ünnerstütt Geometrie-Typ: ${geomType}"
+    'methodDeprecated': "Disse Methood is oold un schall dat in 3.0 nich mehr geven. Bruuk dor man beter ${newMethod} för."
 
 });
diff --git a/lib/OpenLayers/Lang/nl.js b/lib/OpenLayers/Lang/nl.js
index eef24c1..8888716 100644
--- a/lib/OpenLayers/Lang/nl.js
+++ b/lib/OpenLayers/Lang/nl.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["nl"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Achtergrondkaart",
 
-    'readNotImplemented': "Lezen is niet geïmplementeerd.",
-
-    'writeNotImplemented': "Schrijven is niet geïmplementeerd.",
-
     'noFID': "Een optie die geen FID heeft kan niet bijgewerkt worden.",
 
-    'errorLoadingGML': "Er is een fout opgetreden bij het laden van het GML bestand van ${url}",
-
     'browserNotSupported': "Uw browser ondersteunt het weergeven van vectoren niet.\nMomenteel ondersteunde weergavemogelijkheden:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : component moet van het type ${geomType} zijn",
-
-    'getFeatureError': "getFeatureFromEvent is aangeroepen op een laag zonder rederer.\nDit betekent meestal dat u een laag hebt verwijderd, maar niet een handler die ermee geassocieerd was.",
-
     'minZoomLevelError': "De eigenschap minZoomLevel is alleen bedoeld voor gebruik lagen met die afstammen van FixedZoomLevels-lagen.\nDat deze WFS-laag minZoomLevel controleert, is een overblijfsel uit het verleden.\nWe kunnen deze controle echter niet verwijderen zonder op OL gebaseerde applicaties die hervan afhankelijk zijn stuk te maken.\nDaarom heeft deze functionaliteit de eigenschap \'deprecated\' gekregen - de minZoomLevel wordt verwijderd in versie 3.0.\nGebruik in plaats van  [...]
 
     'commitSuccess': "WFS-transactie: succesvol ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["nl"] = OpenLayers.Util.applyDefaults({
 
     'S': "Z",
 
-    'layerAlreadyAdded': "U hebt geprobeerd om de laag  ${layerName} aan de kaart toe te voegen, maar deze is al toegevoegd",
-
     'reprojectDeprecated': "U gebruikt de optie \'reproject\' op de laag ${layerName}.\nDeze optie is vervallen: deze optie was ontwikkeld om gegevens over commerciële basiskaarten weer te geven, maar deze functionaliteit wordt nu bereikt door ondersteuning van Spherical Mercator.\nMeer informatie is beschikbaar op http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Deze methode is verouderd en wordt verwijderd in versie 3.0.\nGebruik ${newMethod}.",
-
-    'boundsAddError': "U moet zowel de x- als de y-waarde doorgeven aan de toevoegfunctie.",
-
-    'lonlatAddError': "U moet zowel de lengte- als de breedtewaarde doorgeven aan de toevoegfunctie.",
-
-    'pixelAddError': "U moet zowel de x- als de y-waarde doorgeven aan de toevoegfunctie.",
-
-    'unsupportedGeometryType': "Dit geometrietype wordt niet ondersteund: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evalueren is niet geïmplementeerd voor dit filtertype."
+    'methodDeprecated': "Deze methode is verouderd en wordt verwijderd in versie 3.0.\nGebruik ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/nn.js b/lib/OpenLayers/Lang/nn.js
index b794df2..cb47f31 100644
--- a/lib/OpenLayers/Lang/nn.js
+++ b/lib/OpenLayers/Lang/nn.js
@@ -14,14 +14,6 @@
  */
 OpenLayers.Lang["nn"] = OpenLayers.Util.applyDefaults({
 
-    'Scale = 1 : ${scaleDenom}': "Skala = 1 : ${scaleDenom}",
-
-    'layerAlreadyAdded': "Du freista å leggja til laget «${layerName}» på kartet, men det har alt vorte lagt til.",
-
-    'boundsAddError': "Du er nøydd til å gje både ein x- og ein y-verdi til «add»-funksjonen.",
-
-    'lonlatAddError': "Du er nøydd til å gje både lon- og lat-verdiar til «add»-funksjonen.",
-
-    'pixelAddError': "Du er nøydd til å gje både ein x- og ein y-verdi til «add»-funksjonen."
+    'Scale = 1 : ${scaleDenom}': "Skala = 1 : ${scaleDenom}"
 
 });
diff --git a/lib/OpenLayers/Lang/oc.js b/lib/OpenLayers/Lang/oc.js
index d0ed802..244c290 100644
--- a/lib/OpenLayers/Lang/oc.js
+++ b/lib/OpenLayers/Lang/oc.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["oc"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Calc de basa",
 
-    'readNotImplemented': "Lectura pas implementada.",
-
-    'writeNotImplemented': "Escritura pas implementada.",
-
     'noFID': "Impossible de metre a jorn un objècte sens identificant (fid).",
 
-    'errorLoadingGML': "Error al cargament del fichièr GML ${url}",
-
     'browserNotSupported': "Vòstre navegidor supòrta pas lo rendut vectorial. Los renderers actualament suportats son : \n${renderers}",
 
-    'componentShouldBe': "addFeatures : lo compausant deuriá èsser de tipe ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent es estat apelat sus un calc sens renderer. Aquò significa generalament qu\'avètz destruch aqueste jaç, mas qu\'avètz conservat un handler que li èra associat.",
-
     'minZoomLevelError': "La proprietat minZoomLevel deu èsser utilizada solament per de jaces FixedZoomLevels-descendent. Lo fach qu\'aqueste jaç WFS verifique la preséncia de minZoomLevel es una relica del passat. Çaquelà, la podèm suprimir sens copar d\'aplicacions que ne poirián dependre. Es per aquò que la depreciam -- la verificacion del minZoomLevel serà suprimida en version 3.0. A la plaça, mercés d\'utilizar los paramètres de resolucions min/max tal coma descrich sus : http://tr [...]
 
     'commitSuccess': "Transaccion WFS : SUCCES ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["oc"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Avètz ensajat d\'apondre a la carta lo calc : ${layerName}, mas ja es present",
-
     'reprojectDeprecated': "Utilizatz l\'opcion \'reproject\' sul jaç ${layerName}. Aquesta opcion es despreciada : Son usatge permetiá d\'afichar de donadas al dessús de jaces raster comercials. Aquesta foncionalitat ara es suportada en utilizant lo supòrt de la projeccion Mercator Esferica. Mai d\'informacion es disponibla sus http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Aqueste metòde es despreciada, e serà suprimida a la version 3.0. Mercés d\'utilizar ${newMethod} a la plaça.",
-
-    'boundsAddError': "Vos cal passar las doas valors x e y a la foncion add.",
-
-    'lonlatAddError': "Vos cal passar las doas valors lon e lat a la foncion add.",
-
-    'pixelAddError': "Vos cal passar las doas valors x e y a la foncion add.",
-
-    'unsupportedGeometryType': "Tipe de geometria pas suportat : ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluar es pas encara estat implementat per aqueste tipe de filtre."
+    'methodDeprecated': "Aqueste metòde es despreciada, e serà suprimida a la version 3.0. Mercés d\'utilizar ${newMethod} a la plaça."
 
 });
diff --git a/lib/OpenLayers/Lang/pl.js b/lib/OpenLayers/Lang/pl.js
new file mode 100644
index 0000000..49c33a9
--- /dev/null
+++ b/lib/OpenLayers/Lang/pl.js
@@ -0,0 +1,93 @@
+/* Translators:
+ *  - Arkadiusz Grabka
+ */
+
+/**
+ * @requires OpenLayers/Lang.js
+ */
+
+/**
+ * Namespace: OpenLayers.Lang["pl"]
+ * Dictionary for Polish.  Keys for entries are used in calls to
+ *     <OpenLayers.Lang.translate>.  Entry bodies are normal strings or
+ *     strings formatted for use with <OpenLayers.String.format> calls.
+ */
+OpenLayers.Lang["pl"] = OpenLayers.Util.applyDefaults({
+
+    'unhandledRequest': "Nieobsługiwane żądanie zwróciło ${statusText}",
+
+    'Permalink': "Permalink",
+
+    'Overlays': "Nakładki",
+
+    'Base Layer': "Warstwa podstawowa",
+
+    'noFID': "Nie można zaktualizować funkcji, dla których nie ma FID.",
+
+    'browserNotSupported':
+        "Twoja przeglądarka nie obsługuje renderowania wektorów. Obecnie obsługiwane renderowanie to:\n${renderers}",
+
+    // console message
+    'minZoomLevelError':
+        "Właściwość minZoomLevel jest przeznaczona tylko do użytku " +
+        "z warstwami FixedZoomLevels-descendent." +
+        "Warstwa wfs, która sprawdza minZoomLevel jest reliktem przeszłości." +
+        "Nie możemy jej jednak usunąc bez mozliwości łamania OL aplikacji, " +
+        "które mogą być od niej zależne. " +
+        "Dlatego jesteśmy za deprecjację -- minZoomLevel " +
+        "zostanie usunięta w wersji 3.0. W zamian prosze użyj " +
+        "min/max rozdzielczości w sposób opisany tutaj: " +
+        "http://trac.openlayers.org/wiki/SettingZoomLevels",
+
+    'commitSuccess': "Transakcja WFS: SUKCES ${response}",
+
+    'commitFailed': "Transakcja WFS: FAILED ${response}",
+
+    'googleWarning':
+        "Warstwa Google nie był w stanie załadować się poprawnie.<br><br>" +
+        "Aby pozbyć się tej wiadomości, wybierz nową Warstwe podstawową " +
+        "w przełączniku warstw w górnym prawym rogu mapy.<br><br>" +
+        "Najprawdopodobniej jest to spowodowane tym, że biblioteka Google Maps " +
+        "nie jest załadowana, lub nie zawiera poprawnego klucza do API dla twojej strony<br><br>" +
+        "Programisto: Aby uzyskać pomoc , " +
+        "<a href='http://trac.openlayers.org/wiki/Google' " +
+        "target='_blank'>kliknij tutaj</a>",
+
+    'getLayerWarning':
+        "Warstwa ${layerType} nie mogła zostać załadowana poprawnie.<br><br>" +
+		"Aby pozbyć się tej wiadomości, wybierz nową Warstwe podstawową " +
+        "w przełączniku warstw w górnym prawym rogu mapy.<br><br>" +
+        "Najprawdopodobniej jest to spowodowane tym, że biblioteka ${layerLib} " +
+        "nie jest załadowana, lub może(o ile biblioteka tego wymaga) " +
+		"byc potrzebny klucza do API dla twojej strony<br><br>" +
+        "Programisto: Aby uzyskać pomoc , " +
+        "<a href='http://trac.openlayers.org/wiki/${layerLib}' " +
+        "target='_blank'>kliknij tutaj</a>",
+
+    'Scale = 1 : ${scaleDenom}': "Skala = 1 : ${scaleDenom}",
+    
+    //labels for the graticule control
+    'W': 'ZACH',
+    'E': 'WSCH',
+    'N': 'PN',
+    'S': 'PD',
+    'Graticule': 'Siatka',
+
+    // console message
+    'reprojectDeprecated':
+        "w warstwie ${layerName} używasz opcji 'reproject'. " +
+        "Ta opcja jest przestarzała: " +
+        "jej zastosowanie został zaprojektowany, aby wspierać wyświetlania danych przez komercyjne mapy, "+
+		"jednak obecnie ta funkcjonalność powinien zostać osiągnięty za pomocą Spherical Mercator " +
+		"its use was designed to support displaying data over commercial. Więcje informacji na ten temat możesz znaleźć na stronie " + 
+        "http://trac.openlayers.org/wiki/SphericalMercator.",
+
+    // console message
+    'methodDeprecated':
+        "Ta metoda jest przestarzała i będzie usunięta od wersji 3.0. " +
+        "W zamian użyj ${newMethod}.",
+
+    'proxyNeeded': "Prawdopodobnie musisz ustawić OpenLayers.ProxyHost aby otrzymać dostęp do ${url}."+
+        "See http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost"
+
+});
\ No newline at end of file
diff --git a/lib/OpenLayers/Lang/pt-BR.js b/lib/OpenLayers/Lang/pt-BR.js
index 2e5a557..e7e7511 100644
--- a/lib/OpenLayers/Lang/pt-BR.js
+++ b/lib/OpenLayers/Lang/pt-BR.js
@@ -23,20 +23,10 @@ OpenLayers.Lang["pt-br"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Camada Base",
 
-    'readNotImplemented': "Leitura não implementada.",
-
-    'writeNotImplemented': "Escrita não implementada.",
-
     'noFID': "Não é possível atualizar uma feição que não tenha um FID.",
 
-    'errorLoadingGML': "Erro ao carregar o arquivo GML ${url}",
-
     'browserNotSupported': "Seu navegador não suporta renderização de vetores. Os renderizadores suportados atualmente são:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: o componente deve ser do tipo ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent foi executado mas nenhum renderizador foi encontrado. Isso pode indicar que você destruiu uma camana, mas não o handler associado a ela.",
-
     'minZoomLevelError': "A propriedade minZoomLevel é de uso restrito das camadas descendentes de FixedZoomLevels. A verificação dessa propriedade pelas camadas wfs é um resíduo do passado. Não podemos, entretanto não é possível removê-la sem possívelmente quebrar o funcionamento de aplicações OL que possuem depência com ela. Portanto estamos tornando seu uso obsoleto -- a verificação desse atributo será removida na versão 3.0. Ao invés, use as opções de resolução min/max como descrito  [...]
 
     'commitSuccess': "Transação WFS : SUCESSO ${response}",
@@ -57,20 +47,8 @@ OpenLayers.Lang["pt-br"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Você tentou adicionar a camada: ${layerName} ao mapa, mas ela já foi adicionada",
-
     'reprojectDeprecated': "Você está usando a opção \'reproject\' na camada ${layerName}. Essa opção está obsoleta: seu uso foi projetado para suportar a visualização de dados sobre bases de mapas comerciais, entretanto essa funcionalidade deve agora ser alcançada usando o suporte à projeção Mercator. Mais informação está disponível em: http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Esse método está obsoleto e será removido na versão 3.0. Ao invés, por favor use ${newMethod}.",
-
-    'boundsAddError': "Você deve informar ambos os valores x e y para a função add.",
-
-    'lonlatAddError': "Você deve informar ambos os valores lon e lat para a função add.",
-
-    'pixelAddError': "Você deve informar ambos os valores x e y para a função add.",
-
-    'unsupportedGeometryType': "Tipo geométrico não suportado: ${geomType}.",
-
-    'filterEvaluateNotImplemented': "evaluete não está implementado para este tipo de filtro."
+    'methodDeprecated': "Esse método está obsoleto e será removido na versão 3.0. Ao invés, por favor use ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/pt.js b/lib/OpenLayers/Lang/pt.js
index 33d0c69..af8e519 100644
--- a/lib/OpenLayers/Lang/pt.js
+++ b/lib/OpenLayers/Lang/pt.js
@@ -24,20 +24,10 @@ OpenLayers.Lang["pt"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Camada Base",
 
-    'readNotImplemented': "Leitura não implementada.",
-
-    'writeNotImplemented': "Escrita não implementada.",
-
     'noFID': "Não é possível atualizar um elemento para a qual não há FID.",
 
-    'errorLoadingGML': "Erro ao carregar ficheiro GML ${url}",
-
     'browserNotSupported': "O seu navegador não suporta renderização vetorial. Actualmente os renderizadores suportados são:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: componente deve ser um(a) ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent foi chamado numa camada sem renderizador. Isto normalmente significa que destruiu uma camada, mas não um manipulador \'\'(handler)\'\' que lhe está associado.",
-
     'minZoomLevelError': "A propriedade minZoomLevel só deve ser usada com as camadas descendentes da FixedZoomLevels. A verificação da propriedade por esta camada wfs é uma relíquia do passado. No entanto, não podemos removê-la sem correr o risco de afectar aplicações OL que dependam dela. Portanto, estamos a torná-la obsoleta -- a verificação minZoomLevel será removida na versão 3.0. Em vez dela, por favor, use as opções de resolução min/max descritas aqui: http://trac.openlayers.org/w [...]
 
     'commitSuccess': "Transacção WFS: SUCESSO ${response}",
@@ -58,20 +48,8 @@ OpenLayers.Lang["pt"] = OpenLayers.Util.applyDefaults({
 
     'S': "S",
 
-    'layerAlreadyAdded': "Você tentou adicionar a camada: ${layerName} ao mapa, mas ela já tinha sido adicionada antes",
-
     'reprojectDeprecated': "Está usando a opção \'reproject\' na camada ${layerName}. Esta opção é obsoleta: foi concebida para permitir a apresentação de dados sobre mapas-base comerciais, mas esta funcionalidade é agora suportada pelo Mercator Esférico. Mais informação está disponível em http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Este método foi declarado obsoleto e será removido na versão 3.0. Por favor, use ${newMethod} em vez disso.",
-
-    'boundsAddError': "Você deve passar tanto o valor x como o y à função de adição.",
-
-    'lonlatAddError': "Você deve passar tanto o valor lon como o lat à função de adição.",
-
-    'pixelAddError': "Você deve passar tanto o valor x como o y à função de adição.",
-
-    'unsupportedGeometryType': "Tipo de geometria não suportado: ${geomType}",
-
-    'filterEvaluateNotImplemented': "avaliar não está implementado para este tipo de filtro."
+    'methodDeprecated': "Este método foi declarado obsoleto e será removido na versão 3.0. Por favor, use ${newMethod} em vez disso."
 
 });
diff --git a/lib/OpenLayers/Lang/ru.js b/lib/OpenLayers/Lang/ru.js
index 9c21a92..23ecda8 100644
--- a/lib/OpenLayers/Lang/ru.js
+++ b/lib/OpenLayers/Lang/ru.js
@@ -25,20 +25,10 @@ OpenLayers.Lang["ru"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Основной слой",
 
-    'readNotImplemented': "Чтение не реализовано.",
-
-    'writeNotImplemented': "Запись не реализована.",
-
     'noFID': "Невозможно обновить объект, для которого нет FID.",
 
-    'errorLoadingGML': "Ошибка при загрузке файла GML ${url}",
-
     'browserNotSupported': "Ваш браузер не поддерживает векторную графику. На данный момент поддерживаются:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: компонент должен быть ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent вызван для слоя без рендерера. Обычно это говорит о том, что вы уничтожили слой, но оставили связанный с ним обработчик.",
-
     'minZoomLevelError': "Свойство minZoomLevel предназначено только для использования со слоями, являющимися потомками FixedZoomLevels. То, что этот WFS-слой проверяется на minZoomLevel — реликт прошлого. Однако мы не можем удалить эту функцию, так как, возможно, от неё зависят некоторые основанные на OpenLayers приложения. Функция объявлена устаревшей — проверка minZoomLevel будет удалена в 3.0. Пожалуйста, используйте вместо неё настройку мин/макс разрешения, описанную здесь: http://t [...]
 
     'commitSuccess': "Транзакция WFS: УСПЕШНО ${response}",
@@ -59,20 +49,8 @@ OpenLayers.Lang["ru"] = OpenLayers.Util.applyDefaults({
 
     'S': "Ю",
 
-    'layerAlreadyAdded': "Вы попытались добавить слой «${layerName}» на карту, но он уже был добавлен",
-
     'reprojectDeprecated': "Вы используете опцию \'reproject\' для слоя ${layerName}. Эта опция является устаревшей: ее использование предполагалось для поддержки показа данных поверх коммерческих базовых карт, но теперь этот функционал несёт встроенная поддержка сферической проекции Меркатора. Больше сведений доступно на http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Этот метод считается устаревшим и будет удалён в версии 3.0. Пожалуйста, пользуйтесь ${newMethod}.",
-
-    'boundsAddError': "Функции add надо передавать оба значения, x и y.",
-
-    'lonlatAddError': "Функции add надо передавать оба значения, lon и lat.",
-
-    'pixelAddError': "Функции add надо передавать оба значения, x и y.",
-
-    'unsupportedGeometryType': "Неподдерживаемый тип геометрии: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluate не реализовано для фильтра данного типа."
+    'methodDeprecated': "Этот метод считается устаревшим и будет удалён в версии 3.0. Пожалуйста, пользуйтесь ${newMethod}."
 
 });
diff --git a/lib/OpenLayers/Lang/sk.js b/lib/OpenLayers/Lang/sk.js
index 3cc3043..475647f 100644
--- a/lib/OpenLayers/Lang/sk.js
+++ b/lib/OpenLayers/Lang/sk.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["sk"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Základná vrstva",
 
-    'readNotImplemented': "Čítanie nie je implementované.",
-
-    'writeNotImplemented': "Zápis nie je implementovaný.",
-
     'noFID': "Nie je možné aktualizovať vlastnosť, pre ktorú neexistuje FID.",
 
-    'errorLoadingGML': "Chyba pri načítaní súboru GML ${url}",
-
     'browserNotSupported': "Váš prehliadač nepodporuje vykresľovanie vektorov. Momentálne podporované vykresľovače sú:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: komponent by mal byť ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent bola zavolaná na vrstve bez vykresľovača. To zvyčajne znamená, že ste odstránili vrstvu, ale nie niektorú z obslúh, ktorá je s ňou asociovaná.",
-
     'minZoomLevelError': "Vlastnosť minZoomLevel je určený iba na použitie s vrstvami odvodenými od FixedZoomLevels. To, že táto wfs vrstva kontroluje minZoomLevel je pozostatok z minulosti. Nemôžeme ho však odstrániť, aby sme sa vyhli možnému porušeniu aplikácií založených na Open Layers, ktoré na tomto môže závisieť. Preto ho označujeme ako zavrhovaný - dolu uvedená kontrola minZoomLevel bude odstránená vo verzii 3.0. Použite prosím namiesto toho kontrolu min./max. rozlíšenia podľa tu  [...]
 
     'commitSuccess': "Transakcia WFS: ÚSPEŠNÁ ${response}",
@@ -48,20 +38,7 @@ OpenLayers.Lang["sk"] = OpenLayers.Util.applyDefaults({
 
     'Scale = 1 : ${scaleDenom}': "Mierka = 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Pokúsili ste sa do mapy pridať vrstvu ${layerName}, ale tá už bola pridaná",
-
     'reprojectDeprecated': "Používate voľby „reproject“ vrstvy ${layerType}. Táto voľba je zzavrhovaná: jej použitie bolo navrhnuté na podporu zobrazovania údajov nad komerčnými základovými mapami, ale túto funkcionalitu je teraz možné dosiahnuť pomocou Spherical Mercator. Ďalšie informácie získate na stránke http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Táto metóda je zavrhovaná a bude odstránená vo verzii 3.0. Použite prosím namiesto nej metódu ${newMethod}.",
-
-    'boundsAddError': "Sčítacej funkcii musíte dať hodnoty x aj y.",
-
-    'lonlatAddError': "Sčítacej funkcii musíte dať hodnoty lon (zem. dĺžka) aj lat (zem. šírka).",
-
-    'pixelAddError': "Sčítacej funkcii musíte dať hodnoty x aj y.",
-
-    'unsupportedGeometryType': "Nepodporovaný typ geometrie: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluate nie je implementovaný pre tento typ filtra"
-
+    'methodDeprecated': "Táto metóda je zavrhovaná a bude odstránená vo verzii 3.0. Použite prosím namiesto nej metódu ${newMethod}."
 });
diff --git a/lib/OpenLayers/Lang/sv-SE.js b/lib/OpenLayers/Lang/sv-SE.js
index a1b4dee..2176250 100644
--- a/lib/OpenLayers/Lang/sv-SE.js
+++ b/lib/OpenLayers/Lang/sv-SE.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["sv"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Bakgrundskarta",
 
-    'readNotImplemented': "Läsning ej implementerad.",
-
-    'writeNotImplemented': "Skrivning ej implementerad.",
-
     'noFID': "Kan ej uppdatera feature (objekt) för vilket FID saknas.",
 
-    'errorLoadingGML': "Fel i laddning av GML-fil ${url}",
-
     'browserNotSupported': "Din webbläsare stöder inte vektorvisning. För närvarande stöds följande visning:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : komponenten skall vara en ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent anropad för lager utan utritning. Detta betyder oftast att man raderat ett lager, men inte en hanterare som är knuten till lagret.",
-
     'minZoomLevelError': "Egenskapen minZoomLevel är endast avsedd att användas med lager med FixedZoomLevels. Att detta WFS-lager kontrollerar minZoomLevel är en relik från äldre versioner. Vi kan dock inte ta bort det utan att riskera att OL-baserade tillämpningar som använder detta slutar fungera. Därför är det satt som deprecated, minZoomLevel kommer att tas bort i version 3.0. Använd i stället inställning av min/max resolution som beskrivs här: http://trac.openlayers.org/wiki/Settin [...]
 
     'commitSuccess': "WFS-transaktion: LYCKADES ${response}",
@@ -48,20 +38,8 @@ OpenLayers.Lang["sv"] = OpenLayers.Util.applyDefaults({
 
     'Scale = 1 : ${scaleDenom}': "\x3cstrong\x3eSkala\x3c/strong\x3e 1 : ${scaleDenom}",
 
-    'layerAlreadyAdded': "Du försökte lägga till lagret: ${layerName} på kartan, men det har lagts till tidigare",
-
     'reprojectDeprecated': "Du använder inställningen \'reproject\' på lagret ${layerName}. Denna inställning markerad som deprecated: den var avsedd att användas för att stödja visning av kartdata på kommersiella bakgrundskartor, men nu bör man i stället använda Spherical Mercator-stöd för den funktionaliteten. Mer information finns på http://trac.openlayers.org/wiki/SphericalMercator.",
 
-    'methodDeprecated': "Denna metod är markerad som deprecated och kommer att tas bort i 3.0. Använd ${newMethod} i stället.",
-
-    'boundsAddError': "Du måste skicka både x- och y-värde till funktionen add.",
-
-    'lonlatAddError': "Du måste skicka både lon- och lat-värde till funktionen add.",
-
-    'pixelAddError': "Du måste skicka både x- och y-värde till funktionen add.",
-
-    'unsupportedGeometryType': "Stöd saknas för geometritypen: ${geomType}",
-
-    'filterEvaluateNotImplemented': "evaluering har ej implementerats för denna typ av filter."
+    'methodDeprecated': "Denna metod är markerad som deprecated och kommer att tas bort i 3.0. Använd ${newMethod} i stället."
 
 });
diff --git a/lib/OpenLayers/Lang/vi.js b/lib/OpenLayers/Lang/vi.js
index 6c6a4a6..63b4270 100644
--- a/lib/OpenLayers/Lang/vi.js
+++ b/lib/OpenLayers/Lang/vi.js
@@ -22,20 +22,10 @@ OpenLayers.Lang["vi"] = OpenLayers.Util.applyDefaults({
 
     'Base Layer': "Lớp nền",
 
-    'readNotImplemented': "Chưa hỗ trợ chức năng đọc.",
-
-    'writeNotImplemented': "Chưa hỗ trợ chức năng viết.",
-
     'noFID': "Không thể cập nhật tính năng thiếu FID.",
 
-    'errorLoadingGML': "Lỗi tải tập tin GML tại ${url}",
-
     'browserNotSupported': "Trình duyệt của bạn không hỗ trợ chức năng vẽ bằng vectơ. Hiện hỗ trợ các bộ kết xuất:\n${renderers}",
 
-    'componentShouldBe': "addFeatures: bộ phận cần phải là ${geomType}",
-
-    'getFeatureError': "getFeatureFromEvent được gọi từ lớp không có bộ kết xuất. Thường thì có lẽ lớp bị xóa nhưng một phần xử lý của nó vẫn còn.",
-
     'minZoomLevelError': "Chỉ nên sử dụng thuộc tính minZoomLevel với các lớp FixedZoomLevels-descendent. Việc lớp wfs này tìm cho minZoomLevel là di tích còn lại từ xưa. Tuy nhiên, nếu chúng tôi dời nó thì sẽ vỡ các chương trình OpenLayers mà dựa trên nó. Bởi vậy chúng tôi phản đối sử dụng nó\x26nbsp;– bước tìm cho minZoomLevel sẽ được dời vào phiên bản 3.0. Xin sử dụng thiết lập độ phân tích tối thiểu / tối đa thay thế, theo hướng dẫn này: http://trac.openlayers.org/wiki/SettingZoomLevels",
 
     'commitSuccess': "Giao dịch WFS: THÀNH CÔNG ${response}",
@@ -56,20 +46,8 @@ OpenLayers.Lang["vi"] = OpenLayers.Util.applyDefaults({
 
     'S': "N",
 
-    'layerAlreadyAdded': "Bạn muốn thêm lớp ${layerName} vào bản đồ, nhưng lớp này đã được thêm",
-
     'reprojectDeprecated': "Bạn đang áp dụng chế độ “reproject” vào lớp ${layerName}. Chế độ này đã bị phản đối: nó có mục đích hỗ trợ lấp dữ liệu trên các nền bản đồ thương mại; nên thực hiện hiệu ứng đó dùng tính năng Mercator Hình cầu. Có sẵn thêm chi tiết tại http://trac.openlayers.org/wiki/SphericalMercator .",
 
-    'methodDeprecated': "Phương thức này đã bị phản đối và sẽ bị dời vào phiên bản 3.0. Xin hãy sử dụng ${newMethod} thay thế.",
-
-    'boundsAddError': "Cần phải cho cả giá trị x và y vào hàm add.",
-
-    'lonlatAddError': "Cần phải cho cả giá trị lon và lat vào hàm add.",
-
-    'pixelAddError': "Cần phải cho cả giá trị x và y vào hàm add.",
-
-    'unsupportedGeometryType': "Không hỗ trợ kiểu địa lý: ${geomType}",
-
-    'filterEvaluateNotImplemented': "chưa hỗ trợ evaluate cho loại bộ lọc này."
+    'methodDeprecated': "Phương thức này đã bị phản đối và sẽ bị dời vào phiên bản 3.0. Xin hãy sử dụng ${newMethod} thay thế."
 
 });
diff --git a/lib/OpenLayers/Lang/zh-CN.js b/lib/OpenLayers/Lang/zh-CN.js
index 31ecb03..449dd69 100644
--- a/lib/OpenLayers/Lang/zh-CN.js
+++ b/lib/OpenLayers/Lang/zh-CN.js
@@ -18,24 +18,11 @@ OpenLayers.Lang["zh-CN"] = {
 
     'Base Layer': "基础图层",
 
-    'readNotImplemented': "读取功能没有实现。",
-
-    'writeNotImplemented': "写入功能没有实现。",
-
     'noFID': "无法更新feature,缺少FID。",
 
-    'errorLoadingGML': "加载GML文件 ${url} 出现错误。",
-
     'browserNotSupported':
         "你使用的浏览器不支持矢量渲染。当前支持的渲染方式包括:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : 组件类型应该是 ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "getFeatureFromEvent方法在一个没有渲染器的图层上被调用。 这通常意味着您" +
-        "销毁了一个图层,但并未销毁其关联的handler。",
-
     // console message
     'minZoomLevelError':
         "minZoomLevel属性仅适合用于" +
@@ -76,10 +63,6 @@ OpenLayers.Lang["zh-CN"] = {
     'Scale = 1 : ${scaleDenom}': "比例尺 = 1 : ${scaleDenom}",
 
     // console message
-    'layerAlreadyAdded':
-        "你尝试添加图层: ${layerName} 到地图中,但是它之前就已经被添加。",
-
-    // console message
     'reprojectDeprecated':
         "你正在使用 ${layerName} 图层上的'reproject'选项。" +
         "这个选项已经不再使用:" +
@@ -93,17 +76,5 @@ OpenLayers.Lang["zh-CN"] = {
         "该方法已经不再被支持,并且将在3.0中被移除。" +
         "请使用 ${newMethod} 方法来替代。",
 
-    // console message
-    'boundsAddError': "您必须传递 x 和 y 两个参数值到 add 方法。",
-
-    // console message
-    'lonlatAddError': "您必须传递 lon 和 lat 两个参数值到 add 方法。",
-
-    // console message
-    'pixelAddError': "您必须传递 x and y 两个参数值到 add 方法。",
-
-    // console message
-    'unsupportedGeometryType': "不支持的几何体类型: ${geomType}",
-
     'end': ''
 };
diff --git a/lib/OpenLayers/Lang/zh-TW.js b/lib/OpenLayers/Lang/zh-TW.js
index 25adefc..b70e861 100644
--- a/lib/OpenLayers/Lang/zh-TW.js
+++ b/lib/OpenLayers/Lang/zh-TW.js
@@ -19,24 +19,11 @@ OpenLayers.Lang["zh-TW"] = {
 
     'Base Layer': "基礎圖層",
 
-    'readNotImplemented': "沒有實作讀取的功能。",
-
-    'writeNotImplemented': "沒有實作寫入的功能。",
-
     'noFID': "因為沒有 FID 所以無法更新 feature。",
 
-    'errorLoadingGML': "讀取GML檔案 ${url} 錯誤。",
-
     'browserNotSupported':
         "您的瀏覽器未支援向量渲染. 目前支援的渲染方式是:\n${renderers}",
 
-    'componentShouldBe': "addFeatures : 元件應該為 ${geomType}",
-
-    // console message
-    'getFeatureError':
-        "getFeatureFromEvent 在一個沒有被渲染的圖層裡被呼叫。這通常意味著您 " +
-        "摧毀了一個圖層,但並未摧毀相關的handler。",
-
     // console message
     'minZoomLevelError':
         "minZoomLevel 屬性僅適合用在 " +
@@ -77,10 +64,6 @@ OpenLayers.Lang["zh-TW"] = {
     'Scale = 1 : ${scaleDenom}': "Scale = 1 : ${scaleDenom}",
 
     // console message
-    'layerAlreadyAdded':
-        "你試著新增圖層: ${layerName} 到地圖上,但圖層之前就已經被新增了。",
-
-    // console message
     'reprojectDeprecated':
         "你正使用 'reproject' 這個選項 " +
         "在 ${layerName} 層。這個選項已經不再使用:" +
@@ -94,17 +77,5 @@ OpenLayers.Lang["zh-TW"] = {
         "這個方法已經不再使用且在3.0將會被移除," +
         "請使用 ${newMethod} 來代替。",
 
-    // console message
-    'boundsAddError': "您必須傳入 x 跟 y 兩者的值進 add 函數。",
-
-    // console message
-    'lonlatAddError': "您必須傳入 lon 跟 lat 兩者的值進 add 函數。",
-
-    // console message
-    'pixelAddError': "您必須傳入 x 跟 y 兩者的值進 add 函數。",
-
-    // console message
-    'unsupportedGeometryType': "未支援的幾何型別: ${geomType}。",
-
     'end': ''
 };
diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js
index 4a2cc4b..d152400 100644
--- a/lib/OpenLayers/Layer.js
+++ b/lib/OpenLayers/Layer.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -34,10 +34,11 @@ OpenLayers.Layer = OpenLayers.Class({
     div: null,
 
     /**
-     * Property: opacity
-     * {Float} The layer's opacity. Float number between 0.0 and 1.0.
+     * APIProperty: opacity
+     * {Float} The layer's opacity. Float number between 0.0 and 1.0. Default
+     * is 1.
      */
-    opacity: null,
+    opacity: 1,
 
     /**
      * APIProperty: alwaysInRange
@@ -57,9 +58,22 @@ OpenLayers.Layer = OpenLayers.Class({
     alwaysInRange: null,   
 
     /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+     * Constant: RESOLUTION_PROPERTIES
+     * {Array} The properties that are used for calculating resolutions
+     *     information.
+     */
+    RESOLUTION_PROPERTIES: [
+        'scales', 'resolutions',
+        'maxScale', 'minScale',
+        'maxResolution', 'minResolution',
+        'numZoomLevels', 'maxZoomLevel'
+    ],
+
+    /**
+     * APIProperty: events
+     * {<OpenLayers.Events>}
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * layer.events.register(type, obj, listener);
      * (end)
@@ -74,7 +88,6 @@ OpenLayers.Layer = OpenLayers.Class({
      * Supported map event types:
      * loadstart - Triggered when layer loading starts.
      * loadend - Triggered when layer loading ends.
-     * loadcancel - Triggered when layer loading is canceled.
      * visibilitychanged - Triggered when layer visibility is changed.
      * move - Triggered when layer moves (triggered with every mousemove
      *     during a drag).
@@ -88,25 +101,6 @@ OpenLayers.Layer = OpenLayers.Class({
      *     will receive an object with a *map* property referencing the map and
      *     a *layer* property referencing the layer.
      */
-    EVENT_TYPES: ["loadstart", "loadend", "loadcancel", "visibilitychanged",
-                  "move", "moveend", "added", "removed"],
-
-    /**
-     * Constant: RESOLUTION_PROPERTIES
-     * {Array} The properties that are used for calculating resolutions
-     *     information.
-     */
-    RESOLUTION_PROPERTIES: [
-        'scales', 'resolutions',
-        'maxScale', 'minScale',
-        'maxResolution', 'minResolution',
-        'numZoomLevels', 'maxZoomLevel'
-    ],
-
-    /**
-     * APIProperty: events
-     * {<OpenLayers.Events>}
-     */
     events: null,
 
     /**
@@ -164,13 +158,6 @@ OpenLayers.Layer = OpenLayers.Class({
      */
     imageSize: null,
     
-    /**
-     * Property: imageOffset
-     * {<OpenLayers.Pixel>} For layers with a gutter, the image offset 
-     *     represents displacement due to the gutter.
-     */
-    imageOffset: null,
-
   // OPTIONS
 
     /** 
@@ -204,18 +191,32 @@ OpenLayers.Layer = OpenLayers.Class({
 
     /**
      * APIProperty: projection
-     * {<OpenLayers.Projection>} or {<String>} Set in the layer options to
-     *     override the default projection string this layer - also set maxExtent,
-     *     maxResolution, and units if appropriate. Can be either a string or
-     *     an <OpenLayers.Projection> object when created -- will be converted
-     *     to an object when setMap is called if a string is passed.  
+     * {<OpenLayers.Projection>} or {<String>} Specifies the projection of the layer.
+     *     Can be set in the layer options. If not specified in the layer options,
+     *     it is set to the default projection specified in the map,
+     *     when the layer is added to the map.
+     *     Projection along with default maxExtent and resolutions
+     *     are set automatically with commercial baselayers in EPSG:3857,
+     *     such as Google, Bing and OpenStreetMap, and do not need to be specified.
+     *     Otherwise, if specifying projection, also set maxExtent,
+     *     maxResolution or resolutions as appropriate.
+     *     When using vector layers with strategies, layer projection should be set
+     *     to the projection of the source data if that is different from the map default.
+     * 
+     *     Can be either a string or an <OpenLayers.Projection> object;
+     *     if a string is passed, will be converted to an object when
+     *     the layer is added to the map.
+     * 
      */
     projection: null,    
     
     /**
      * APIProperty: units
-     * {String} The layer map units.  Defaults to 'degrees'.  Possible values
+     * {String} The layer map units.  Defaults to null.  Possible values
      *     are 'degrees' (or 'dd'), 'm', 'ft', 'km', 'mi', 'inches'.
+     *     Normally taken from the projection.
+     *     Only required if both map and layers do not define a projection,
+     *     or if they define a projection which does not define units.
      */
     units: null,
 
@@ -241,7 +242,11 @@ OpenLayers.Layer = OpenLayers.Class({
     
     /**
      * APIProperty: maxExtent
-     * {<OpenLayers.Bounds>}  The center of these bounds will not stray outside
+     * {<OpenLayers.Bounds>|Array} If provided as an array, the array
+     *     should consist of four values (left, bottom, right, top).
+     *     The maximum extent for the layer.  Defaults to null.
+     * 
+     *     The center of these bounds will not stray outside
      *     of the viewport extent during panning.  In addition, if
      *     <displayOutsideMaxExtent> is set to false, data will not be
      *     requested that falls completely outside of these bounds.
@@ -250,7 +255,9 @@ OpenLayers.Layer = OpenLayers.Class({
     
     /**
      * APIProperty: minExtent
-     * {<OpenLayers.Bounds>}
+     * {<OpenLayers.Bounds>|Array} If provided as an array, the array
+     *     should consist of four values (left, bottom, right, top).
+     *     The minimum extent for the layer.  Defaults to null.
      */
     minExtent: null,
     
@@ -258,8 +265,8 @@ OpenLayers.Layer = OpenLayers.Class({
      * APIProperty: maxResolution
      * {Float} Default max is 360 deg / 256 px, which corresponds to
      *     zoom level 0 on gmaps.  Specify a different value in the layer 
-     *     options if you are not using a geographic projection and 
-     *     displaying the whole world.
+     *     options if you are not using the default <OpenLayers.Map.tileSize>
+     *     and displaying the whole world.
      */
     maxResolution: null,
 
@@ -296,37 +303,19 @@ OpenLayers.Layer = OpenLayers.Class({
 
     /**
      * APIProperty: wrapDateLine
-     * {Boolean} #487 for more info.   
+     * {Boolean} Wraps the world at the international dateline, so the map can
+     * be panned infinitely in longitudinal direction. Only use this on the
+     * base layer, and only if the layer's maxExtent equals the world bounds.
+     * #487 for more info.   
      */
     wrapDateLine: false,
     
     /**
-     * APIProperty: transitionEffect
-     * {String} The transition effect to use when the map is panned or
-     *     zoomed.  
-     *
-     * There are currently two supported values:
-     *  - *null* No transition effect (the default).
-     *  - *resize*  Existing tiles are resized on zoom to provide a visual
-     *    effect of the zoom having taken place immediately.  As the
-     *    new tiles become available, they are drawn over top of the
-     *    resized tiles.
-     */
-    transitionEffect: null,
-    
-    /**
-     * Property: SUPPORTED_TRANSITIONS
-     * {Array} An immutable (that means don't change it!) list of supported 
-     *     transitionEffect values.
-     */
-    SUPPORTED_TRANSITIONS: ['resize'],
-
-    /**
      * Property: metadata
      * {Object} This object can be used to store additional information on a
      *     layer object.
      */
-    metadata: {},
+    metadata: null,
     
     /**
      * Constructor: OpenLayers.Layer
@@ -337,6 +326,8 @@ OpenLayers.Layer = OpenLayers.Class({
      */
     initialize: function(name, options) {
 
+        this.metadata = {};
+        
         this.addOptions(options);
 
         this.name = name;
@@ -350,17 +341,12 @@ OpenLayers.Layer = OpenLayers.Class({
             this.div.style.height = "100%";
             this.div.dir = "ltr";
 
-            this.events = new OpenLayers.Events(this, this.div, 
-                                                this.EVENT_TYPES);
+            this.events = new OpenLayers.Events(this, this.div);
             if(this.eventListeners instanceof Object) {
                 this.events.on(this.eventListeners);
             }
 
         }
-
-        if (this.wrapDateLine) {
-            this.displayOutsideMaxExtent = true;
-        }
     },
     
     /**
@@ -472,18 +458,33 @@ OpenLayers.Layer = OpenLayers.Class({
         if (this.options == null) {
             this.options = {};
         }
+        
+        if (newOptions) {
+            // make sure this.projection references a projection object
+            if(typeof newOptions.projection == "string") {
+                newOptions.projection = new OpenLayers.Projection(newOptions.projection);
+            }
+            if (newOptions.projection) {
+                // get maxResolution, units and maxExtent from projection defaults if
+                // they are not defined already
+                OpenLayers.Util.applyDefaults(newOptions,
+                    OpenLayers.Projection.defaults[newOptions.projection.getCode()]);
+            }
+            // allow array for extents
+            if (newOptions.maxExtent && !(newOptions.maxExtent instanceof OpenLayers.Bounds)) {
+                newOptions.maxExtent = new OpenLayers.Bounds(newOptions.maxExtent);
+            }
+            if (newOptions.minExtent && !(newOptions.minExtent instanceof OpenLayers.Bounds)) {
+                newOptions.minExtent = new OpenLayers.Bounds(newOptions.minExtent);
+            }
+        }
 
         // update our copy for clone
         OpenLayers.Util.extend(this.options, newOptions);
 
         // add new options to this
         OpenLayers.Util.extend(this, newOptions);
-
-        // make sure this.projection references a projection object
-        if(typeof this.projection == "string") {
-            this.projection = new OpenLayers.Projection(this.projection);
-        }
-
+        
         // get the units from the projection, if we have a projection
         // and it it has units
         if(this.projection && this.projection.getUnits()) {
@@ -676,7 +677,7 @@ OpenLayers.Layer = OpenLayers.Class({
     /**
      * APIMethod: setTileSize
      * Set the tile size based on the map size.  This also sets layer.imageSize
-     *     and layer.imageOffset for use by Tile.Image.
+     *     or use by Tile.Image.
      * 
      * Parameters:
      * size - {<OpenLayers.Size>}
@@ -693,8 +694,6 @@ OpenLayers.Layer = OpenLayers.Class({
           //                              this.name + ": layers with " +
           //                              "gutters need non-null tile sizes");
           //}
-            this.imageOffset = new OpenLayers.Pixel(-this.gutter, 
-                                                    -this.gutter); 
             this.imageSize = new OpenLayers.Size(tileSize.w + (2*this.gutter), 
                                                  tileSize.h + (2*this.gutter)); 
         }
@@ -973,7 +972,7 @@ OpenLayers.Layer = OpenLayers.Class({
      * Parameters:
      * props - {Object} Properties
      *
-     * Return:
+     * Returns:
      * {Array({Number})} Array of resolutions.
      */
     calculateResolutions: function(props) {
@@ -1006,6 +1005,18 @@ OpenLayers.Layer = OpenLayers.Class({
             minResolution = Math.max(wRes, hRes);
         }
 
+        if(typeof maxResolution !== "number" &&
+           typeof minResolution !== "number" &&
+           this.maxExtent != null) {
+            // maxResolution for default grid sets assumes that at zoom
+            // level zero, the whole world fits on one tile.
+            var tileSize = this.map.getTileSize();
+            maxResolution = Math.max(
+                this.maxExtent.getWidth() / tileSize.w,
+                this.maxExtent.getHeight() / tileSize.h
+            );
+        }
+
         // determine numZoomLevels
         var maxZoomLevel = props.maxZoomLevel;
         var numZoomLevels = props.numZoomLevels;
@@ -1122,7 +1133,7 @@ OpenLayers.Layer = OpenLayers.Class({
     /**
      * APIMethod: getResolutionForZoom
      * 
-     * Parameter:
+     * Parameters:
      * zoom - {Float}
      * 
      * Returns:
@@ -1211,7 +1222,9 @@ OpenLayers.Layer = OpenLayers.Class({
      * APIMethod: getLonLatFromViewPortPx
      * 
      * Parameters:
-     * viewPortPx - {<OpenLayers.Pixel>}
+     * viewPortPx - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or
+     *                                          an object with a 'x'
+     *                                          and 'y' properties.
      *
      * Returns:
      * {<OpenLayers.LonLat>} An OpenLayers.LonLat which is the passed-in 
@@ -1240,17 +1253,19 @@ OpenLayers.Layer = OpenLayers.Class({
      *     fractional pixel values.
      * 
      * Parameters:
-     * lonlat - {<OpenLayers.LonLat>}
+     * lonlat - {<OpenLayers.LonLat>|Object} An OpenLayers.LonLat or
+     *                                       an object with a 'lon'
+     *                                       and 'lat' properties.
      *
      * Returns: 
      * {<OpenLayers.Pixel>} An <OpenLayers.Pixel> which is the passed-in 
-     *     <OpenLayers.LonLat>,translated into view port pixels.
+     *     lonlat translated into view port pixels.
      */
-    getViewPortPxFromLonLat: function (lonlat) {
+    getViewPortPxFromLonLat: function (lonlat, resolution) {
         var px = null; 
         if (lonlat != null) {
-            var resolution = this.map.getResolution();
-            var extent = this.map.getExtent();
+            resolution = resolution || this.map.getResolution();
+            var extent = this.map.calculateBounds(null, resolution);
             px = new OpenLayers.Pixel(
                 (1/resolution * (lonlat.lon - extent.left)),
                 (1/resolution * (extent.top - lonlat.lat))
@@ -1263,14 +1278,20 @@ OpenLayers.Layer = OpenLayers.Class({
      * APIMethod: setOpacity
      * Sets the opacity for the entire layer (all images)
      * 
-     * Parameter:
+     * Parameters:
      * opacity - {Float}
      */
     setOpacity: function(opacity) {
         if (opacity != this.opacity) {
             this.opacity = opacity;
-            for(var i=0, len=this.div.childNodes.length; i<len; ++i) {
-                var element = this.div.childNodes[i].firstChild;
+            var childNodes = this.div.childNodes;
+            for(var i = 0, len = childNodes.length; i < len; ++i) {
+                var element = childNodes[i].firstChild || childNodes[i];
+                var lastChild = childNodes[i].lastChild;
+                //TODO de-uglify this
+                if (lastChild && lastChild.nodeName.toLowerCase() === "iframe") {
+                    element = lastChild.parentNode;
+                }
                 OpenLayers.Util.modifyDOMElement(element, null, null, null, 
                                                  null, null, null, opacity);
             }
diff --git a/lib/OpenLayers/Layer/ArcGIS93Rest.js b/lib/OpenLayers/Layer/ArcGIS93Rest.js
index c0d065d..57987c0 100644
--- a/lib/OpenLayers/Layer/ArcGIS93Rest.js
+++ b/lib/OpenLayers/Layer/ArcGIS93Rest.js
@@ -1,12 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  */
 
 /**
@@ -57,10 +56,11 @@ OpenLayers.Layer.ArcGIS93Rest = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * url - {String} Base url for the ArcGIS server REST service
      * options - {Object} An object with key/value pairs representing the
      *                    options and option values.
+     *
      * Valid Options:
-     *        format: {String} MIME type of desired image type.
-     *        layers: {String} Comma-separated list of layers to display.
-     *        srs: {String} Projection ID.
+     *        format - {String} MIME type of desired image type.
+     *        layers - {String} Comma-separated list of layers to display.
+     *        srs - {String} Projection ID.
      */
     initialize: function(name, url, params, options) {
         var newArguments = [];
@@ -91,16 +91,6 @@ OpenLayers.Layer.ArcGIS93Rest = OpenLayers.Class(OpenLayers.Layer.Grid, {
         }
     },    
 
-    
-    /**
-     * Method: destroy
-     * Destroy this layer
-     */
-    destroy: function() {
-        // for now, nothing special to do here. 
-        OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);  
-    },   
-    
     /**
          * Method: clone
          * Create a clone of this layer
diff --git a/lib/OpenLayers/Layer/ArcGISCache.js b/lib/OpenLayers/Layer/ArcGISCache.js
index 30563da..2717339 100644
--- a/lib/OpenLayers/Layer/ArcGISCache.js
+++ b/lib/OpenLayers/Layer/ArcGISCache.js
@@ -1,5 +1,5 @@
 /** 
- * @requires OpenLayers/Layer/XYZ.js 
+ * @requires OpenLayers/Layer/XYZ.js
  */ 
 
 /** 
@@ -363,7 +363,7 @@ OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, {
      * Get this layer's maximum extent.
      *
      * Returns:
-     * {OpenLayers.Bounds}
+     * {<OpenLayers.Bounds>}
      */
     getMaxExtent: function() {
         var resolution = this.map.getResolution();
@@ -452,7 +452,9 @@ OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, {
         // Write the values into our formatted url
         url = OpenLayers.String.format(url, {'x': x, 'y': y, 'z': z});
 
-        return url;
+        return OpenLayers.Util.urlAppend(
+            url, OpenLayers.Util.getParameterString(this.params)
+        );
     },
 
     /**
diff --git a/lib/OpenLayers/Layer/ArcIMS.js b/lib/OpenLayers/Layer/ArcIMS.js
index 4eabeb5..90d9221 100644
--- a/lib/OpenLayers/Layer/ArcIMS.js
+++ b/lib/OpenLayers/Layer/ArcIMS.js
@@ -1,11 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  * @requires OpenLayers/Format/ArcXML.js
  * @requires OpenLayers/Request.js
  */
@@ -31,12 +30,6 @@ OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
     },
     
     /**
-     * APIProperty: tileSize
-     * {<OpenLayers.Size>} Size for tiles.  Default is 512x512.
-     */
-    tileSize: null,
-    
-    /**
      * APIProperty: featureCoordSys
      * {String} Code for feature coordinate system.  Default is "4326".
      */
@@ -149,17 +142,6 @@ OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
         }
     },    
 
-    
-    /**
-     * Method: destroy
-     * Destroy this layer
-     */
-    destroy: function() {
-        // for now, nothing special to do here. 
-        OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);  
-    },   
-    
-    
     /**
      * Method: getURL
      * Return an image url this layer.
@@ -217,12 +199,10 @@ OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * Parameters:
      * bounds - {<OpenLayers.Bounds>} A bounds representing the bbox for the
      *     request.
-     * scope - {Object} The scope of the callback method.
-     * prop - {String} The name of the property in the scoped object to 
-     *     recieve the image url.
      * callback - {Function} Function to call when image url is retrieved.
+     * scope - {Object} The scope of the callback method.
      */
-    getURLasync: function(bounds, scope, prop, callback) {
+    getURLasync: function(bounds, callback, scope) {
         bounds = this.adjustBounds(bounds);
         
         // create an arcxml request to generate the image
@@ -251,11 +231,7 @@ OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
                 var axlResp = new OpenLayers.Format.ArcXML();
                 var arcxml = axlResp.read(doc);
                 
-                scope[prop] = this.getUrlOrImage(arcxml.image.output);
-
-                // call the callback function to recieve the updated property on the
-                // scoped object
-                callback.apply(scope);
+                callback.call(scope, this.getUrlOrImage(arcxml.image.output));
             },
             scope: this
         });
@@ -296,7 +272,7 @@ OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      *
      * Parameters:
      * id - {String} The ArcIMS layer ID.
-     * queryDef - {Object} The query definition to apply to this layer.
+     * querydef - {Object} The query definition to apply to this layer.
      */
     setLayerQuery: function(id, querydef) {
         // find the matching layer, if it exists
diff --git a/lib/OpenLayers/Layer/Bing.js b/lib/OpenLayers/Layer/Bing.js
index fa330bb..51c2b9d 100644
--- a/lib/OpenLayers/Layer/Bing.js
+++ b/lib/OpenLayers/Layer/Bing.js
@@ -1,11 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/XYZ.js
- * @requires OpenLayers/Layer/SphericalMercator.js
  */
 
 /** 
@@ -22,6 +21,13 @@
 OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
 
     /**
+     * Property: key
+     * {String} API key for Bing maps, get your own key 
+     *     at http://bingmapsportal.com/ .
+     */
+    key: null,
+
+    /**
      * Property: serverResolutions
      * {Array} the resolutions provided by the Bing servers.
      */
@@ -62,12 +68,29 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
     type: "Road",
     
     /**
+     * APIProperty: culture
+     * {String} The culture identifier.  See http://msdn.microsoft.com/en-us/library/ff701709.aspx
+     * for the definition and the possible values.  Default is "en-US".
+     */
+    culture: "en-US",
+    
+    /**
      * APIProperty: metadataParams
      * {Object} Optional url parameters for the Get Imagery Metadata request
      * as described here: http://msdn.microsoft.com/en-us/library/ff701716.aspx
      */
     metadataParams: null,
 
+    /** APIProperty: tileOptions
+     *  {Object} optional configuration options for <OpenLayers.Tile> instances
+     *  created by this Layer. Default is
+     *
+     *  (code)
+     *  {crossOriginKeyword: 'anonymous'}
+     *  (end)
+     */
+    tileOptions: null,
+
     /**
      * Constructor: OpenLayers.Layer.Bing
      * Create a new Bing layer.
@@ -82,7 +105,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
      * (end)
      *
      * Parameters:
-     * config - {Object} Configuration properties for the layer.
+     * options - {Object} Configuration properties for the layer.
      *
      * Required configuration properties:
      * key - {String} Bing Maps API key for your application. Get one at
@@ -101,6 +124,9 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
         
         var newArgs = [name, null, options];
         OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArgs);
+        this.tileOptions = OpenLayers.Util.extend({
+            crossOriginKeyword: 'anonymous'
+        }, this.options.tileOptions);
         this.loadMetadata(); 
     },
 
@@ -136,15 +162,16 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
     initLayer: function() {
         var res = this.metadata.resourceSets[0].resources[0];
         var url = res.imageUrl.replace("{quadkey}", "${quadkey}");
+        url = url.replace("{culture}", this.culture);
         this.url = [];
         for (var i=0; i<res.imageUrlSubdomains.length; ++i) {
             this.url.push(url.replace("{subdomain}", res.imageUrlSubdomains[i]));
-        };
+        }
         this.addOptions({
             maxResolution: Math.min(
-                this.serverResolutions[res.zoomMin], this.maxResolution
+                this.serverResolutions[res.zoomMin],
+                this.maxResolution || Number.POSITIVE_INFINITY
             ),
-            zoomOffset: res.zoomMin,
             numZoomLevels: Math.min(
                 res.zoomMax + 1 - res.zoomMin, this.numZoomLevels
             )
@@ -159,7 +186,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
      */
     getURL: function(bounds) {
         if (!this.url) {
-            return OpenLayers.Util.getImagesLocation() + "blank.gif";
+            return;
         }
         var xyz = this.getXYZ(bounds), x = xyz.x, y = xyz.y, z = xyz.z;
         var quadDigits = [];
@@ -188,7 +215,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
      */
     updateAttribution: function() {
         var metadata = this.metadata;
-        if (!metadata || !this.map || !this.map.center) {
+        if (!metadata.resourceSets || !this.map || !this.map.center) {
             return;
         }
         var res = metadata.resourceSets[0].resources[0];
@@ -196,13 +223,16 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
             this.map.getProjectionObject(),
             new OpenLayers.Projection("EPSG:4326")
         );
-        var providers = res.imageryProviders, zoom = this.map.getZoom() + 1,
+        var providers = res.imageryProviders,
+            zoom = OpenLayers.Util.indexOf(this.serverResolutions,
+                                           this.getServerResolution()),
             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);
+                // axis order provided is Y,X
+                bbox = OpenLayers.Bounds.fromArray(coverage.bbox, true);
                 if (extent.intersectsBounds(bbox) &&
                         zoom <= coverage.zoomMax && zoom >= coverage.zoomMin) {
                     copyrights += provider.attribution + " ";
diff --git a/lib/OpenLayers/Layer/Boxes.js b/lib/OpenLayers/Layer/Boxes.js
index 21a9959..5ad229e 100644
--- a/lib/OpenLayers/Layer/Boxes.js
+++ b/lib/OpenLayers/Layer/Boxes.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -25,9 +25,6 @@ OpenLayers.Layer.Boxes = OpenLayers.Class(OpenLayers.Layer.Markers, {
      * name - {String} 
      * options - {Object} Hashtable of extra options to tag onto the layer
      */
-    initialize: function (name, options) {
-        OpenLayers.Layer.Markers.prototype.initialize.apply(this, arguments);
-    },
     
     /**
      * Method: drawMarker 
@@ -38,18 +35,21 @@ OpenLayers.Layer.Boxes = OpenLayers.Class(OpenLayers.Layer.Markers, {
      * marker - {<OpenLayers.Marker.Box>} 
      */
     drawMarker: function(marker) {
-        var bounds   = marker.bounds;
-        var topleft  = this.map.getLayerPxFromLonLat(
-                            new OpenLayers.LonLat(bounds.left,  bounds.top));
-        var botright = this.map.getLayerPxFromLonLat(
-                             new OpenLayers.LonLat(bounds.right, bounds.bottom));
+        var topleft = this.map.getLayerPxFromLonLat({
+            lon: marker.bounds.left,
+            lat: marker.bounds.top
+        });
+        var botright = this.map.getLayerPxFromLonLat({
+            lon: marker.bounds.right,
+            lat: marker.bounds.bottom
+        });
         if (botright == null || topleft == null) {
             marker.display(false);
         } else {
-            var sz = new OpenLayers.Size(
-                Math.max(1, botright.x - topleft.x),
-                Math.max(1, botright.y - topleft.y));
-            var markerDiv = marker.draw(topleft, sz);
+            var markerDiv = marker.draw(topleft, {
+                w: Math.max(1, botright.x - topleft.x),
+                h: Math.max(1, botright.y - topleft.y)
+            });
             if (!marker.drawn) {
                 this.div.appendChild(markerDiv);
                 marker.drawn = true;
diff --git a/lib/OpenLayers/Layer/EventPane.js b/lib/OpenLayers/Layer/EventPane.js
index 8a82212..6df7312 100644
--- a/lib/OpenLayers/Layer/EventPane.js
+++ b/lib/OpenLayers/Layer/EventPane.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -11,7 +11,13 @@
 
 /**
  * Class: OpenLayers.Layer.EventPane
- * Base class for 3rd party layers.  Create a new event pane layer with the
+ * Base class for 3rd party layers, providing a DOM element which isolates
+ * the 3rd-party layer from mouse events.
+ * Only used by Google layers.
+ *
+ * Automatically instantiated by the Google constructor, and not usually instantiated directly.
+ *
+ * Create a new event pane layer with the
  * <OpenLayers.Layer.EventPane> constructor.
  * 
  * Inherits from:
@@ -104,11 +110,11 @@ OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, {
         this.pane.style.height="100%";
         if (OpenLayers.BROWSER_NAME == "msie") {
             this.pane.style.background = 
-                "url(" + OpenLayers.Util.getImagesLocation() + "blank.gif)";
+                "url(" + OpenLayers.Util.getImageLocation("blank.gif") + ")";
         }
 
         if (this.isFixed) {
-            this.map.eventsDiv.appendChild(this.pane);
+            this.map.viewPortDiv.appendChild(this.pane);
         } else {
             this.map.layerContainerDiv.appendChild(this.pane);
         }
@@ -255,8 +261,7 @@ OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, {
                 var moOldZoom = this.getMapObjectZoom();
                 var oldZoom= this.getOLZoomFromMapObjectZoom(moOldZoom);
 
-                if ( !(newCenter.equals(oldCenter)) || 
-                     !(newZoom == oldZoom) ) {
+                if (!(newCenter.equals(oldCenter)) || newZoom != oldZoom) {
 
                     if (!zoomChanged && oldCenter && this.dragPanMapObject && 
                         this.smoothDragPan) {
diff --git a/lib/OpenLayers/Layer/FixedZoomLevels.js b/lib/OpenLayers/Layer/FixedZoomLevels.js
index 571398a..80ab0f8 100644
--- a/lib/OpenLayers/Layer/FixedZoomLevels.js
+++ b/lib/OpenLayers/Layer/FixedZoomLevels.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -77,7 +77,7 @@ OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({
      */
     initResolutions: function() {
 
-        var props = new Array('minZoomLevel', 'maxZoomLevel', 'numZoomLevels');
+        var props = ['minZoomLevel', 'maxZoomLevel', 'numZoomLevels'];
           
         for(var i=0, len=props.length; i<len; i++) {
             var property = props[i];
@@ -213,25 +213,19 @@ OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({
      *                       bounds of the current viewPort.
      */
     getExtent: function () {
-        var extent = null;
-        
-        
         var size = this.map.getSize();
+        var tl = this.getLonLatFromViewPortPx({
+            x: 0, y: 0
+        });
+        var br = this.getLonLatFromViewPortPx({
+            x: size.w, y: size.h
+        });
         
-        var tlPx = new OpenLayers.Pixel(0,0);
-        var tlLL = this.getLonLatFromViewPortPx(tlPx);
-
-        var brPx = new OpenLayers.Pixel(size.w, size.h);
-        var brLL = this.getLonLatFromViewPortPx(brPx);
-        
-        if ((tlLL != null) && (brLL != null)) {
-            extent = new OpenLayers.Bounds(tlLL.lon, 
-                                       brLL.lat, 
-                                       brLL.lon, 
-                                       tlLL.lat);
+        if ((tl != null) && (br != null)) {
+            return new OpenLayers.Bounds(tl.lon, br.lat, br.lon, tl.lat);
+        } else {
+            return null;
         }
-
-        return extent;
     },
 
     /**
@@ -290,7 +284,7 @@ OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({
             if (this.map.baseLayer !== this) {
                 zoom = this.map.baseLayer.getZoomForResolution(
                     this.getResolutionForZoom(zoom)
-                )
+                );
             }
         }
         return zoom;
diff --git a/lib/OpenLayers/Layer/GML.js b/lib/OpenLayers/Layer/GML.js
deleted file mode 100644
index ab81016..0000000
--- a/lib/OpenLayers/Layer/GML.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright (c) 2006-2011 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
- */
-
-/**
- * Class: OpenLayers.Layer.GML
- * Create a vector layer by parsing a GML file. The GML file is
- *     passed in as a parameter.
- * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.Vector
- *     with Protocol.HTTP and Strategy.Fixed. Provide the protocol with a 
- *     format parameter to get the parser you want for your data.
- *
- * Inherits from:
- *  - <OpenLayers.Layer.Vector>
- */
-OpenLayers.Layer.GML = OpenLayers.Class(OpenLayers.Layer.Vector, {
-    
-    /**
-      * Property: loaded
-      * {Boolean} Flag for whether the GML data has been loaded yet.
-      */
-    loaded: false,
-
-    /**
-      * APIProperty: format
-      * {<OpenLayers.Format>} The format you want the data to be parsed with.
-      */
-    format: null,
-
-    /**
-     * APIProperty: formatOptions
-     * {Object} Hash of options which should be passed to the format when it is
-     * created. Must be passed in the constructor.
-     */
-    formatOptions: null, 
-    
-    /**
-     * Constructor: OpenLayers.Layer.GML
-     * Load and parse a single file on the web, according to the format
-     * provided via the 'format' option, defaulting to GML. 
-     *
-     * Parameters:
-     * name - {String} 
-     * url - {String} URL of a GML file.
-     * options - {Object} Hashtable of extra options to tag onto the layer.
-     */
-     initialize: function(name, url, options) {
-        var newArguments = [];
-        newArguments.push(name, options);
-        OpenLayers.Layer.Vector.prototype.initialize.apply(this, newArguments);
-        this.url = url;
-    },
-
-    /**
-     * APIMethod: setVisibility
-     * Set the visibility flag for the layer and hide/show&redraw accordingly. 
-     * Fire event unless otherwise specified
-     * GML will be loaded if the layer is being made visible for the first
-     * time.
-     *  
-     * Parameters:
-     * visible - {Boolean} Whether or not to display the layer 
-     *                          (if in range)
-     * noEvent - {Boolean} 
-     */
-    setVisibility: function(visibility, noEvent) {
-        OpenLayers.Layer.Vector.prototype.setVisibility.apply(this, arguments);
-        if(this.visibility && !this.loaded){
-            // Load the GML
-            this.loadGML();
-        }
-    },
-
-    /**
-     * Method: moveTo
-     * If layer is visible and GML has not been loaded, load GML, then load GML
-     * and call OpenLayers.Layer.Vector.moveTo() to redraw at the new location.
-     * 
-     * Parameters:
-     * bounds - {Object} 
-     * zoomChanged - {Object} 
-     * minor - {Object} 
-     */
-    moveTo:function(bounds, zoomChanged, minor) {
-        OpenLayers.Layer.Vector.prototype.moveTo.apply(this, arguments);
-        // Wait until initialisation is complete before loading GML
-        // otherwise we can get a race condition where the root HTML DOM is
-        // loaded after the GML is paited.
-        // See http://trac.openlayers.org/ticket/404
-        if(this.visibility && !this.loaded){
-            this.loadGML();
-        }
-    },
-
-    /**
-     * Method: loadGML
-     */
-    loadGML: function() {
-        if (!this.loaded) {
-            this.events.triggerEvent("loadstart");
-            OpenLayers.Request.GET({
-                url: this.url,
-                success: this.requestSuccess,
-                failure: this.requestFailure,
-                scope: this
-            });
-            this.loaded = true;
-        }    
-    },    
-    
-    /**
-     * Method: setUrl
-     * Change the URL and reload the GML
-     *
-     * Parameters:
-     * url - {String} URL of a GML file.
-     */
-    setUrl:function(url) {
-        this.url = url;
-        this.destroyFeatures();
-        this.loaded = false;
-        this.loadGML();
-    },
-    
-    /**
-     * Method: requestSuccess
-     * Process GML after it has been loaded.
-     * Called by initialize() and loadUrl() after the GML has been loaded.
-     *
-     * Parameters:
-     * request - {String} 
-     */
-    requestSuccess:function(request) {
-        var doc = request.responseXML;
-        
-        if (!doc || !doc.documentElement) {
-            doc = request.responseText;
-        }
-        
-        var options = {};
-        
-        OpenLayers.Util.extend(options, this.formatOptions);
-        if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
-            options.externalProjection = this.projection;
-            options.internalProjection = this.map.getProjectionObject();
-        }    
-        
-        var gml = this.format ? new this.format(options) : new OpenLayers.Format.GML(options);
-        this.addFeatures(gml.read(doc));
-        this.events.triggerEvent("loadend");
-    },
-    
-    /**
-     * Method: requestFailure
-     * Process a failed loading of GML.
-     * Called by initialize() and loadUrl() if there was a problem loading GML.
-     *
-     * Parameters:
-     * request - {String} 
-     */
-    requestFailure: function(request) {
-        OpenLayers.Console.userError(OpenLayers.i18n("errorLoadingGML", {'url':this.url}));
-        this.events.triggerEvent("loadend");
-    },
-
-    CLASS_NAME: "OpenLayers.Layer.GML"
-});
diff --git a/lib/OpenLayers/Layer/GeoRSS.js b/lib/OpenLayers/Layer/GeoRSS.js
index 86405ce..bcf5521 100644
--- a/lib/OpenLayers/Layer/GeoRSS.js
+++ b/lib/OpenLayers/Layer/GeoRSS.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -15,7 +15,6 @@
  * 
  * Inherits from:
  *  - <OpenLayers.Layer.Markers>
- *  - <OpenLayers.Layer>
  */
 OpenLayers.Layer.GeoRSS = OpenLayers.Class(OpenLayers.Layer.Markers, {
 
diff --git a/lib/OpenLayers/Layer/Google.js b/lib/OpenLayers/Layer/Google.js
index e3849d2..c744b11 100644
--- a/lib/OpenLayers/Layer/Google.js
+++ b/lib/OpenLayers/Layer/Google.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -14,6 +14,11 @@
 /**
  * Class: OpenLayers.Layer.Google
  * 
+ * Provides a wrapper for Google's Maps API
+ * Normally the Terms of Use for this API do not allow wrapping, but Google
+ * have provided written consent to OpenLayers for this - see email in 
+ * http://osgeo-org.1560.n6.nabble.com/Google-Maps-API-Terms-of-Use-changes-tp4910013p4911981.html
+ * 
  * Inherits from:
  *  - <OpenLayers.Layer.SphericalMercator>
  *  - <OpenLayers.Layer.EventPane>
@@ -177,7 +182,7 @@ OpenLayers.Layer.Google = OpenLayers.Class(
      * Hide or show the Layer
      * 
      * Parameters:
-     * display - {Boolean}
+     * visible - {Boolean}
      */
     display: function(visible) {
         if (!this._dragging) {
@@ -190,7 +195,7 @@ OpenLayers.Layer.Google = OpenLayers.Class(
      * Method: moveTo
      * 
      * Parameters:
-     * bound - {<OpenLayers.Bounds>}
+     * bounds - {<OpenLayers.Bounds>}
      * zoomChanged - {Boolean} Tells when zoom has changed, as layers have to
      *     do some init work in that case.
      * dragging - {Boolean}
@@ -205,7 +210,7 @@ OpenLayers.Layer.Google = OpenLayers.Class(
      * APIMethod: setOpacity
      * Sets the opacity for the entire layer (all images)
      * 
-     * Parameter:
+     * Parameters:
      * opacity - {Float}
      */
     setOpacity: function(opacity) {
@@ -462,6 +467,10 @@ OpenLayers.Layer.Google.cache = {};
  * Constant: OpenLayers.Layer.Google.v2
  * 
  * Mixin providing functionality specific to the Google Maps API v2.
+ * 
+ * This API has been deprecated by Google.
+ * Developers are encouraged to migrate to v3 of the API; support for this
+ * is provided by <OpenLayers.Layer.Google.v3>
  */
 OpenLayers.Layer.Google.v2 = {
     
diff --git a/lib/OpenLayers/Layer/Google/v3.js b/lib/OpenLayers/Layer/Google/v3.js
index aa56717..db98c8e 100644
--- a/lib/OpenLayers/Layer/Google/v3.js
+++ b/lib/OpenLayers/Layer/Google/v3.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -11,10 +11,42 @@
 /**
  * Constant: OpenLayers.Layer.Google.v3
  * 
- * Mixin providing functionality specific to the Google Maps API v3. Note that
- * this layer configures the google.maps.map object with the "disableDefaultUI"
- * option set to true. Using UI controls that the Google Maps API provides is
- * not supported by the OpenLayers API.
+ * Mixin providing functionality specific to the Google Maps API v3.
+ * 
+ * To use this layer, you must include the GMaps v3 API in your html.
+ * 
+ * Because OpenLayers needs to control mouse events, it isolates the GMaps mapObject
+ * (the DOM elements provided by Google) using the EventPane.
+ * However, because the Terms of Use require some of those elements,
+ * such as the links to Google's terms, to be clickable, these elements have 
+ * to be moved up to OpenLayers' container div. There is however no easy way
+ * to identify these, and the logic (see the repositionMapElements function
+ * in the source) may need to be changed if Google changes them.
+ * These elements are not part of the published API and can be changed at any time,
+ * so a given OpenLayers release can only guarantee support for the 'frozen'
+ * Google release at the time of the OpenLayers release. See
+ * https://developers.google.com/maps/documentation/javascript/basics#Versioning
+ * for Google's current release cycle.
+ * 
+ * For this reason, it's recommended that production code specifically loads 
+ * the current frozen version, for example:
+ *
+ * (code)
+ * <script src="http://maps.google.com/maps/api/js?v=3.7&sensor=false"></script>
+ * (end)
+ * 
+ * but that development code should use the latest 'nightly' version, so that any
+ * problems can be dealt with as soon as they arise, and before they affect the production, 'frozen', code.
+ * 
+ * Note, however, that frozen versions are retired as part of Google's release
+ * cycle, and once this happens, you will get the next version, in the example above, 3.8 once 3.7 is retired.
+ * 
+ * This version supports 3.7.
+ * 
+ * 
+ * Note that this layer configures the google.maps.map object with the
+ * "disableDefaultUI" option set to true. Using UI controls that the Google
+ * Maps API provides is not supported by the OpenLayers API.
  */
 OpenLayers.Layer.Google.v3 = {
     
@@ -25,29 +57,13 @@ OpenLayers.Layer.Google.v3 = {
      * 
      * (code)
      * {
-     *     maxExtent: new OpenLayers.Bounds(
-     *         -128 * 156543.03390625,
-     *         -128 * 156543.03390625,
-     *         128 * 156543.03390625,
-     *         128 * 156543.03390625
-     *     ),
      *     sphericalMercator: true,
-     *     maxResolution: 156543.03390625,
-     *     units: "m",
      *     projection: "EPSG:900913"
      * }
      * (end)
      */
     DEFAULTS: {
-        maxExtent: new OpenLayers.Bounds(
-            -128 * 156543.03390625,
-            -128 * 156543.03390625,
-            128 * 156543.03390625,
-            128 * 156543.03390625
-        ),
         sphericalMercator: true,
-        maxResolution: 156543.03390625,
-        units: "m",
         projection: "EPSG:900913"
     },
 
@@ -148,27 +164,31 @@ OpenLayers.Layer.Google.v3 = {
         var cache = OpenLayers.Layer.Google.cache[this.map.id];
         var container = this.map.viewPortDiv;
         
-        // move the Map Data popup to the container, if any
-        while (div.lastChild.style.display == "none") {
-            container.appendChild(div.lastChild);
-        }
-
         // move the ToS and branding stuff up to the container div
-        var termsOfUse = div.lastChild;
-        container.appendChild(termsOfUse);
-        termsOfUse.style.zIndex = "1100";
-        termsOfUse.style.bottom = "";
-        termsOfUse.className = "olLayerGoogleCopyright olLayerGoogleV3";
-        termsOfUse.style.display = "";
-        cache.termsOfUse = termsOfUse;
-
-        var poweredBy = div.lastChild;
-        container.appendChild(poweredBy);
-        poweredBy.style.zIndex = "1100";
-        poweredBy.style.bottom = "";
-        poweredBy.className = "olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint";
-        poweredBy.style.display = "";
-        cache.poweredBy = poweredBy;
+        // depends on value of zIndex, which is not robust
+        for (var i=div.children.length-1; i>=0; --i) {
+            if (div.children[i].style.zIndex == 1000001) {
+                var termsOfUse = div.children[i];
+                container.appendChild(termsOfUse);
+                termsOfUse.style.zIndex = "1100";
+                termsOfUse.style.bottom = "";
+                termsOfUse.className = "olLayerGoogleCopyright olLayerGoogleV3";
+                termsOfUse.style.display = "";
+                cache.termsOfUse = termsOfUse;
+            }
+            if (div.children[i].style.zIndex == 1000000) {
+                var poweredBy = div.children[i];
+                container.appendChild(poweredBy);
+                poweredBy.style.zIndex = "1100";
+                poweredBy.style.bottom = "";
+                poweredBy.className = "olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint";
+                poweredBy.style.display = "";
+                cache.poweredBy = poweredBy;
+            }
+            if (div.children[i].style.zIndex == 10000002) {
+                container.appendChild(div.children[i]);
+            }
+        }
 
         this.setGMapVisibility(this.visibility);
 
@@ -337,11 +357,8 @@ OpenLayers.Layer.Google.v3 = {
         var lat = this.getLatitudeFromMapObjectLonLat(moLonLat);
         var res = this.map.getResolution();
         var extent = this.map.getExtent();
-        var px = new OpenLayers.Pixel(
-            (1/res * (lon - extent.left)),
-            (1/res * (extent.top - lat))
-        );    
-        return this.getMapObjectPixelFromXY(px.x, px.y);
+        return this.getMapObjectPixelFromXY((1/res * (lon - extent.left)),
+                                            (1/res * (extent.top - lat)));
     },
 
   
diff --git a/lib/OpenLayers/Layer/Grid.js b/lib/OpenLayers/Layer/Grid.js
index 243de05..b1d45ee 100644
--- a/lib/OpenLayers/Layer/Grid.js
+++ b/lib/OpenLayers/Layer/Grid.js
@@ -1,12 +1,12 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Layer/HTTPRequest.js
- * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Tile/Image.js
  */
 
 /**
@@ -50,6 +50,13 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      *  created by this Layer, if supported by the tile class.
      */
     tileOptions: null,
+
+    /**
+     * APIProperty: tileClass
+     * {<OpenLayers.Tile>} The tile class to use for this layer.
+     *     Defaults is OpenLayers.Tile.Image.
+     */
+    tileClass: OpenLayers.Tile.Image,
     
     /**
      * Property: grid
@@ -85,6 +92,22 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
     buffer: 0,
 
     /**
+     * APIProperty: transitionEffect
+     * {String} The transition effect to use when the map is zoomed.
+     * Two posible values:
+     *
+     * null - No transition effect (the default).
+     * "resize" - Existing tiles are resized on zoom to provide a visual
+     * effect of the zoom having taken place immediately.  As the
+     * new tiles become available, they are drawn over top of the
+     * resized tiles.
+     *
+     * Using "resize" on non-opaque layers can cause undesired visual
+     * effects. This is therefore discouraged.
+     */
+    transitionEffect: null,
+
+    /**
      * APIProperty: numLoadingTiles
      * {Integer} How many tiles are still loading?
      */
@@ -92,16 +115,159 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
 
     /**
      * APIProperty: tileLoadingDelay
-     * {Integer} - Number of milliseconds before we shift and load
-     *     tiles. Default is 100.
+     * {Integer} Number of milliseconds before we shift and load
+     *     tiles when panning. Ignored if <OpenLayers.Animation.isNative> is
+     *     true. Default is 85.
+     */
+    tileLoadingDelay: 85,
+    
+    /**
+     * Property: serverResolutions
+     * {Array(Number}} This property is documented in subclasses as
+     *     an API property.
+     */
+    serverResolutions: null,
+
+    /**
+     * Property: moveTimerId
+     * {Number} The id of the <deferMoveGriddedTiles> timer.
+     */
+    moveTimerId: null,
+    
+    /**
+     * Property: deferMoveGriddedTiles
+     * {Function} A function that defers execution of <moveGriddedTiles> by
+     *     <tileLoadingDelay>. If <OpenLayers.Animation.isNative> is true, this
+     *     is null and unused.
      */
-    tileLoadingDelay: 100,
+    deferMoveGriddedTiles: null,
 
     /**
-     * Property: timerId
-     * {Number} - The id of the tileLoadingDelay timer.
+     * Property: tileQueueId
+     * {Number} The id of the <drawTileFromQueue> animation.
+     */
+    tileQueueId: null,
+
+    /**
+     * Property: tileQueue
+     * {Array(<OpenLayers.Tile>)} Tiles queued for drawing.
+     */
+    tileQueue: null,
+    
+    /**
+     * Property: loading
+     * {Boolean} Indicates if tiles are being loaded.
+     */
+    loading: false,
+    
+    /**
+     * Property: backBuffer
+     * {DOMElement} The back buffer.
+     */
+    backBuffer: null,
+
+    /**
+     * Property: gridResolution
+     * {Number} The resolution of the current grid. Used for backbuffering.
+     *     This property is updated each the grid is initialized.
+     */
+    gridResolution: null,
+
+    /**
+     * Property: backBufferResolution
+     * {Number} The resolution of the current back buffer. This property is
+     *     updated each time a back buffer is created.
+     */
+    backBufferResolution: null,
+
+    /**
+     * Property: backBufferLonLat
+     * {Object} The top-left corner of the current back buffer. Includes lon
+     *     and lat properties. This object is updated each time a back buffer
+     *     is created.
+     */
+    backBufferLonLat: null,
+
+    /**
+     * Property: backBufferTimerId
+     * {Number} The id of the back buffer timer. This timer is used to
+     *     delay the removal of the back buffer, thereby preventing
+     *     flash effects caused by tile animation.
+     */
+    backBufferTimerId: null,
+
+    /**
+     * APIProperty: removeBackBufferDelay
+     * {Number} Delay for removing the backbuffer when all tiles have finished
+     *     loading. Can be set to 0 when no css opacity transitions for the
+     *     olTileImage class are used. Default is 0 for <singleTile> layers,
+     *     2500 for tiled layers. See <className> for more information on
+     *     tile animation.
+     */
+    removeBackBufferDelay: null,
+
+    /**
+     * APIProperty: className
+     * {String} Name of the class added to the layer div. If not set in the
+     *     options passed to the constructor then className defaults to
+     *     "olLayerGridSingleTile" for single tile layers (see <singleTile>),
+     *     and "olLayerGrid" for non single tile layers.
+     *
+     * Note:
+     *
+     * The displaying of tiles is not animated by default for single tile
+     *     layers - OpenLayers' default theme (style.css) includes this:
+     * (code)
+     * .olLayerGrid .olTileImage {
+     *     -webkit-transition: opacity 0.2s linear;
+     *     -moz-transition: opacity 0.2s linear;
+     *     -o-transition: opacity 0.2s linear;
+     *     transition: opacity 0.2s linear;
+     *  }
+     * (end)
+     * To animate tile displaying for any grid layer the following
+     *     CSS rule can be used:
+     * (code)
+     * .olTileImage {
+     *     -webkit-transition: opacity 0.2s linear;
+     *     -moz-transition: opacity 0.2s linear;
+     *     -o-transition: opacity 0.2s linear;
+     *     transition: opacity 0.2s linear;
+     * }
+     * (end)
+     * In that case, to avoid flash effects, <removeBackBufferDelay>
+     *     should not be zero.
+     */
+    className: null,
+
+    /**
+     * 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 event types:
+     * tileloadstart - Triggered when a tile starts loading. Listeners receive
+     *     an object as first argument, which has a tile property that
+     *     references the tile that starts loading.
+     * tileloaded - Triggered when each new tile is
+     *     loaded, as a means of progress update to listeners.
+     *     listeners can access 'numLoadingTiles' if they wish to keep
+     *     track of the loading progress. Listeners are called with an object
+     *     with a tile property as first argument, making the loded tile
+     *     available to the listener.
+     * tileerror - Triggered before the tileloaded event (i.e. when the tile is
+     *     still hidden) if a tile failed to load. Listeners receive an object
+     *     as first argument, which has a tile property that references the
+     *     tile that could not be loaded.
      */
-    timerId: null,
 
     /**
      * Constructor: OpenLayers.Layer.Grid
@@ -116,19 +282,35 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
     initialize: function(name, url, params, options) {
         OpenLayers.Layer.HTTPRequest.prototype.initialize.apply(this, 
                                                                 arguments);
-        
-        //grid layers will trigger 'tileloaded' when each new tile is 
-        // loaded, as a means of progress update to listeners.
-        // listeners can access 'numLoadingTiles' if they wish to keep track
-        // of the loading progress
-        //
-        this.events.addEventType("tileloaded");
-
         this.grid = [];
+        this.tileQueue = [];
+
+        if (this.removeBackBufferDelay === null) {
+            this.removeBackBufferDelay = this.singleTile ? 0 : 2500;
+        }
         
-        this._moveGriddedTiles = OpenLayers.Function.bind(
-            this.moveGriddedTiles, this
-        );
+        if (this.className === null) {
+            this.className = this.singleTile ? 'olLayerGridSingleTile' :
+                                               'olLayerGrid';
+        }
+
+        if (!OpenLayers.Animation.isNative) {
+            this.deferMoveGriddedTiles = OpenLayers.Function.bind(function() {
+                this.moveGriddedTiles(true);
+                this.moveTimerId = null;
+            }, this);
+        }
+    },
+
+    /**
+     * Method: setMap
+     *
+     * Parameters:
+     * map - {<OpenLayers.Map>} The map.
+     */
+    setMap: function(map) {
+        OpenLayers.Layer.HTTPRequest.prototype.setMap.call(this, map);
+        OpenLayers.Element.addClass(this.div, this.className);
     },
 
     /**
@@ -139,9 +321,14 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * map - {<OpenLayers.Map>} The map.
      */
     removeMap: function(map) {
-        if(this.timerId != null) {
-            window.clearTimeout(this.timerId);
-            this.timerId = null;
+        if (this.moveTimerId !== null) {
+            window.clearTimeout(this.moveTimerId);
+            this.moveTimerId = null;
+        }
+        this.clearTileQueue();
+        if(this.backBufferTimerId !== null) {
+            window.clearTimeout(this.backBufferTimerId);
+            this.backBufferTimerId = null;
         }
     },
 
@@ -150,7 +337,9 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * Deconstruct the layer and clear the grid.
      */
     destroy: function() {
+        this.removeBackBuffer();
         this.clearGrid();
+
         this.grid = null;
         this.tileSize = null;
         OpenLayers.Layer.HTTPRequest.prototype.destroy.apply(this, arguments); 
@@ -162,19 +351,20 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      *    destroy() on each of them to kill circular references
      */
     clearGrid:function() {
+        this.clearTileQueue();
         if (this.grid) {
             for(var iRow=0, len=this.grid.length; iRow<len; iRow++) {
                 var row = this.grid[iRow];
                 for(var iCol=0, clen=row.length; iCol<clen; iCol++) {
                     var tile = row[iCol];
-                    this.removeTileMonitoringHooks(tile);
-                    tile.destroy();
+                    this.destroyTile(tile);
                 }
             }
             this.grid = [];
+            this.gridResolution = null;
         }
     },
-
+    
     /**
      * APIMethod: clone
      * Create a clone of this layer
@@ -204,6 +394,14 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         
         // we do not want to copy reference to grid, so we make a new array
         obj.grid = [];
+        obj.gridResolution = null;
+        // same for backbuffer and tile queue
+        obj.backBuffer = null;
+        obj.backBufferTimerId = null;
+        obj.tileQueue = [];
+        obj.tileQueueId = null;
+        obj.loading = false;
+        obj.moveTimerId = null;
 
         return obj;
     },    
@@ -220,40 +418,385 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * dragging - {Boolean}
      */
     moveTo:function(bounds, zoomChanged, dragging) {
+
         OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply(this, arguments);
-        
+
         bounds = bounds || this.map.getExtent();
 
         if (bounds != null) {
              
             // if grid is empty or zoom has changed, we *must* re-tile
             var forceReTile = !this.grid.length || zoomChanged;
-
+            
             // total bounds of the tiles
             var tilesBounds = this.getTilesBounds();            
-      
+
+            // the new map resolution
+            var resolution = this.map.getResolution();
+
+            // the server-supported resolution for the new map resolution
+            var serverResolution = this.getServerResolution(resolution);
+
             if (this.singleTile) {
                 
                 // We want to redraw whenever even the slightest part of the 
                 //  current bounds is not contained by our tile.
                 //  (thus, we do not specify partial -- its default is false)
-                if ( forceReTile || 
+
+                if ( forceReTile ||
                      (!dragging && !tilesBounds.containsBounds(bounds))) {
+
+                    // In single tile mode with no transition effect, we insert
+                    // a non-scaled backbuffer when the layer is moved. But if
+                    // a zoom occurs right after a move, i.e. before the new
+                    // image is received, we need to remove the backbuffer, or
+                    // an ill-positioned image will be visible during the zoom
+                    // transition.
+
+                    if(zoomChanged && this.transitionEffect !== 'resize') {
+                        this.removeBackBuffer();
+                    }
+
+                    if(!zoomChanged || this.transitionEffect === 'resize') {
+                        this.applyBackBuffer(serverResolution);
+                    }
+
                     this.initSingleTile(bounds);
                 }
             } else {
-             
+
                 // if the bounds have changed such that they are not even 
-                //  *partially* contained by our tiles (IE user has 
-                //  programmatically panned to the other side of the earth) 
-                //  then we want to reTile (thus, partial true).  
-                //
-                if (forceReTile || !tilesBounds.containsBounds(bounds, true)) {
+                // *partially* contained by our tiles (e.g. when user has 
+                // programmatically panned to the other side of the earth on
+                // zoom level 18), then moveGriddedTiles could potentially have
+                // to run through thousands of cycles, so we want to reTile
+                // instead (thus, partial true).  
+                forceReTile = forceReTile ||
+                    !tilesBounds.intersectsBounds(bounds, {
+                        worldBounds: this.map.baseLayer.wrapDateLine &&
+                            this.map.getMaxExtent()
+                    });
+
+                if(resolution !== serverResolution) {
+                    bounds = this.map.calculateBounds(null, serverResolution);
+                    if(forceReTile) {
+                        // stretch the layer div
+                        var scale = serverResolution / resolution;
+                        this.transformDiv(scale);
+                    }
+                } else {
+                    // reset the layer width, height, left, top, to deal with
+                    // the case where the layer was previously transformed
+                    this.div.style.width = '100%';
+                    this.div.style.height = '100%';
+                    this.div.style.left = '0%';
+                    this.div.style.top = '0%';
+                }
+
+                if(forceReTile) {
+                    if(zoomChanged && this.transitionEffect === 'resize') {
+                        this.applyBackBuffer(serverResolution);
+                    }
                     this.initGriddedTiles(bounds);
                 } else {
-                    this.scheduleMoveGriddedTiles();
+                    this.moveGriddedTiles();
+                }
+            }
+        }
+    },
+
+    /**
+     * Method: getTileData
+     * Given a map location, retrieve a tile and the pixel offset within that
+     *     tile corresponding to the location.  If there is not an existing 
+     *     tile in the grid that covers the given location, null will be 
+     *     returned.
+     *
+     * Parameters:
+     * loc - {<OpenLayers.LonLat>} map location
+     *
+     * Returns:
+     * {Object} Object with the following properties: tile ({<OpenLayers.Tile>}),
+     *     i ({Number} x-pixel offset from top left), and j ({Integer} y-pixel
+     *     offset from top left).
+     */
+    getTileData: function(loc) {
+        var data = null,
+            x = loc.lon,
+            y = loc.lat,
+            numRows = this.grid.length;
+
+        if (this.map && numRows) {
+            var res = this.map.getResolution(),
+                tileWidth = this.tileSize.w,
+                tileHeight = this.tileSize.h,
+                bounds = this.grid[0][0].bounds,
+                left = bounds.left,
+                top = bounds.top;
+
+            if (x < left) {
+                // deal with multiple worlds
+                if (this.map.baseLayer.wrapDateLine) {
+                    var worldWidth = this.map.getMaxExtent().getWidth();
+                    var worldsAway = Math.ceil((left - x) / worldWidth);
+                    x += worldWidth * worldsAway;
+                }
+            }
+            // tile distance to location (fractional number of tiles);
+            var dtx = (x - left) / (res * tileWidth);
+            var dty = (top - y) / (res * tileHeight);
+            // index of tile in grid
+            var col = Math.floor(dtx);
+            var row = Math.floor(dty);
+            if (row >= 0 && row < numRows) {
+                var tile = this.grid[row][col];
+                if (tile) {
+                    data = {
+                        tile: tile,
+                        // pixel index within tile
+                        i: Math.floor((dtx - col) * tileWidth),
+                        j: Math.floor((dty - row) * tileHeight)
+                    };                    
+                }
+            }
+        }
+        return data;
+    },
+    
+    /**
+     * Method: queueTileDraw
+     * Adds a tile to the animation queue that will draw it.
+     *
+     * Parameters:
+     * evt - {Object} Listener argument of the tile's beforedraw event
+     */
+    queueTileDraw: function(evt) {
+        var tile = evt.object;
+        if (!~OpenLayers.Util.indexOf(this.tileQueue, tile)) {
+            // queue only if not in queue already
+            this.tileQueue.push(tile);
+        }
+        if (!this.tileQueueId) {
+            this.tileQueueId = OpenLayers.Animation.start(
+                OpenLayers.Function.bind(this.drawTileFromQueue, this),
+                null, this.div
+            );
+        }
+        return false;
+    },
+    
+    /**
+     * Method: drawTileFromQueue
+     * Draws the first tile from the tileQueue, and unqueues that tile
+     */
+    drawTileFromQueue: function() {
+        if (this.tileQueue.length === 0) {
+            this.clearTileQueue();
+        } else {
+            this.tileQueue.shift().draw(true);
+        }
+    },
+    
+    /**
+     * Method: clearTileQueue
+     * Clears the animation queue
+     */
+    clearTileQueue: function() {
+        OpenLayers.Animation.stop(this.tileQueueId);
+        this.tileQueueId = null;
+        this.tileQueue = [];
+    },
+
+    /**
+     * Method: destroyTile
+     *
+     * Parameters:
+     * tile - {<OpenLayers.Tile>}
+     */
+    destroyTile: function(tile) {
+        this.removeTileMonitoringHooks(tile);
+        tile.destroy();
+    },
+
+    /**
+     * Method: getServerResolution
+     * Return the closest highest server-supported resolution. Throw an
+     * exception if none is found in the serverResolutions array.
+     *
+     * Parameters:
+     * resolution - {Number} The base resolution. If undefined the
+     *     map resolution is used.
+     *
+     * Returns:
+     * {Number} The closest highest server resolution value.
+     */
+    getServerResolution: function(resolution) {
+        resolution = resolution || this.map.getResolution();
+        if(this.serverResolutions &&
+           OpenLayers.Util.indexOf(this.serverResolutions, resolution) === -1) {
+            var i, serverResolution;
+            for(i=this.serverResolutions.length-1; i>= 0; i--) {
+                serverResolution = this.serverResolutions[i];
+                if(serverResolution > resolution) {
+                    resolution = serverResolution;
+                    break;
                 }
             }
+            if(i === -1) {
+                throw 'no appropriate resolution in serverResolutions';
+            }
+        }
+        return resolution;
+    },
+
+    /**
+     * Method: getServerZoom
+     * Return the zoom value corresponding to the best matching server
+     * resolution, taking into account <serverResolutions> and <zoomOffset>.
+     *
+     * Returns:
+     * {Number} The closest server supported zoom. This is not the map zoom
+     *     level, but an index of the server's resolutions array.
+     */
+    getServerZoom: function() {
+        var resolution = this.getServerResolution();
+        return this.serverResolutions ?
+            OpenLayers.Util.indexOf(this.serverResolutions, resolution) :
+            this.map.getZoomForResolution(resolution) + (this.zoomOffset || 0);
+    },
+
+    /**
+     * Method: transformDiv
+     * Transform the layer div.
+     *
+     * Parameters:
+     * scale - {Number} The value by which the layer div is to
+     *     be scaled.
+     */
+    transformDiv: function(scale) {
+
+        // scale the layer div
+
+        this.div.style.width = 100 * scale + '%';
+        this.div.style.height = 100 * scale + '%';
+
+        // and translate the layer div as necessary
+
+        var size = this.map.getSize();
+        var lcX = parseInt(this.map.layerContainerDiv.style.left, 10);
+        var lcY = parseInt(this.map.layerContainerDiv.style.top, 10);
+        var x = (lcX - (size.w / 2.0)) * (scale - 1);
+        var y = (lcY - (size.h / 2.0)) * (scale - 1);
+
+        this.div.style.left = x + '%';
+        this.div.style.top = y + '%';
+    },
+
+    /**
+     * Method: getResolutionScale
+     * Return the value by which the layer is currently scaled.
+     *
+     * Returns:
+     * {Number} The resolution scale.
+     */
+    getResolutionScale: function() {
+        return parseInt(this.div.style.width, 10) / 100;
+    },
+
+    /**
+     * Method: applyBackBuffer
+     * Create, insert, scale and position a back buffer for the layer.
+     *
+     * Parameters:
+     * resolution - {Number} The resolution to transition to.
+     */
+    applyBackBuffer: function(resolution) {
+        if(this.backBufferTimerId !== null) {
+            this.removeBackBuffer();
+        }
+        var backBuffer = this.backBuffer;
+        if(!backBuffer) {
+            backBuffer = this.createBackBuffer();
+            if(!backBuffer) {
+                return;
+            }
+            this.div.insertBefore(backBuffer, this.div.firstChild);
+            this.backBuffer = backBuffer;
+
+            // set some information in the instance for subsequent
+            // calls to applyBackBuffer where the same back buffer
+            // is reused
+            var topLeftTileBounds = this.grid[0][0].bounds;
+            this.backBufferLonLat = {
+                lon: topLeftTileBounds.left,
+                lat: topLeftTileBounds.top
+            };
+            this.backBufferResolution = this.gridResolution;
+        }
+
+        var style = backBuffer.style;
+
+        // scale the back buffer
+        var ratio = this.backBufferResolution / resolution;
+        style.width = 100 * ratio + '%';
+        style.height = 100 * ratio + '%';
+
+        // and position it (based on the grid's top-left corner)
+        var position = this.getViewPortPxFromLonLat(
+                this.backBufferLonLat, resolution);
+        var leftOffset = parseInt(this.map.layerContainerDiv.style.left, 10);
+        var topOffset = parseInt(this.map.layerContainerDiv.style.top, 10);
+        backBuffer.style.left = Math.round(position.x - leftOffset) + '%';
+        backBuffer.style.top = Math.round(position.y - topOffset) + '%';
+    },
+
+    /**
+     * Method: createBackBuffer
+     * Create a back buffer.
+     *
+     * Returns:
+     * {DOMElement} The DOM element for the back buffer, undefined if the
+     * grid isn't initialized yet.
+     */
+    createBackBuffer: function() {
+        var backBuffer;
+        if(this.grid.length > 0) {
+            backBuffer = document.createElement('div');
+            backBuffer.id = this.div.id + '_bb';
+            backBuffer.className = 'olBackBuffer';
+            backBuffer.style.position = 'absolute';
+            backBuffer.style.width = '100%';
+            backBuffer.style.height = '100%';
+            for(var i=0, lenI=this.grid.length; i<lenI; i++) {
+                for(var j=0, lenJ=this.grid[i].length; j<lenJ; j++) {
+                    var tile = this.grid[i][j].createBackBuffer();
+                    if(!tile) {
+                        continue;
+                    }
+                    // to be able to correctly position the back buffer we
+                    // place the tiles grid at (0, 0) in the back buffer
+                    tile.style.top = (i * this.tileSize.h) + '%';
+                    tile.style.left = (j * this.tileSize.w) + '%';
+                    backBuffer.appendChild(tile);
+                }
+            }
+        }
+        return backBuffer;
+    },
+
+    /**
+     * Method: removeBackBuffer
+     * Remove back buffer from DOM.
+     */
+    removeBackBuffer: function() {
+        if(this.backBuffer) {
+            this.div.removeChild(this.backBuffer);
+            this.backBuffer = null;
+            this.backBufferResolution = null;
+            if(this.backBufferTimerId !== null) {
+                window.clearTimeout(this.backBufferTimerId);
+                this.backBufferTimerId = null;
+            }
         }
     },
 
@@ -267,25 +810,11 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      */
     moveByPx: function(dx, dy) {
         if (!this.singleTile) {
-            this.scheduleMoveGriddedTiles();
+            this.moveGriddedTiles();
         }
     },
 
     /**
-     * Method: scheduleMoveGriddedTiles
-     * Schedule the move of tiles.
-     */
-    scheduleMoveGriddedTiles: function() {
-        if (this.timerId != null) {
-            window.clearTimeout(this.timerId);
-        }
-        this.timerId = window.setTimeout(
-            this._moveGriddedTiles,
-            this.tileLoadingDelay
-        );
-    },
-    
-    /**
      * APIMethod: setTileSize
      * Check if we are in singleTile mode and if so, set the size as a ratio
      *     of the map size (as specified by the layer's 'ratio' property).
@@ -301,23 +830,6 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         } 
         OpenLayers.Layer.HTTPRequest.prototype.setTileSize.apply(this, [size]);
     },
-        
-    /**
-     * Method: getGridBounds
-     * Deprecated. This function will be removed in 3.0. Please use 
-     *     getTilesBounds() instead.
-     * 
-     * Returns:
-     * {<OpenLayers.Bounds>} A Bounds object representing the bounds of all the
-     * currently loaded tiles (including those partially or not at all seen 
-     * onscreen)
-     */
-    getGridBounds: function() {
-        var msg = "The getGridBounds() function is deprecated. It will be " +
-                  "removed in 3.0. Please use getTilesBounds() instead.";
-        OpenLayers.Console.warn(msg);
-        return this.getTilesBounds();
-    },
 
     /**
      * APIMethod: getTilesBounds
@@ -331,18 +843,16 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
     getTilesBounds: function() {    
         var bounds = null; 
         
-        if (this.grid.length) {
-            var bottom = this.grid.length - 1;
-            var bottomLeftTile = this.grid[bottom][0];
-    
-            var right = this.grid[0].length - 1; 
-            var topRightTile = this.grid[0][right];
-    
-            bounds = new OpenLayers.Bounds(bottomLeftTile.bounds.left, 
-                                           bottomLeftTile.bounds.bottom,
-                                           topRightTile.bounds.right, 
-                                           topRightTile.bounds.top);
+        var length = this.grid.length;
+        if (length) {
+            var bottomLeftTileBounds = this.grid[length - 1][0].bounds,
+                width = this.grid[0].length * bottomLeftTileBounds.getWidth(),
+                height = this.grid.length * bottomLeftTileBounds.getHeight();
             
+            bounds = new OpenLayers.Bounds(bottomLeftTileBounds.left, 
+                                           bottomLeftTileBounds.bottom,
+                                           bottomLeftTileBounds.left + width, 
+                                           bottomLeftTileBounds.bottom + height);
         }   
         return bounds;
     },
@@ -354,6 +864,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * bounds - {<OpenLayers.Bounds>}
      */
     initSingleTile: function(bounds) {
+        this.clearTileQueue();
 
         //determine new tile bounds
         var center = bounds.getCenterLonLat();
@@ -366,8 +877,10 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
                                   center.lon + (tileWidth/2),
                                   center.lat + (tileHeight/2));
   
-        var ul = new OpenLayers.LonLat(tileBounds.left, tileBounds.top);
-        var px = this.map.getLayerPxFromLonLat(ul);
+        var px = this.map.getLayerPxFromLonLat({
+            lon: tileBounds.left,
+            lat: tileBounds.top
+        });
 
         if (!this.grid.length) {
             this.grid[0] = [];
@@ -386,6 +899,9 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         
         //remove all but our single tile
         this.removeExcessTiles(1,1);
+
+        // store the resolution of the grid
+        this.gridResolution = this.getServerResolution();
     },
 
     /** 
@@ -393,12 +909,14 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * Generate parameters for the grid layout.
      *
      * Parameters:
-     * bounds - {<OpenLayers.Bound>}
-     * origin - {<OpenLayers.LonLat>}
+     * bounds - {<OpenLayers.Bound>|Object} OpenLayers.Bounds or an
+     *     object with a 'left' and 'top' properties.
+     * origin - {<OpenLayers.LonLat>|Object} OpenLayers.LonLat or an
+     *     object with a 'lon' and 'lat' properties.
      * resolution - {Number}
      *
      * Returns:
-     * Object containing properties tilelon, tilelat, tileoffsetlat,
+     * {Object} containing properties tilelon, tilelat, tileoffsetlat,
      * tileoffsetlat, tileoffsetx, tileoffsety
      */
     calculateGridLayout: function(bounds, origin, resolution) {
@@ -458,7 +976,8 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * bounds - {<OpenLayers.Bounds>}
      */
     initGriddedTiles:function(bounds) {
-        
+        this.clearTileQueue();
+
         // work out mininum number of rows and columns; this is the number of
         // tiles required to cover the viewport plus at least one for panning
 
@@ -469,7 +988,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
                       Math.max(1, 2 * this.buffer);
         
         var origin = this.getTileOrigin();
-        var resolution = this.map.getResolution();
+        var resolution = this.getServerResolution();
         
         var tileLayout = this.calculateGridLayout(bounds, origin, resolution);
 
@@ -482,8 +1001,6 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         var tilelon = tileLayout.tilelon;
         var tilelat = tileLayout.tilelat;
 
-        this.origin = new OpenLayers.Pixel(tileoffsetx, tileoffsety);
-
         var startX = tileoffsetx; 
         var startLon = tileoffsetlon;
 
@@ -491,8 +1008,8 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         
         var layerContainerDivLeft = parseInt(this.map.layerContainerDiv.style.left);
         var layerContainerDivTop = parseInt(this.map.layerContainerDiv.style.top);
-        
-    
+
+        var tileData = [], center = this.map.getCenter();
         do {
             var row = this.grid[rowidx++];
             if (!row) {
@@ -526,6 +1043,12 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
                 } else {
                     tile.moveTo(tileBounds, px, false);
                 }
+                var tileCenter = tileBounds.getCenterLonLat();
+                tileData.push({
+                    tile: tile,
+                    distance: Math.pow(tileCenter.lon - center.lon, 2) +
+                        Math.pow(tileCenter.lat - center.lat, 2)
+                });
      
                 tileoffsetlon += tilelon;       
                 tileoffsetx += this.tileSize.w;
@@ -540,8 +1063,16 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         //shave off exceess rows and colums
         this.removeExcessTiles(rowidx, colidx);
 
+        // store the resolution of the grid
+        this.gridResolution = this.getServerResolution();
+
         //now actually draw the tiles
-        this.spiralTileLoad();
+        tileData.sort(function(a, b) {
+            return a.distance - b.distance; 
+        });
+        for (var i=0, ii=tileData.length; i<ii; ++i) {
+            tileData[i].tile.draw();
+        }
     },
 
     /**
@@ -550,86 +1081,13 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      *     potential specific implementations in sub-classes.)
      *
      * Returns:
-     * {OpenLayers.Bounds}
+     * {<OpenLayers.Bounds>}
      */
     getMaxExtent: function() {
         return this.maxExtent;
     },
     
     /**
-     * Method: spiralTileLoad
-     *   Starts at the top right corner of the grid and proceeds in a spiral 
-     *    towards the center, adding tiles one at a time to the beginning of a 
-     *    queue. 
-     * 
-     *   Once all the grid's tiles have been added to the queue, we go back 
-     *    and iterate through the queue (thus reversing the spiral order from 
-     *    outside-in to inside-out), calling draw() on each tile. 
-     */
-    spiralTileLoad: function() {
-        var tileQueue = [];
- 
-        var directions = ["right", "down", "left", "up"];
-
-        var iRow = 0;
-        var iCell = -1;
-        var direction = OpenLayers.Util.indexOf(directions, "right");
-        var directionsTried = 0;
-        
-        while( directionsTried < directions.length) {
-
-            var testRow = iRow;
-            var testCell = iCell;
-
-            switch (directions[direction]) {
-                case "right":
-                    testCell++;
-                    break;
-                case "down":
-                    testRow++;
-                    break;
-                case "left":
-                    testCell--;
-                    break;
-                case "up":
-                    testRow--;
-                    break;
-            } 
-    
-            // if the test grid coordinates are within the bounds of the 
-            //  grid, get a reference to the tile.
-            var tile = null;
-            if ((testRow < this.grid.length) && (testRow >= 0) &&
-                (testCell < this.grid[0].length) && (testCell >= 0)) {
-                tile = this.grid[testRow][testCell];
-            }
-            
-            if ((tile != null) && (!tile.queued)) {
-                //add tile to beginning of queue, mark it as queued.
-                tileQueue.unshift(tile);
-                tile.queued = true;
-                
-                //restart the directions counter and take on the new coords
-                directionsTried = 0;
-                iRow = testRow;
-                iCell = testCell;
-            } else {
-                //need to try to load a tile in a different direction
-                direction = (direction + 1) % 4;
-                directionsTried++;
-            }
-        } 
-        
-        // now we go through and draw the tiles in forward order
-        for(var i=0, len=tileQueue.length; i<len; i++) {
-            var tile = tileQueue[i];
-            tile.draw();
-            //mark tile as unqueued for the next time (since tiles are reused)
-            tile.queued = false;       
-        }
-    },
-
-    /**
      * APIMethod: addTile
      * Create a tile, initialize it, and add it to the layer div. 
      *
@@ -640,9 +1098,12 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * Returns:
      * {<OpenLayers.Tile>} The added OpenLayers.Tile
      */
-    addTile:function(bounds, position) {
-        return new OpenLayers.Tile.Image(this, position, bounds, null, 
-                                         this.tileSize, this.tileOptions);
+    addTile: function(bounds, position) {
+        var tile = new this.tileClass(
+            this, position, bounds, null, this.tileSize, this.tileOptions
+        );
+        tile.events.register("beforedraw", this, this.queueTileDraw);
+        return tile;
     },
     
     /** 
@@ -657,23 +1118,43 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         
         tile.onLoadStart = function() {
             //if that was first tile then trigger a 'loadstart' on the layer
-            if (this.numLoadingTiles == 0) {
+            if (this.loading === false) {
+                this.loading = true;
                 this.events.triggerEvent("loadstart");
             }
+            this.events.triggerEvent("tileloadstart", {tile: tile});
             this.numLoadingTiles++;
         };
-        tile.events.register("loadstart", this, tile.onLoadStart);
       
         tile.onLoadEnd = function() {
             this.numLoadingTiles--;
-            this.events.triggerEvent("tileloaded");
+            this.events.triggerEvent("tileloaded", {tile: tile});
             //if that was the last tile, then trigger a 'loadend' on the layer
-            if (this.numLoadingTiles == 0) {
+            if (this.tileQueue.length === 0 && this.numLoadingTiles === 0) {
+                this.loading = false;
                 this.events.triggerEvent("loadend");
+                if(this.backBuffer) {
+                    // the removal of the back buffer is delayed to prevent flash
+                    // effects due to the animation of tile displaying
+                    this.backBufferTimerId = window.setTimeout(
+                        OpenLayers.Function.bind(this.removeBackBuffer, this),
+                        this.removeBackBufferDelay
+                    );
+                }
             }
         };
-        tile.events.register("loadend", this, tile.onLoadEnd);
-        tile.events.register("unload", this, tile.onLoadEnd);
+        
+        tile.onLoadError = function() {
+            this.events.triggerEvent("tileerror", {tile: tile});
+        };
+        
+        tile.events.on({
+            "loadstart": tile.onLoadStart,
+            "loadend": tile.onLoadEnd,
+            "unload": tile.onLoadEnd,
+            "loaderror": tile.onLoadError,
+            scope: this
+        });
     },
 
     /** 
@@ -690,36 +1171,54 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
             "loadstart": tile.onLoadStart,
             "loadend": tile.onLoadEnd,
             "unload": tile.onLoadEnd,
+            "loaderror": tile.onLoadError,
             scope: this
         });
     },
     
     /**
      * Method: moveGriddedTiles
+     *
+     * Parameter:
+     * deferred - {Boolean} true if this is a deferred call that should not
+     * be delayed.
      */
-    moveGriddedTiles: function() {
-        var shifted = true;
-        var buffer = this.buffer || 1;
-        var tlLayer = this.grid[0][0].position;
-        var offsetX = parseInt(this.map.layerContainerDiv.style.left);
-        var offsetY = parseInt(this.map.layerContainerDiv.style.top);
-        var tlViewPort = tlLayer.add(offsetX, offsetY);
-        if (tlViewPort.x > -this.tileSize.w * (buffer - 1)) {
-            this.shiftColumn(true);
-        } else if (tlViewPort.x < -this.tileSize.w * buffer) {
-            this.shiftColumn(false);
-        } else if (tlViewPort.y > -this.tileSize.h * (buffer - 1)) {
-            this.shiftRow(true);
-        } else if (tlViewPort.y < -this.tileSize.h * buffer) {
-            this.shiftRow(false);
-        } else {
-            shifted = false;
+    moveGriddedTiles: function(deferred) {
+        if (!deferred && !OpenLayers.Animation.isNative) {
+            if (this.moveTimerId != null) {
+                window.clearTimeout(this.moveTimerId);
+            }
+            this.moveTimerId = window.setTimeout(
+                this.deferMoveGriddedTiles, this.tileLoadingDelay
+            );
+            return;
         }
-        if (shifted) {
-            // we may have other row or columns to shift, schedule it
-            // with a setTimeout, to give the user a chance to sneak
-            // in moveTo's
-            this.timerId = window.setTimeout(this._moveGriddedTiles, 0);
+        var buffer = this.buffer || 1;
+        var scale = this.getResolutionScale();
+        while(true) {
+            var tlViewPort = {
+                x: (this.grid[0][0].position.x * scale) +
+                    parseInt(this.div.style.left, 10) +
+                    parseInt(this.map.layerContainerDiv.style.left),
+                y: (this.grid[0][0].position.y * scale) +
+                    parseInt(this.div.style.top, 10) +
+                    parseInt(this.map.layerContainerDiv.style.top)
+            };
+            var tileSize = {
+                w: this.tileSize.w * scale,
+                h: this.tileSize.h * scale
+            };
+            if (tlViewPort.x > -tileSize.w * (buffer - 1)) {
+                this.shiftColumn(true);
+            } else if (tlViewPort.x < -tileSize.w * buffer) {
+                this.shiftColumn(false);
+            } else if (tlViewPort.y > -tileSize.h * (buffer - 1)) {
+                this.shiftRow(true);
+            } else if (tlViewPort.y < -tileSize.h * buffer) {
+                this.shiftRow(false);
+            } else {
+                break;
+            }
         }
     },
 
@@ -736,7 +1235,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
         var grid = this.grid;
         var modelRow = grid[modelRowIndex];
 
-        var resolution = this.map.getResolution();
+        var resolution = this.getServerResolution();
         var deltaY = (prepend) ? -this.tileSize.h : this.tileSize.h;
         var deltaLat = resolution * -deltaY;
 
@@ -769,7 +1268,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      */
     shiftColumn: function(prepend) {
         var deltaX = (prepend) ? -this.tileSize.w : this.tileSize.w;
-        var resolution = this.map.getResolution();
+        var resolution = this.getServerResolution();
         var deltaLon = resolution * deltaX;
 
         for (var i=0, len=this.grid.length; i<len; i++) {
@@ -792,7 +1291,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
             }
         }
     },
-    
+
     /**
      * Method: removeExcessTiles
      * When the size of the map or the buffer changes, we may need to
@@ -803,24 +1302,23 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
      * columns - {Integer} Maximum number of columns we want our grid to have.
      */
     removeExcessTiles: function(rows, columns) {
+        var i, l;
         
         // remove extra rows
         while (this.grid.length > rows) {
             var row = this.grid.pop();
-            for (var i=0, l=row.length; i<l; i++) {
+            for (i=0, l=row.length; i<l; i++) {
                 var tile = row[i];
-                this.removeTileMonitoringHooks(tile);
-                tile.destroy();
+                this.destroyTile(tile);
             }
         }
         
         // remove extra columns
-        while (this.grid[0].length > columns) {
-            for (var i=0, l=this.grid.length; i<l; i++) {
+        for (i=0, l=this.grid.length; i<l; i++) {
+            while (this.grid[i].length > columns) {
                 var row = this.grid[i];
                 var tile = row.pop();
-                this.removeTileMonitoringHooks(tile);
-                tile.destroy();
+                this.destroyTile(tile);
             }
         }
     },
@@ -865,6 +1363,6 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
                                      tileLeft + tileMapWidth,
                                      tileBottom + tileMapHeight);
     },
-    
+
     CLASS_NAME: "OpenLayers.Layer.Grid"
 });
diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js
index ddf3d51..9483e49 100644
--- a/lib/OpenLayers/Layer/HTTPRequest.js
+++ b/lib/OpenLayers/Layer/HTTPRequest.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -60,7 +60,9 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, {
     initialize: function(name, url, params, options) {
         OpenLayers.Layer.prototype.initialize.apply(this, [name, options]);
         this.url = url;
-        this.params = OpenLayers.Util.extend( {}, params);
+        if (!this.params) {
+            this.params = OpenLayers.Util.extend({}, params);
+        }
     },
 
     /**
diff --git a/lib/OpenLayers/Layer/Image.js b/lib/OpenLayers/Layer/Image.js
index d547e81..d46a517 100644
--- a/lib/OpenLayers/Layer/Image.js
+++ b/lib/OpenLayers/Layer/Image.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
  
 /**
@@ -12,7 +12,10 @@
  * Class: OpenLayers.Layer.Image
  * Instances of OpenLayers.Layer.Image are used to display data from a web
  * accessible image as a map layer.  Create a new image layer with the
- * <OpenLayers.Layer.Image> constructor.  Inherits from <OpenLayers.Layer>.
+ * <OpenLayers.Layer.Image> constructor.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Layer>
  */
 OpenLayers.Layer.Image = OpenLayers.Class(OpenLayers.Layer, {
 
@@ -161,8 +164,10 @@ OpenLayers.Layer.Image = OpenLayers.Class(OpenLayers.Layer, {
             this.setTileSize();
 
             //determine new position (upper left corner of new bounds)
-            var ul = new OpenLayers.LonLat(this.extent.left, this.extent.top);
-            var ulPx = this.map.getLayerPxFromLonLat(ul);
+            var ulPx = this.map.getLayerPxFromLonLat({
+                lon: this.extent.left,
+                lat: this.extent.top
+            });
 
             if(firstRendering) {
                 //create the new tile
diff --git a/lib/OpenLayers/Layer/KaMap.js b/lib/OpenLayers/Layer/KaMap.js
index 9a08f3f..5018d9a 100644
--- a/lib/OpenLayers/Layer/KaMap.js
+++ b/lib/OpenLayers/Layer/KaMap.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -23,18 +23,6 @@ OpenLayers.Layer.KaMap = OpenLayers.Class(OpenLayers.Layer.Grid, {
     isBaseLayer: true,
 
     /**
-     * APIProperty: units
-     * {?}
-     */    
-    units: null,
-
-    /**
-     * APIProperty: resolution
-     * {Float}
-     */
-    resolution: OpenLayers.DOTS_PER_INCH,
-    
-    /**
      * Constant: DEFAULT_PARAMS
      * {Object} parameters set by default. The default parameters set 
      * the format via the 'i' parameter to 'jpeg'.    
@@ -62,9 +50,7 @@ OpenLayers.Layer.KaMap = OpenLayers.Class(OpenLayers.Layer.Grid, {
      *     extends, can be overridden through the options parameter. 
      */
     initialize: function(name, url, params, options) {
-        var newArguments = [];
-        newArguments.push(name, url, params, options);
-        OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
+        OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments);
         this.params = OpenLayers.Util.applyDefaults(
             this.params, this.DEFAULT_PARAMS
         );
@@ -106,7 +92,7 @@ OpenLayers.Layer.KaMap = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * resolution - {Number}
      *
      * Returns:
-     * Object containing properties tilelon, tilelat, tileoffsetlat,
+     * {Object} Object containing properties tilelon, tilelat, tileoffsetlat,
      * tileoffsetlat, tileoffsetx, tileoffsety
      */
     calculateGridLayout: function(bounds, origin, resolution) {
diff --git a/lib/OpenLayers/Layer/KaMapCache.js b/lib/OpenLayers/Layer/KaMapCache.js
index 4cf8e7e..5656a0f 100644
--- a/lib/OpenLayers/Layer/KaMapCache.js
+++ b/lib/OpenLayers/Layer/KaMapCache.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -88,7 +88,7 @@ OpenLayers.Layer.KaMapCache = OpenLayers.Class(OpenLayers.Layer.KaMap, {
      */
     initialize: function(name, url, params, options) {
         OpenLayers.Layer.KaMap.prototype.initialize.apply(this, arguments);
-        this.extension = this.IMAGE_EXTENSIONS[this.params.i.toLowerCase() || DEFAULT_FORMAT];
+        this.extension = this.IMAGE_EXTENSIONS[this.params.i.toLowerCase() || this.DEFAULT_FORMAT];
     },
 
     /**
@@ -111,18 +111,8 @@ OpenLayers.Layer.KaMapCache = OpenLayers.Class(OpenLayers.Layer.KaMap, {
 
         var metaX = Math.floor(pX / this.tileSize.w / this.params.metaTileSize.w) * this.tileSize.w * this.params.metaTileSize.w;
         var metaY = Math.floor(pY / this.tileSize.h / this.params.metaTileSize.h) * this.tileSize.h * this.params.metaTileSize.h;
-
-        // if url is not a string, it should be an array of strings,
-        // in which case we will deterministically select one of them in
-        // order to evenly distribute requests to different urls.
-        //
-        var url = this.url;
-        if (OpenLayers.Util.isArray(url)) {
-            url = this.selectUrl(paramsString, url);
-        }  
     
         var components = [
-            url,
             "/",
             this.params.map,
             "/",
@@ -140,8 +130,13 @@ OpenLayers.Layer.KaMapCache = OpenLayers.Class(OpenLayers.Layer.KaMap, {
             ".",
             this.extension
           ];
-          
-        return components.join("");
+
+        var url = this.url;
+
+        if (OpenLayers.Util.isArray(url)) {
+            url = this.selectUrl(components.join(''), url);
+        }
+        return url + components.join("");
     },
 
     CLASS_NAME: "OpenLayers.Layer.KaMapCache"
diff --git a/lib/OpenLayers/Layer/MapGuide.js b/lib/OpenLayers/Layer/MapGuide.js
index 7b020b5..ed68861 100644
--- a/lib/OpenLayers/Layer/MapGuide.js
+++ b/lib/OpenLayers/Layer/MapGuide.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -27,10 +27,10 @@ OpenLayers.Layer.MapGuide = OpenLayers.Class(OpenLayers.Layer.Grid, {
     /**
      * APIProperty: useHttpTile
      * {Boolean} use a tile cache exposed directly via a webserver rather than the 
-	   *    via mapguide server. This does require extra configuration on the Mapguide Server,
-	   *    and will only work when singleTile is false. The url for the layer must be set to the
-	   *    webserver path rather than the Mapguide mapagent.	  
-	   *    See http://trac.osgeo.org/mapguide/wiki/CodeSamples/Tiles/ServingTilesViaHttp 
+     *    via mapguide server. This does require extra configuration on the Mapguide Server,
+     *    and will only work when singleTile is false. The url for the layer must be set to the
+     *    webserver path rather than the Mapguide mapagent.
+     *    See http://trac.osgeo.org/mapguide/wiki/CodeSamples/Tiles/ServingTilesViaHttp
      **/
     useHttpTile: false,
     
@@ -449,7 +449,7 @@ OpenLayers.Layer.MapGuide = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * resolution - {Number}
      *
      * Returns:
-     * Object containing properties tilelon, tilelat, tileoffsetlat,
+     * {Object} Object containing properties tilelon, tilelat, tileoffsetlat,
      * tileoffsetlat, tileoffsetx, tileoffsety
      */
     calculateGridLayout: function(bounds, origin, resolution) {
diff --git a/lib/OpenLayers/Layer/MapServer.js b/lib/OpenLayers/Layer/MapServer.js
index e009be8..8f86c8f 100644
--- a/lib/OpenLayers/Layer/MapServer.js
+++ b/lib/OpenLayers/Layer/MapServer.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -39,9 +39,7 @@ OpenLayers.Layer.MapServer = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * options - {Object} Hashtable of extra options to tag onto the layer
      */
     initialize: function(name, url, params, options) {
-        var newArguments = [];
-        newArguments.push(name, url, params, options);
-        OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
+        OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments);
 
         this.params = OpenLayers.Util.applyDefaults(
             this.params, this.DEFAULT_PARAMS
@@ -114,7 +112,7 @@ OpenLayers.Layer.MapServer = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * Method: getFullRequestString
      * combine the layer's url with its params and these newParams. 
      *   
-     * Parameter:
+     * Parameters:
      * newParams - {Object} New parameters that should be added to the 
      *                      request string.
      * altUrl - {String} (optional) Replace the URL in the full request  
diff --git a/lib/OpenLayers/Layer/MapServer/Untiled.js b/lib/OpenLayers/Layer/MapServer/Untiled.js
deleted file mode 100644
index 3935919..0000000
--- a/lib/OpenLayers/Layer/MapServer/Untiled.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 2006-2011 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/MapServer.js
- * @requires OpenLayers/Console.js
- */
-
-/**
- * Class: OpenLayers.Layer.MapServer.Untiled
- * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.MapServer
- *     and pass the option 'singleTile' as true.
- * 
- * Inherits from: 
- *  - <OpenLayers.Layer.MapServer>
- */
-OpenLayers.Layer.MapServer.Untiled = OpenLayers.Class(OpenLayers.Layer.MapServer, {
-
-    /**
-     * APIProperty: singleTile
-     * {singleTile} Always true for untiled.
-     */
-    singleTile: true,
-
-    /**
-     * Constructor: OpenLayers.Layer.MapServer.Untiled
-     *
-     * Parameters:
-     * name - {String} 
-     * url - {String} 
-     * params - {Object} 
-     * options - {Object} 
-     */
-    initialize: function(name, url, params, options) {
-        OpenLayers.Layer.MapServer.prototype.initialize.apply(this, arguments);
-        
-        var msg = "The OpenLayers.Layer.MapServer.Untiled class is deprecated and " +
-                  "will be removed in 3.0. Instead, you should use the " +
-                  "normal OpenLayers.Layer.MapServer class, passing it the option " +
-                  "'singleTile' as true.";
-        OpenLayers.Console.warn(msg);
-    },    
-
-    /**
-     * Method: clone
-     * Create a clone of this layer
-     *
-     * Returns:
-     * {<OpenLayers.Layer.MapServer.Untiled>} An exact clone of this layer
-     */
-    clone: function (obj) {
-        
-        if (obj == null) {
-            obj = new OpenLayers.Layer.MapServer.Untiled(this.name,
-                                                         this.url,
-                                                         this.params,
-                                                         this.getOptions());
-        }
-
-        //get all additions from superclasses
-        obj = OpenLayers.Layer.MapServer.prototype.clone.apply(this, [obj]);
-
-        // copy/set any non-init, non-simple values here
-        
-        return obj;
-    }, 
-
-    CLASS_NAME: "OpenLayers.Layer.MapServer.Untiled"
-});
diff --git a/lib/OpenLayers/Layer/Markers.js b/lib/OpenLayers/Layer/Markers.js
index 09a262a..78ca09d 100644
--- a/lib/OpenLayers/Layer/Markers.js
+++ b/lib/OpenLayers/Layer/Markers.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -64,7 +64,7 @@ OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, {
      * APIMethod: setOpacity
      * Sets the opacity for all the markers.
      * 
-     * Parameter:
+     * Parameters:
      * opacity - {Float}
      */
     setOpacity: function(opacity) {
@@ -104,7 +104,7 @@ OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, {
     addMarker: function(marker) {
         this.markers.push(marker);
 
-        if (this.opacity != null) {
+        if (this.opacity < 1) {
             marker.setOpacity(this.opacity);
         }
 
diff --git a/lib/OpenLayers/Layer/MultiMap.js b/lib/OpenLayers/Layer/MultiMap.js
deleted file mode 100644
index 3052b82..0000000
--- a/lib/OpenLayers/Layer/MultiMap.js
+++ /dev/null
@@ -1,286 +0,0 @@
-/* Copyright (c) 2006-2011 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
- */
-
-/**
- * Class: OpenLayers.Layer.MultiMap
- * Note that MultiMap does not fully support the sphericalMercator
- * option. See Ticket #953 for more details.
- * *Deprecated*.  Use OpenLayers.Layer.Bing instead. See #3063
- * 
- * Inherits from:
- *  - <OpenLayers.Layer.EventPane>
- *  - <OpenLayers.Layer.FixedZoomLevels>
- */
-OpenLayers.Layer.MultiMap = OpenLayers.Class(
-  OpenLayers.Layer.EventPane, OpenLayers.Layer.FixedZoomLevels, {
-    
-    /** 
-     * Constant: MIN_ZOOM_LEVEL
-     * {Integer} 1 
-     */
-    MIN_ZOOM_LEVEL: 1,
-    
-    /** 
-     * Constant: MAX_ZOOM_LEVEL
-     * {Integer} 17
-     */
-    MAX_ZOOM_LEVEL: 17,
-
-    /** 
-     * Constant: RESOLUTIONS
-     * {Array(Float)} Hardcode these resolutions so that they are more closely
-     *                tied with the standard wms projection
-     */
-    RESOLUTIONS: [
-        9, 
-        1.40625,
-        0.703125,
-        0.3515625,
-        0.17578125,
-        0.087890625,
-        0.0439453125,
-        0.02197265625,
-        0.010986328125,
-        0.0054931640625,
-        0.00274658203125,
-        0.001373291015625,
-        0.0006866455078125,
-        0.00034332275390625,
-        0.000171661376953125,
-        0.0000858306884765625,
-        0.00004291534423828125
-    ],
-
-    /**
-     * APIProperty: type
-     * {?}
-     */
-    type: null,
-
-    /** 
-     * Constructor: OpenLayers.Layer.MultiMap
-     * 
-     * Parameters:
-     * name - {String}
-     * options - {Object}
-     */
-    initialize: function(name, options) {
-        OpenLayers.Layer.EventPane.prototype.initialize.apply(this, arguments);
-        OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this, 
-                                                                    arguments);
-        if (this.sphericalMercator) {
-            OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator);
-            this.initMercatorParameters();
-            this.RESOLUTIONS.unshift(10); 
-        }    
-    },
-    
-    /**
-     * Method: loadMapObject
-     */
-    loadMapObject:function() {
-        try { //crash proofing
-            this.mapObject = new MultimapViewer(this.div);
-        } catch (e) { }
-    },
-
-    /** 
-     * APIMethod: getWarningHTML
-     * 
-     * Returns: 
-     * {String} String with information on why layer is broken, how to get
-     *          it working.
-     */
-    getWarningHTML:function() {
-        return OpenLayers.i18n(
-            "getLayerWarning", {'layerType':"MM", 'layerLib':"MultiMap"}
-        );
-    },
-
-
-
-    /************************************
-     *                                  *
-     *   MapObject Interface Controls   *
-     *                                  *
-     ************************************/
-
-
-  // Get&Set Center, Zoom
-
-    /** 
-     * APIMethod: setMapObjectCenter
-     * Set the mapObject to the specified center and zoom
-     * 
-     * Parameters:
-     * center - {Object} MapObject LonLat format
-     * zoom - {int} MapObject zoom format
-     */
-    setMapObjectCenter: function(center, zoom) {
-        this.mapObject.goToPosition(center, zoom); 
-    },
-   
-    /**
-     * APIMethod: getMapObjectCenter
-     * 
-     * Returns: 
-     * {Object} The mapObject's current center in Map Object format
-     */
-    getMapObjectCenter: function() {
-        return this.mapObject.getCurrentPosition();
-    },
-
-    /** 
-     * APIMethod: getMapObjectZoom
-     * 
-     * Returns:
-     * {Integer} The mapObject's current zoom, in Map Object format
-     */
-    getMapObjectZoom: function() {
-        return this.mapObject.getZoomFactor();
-    },
-
-
-  // LonLat - Pixel Translation
-  
-    /**
-     * APIMethod: getMapObjectLonLatFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Object} MapObject LonLat translated from MapObject Pixel
-     */
-    getMapObjectLonLatFromMapObjectPixel: function(moPixel) {
-        moPixel.x = moPixel.x - (this.map.getSize().w/2);
-        moPixel.y = moPixel.y - (this.map.getSize().h/2);
-        return this.mapObject.getMapPositionAt(moPixel);
-    },
-
-    /**
-     * APIMethod: getMapObjectPixelFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Object} MapObject Pixel transtlated from MapObject LonLat
-     */
-    getMapObjectPixelFromMapObjectLonLat: function(moLonLat) {
-        return this.mapObject.geoPosToContainerPixels(moLonLat);
-    },
-
-
-    /************************************
-     *                                  *
-     *       MapObject Primitives       *
-     *                                  *
-     ************************************/
-
-
-  // LonLat
-    
-    /**
-     * APIMethod: getLongitudeFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Float} Longitude of the given MapObject LonLat
-     */
-    getLongitudeFromMapObjectLonLat: function(moLonLat) {
-        return this.sphericalMercator ? 
-            this.forwardMercator(moLonLat.lon, moLonLat.lat).lon :
-            moLonLat.lon;
-    },
-
-    /**
-     * APIMethod: getLatitudeFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Float} Latitude of the given MapObject LonLat
-     */
-    getLatitudeFromMapObjectLonLat: function(moLonLat) {
-        return this.sphericalMercator ? 
-            this.forwardMercator(moLonLat.lon, moLonLat.lat).lat :
-            moLonLat.lat;
-    },
-
-    /**
-     * APIMethod: getMapObjectLonLatFromLonLat
-     * 
-     * Parameters:
-     * lon - {Float}
-     * lat - {Float}
-     * 
-     * Returns:
-     * {Object} MapObject LonLat built from lon and lat params
-     */
-    getMapObjectLonLatFromLonLat: function(lon, lat) {
-        var mmLatLon;
-        if(this.sphericalMercator) {
-            var lonlat = this.inverseMercator(lon, lat);
-            mmLatLon = new MMLatLon(lonlat.lat, lonlat.lon);
-        } else {
-            mmLatLon = new MMLatLon(lat, lon);
-        }
-        return mmLatLon;
-    },
-
-  // Pixel
-    
-    /**
-     * APIMethod: getXFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Integer} X value of the MapObject Pixel
-     */
-    getXFromMapObjectPixel: function(moPixel) {
-        return moPixel.x;
-    },
-
-    /**
-     * APIMethod: getYFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Integer} Y value of the MapObject Pixel
-     */
-    getYFromMapObjectPixel: function(moPixel) {
-        return moPixel.y;
-    },
-
-    /**
-     * APIMethod: getMapObjectPixelFromXY
-     * 
-     * Parameters:
-     * x - {Integer}
-     * y - {Integer}
-     * 
-     * Returns:
-     * {Object} MapObject Pixel from x and y parameters
-     */
-    getMapObjectPixelFromXY: function(x, y) {
-        return new MMPoint(x, y);
-    },
-
-    CLASS_NAME: "OpenLayers.Layer.MultiMap"
-});
diff --git a/lib/OpenLayers/Layer/OSM.js b/lib/OpenLayers/Layer/OSM.js
new file mode 100644
index 0000000..005e7ec
--- /dev/null
+++ b/lib/OpenLayers/Layer/OSM.js
@@ -0,0 +1,123 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Layer/XYZ.js
+ */
+
+/**
+ * Class: OpenLayers.Layer.OSM
+ * This layer allows accessing OpenStreetMap tiles. By default the OpenStreetMap
+ *    hosted tile.openstreetmap.org Mapnik tileset is used. If you wish to use
+ *    a different layer instead, you need to provide a different
+ *    URL to the constructor. Here's an example for using OpenCycleMap:
+ * 
+ * (code)
+ *     new OpenLayers.Layer.OSM("OpenCycleMap", 
+ *       ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+ *        "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+ *        "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"]); 
+ * (end)
+ *
+ * Inherits from:
+ *  - <OpenLayers.Layer.XYZ>
+ */
+OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
+
+    /**
+     * APIProperty: name
+     * {String} The layer name. Defaults to "OpenStreetMap" if the first
+     * argument to the constructor is null or undefined.
+     */
+    name: "OpenStreetMap",
+
+    /**
+     * APIProperty: url
+     * {String} The tileset URL scheme. Defaults to
+     * : http://[a|b|c].tile.openstreetmap.org/${z}/${x}/${y}.png
+     * (the official OSM tileset) if the second argument to the constructor
+     * is null or undefined. To use another tileset you can have something
+     * like this:
+     * (code)
+     *     new OpenLayers.Layer.OSM("OpenCycleMap", 
+     *       ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+     *        "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
+     *        "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"]); 
+     * (end)
+     */
+    url: [
+        'http://a.tile.openstreetmap.org/${z}/${x}/${y}.png',
+        'http://b.tile.openstreetmap.org/${z}/${x}/${y}.png',
+        'http://c.tile.openstreetmap.org/${z}/${x}/${y}.png'
+    ],
+
+    /**
+     * Property: attribution
+     * {String} The layer attribution.
+     */
+    attribution: "Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>",
+
+    /**
+     * Property: sphericalMercator
+     * {Boolean}
+     */
+    sphericalMercator: true,
+
+    /**
+     * Property: wrapDateLine
+     * {Boolean}
+     */
+    wrapDateLine: true,
+
+    /** APIProperty: tileOptions
+     *  {Object} optional configuration options for <OpenLayers.Tile> instances
+     *  created by this Layer. Default is
+     *
+     *  (code)
+     *  {crossOriginKeyword: 'anonymous'}
+     *  (end)
+     *
+     *  When using OSM tilesets other than the default ones, it may be
+     *  necessary to set this to
+     *
+     *  (code)
+     *  {crossOriginKeyword: null}
+     *  (end)
+     *
+     *  if the server does not send Access-Control-Allow-Origin headers.
+     */
+    tileOptions: null,
+
+    /**
+     * Constructor: OpenLayers.Layer.OSM
+     *
+     * Parameters:
+     * name - {String} The layer name.
+     * url - {String} The tileset URL scheme.
+     * options - {Object} Configuration options for the layer. Any inherited
+     *     layer option can be set in this object (e.g.
+     *     <OpenLayers.Layer.Grid.buffer>).
+     */
+    initialize: function(name, url, options) {
+        OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
+        this.tileOptions = OpenLayers.Util.extend({
+            crossOriginKeyword: 'anonymous'
+        }, this.options && this.options.tileOptions);
+    },
+
+    /**
+     * Method: clone
+     */
+    clone: function(obj) {
+        if (obj == null) {
+            obj = new OpenLayers.Layer.OSM(
+                this.name, this.url, this.getOptions());
+        }
+        obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [obj]);
+        return obj;
+    },
+
+    CLASS_NAME: "OpenLayers.Layer.OSM"
+});
diff --git a/lib/OpenLayers/Layer/PointGrid.js b/lib/OpenLayers/Layer/PointGrid.js
index 7a82835..8e7ce29 100644
--- a/lib/OpenLayers/Layer/PointGrid.js
+++ b/lib/OpenLayers/Layer/PointGrid.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -69,7 +69,7 @@ OpenLayers.Layer.PointGrid = OpenLayers.Class(OpenLayers.Layer.Vector, {
 
     /**
      * APIProperty: origin
-     * {OpenLayers.LonLat} Grid origin.  The grid lattice will be aligned with 
+     * {<OpenLayers.LonLat>} Grid origin.  The grid lattice will be aligned with 
      * the origin.  If not set at construction, the center of the map's maximum 
      * extent is used.  Read-only.  Use the <setOrigin> method to modify this 
      * value.
diff --git a/lib/OpenLayers/Layer/PointTrack.js b/lib/OpenLayers/Layer/PointTrack.js
index e8d5e7d..c89da78 100644
--- a/lib/OpenLayers/Layer/PointTrack.js
+++ b/lib/OpenLayers/Layer/PointTrack.js
@@ -1,11 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/Vector.js
- * @requires OpenLayers/Console.js
  */
 
 /**
@@ -19,8 +18,8 @@
 OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
   
     /**
-     * APIProperty:
-     * dataFrom  - {<OpenLayers.Layer.PointTrack.TARGET_NODE>} or
+     * APIProperty: dataFrom
+     *     {<OpenLayers.Layer.PointTrack.TARGET_NODE>} or
      *     {<OpenLayers.Layer.PointTrack.SOURCE_NODE>} optional. If the lines
      *     should get the data/attributes from one of the two points it is
      *     composed of, which one should it be?
@@ -28,8 +27,8 @@ OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
     dataFrom: null,
     
     /**
-     * APIProperty:
-     * styleFrom  - {<OpenLayers.Layer.PointTrack.TARGET_NODE>} or
+     * APIProperty: styleFrom
+     *     {<OpenLayers.Layer.PointTrack.TARGET_NODE>} or
      *     {<OpenLayers.Layer.PointTrack.SOURCE_NODE>} optional. If the lines
      *     should get the style from one of the two points it is composed of,
      *     which one should it be?
@@ -45,9 +44,6 @@ OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
      * options  - {Object} Optional object with properties to tag onto the
      *            instance.
      */    
-    initialize: function(name, options) {
-        OpenLayers.Layer.Vector.prototype.initialize.apply(this, arguments);
-    },
         
     /**
      * APIMethod: addNodes
@@ -64,10 +60,8 @@ OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
      */
     addNodes: function(pointFeatures, options) {
         if (pointFeatures.length < 2) {
-            OpenLayers.Console.error(
-                    "At least two point features have to be added to create" +
-                    "a line from");
-            return;
+            throw new Error("At least two point features have to be added to " +
+                            "create a line from");
         }
         
         var lines = new Array(pointFeatures.length-1);
@@ -81,9 +75,7 @@ OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
               var lonlat = pointFeature.lonlat;
               endPoint = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
             } else if(endPoint.CLASS_NAME != "OpenLayers.Geometry.Point") {
-                OpenLayers.Console.error(
-                        "Only features with point geometries are supported.");
-                return;
+                throw new TypeError("Only features with point geometries are supported.");
             }
             
             if(i > 0) {
diff --git a/lib/OpenLayers/Layer/SphericalMercator.js b/lib/OpenLayers/Layer/SphericalMercator.js
index a4c5e28..25defc5 100644
--- a/lib/OpenLayers/Layer/SphericalMercator.js
+++ b/lib/OpenLayers/Layer/SphericalMercator.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -114,14 +114,14 @@ OpenLayers.Layer.SphericalMercator = {
      * Returns:
      * {<OpenLayers.LonLat>} The coordinates transformed to Mercator.
      */
-    forwardMercator: function(lon, lat) {
-        var x = lon * 20037508.34 / 180;
-        var y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180);
-
-        y = y * 20037508.34 / 180;
-        
-        return new OpenLayers.LonLat(x, y);
-    },
+    forwardMercator: (function() {
+        var gg = new OpenLayers.Projection("EPSG:4326");
+        var sm = new OpenLayers.Projection("EPSG:900913");
+        return function(lon, lat) {
+            var point = OpenLayers.Projection.transform({x: lon, y: lat}, gg, sm);
+            return new OpenLayers.LonLat(point.x, point.y);
+        };
+    })(),
 
     /**
      * APIMethod: inverseMercator
@@ -134,84 +134,13 @@ OpenLayers.Layer.SphericalMercator = {
      * Returns:
      * {<OpenLayers.LonLat>} The coordinates transformed to EPSG:4326.
      */
-    inverseMercator: function(x, y) {
-
-        var lon = (x / 20037508.34) * 180;
-        var lat = (y / 20037508.34) * 180;
-
-        lat = 180/Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);
-        
-        return new OpenLayers.LonLat(lon, lat);
-    },
-
-    /**
-     * Method: projectForward 
-     * Given an object with x and y properties in EPSG:4326, modify the x,y
-     * properties on the object to be the Spherical Mercator projected
-     * coordinates.
-     *
-     * Parameters:
-     * point - {Object} An object with x and y properties. 
-     * 
-     * Returns:
-     * {Object} The point, with the x and y properties transformed to spherical
-     * mercator.
-     */
-    projectForward: function(point) {
-        var lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(point.x, point.y);
-        point.x = lonlat.lon;
-        point.y = lonlat.lat;
-        return point;
-    },
-    
-    /**
-     * Method: projectInverse
-     * Given an object with x and y properties in Spherical Mercator, modify
-     * the x,y properties on the object to be the unprojected coordinates.
-     *
-     * Parameters:
-     * point - {Object} An object with x and y properties. 
-     * 
-     * Returns:
-     * {Object} The point, with the x and y properties transformed from
-     * spherical mercator to unprojected coordinates..
-     */
-    projectInverse: function(point) {
-        var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(point.x, point.y);
-        point.x = lonlat.lon;
-        point.y = lonlat.lat;
-        return point;
-    }
+    inverseMercator: (function() {
+        var gg = new OpenLayers.Projection("EPSG:4326");
+        var sm = new OpenLayers.Projection("EPSG:900913");
+        return function(x, y) {
+            var point = OpenLayers.Projection.transform({x: x, y: y}, sm, gg);
+            return new OpenLayers.LonLat(point.x, point.y);
+        };
+    })()
 
 };
-
-/**
- * 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
- */
-(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);
-        }
-    }
-    
-})();
diff --git a/lib/OpenLayers/Layer/TMS.js b/lib/OpenLayers/Layer/TMS.js
index 930a80a..da879b1 100644
--- a/lib/OpenLayers/Layer/TMS.js
+++ b/lib/OpenLayers/Layer/TMS.js
@@ -1,12 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  */
 
 /**
@@ -17,7 +16,7 @@
  *
  * Example:
  * (code)
- *     var layer = OpenLayers.Layer.TMS(
+ *     var layer = new OpenLayers.Layer.TMS(
  *         "My Layer", // name for display in LayerSwitcher
  *         "http://tilecache.osgeo.org/wms-c/Basic.py/", // service endpoint
  *         {layername: "basic", type: "png"} // required properties
@@ -71,7 +70,7 @@ OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      *
      * Example:
      * (code)
-     *     var layer = OpenLayers.Layer.TMS(
+     *     var layer = new OpenLayers.Layer.TMS(
      *         "My Layer",
      *         "http://tilecache.osgeo.org/wms-c/Basic.py/",
      *         {
@@ -87,8 +86,17 @@ OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
 
     /**
      * APIProperty: serverResolutions
-     * {Array} A list of all resolutions available on the server.  Only set this 
-     *     property if the map resolutions differs from the server.
+     * {Array} A list of all resolutions available on the server.  Only set this
+     *     property if the map resolutions differ from the server. This
+     *     property serves two purposes. (a) <serverResolutions> can include
+     *     resolutions that the server supports and that you don't want to
+     *     provide with this layer; you can also look at <zoomOffset>, which is
+     *     an alternative to <serverResolutions> for that specific purpose.
+     *     (b) The map can work with resolutions that aren't supported by
+     *     the server, i.e. that aren't in <serverResolutions>. When the
+     *     map is displayed in such a resolution data for the closest
+     *     server-supported resolution is loaded and the layer div is
+     *     stretched as necessary.
      */
     serverResolutions: null,
 
@@ -123,15 +131,6 @@ OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
     },    
 
     /**
-     * APIMethod:destroy
-     */
-    destroy: function() {
-        // for now, nothing special to do here. 
-        OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);  
-    },
-
-    
-    /**
      * APIMethod: clone
      * Create a complete copy of this layer.
      *
@@ -171,12 +170,10 @@ OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      */
     getURL: function (bounds) {
         bounds = this.adjustBounds(bounds);
-        var res = this.map.getResolution();
+        var res = this.getServerResolution();
         var x = Math.round((bounds.left - this.tileOrigin.lon) / (res * this.tileSize.w));
         var y = Math.round((bounds.bottom - this.tileOrigin.lat) / (res * this.tileSize.h));
-        var z = this.serverResolutions != null ?
-            OpenLayers.Util.indexOf(this.serverResolutions, res) :
-            this.map.getZoom() + this.zoomOffset;
+        var z = this.getServerZoom();
         var path = this.serviceVersion + "/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type; 
         var url = this.url;
         if (OpenLayers.Util.isArray(url)) {
diff --git a/lib/OpenLayers/Layer/Text.js b/lib/OpenLayers/Layer/Text.js
index 870905e..2e08180 100644
--- a/lib/OpenLayers/Layer/Text.js
+++ b/lib/OpenLayers/Layer/Text.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -80,7 +80,7 @@ OpenLayers.Layer.Text = OpenLayers.Class(OpenLayers.Layer.Markers, {
      */
     initialize: function(name, options) {
         OpenLayers.Layer.Markers.prototype.initialize.apply(this, arguments);
-        this.features = new Array();
+        this.features = [];
     },
 
     /**
@@ -234,6 +234,9 @@ OpenLayers.Layer.Text = OpenLayers.Class(OpenLayers.Layer.Markers, {
      * 
      * Parameters:
      * evt - {Event} 
+     *
+     * Context:
+     * - {<OpenLayers.Feature>}
      */
     markerClick: function(evt) {
         var sameMarkerClicked = (this == this.layer.selectedFeature);
diff --git a/lib/OpenLayers/Layer/TileCache.js b/lib/OpenLayers/Layer/TileCache.js
index 3510af5..e4e92e9 100644
--- a/lib/OpenLayers/Layer/TileCache.js
+++ b/lib/OpenLayers/Layer/TileCache.js
@@ -1,12 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  */
 
 /**
@@ -37,8 +36,15 @@ OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
 
     /**
      * APIProperty: serverResolutions
-     * {Array} A list of all resolutions available on the server.  Only set this 
-     *     property if the map resolutions differs from the server.
+     * {Array} A list of all resolutions available on the server.  Only set this
+     *     property if the map resolutions differ from the server. This
+     *     property serves two purposes. (a) <serverResolutions> can include
+     *     resolutions that the server supports and that you don't want to
+     *     provide with this layer. (b) The map can work with resolutions
+     *     that aren't supported by the server, i.e. that aren't in
+     *     <serverResolutions>. When the map is displayed in such a resolution
+     *     data for the closest server-supported resolution is loaded and the
+     *     layer div is stretched as necessary.
      */
     serverResolutions: null,
 
@@ -102,7 +108,7 @@ OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
      *     passed-in bounds and appropriate tile size specified as parameters.
      */
     getURL: function(bounds) {
-        var res = this.map.getResolution();
+        var res = this.getServerResolution();
         var bbox = this.maxExtent;
         var size = this.tileSize;
         var tileX = Math.round((bounds.left - bbox.left) / (res * size.w));
diff --git a/lib/OpenLayers/Layer/UTFGrid.js b/lib/OpenLayers/Layer/UTFGrid.js
new file mode 100644
index 0000000..587047b
--- /dev/null
+++ b/lib/OpenLayers/Layer/UTFGrid.js
@@ -0,0 +1,178 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Layer/XYZ.js
+ * @requires OpenLayers/Tile/UTFGrid.js
+ */
+
+/** 
+ * Class: OpenLayers.Layer.UTFGrid
+ * This Layer reads from UTFGrid tiled data sources.  Since UTFGrids are 
+ * essentially JSON-based ASCII art with attached attributes, they are not 
+ * visibly rendered.  In order to use them in the map, you must add a 
+ * <OpenLayers.Control.UTFGrid> ontrol as well.
+ *
+ * Example:
+ *
+ * (start code)
+ * var world_utfgrid = new OpenLayers.Layer.UTFGrid({
+ *     url: "/tiles/world_utfgrid/${z}/${x}/${y}.json",
+ *     utfgridResolution: 4,
+ *     displayInLayerSwitcher: false
+ * );
+ * map.addLayer(world_utfgrid);
+ * 
+ * var control = new OpenLayers.Control.UTFGrid({
+ *     layers: [world_utfgrid],
+ *     handlerMode: 'move',
+ *     callback: function(dataLookup) {
+ *         // do something with returned data
+ *     }
+ * })
+ * (end code)
+ *
+ * 
+ * Inherits from:
+ *  - <OpenLayers.Layer.XYZ>
+ */
+OpenLayers.Layer.UTFGrid = OpenLayers.Class(OpenLayers.Layer.XYZ, {
+    
+    /**
+     * APIProperty: isBaseLayer
+     * Default is true, as this is designed to be a base tile source. 
+     */
+    isBaseLayer: false,
+    
+    /**
+     * APIProperty: projection
+     * {<OpenLayers.Projection>}
+     * Source projection for the UTFGrids.  Default is "EPSG:900913".
+     */
+    projection: new OpenLayers.Projection("EPSG:900913"),
+
+    /**
+     * Property: useJSONP
+     * {Boolean}
+     * Should we use a JSONP script approach instead of a standard AJAX call?
+     *
+     * Set to true for using utfgrids from another server. 
+     * Avoids same-domain policy restrictions. 
+     * Note that this only works if the server accepts 
+     * the callback GET parameter and dynamically 
+     * wraps the returned json in a function call.
+     * 
+     * Default is false
+     */
+    useJSONP: false,
+    
+    /**
+     * APIProperty: url
+     * {String}
+     * URL tempate for UTFGrid tiles.  Include x, y, and z parameters.
+     * E.g. "/tiles/${z}/${x}/${y}.json"
+     */
+
+    /**
+     * APIProperty: utfgridResolution
+     * {Number}
+     * Ratio of the pixel width to the width of a UTFGrid data point.  If an 
+     *     entry in the grid represents a 4x4 block of pixels, the 
+     *     utfgridResolution would be 4.  Default is 2 (specified in 
+     *     <OpenLayers.Tile.UTFGrid>).
+     */
+
+    /**
+     * Property: tileClass
+     * {<OpenLayers.Tile>} The tile class to use for this layer.
+     *     Defaults is <OpenLayers.Tile.UTFGrid>.
+     */
+    tileClass: OpenLayers.Tile.UTFGrid,
+
+    /**
+     * Constructor: OpenLayers.Layer.UTFGrid
+     * Create a new UTFGrid layer.
+     *
+     * Parameters:
+     * config - {Object} Configuration properties for the layer.
+     *
+     * Required configuration properties:
+     * url - {String} The url template for UTFGrid tiles.  See the <url> property.
+     */
+    initialize: function(options) {
+        OpenLayers.Layer.Grid.prototype.initialize.apply(
+            this, [options.name, options.url, {}, options]
+        );
+        this.tileOptions = OpenLayers.Util.extend({
+            utfgridResolution: this.utfgridResolution
+        }, this.tileOptions);
+    },
+    
+    /**
+     * APIMethod: clone
+     * Create a clone of this layer
+     *
+     * Parameters:
+     * obj - {Object} Only used by a subclass of this layer.
+     * 
+     * Returns:
+     * {<OpenLayers.Layer.UTFGrid>} An exact clone of this OpenLayers.Layer.UTFGrid
+     */
+    clone: function (obj) {
+        if (obj == null) {
+            obj = new OpenLayers.Layer.UTFGrid(this.getOptions());
+        }
+
+        // get all additions from superclasses
+        obj = OpenLayers.Layer.Grid.prototype.clone.apply(this, [obj]);
+
+        return obj;
+    },
+
+    /**
+     * APIProperty: getFeatureInfo
+     * Get details about a feature associated with a map location.  The object
+     *     returned will have id and data properties.  If the given location
+     *     doesn't correspond to a feature, null will be returned.
+     *
+     * Parameters:
+     * location - {<OpenLayers.LonLat>} map location
+     *
+     * Returns:
+     * {Object} Object representing the feature id and UTFGrid data 
+     *     corresponding to the given map location.  Returns null if the given
+     *     location doesn't hit a feature.
+     */
+    getFeatureInfo: function(location) {
+        var info = null;
+        var tileInfo = this.getTileData(location);
+        if (tileInfo.tile) {
+            info = tileInfo.tile.getFeatureInfo(tileInfo.i, tileInfo.j);
+        }
+        return info;
+    },
+
+    /**
+     * APIMethod: getFeatureId
+     * Get the identifier for the feature associated with a map location.
+     *
+     * Parameters:
+     * location - {<OpenLayers.LonLat>} map location
+     *
+     * Returns:
+     * {String} The feature identifier corresponding to the given map location.
+     *     Returns null if the location doesn't hit a feature.
+     */
+    getFeatureId: function(location) {
+        var id = null;
+        var info = this.getTileData(location);
+        if (info.tile) {
+            id = info.tile.getFeatureId(info.i, info.j);
+        }
+        return id;
+    },
+
+    CLASS_NAME: "OpenLayers.Layer.UTFGrid"
+});
diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js
index bf48a02..ed2271a 100644
--- a/lib/OpenLayers/Layer/Vector.js
+++ b/lib/OpenLayers/Layer/Vector.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -24,9 +24,10 @@
 OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
 
     /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+     * APIProperty: events
+     * {<OpenLayers.Events>}
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * layer.events.register(type, obj, listener);
      * (end)
@@ -38,7 +39,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * 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>):
+     * Supported map event types (in addition to those from <OpenLayers.Layer.events>):
      * beforefeatureadded - Triggered before a feature is added.  Listeners
      *      will receive an object with a *feature* property referencing the
      *      feature to be added.  To stop the feature from being added, a
@@ -65,7 +66,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * 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
+     * beforefeatureselected - Triggered before 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.
@@ -111,13 +112,6 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * refresh - Triggered when something wants a strategy to ask the protocol
      *      for a new set of features.
      */
-    EVENT_TYPES: ["beforefeatureadded", "beforefeaturesadded",
-                  "featureadded", "featuresadded", "beforefeatureremoved",
-                  "beforefeaturesremoved", "featureremoved", "featuresremoved",
-                  "beforefeatureselected", "featureselected", "featureunselected", 
-                  "beforefeaturemodified", "featuremodified", "afterfeaturemodified",
-                  "vertexmodified", "vertexremoved", "sketchstarted",
-                  "sketchmodified", "sketchcomplete", "refresh"],
 
     /**
      * APIProperty: isBaseLayer
@@ -226,6 +220,12 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * {Boolean} Whether the Vector Layer features have been drawn yet.
      */
     drawn: false,
+    
+    /** 
+     * APIProperty: ratio
+     * {Float} This specifies the ratio of the size of the visiblity of the Vector Layer features to the size of the map.
+     */   
+    ratio: 1,
 
     /**
      * Constructor: OpenLayers.Layer.Vector
@@ -240,13 +240,6 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * {<OpenLayers.Layer.Vector>} A new vector layer
      */
     initialize: function(name, options) {
-        
-        // concatenate events specific to vector with those from the base
-        this.EVENT_TYPES =
-            OpenLayers.Layer.Vector.prototype.EVENT_TYPES.concat(
-            OpenLayers.Layer.prototype.EVENT_TYPES
-        );
-
         OpenLayers.Layer.prototype.initialize.apply(this, arguments);
 
         // allow user-set renderer, otherwise assign one
@@ -381,7 +374,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
     displayError: function() {
         if (this.reportError) {
             OpenLayers.Console.userError(OpenLayers.i18n("browserNotSupported", 
-                                     {'renderers':this.renderers.join("\n")}));
+                                     {renderers: this. renderers.join('\n')}));
         }    
     },
 
@@ -402,7 +395,11 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
             this.map.removeLayer(this);
         } else {
             this.renderer.map = this.map;
-            this.renderer.setSize(this.map.getSize());
+
+            var newSize = this.map.getSize();
+            newSize.w = newSize.w * this.ratio;
+            newSize.h = newSize.h * this.ratio;
+            this.renderer.setSize(newSize);
         }
     },
 
@@ -451,7 +448,11 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      */
     onMapResize: function() {
         OpenLayers.Layer.prototype.onMapResize.apply(this, arguments);
-        this.renderer.setSize(this.map.getSize());
+        
+        var newSize = this.map.getSize();
+        newSize.w = newSize.w * this.ratio;
+        newSize.h = newSize.h * this.ratio;
+        this.renderer.setSize(newSize);
     },
 
     /**
@@ -472,38 +473,43 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
     moveTo: function(bounds, zoomChanged, dragging) {
         OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
         
-        var ng = (OpenLayers.Renderer.NG && this.renderer instanceof OpenLayers.Renderer.NG);
-        if (ng) {
-            dragging || this.renderer.updateDimensions(zoomChanged);
-        } else {
-            var coordSysUnchanged = true;
-
-            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 (OpenLayers.IS_GECKO === true) {
-                    this.div.scrollLeft = this.div.scrollLeft;
-                }
+        var coordSysUnchanged = true;
+        if (!dragging) {
+            this.renderer.root.style.visibility = 'hidden';
+
+            var viewSize = this.map.getSize(),
+                viewWidth = viewSize.w,
+                viewHeight = viewSize.h,
+                offsetLeft = (viewWidth / 2 * this.ratio) - viewWidth / 2,
+                offsetTop = (viewHeight / 2 * this.ratio) - viewHeight / 2;
+            offsetLeft += parseInt(this.map.layerContainerDiv.style.left, 10);
+            offsetLeft = -Math.round(offsetLeft);
+            offsetTop += parseInt(this.map.layerContainerDiv.style.top, 10);
+            offsetTop = -Math.round(offsetTop);
+
+            this.div.style.left = offsetLeft + 'px';
+            this.div.style.top = offsetTop + 'px';
+
+            var extent = this.map.getExtent().scale(this.ratio);
+            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 (OpenLayers.IS_GECKO === true) {
+                this.div.scrollLeft = this.div.scrollLeft;
+            }
             
-                if(!zoomChanged && coordSysUnchanged) {
-                    for(var i in this.unrenderedFeatures) {
-                        var feature = this.unrenderedFeatures[i];
-                        this.drawFeature(feature);
-                    }
+            if (!zoomChanged && coordSysUnchanged) {
+                for (var i in this.unrenderedFeatures) {
+                    var feature = this.unrenderedFeatures[i];
+                    this.drawFeature(feature);
                 }
             }
         }
-        if (!this.drawn || (!ng && (zoomChanged || !coordSysUnchanged))) {
+        if (!this.drawn || zoomChanged || !coordSysUnchanged) {
             this.drawn = true;
             var feature;
             for(var i=0, len=this.features.length; i<len; i++) {
@@ -514,20 +520,6 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
         }    
     },
     
-    /**
-     * APIMethod: redraw
-     * Redraws the layer.  Returns true if the layer was redrawn, false if not.
-     *
-     * Returns:
-     * {Boolean} The layer was redrawn.
-     */
-    redraw: function() {
-        if (OpenLayers.Renderer.NG && this.renderer instanceof OpenLayers.Renderer.NG) {
-            this.drawn = false;
-        }
-        return OpenLayers.Layer.prototype.redraw.apply(this, arguments);
-    },
-    
     /** 
      * APIMethod: display
      * Hide or show the Layer
@@ -581,9 +573,8 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
             
             if (this.geometryType &&
               !(feature.geometry instanceof this.geometryType)) {
-                var throwStr = OpenLayers.i18n('componentShouldBe',
-                          {'geomType':this.geometryType.prototype.CLASS_NAME});
-                throw throwStr;
+                throw new TypeError('addFeatures: component should be an ' +
+                                    this.geometryType.prototype.CLASS_NAME);
               }
 
             //give feature reference to its layer
@@ -843,8 +834,10 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      */
     getFeatureFromEvent: function(evt) {
         if (!this.renderer) {
-            OpenLayers.Console.error(OpenLayers.i18n("getFeatureError")); 
-            return null;
+            throw new Error('getFeatureFromEvent called on layer with no ' +
+                            'renderer. This usually means you destroyed a ' +
+                            'layer, but not some handler which is associated ' +
+                            'with it.');
         }
         var feature = null;
         var featureId = this.renderer.getFeatureIdFromEvent(evt);
@@ -923,7 +916,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * attrValue - {Mixed}
      *
      * Returns:
-     * Array(<OpenLayers.Feature.Vector>) An array of features that have the 
+     * Array({<OpenLayers.Feature.Vector>}) An array of features that have the 
      * passed named attribute set to the given value.
      */
     getFeaturesByAttribute: function(attrName, attrValue) {
@@ -964,7 +957,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
      * Does nothing by default. Override this if you
      * need to do something on feature updates.
      *
-     * Paarameters: 
+     * Parameters: 
      * feature - {<OpenLayers.Feature.Vector>} 
      */
     onFeatureInsert: function(feature) {
diff --git a/lib/OpenLayers/Layer/Vector/RootContainer.js b/lib/OpenLayers/Layer/Vector/RootContainer.js
index bf98fe9..1c146ee 100644
--- a/lib/OpenLayers/Layer/Vector/RootContainer.js
+++ b/lib/OpenLayers/Layer/Vector/RootContainer.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -50,9 +50,6 @@ OpenLayers.Layer.Vector.RootContainer = OpenLayers.Class(OpenLayers.Layer.Vector
      * {<OpenLayers.Layer.Vector.RootContainer>} A new vector layer root
      *     container
      */
-    initialize: function(name, options) {
-        OpenLayers.Layer.Vector.prototype.initialize.apply(this, arguments);
-    },
     
     /**
      * Method: display
diff --git a/lib/OpenLayers/Layer/VirtualEarth.js b/lib/OpenLayers/Layer/VirtualEarth.js
deleted file mode 100644
index 5e090e5..0000000
--- a/lib/OpenLayers/Layer/VirtualEarth.js
+++ /dev/null
@@ -1,389 +0,0 @@
-/* Copyright (c) 2006-2011 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/SphericalMercator.js
- * @requires OpenLayers/Layer/EventPane.js
- * @requires OpenLayers/Layer/FixedZoomLevels.js
- * @requires OpenLayers/Lang.js
- */
-
-/**
- * Class: OpenLayers.Layer.VirtualEarth
- * Instances of OpenLayers.Layer.VirtualEarth are used to display the data from
- *     the Bing Maps AJAX Control (see e.g. 
- *     http://msdn.microsoft.com/library/bb429619.aspx). Create a VirtualEarth 
- *     layer with the <OpenLayers.Layer.VirtualEarth> constructor.
- *     
- * Inherits from:
- *  - <OpenLayers.Layer.EventPane>
- *  - <OpenLayers.Layer.FixedZoomLevels>
- */
-OpenLayers.Layer.VirtualEarth = OpenLayers.Class(
-    OpenLayers.Layer.EventPane,
-    OpenLayers.Layer.FixedZoomLevels, {
-    
-    /** 
-     * Constant: MIN_ZOOM_LEVEL
-     * {Integer} 1 
-     */
-    MIN_ZOOM_LEVEL: 1,
-    
-    /** 
-     * Constant: MAX_ZOOM_LEVEL
-     * {Integer} 19
-     */
-    MAX_ZOOM_LEVEL: 19,
-
-    /** 
-     * Constant: RESOLUTIONS
-     * {Array(Float)} Hardcode these resolutions so that they are more closely
-     *                tied with the standard wms projection
-     */
-    RESOLUTIONS: [
-        1.40625, 
-        0.703125, 
-        0.3515625, 
-        0.17578125, 
-        0.087890625, 
-        0.0439453125,
-        0.02197265625, 
-        0.010986328125, 
-        0.0054931640625, 
-        0.00274658203125,
-        0.001373291015625, 
-        0.0006866455078125, 
-        0.00034332275390625, 
-        0.000171661376953125, 
-        0.0000858306884765625, 
-        0.00004291534423828125,
-        0.00002145767211914062, 
-        0.00001072883605957031,
-        0.00000536441802978515
-    ],
-
-    /**
-     * APIProperty: type
-     * {VEMapType}
-     */
-    type: null,
-
-    /**
-     * APIProperty: wrapDateLine
-     * {Boolean} Allow user to pan forever east/west.  Default is true.  
-     *     Setting this to false only restricts panning if 
-     *     <sphericalMercator> is true. 
-     */
-    wrapDateLine: true,
-
-    /**
-     * APIProperty: sphericalMercator
-     * {Boolean} Should the map act as a mercator-projected map? This will
-     *     cause all interactions with the map to be in the actual map
-     *     projection, which allows support for vector drawing, overlaying
-     *     other maps, etc. 
-     */
-    sphericalMercator: false,
-    
-    /**
-     * APIProperty: animationEnabled
-     * {Boolean} If set to true, the transition between zoom levels will be
-     *     animated. Set to false to match the zooming experience of other
-     *     layer types. Default is true.
-     */
-    animationEnabled: true, 
-
-    /** 
-     * Constructor: OpenLayers.Layer.VirtualEarth
-     * Creates a new instance of a OpenLayers.Layer.VirtualEarth. If you use an
-     *     instance of OpenLayers.Layer.VirtualEarth in you map, you should set 
-     *     the <OpenLayers.Map> option restrictedExtent to a meaningful value,
-     *     e.g.:
-     * (code)
-     * var map = new OpenLayers.Map( 'map', {
-     *     // other map options
-     *     restrictedExtent : OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
-     * } );
-     * 
-     * var veLayer = new OpenLayers.Layer.VirtualEarth (
-     *     "Virtual Earth Layer"
-     * );
-     * 
-     * map.addLayer( veLayer );
-     * (end)
-     * 
-     * Parameters:
-     * name - {String}
-     * options - {Object}
-     */
-    initialize: function(name, options) {
-        OpenLayers.Layer.EventPane.prototype.initialize.apply(this, arguments);
-        OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this, 
-                                                                    arguments);
-        if(this.sphericalMercator) {
-            OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator);
-            this.initMercatorParameters();
-        }
-    },
-    
-    /**
-     * Method: loadMapObject
-     */
-    loadMapObject:function() {
-
-        // create div and set to same size as map
-        var veDiv = OpenLayers.Util.createDiv(this.name);
-        var sz = this.map.getSize();
-        veDiv.style.width = sz.w + "px";
-        veDiv.style.height = sz.h + "px";
-        this.div.appendChild(veDiv);
-
-        try { // crash prevention
-            this.mapObject = new VEMap(this.name);
-        } catch (e) { }
-
-        if (this.mapObject != null) {
-            try { // this is to catch a Mozilla bug without falling apart
-
-                // The fourth argument is whether the map is 'fixed' -- not 
-                // draggable. See: 
-                // http://blogs.msdn.com/virtualearth/archive/2007/09/28/locking-a-virtual-earth-map.aspx
-                //
-                this.mapObject.LoadMap(null, null, this.type, true);
-                this.mapObject.AttachEvent("onmousedown", OpenLayers.Function.True);
-
-            } catch (e) { }
-            this.mapObject.HideDashboard();
-            if(typeof this.mapObject.SetAnimationEnabled == "function") {
-                this.mapObject.SetAnimationEnabled(this.animationEnabled);
-            }
-        }
-
-        //can we do smooth panning? this is an unpublished method, so we need 
-        // to be careful
-        if ( !this.mapObject ||
-             !this.mapObject.vemapcontrol ||
-             !this.mapObject.vemapcontrol.PanMap ||
-             (typeof this.mapObject.vemapcontrol.PanMap != "function")) {
-
-            this.dragPanMapObject = null;
-        }
-
-    },
-
-    /**
-     * Method: onMapResize
-     */
-    onMapResize: function() {
-        this.mapObject.Resize(this.map.size.w, this.map.size.h);
-    },
-
-    /** 
-     * APIMethod: getWarningHTML
-     * 
-     * Returns: 
-     * {String} String with information on why layer is broken, how to get
-     *          it working.
-     */
-    getWarningHTML:function() {
-        return OpenLayers.i18n(
-            "getLayerWarning", {'layerType':'VE', 'layerLib':'VirtualEarth'}
-        );
-    },
-
-
-
-    /************************************
-     *                                  *
-     *   MapObject Interface Controls   *
-     *                                  *
-     ************************************/
-
-
-  // Get&Set Center, Zoom
-
-    /** 
-     * APIMethod: setMapObjectCenter
-     * Set the mapObject to the specified center and zoom
-     * 
-     * Parameters:
-     * center - {Object} MapObject LonLat format
-     * zoom - {int} MapObject zoom format
-     */
-    setMapObjectCenter: function(center, zoom) {
-        this.mapObject.SetCenterAndZoom(center, zoom); 
-    },
-   
-    /**
-     * APIMethod: getMapObjectCenter
-     * 
-     * Returns: 
-     * {Object} The mapObject's current center in Map Object format
-     */
-    getMapObjectCenter: function() {
-        return this.mapObject.GetCenter();
-    },
-
-    /**
-     * APIMethod: dragPanMapObject
-     * 
-     * Parameters:
-     * dX - {Integer}
-     * dY - {Integer}
-     */
-    dragPanMapObject: function(dX, dY) {
-        this.mapObject.vemapcontrol.PanMap(dX, -dY);
-    },
-
-    /** 
-     * APIMethod: getMapObjectZoom
-     * 
-     * Returns:
-     * {Integer} The mapObject's current zoom, in Map Object format
-     */
-    getMapObjectZoom: function() {
-        return this.mapObject.GetZoomLevel();
-    },
-
-
-  // LonLat - Pixel Translation
-  
-    /**
-     * APIMethod: getMapObjectLonLatFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Object} MapObject LonLat translated from MapObject Pixel
-     */
-    getMapObjectLonLatFromMapObjectPixel: function(moPixel) {
-        //the conditional here is to test if we are running the v6 of VE
-        return (typeof VEPixel != 'undefined') 
-            ? this.mapObject.PixelToLatLong(moPixel)
-            : this.mapObject.PixelToLatLong(moPixel.x, moPixel.y);
-    },
-
-    /**
-     * APIMethod: getMapObjectPixelFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Object} MapObject Pixel transtlated from MapObject LonLat
-     */
-    getMapObjectPixelFromMapObjectLonLat: function(moLonLat) {
-        return this.mapObject.LatLongToPixel(moLonLat);
-    },
-
-
-    /************************************
-     *                                  *
-     *       MapObject Primitives       *
-     *                                  *
-     ************************************/
-
-
-  // LonLat
-    
-    /**
-     * APIMethod: getLongitudeFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Float} Longitude of the given MapObject LonLat
-     */
-    getLongitudeFromMapObjectLonLat: function(moLonLat) {
-        return this.sphericalMercator ? 
-            this.forwardMercator(moLonLat.Longitude, moLonLat.Latitude).lon :
-            moLonLat.Longitude;
-    },
-
-    /**
-     * APIMethod: getLatitudeFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Float} Latitude of the given MapObject LonLat
-     */
-    getLatitudeFromMapObjectLonLat: function(moLonLat) {
-        return this.sphericalMercator ? 
-            this.forwardMercator(moLonLat.Longitude, moLonLat.Latitude).lat :
-            moLonLat.Latitude;
-    },
-
-    /**
-     * APIMethod: getMapObjectLonLatFromLonLat
-     * 
-     * Parameters:
-     * lon - {Float}
-     * lat - {Float}
-     * 
-     * Returns:
-     * {Object} MapObject LonLat built from lon and lat params
-     */
-    getMapObjectLonLatFromLonLat: function(lon, lat) {
-        var veLatLong;
-        if(this.sphericalMercator) {
-            var lonlat = this.inverseMercator(lon, lat);
-            veLatLong = new VELatLong(lonlat.lat, lonlat.lon);
-        } else {
-            veLatLong = new VELatLong(lat, lon);
-        }
-        return veLatLong;
-    },
-
-  // Pixel
-    
-    /**
-     * APIMethod: getXFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Integer} X value of the MapObject Pixel
-     */
-    getXFromMapObjectPixel: function(moPixel) {
-        return moPixel.x;
-    },
-
-    /**
-     * APIMethod: getYFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Integer} Y value of the MapObject Pixel
-     */
-    getYFromMapObjectPixel: function(moPixel) {
-        return moPixel.y;
-    },
-
-    /**
-     * APIMethod: getMapObjectPixelFromXY
-     * 
-     * Parameters:
-     * x - {Integer}
-     * y - {Integer}
-     * 
-     * Returns:
-     * {Object} MapObject Pixel from x and y parameters
-     */
-    getMapObjectPixelFromXY: function(x, y) {
-        //the conditional here is to test if we are running the v6 of VE
-        return (typeof VEPixel != 'undefined') ? new VEPixel(x, y)
-                         : new Msn.VE.Pixel(x, y);
-    },
-
-    CLASS_NAME: "OpenLayers.Layer.VirtualEarth"
-});
diff --git a/lib/OpenLayers/Layer/WFS.js b/lib/OpenLayers/Layer/WFS.js
deleted file mode 100644
index af9ef03..0000000
--- a/lib/OpenLayers/Layer/WFS.js
+++ /dev/null
@@ -1,610 +0,0 @@
-/* Copyright (c) 2006-2011 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/Tile/WFS.js
- * @requires OpenLayers/Layer/Vector.js
- * @requires OpenLayers/Layer/Markers.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
- */
-
-/**
- * Class: OpenLayers.Layer.WFS
- * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.Vector
- *     with a Protocol.WFS and one or more Strategies.
- * 
- * Inherits from:
- *  - <OpenLayers.Layer.Vector>
- *  - <OpenLayers.Layer.Markers>
- */
-OpenLayers.Layer.WFS = OpenLayers.Class(
-  OpenLayers.Layer.Vector, OpenLayers.Layer.Markers, {
-
-    /**
-     * APIProperty: isBaseLayer
-     * {Boolean} WFS layer is not a base layer by default. 
-     */
-    isBaseLayer: false,
-    
-    /**
-     * Property: tile
-     * {<OpenLayers.Tile.WFS>}
-     */
-    tile: null,    
-    
-    /**
-     * APIProperty: ratio
-     * {Float} The ratio property determines the size of the serverside query
-     *    relative to the map viewport size. By default, we load an area twice
-     *    as big as the map, to allow for panning without immediately reload.
-     *    Setting this to 1 will cause the area of the WFS request to match
-     *    the map area exactly. It is recommended to set this to some number
-     *    at least slightly larger than 1, otherwise accidental clicks can
-     *    cause a data reload, by moving the map only 1 pixel.
-     */
-    ratio: 2,
-
-    /**  
-     * Property: DEFAULT_PARAMS
-     * {Object} Hashtable of default key/value parameters
-     */
-    DEFAULT_PARAMS: { service: "WFS",
-                      version: "1.0.0",
-                      request: "GetFeature"
-                    },
-    
-    /** 
-     * APIProperty: featureClass
-     * {<OpenLayers.Feature>} If featureClass is defined, an old-style markers
-     *     based WFS layer is created instead of a new-style vector layer. If
-     *     sent, this should be a subclass of OpenLayers.Feature
-     */
-    featureClass: null,
-    
-    /**
-      * APIProperty: format
-      * {<OpenLayers.Format>} The format you want the data to be parsed with.
-      * Must be passed in the constructor. Should be a class, not an instance.
-      * This option can only be used if no featureClass is passed / vectorMode
-      * is false: if a featureClass is passed, then this parameter is ignored.
-      */
-    format: null,
-
-    /** 
-     * Property: formatObject
-     * {<OpenLayers.Format>} Internally created/managed format object, used by
-     * the Tile to parse data.
-     */
-    formatObject: null,
-
-    /**
-     * APIProperty: formatOptions
-     * {Object} Hash of options which should be passed to the format when it is
-     * created. Must be passed in the constructor.
-     */
-    formatOptions: null, 
-
-    /**
-     * Property: vectorMode
-     * {Boolean} Should be calculated automatically. Determines whether the
-     *     layer is in vector mode or marker mode.
-     */
-    vectorMode: true, 
-    
-    /**
-     * APIProperty: encodeBBOX
-     * {Boolean} Should the BBOX commas be encoded? The WMS spec says 'no', 
-     *     but some services want it that way. Default false.
-     */
-    encodeBBOX: false,
-    
-    /**
-     * APIProperty: extractAttributes 
-     * {Boolean} Should the WFS layer parse attributes from the retrieved
-     *     GML? Defaults to false. If enabled, parsing is slower, but 
-     *     attributes are available in the attributes property of 
-     *     layer features.
-     */
-    extractAttributes: false,
-
-    /**
-     * Constructor: OpenLayers.Layer.WFS
-     *
-     * Parameters:
-     * name - {String} 
-     * url - {String} 
-     * params - {Object} 
-     * options - {Object} Hashtable of extra options to tag onto the layer
-     */
-    initialize: function(name, url, params, options) {
-        if (options == undefined) { options = {}; } 
-        
-        if (options.featureClass || 
-            !OpenLayers.Layer.Vector || 
-            !OpenLayers.Feature.Vector) {
-            this.vectorMode = false;
-        }    
-
-        // Uppercase params
-        params = OpenLayers.Util.upperCaseObject(params);
-        
-        // Turn off error reporting, browsers like Safari may work
-        // depending on the setup, and we don't want an unneccesary alert.
-        OpenLayers.Util.extend(options, {'reportError': false});
-        var newArguments = [];
-        newArguments.push(name, options);
-        OpenLayers.Layer.Vector.prototype.initialize.apply(this, newArguments);
-        if (!this.renderer || !this.vectorMode) {
-            this.vectorMode = false; 
-            if (!options.featureClass) {
-                options.featureClass = OpenLayers.Feature.WFS;
-            }   
-            OpenLayers.Layer.Markers.prototype.initialize.apply(this, 
-                                                                newArguments);
-        }
-        
-        if (this.params && this.params.typename && !this.options.typename) {
-            this.options.typename = this.params.typename;
-        }
-        
-        if (!this.options.geometry_column) {
-            this.options.geometry_column = "the_geom";
-        }    
-        
-        this.params = OpenLayers.Util.applyDefaults(
-            params, 
-            OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)
-        );
-        this.url = url;
-    },    
-    
-
-    /**
-     * APIMethod: destroy
-     */
-    destroy: function() {
-        if (this.vectorMode) {
-            OpenLayers.Layer.Vector.prototype.destroy.apply(this, arguments);
-        } else {    
-            OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments);
-        }    
-        if (this.tile) {
-            this.tile.destroy();
-        }
-        this.tile = null;
-
-        this.ratio = null;
-        this.featureClass = null;
-        this.format = null;
-
-        if (this.formatObject && this.formatObject.destroy) {
-            this.formatObject.destroy();
-        }
-        this.formatObject = null;
-        
-        this.formatOptions = null;
-        this.vectorMode = null;
-        this.encodeBBOX = null;
-        this.extractAttributes = null;
-    },
-    
-    /**
-     * Method: setMap
-     * 
-     * Parameters:
-     * map - {<OpenLayers.Map>} 
-     */
-    setMap: function(map) {
-        if (this.vectorMode) {
-            OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments);
-            
-            var options = {
-              'extractAttributes': this.extractAttributes
-            };
-            
-            OpenLayers.Util.extend(options, this.formatOptions);
-            if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
-                options.externalProjection = this.projection;
-                options.internalProjection = this.map.getProjectionObject();
-            }    
-            
-            this.formatObject = this.format ? new this.format(options) : new OpenLayers.Format.GML(options);
-        } else {    
-            OpenLayers.Layer.Markers.prototype.setMap.apply(this, arguments);
-        }    
-    },
-    
-    /** 
-     * Method: moveTo
-     * 
-     * Parameters:
-     * bounds - {<OpenLayers.Bounds>} 
-     * zoomChanged - {Boolean} 
-     * dragging - {Boolean} 
-     */
-    moveTo:function(bounds, zoomChanged, dragging) {
-        if (this.vectorMode) {
-            OpenLayers.Layer.Vector.prototype.moveTo.apply(this, arguments);
-        } else {
-            OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments);
-        }    
-
-        // don't load wfs features while dragging, wait for drag end
-        if (dragging) {
-            // TBD try to hide the vector layer while dragging
-            // this.setVisibility(false);
-            // this will probably help for panning performances
-            return false;
-        }
-        
-        if ( zoomChanged ) {
-            if (this.vectorMode) {
-                this.renderer.clear();
-            }
-        }
-        
-    //DEPRECATED - REMOVE IN 3.0
-        // don't load data if current zoom level doesn't match
-        if (this.options.minZoomLevel) {
-            OpenLayers.Console.warn(OpenLayers.i18n('minZoomLevelError'));
-            
-            if (this.map.getZoom() < this.options.minZoomLevel) {
-                return null;
-            }
-        }
-        
-        if (bounds == null) {
-            bounds = this.map.getExtent();
-        }
-
-        var firstRendering = (this.tile == null);
-
-        //does the new bounds to which we need to move fall outside of the 
-        // current tile's bounds?
-        var outOfBounds = (!firstRendering &&
-                           !this.tile.bounds.containsBounds(bounds));
-
-        if (zoomChanged || firstRendering || (!dragging && outOfBounds)) {
-            //determine new tile bounds
-            var center = bounds.getCenterLonLat();
-            var tileWidth = bounds.getWidth() * this.ratio;
-            var tileHeight = bounds.getHeight() * this.ratio;
-            var tileBounds = 
-                new OpenLayers.Bounds(center.lon - (tileWidth / 2),
-                                      center.lat - (tileHeight / 2),
-                                      center.lon + (tileWidth / 2),
-                                      center.lat + (tileHeight / 2));
-
-            //determine new tile size
-            var tileSize = this.map.getSize();
-            tileSize.w = tileSize.w * this.ratio;
-            tileSize.h = tileSize.h * this.ratio;
-
-            //determine new position (upper left corner of new bounds)
-            var ul = new OpenLayers.LonLat(tileBounds.left, tileBounds.top);
-            var pos = this.map.getLayerPxFromLonLat(ul);
-
-            //formulate request url string
-            var url = this.getFullRequestString();
-        
-            var params = null;
-
-            // Cant combine "filter" and "BBOX". This is a cheap hack to help
-            // people out who can't migrate to the WFS protocol immediately.
-            var filter = this.params.filter || this.params.FILTER;
-            if (filter) {
-                params = {FILTER: filter};
-            }
-            else {
-                params = {BBOX: this.encodeBBOX ? tileBounds.toBBOX() 
-                                                    : tileBounds.toArray()};
-            }
-            
-            if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
-                var projectedBounds = tileBounds.clone();
-                projectedBounds.transform(this.map.getProjectionObject(), 
-                                          this.projection);
-                if (!filter){
-                    params.BBOX = this.encodeBBOX ? projectedBounds.toBBOX() 
-                                                : projectedBounds.toArray();
-                }
-            }                                  
-
-            url += "&" + OpenLayers.Util.getParameterString(params);
-
-            if (!this.tile) {
-                this.tile = new OpenLayers.Tile.WFS(this, pos, tileBounds, 
-                                                     url, tileSize);
-                this.addTileMonitoringHooks(this.tile);
-                this.tile.draw();
-            } else {
-                if (this.vectorMode) {
-                    this.destroyFeatures();
-                    this.renderer.clear();
-                } else {
-                    this.clearMarkers();
-                }    
-                this.removeTileMonitoringHooks(this.tile);
-                this.tile.destroy();
-                
-                this.tile = null;
-                this.tile = new OpenLayers.Tile.WFS(this, pos, tileBounds, 
-                                                     url, tileSize);
-                this.addTileMonitoringHooks(this.tile);
-                this.tile.draw();
-            } 
-        }
-    },
-
-    /** 
-     * Method: addTileMonitoringHooks
-     * This function takes a tile as input and adds the appropriate hooks to 
-     *     the tile so that the layer can keep track of the loading tile
-     *     (making sure to check that the tile is always the layer's current
-     *     tile before taking any action).
-     * 
-     * Parameters: 
-     * tile - {<OpenLayers.Tile>}
-     */
-    addTileMonitoringHooks: function(tile) {
-        tile.onLoadStart = function() {
-            //if this is the the layer's current tile, then trigger 
-            // a 'loadstart'
-            if (this == this.layer.tile) {
-                this.layer.events.triggerEvent("loadstart");
-            }
-        };
-        tile.events.register("loadstart", tile, tile.onLoadStart);
-      
-        tile.onLoadEnd = function() {
-            //if this is the the layer's current tile, then trigger 
-            // a 'tileloaded' and 'loadend'
-            if (this == this.layer.tile) {
-                this.layer.events.triggerEvent("tileloaded");
-                this.layer.events.triggerEvent("loadend");
-            }
-        };
-        tile.events.register("loadend", tile, tile.onLoadEnd);
-        tile.events.register("unload", tile, tile.onLoadEnd);
-    },
-    
-    /** 
-     * Method: removeTileMonitoringHooks
-     * This function takes a tile as input and removes the tile hooks 
-     *     that were added in addTileMonitoringHooks()
-     * 
-     * Parameters: 
-     * tile - {<OpenLayers.Tile>}
-     */
-    removeTileMonitoringHooks: function(tile) {
-        tile.unload();
-        tile.events.un({
-            "loadstart": tile.onLoadStart,
-            "loadend": tile.onLoadEnd,
-            "unload": tile.onLoadEnd,
-            scope: tile
-        });
-    },
-
-    /**
-     * Method: onMapResize
-     * Call the onMapResize method of the appropriate parent class. 
-     */
-    onMapResize: function() {
-        if(this.vectorMode) {
-            OpenLayers.Layer.Vector.prototype.onMapResize.apply(this, 
-                                                                arguments);
-        } else {
-            OpenLayers.Layer.Markers.prototype.onMapResize.apply(this, 
-                                                                 arguments);
-        }
-    },
-    
-    /**
-     * Method: display
-     * Call the display method of the appropriate parent class. 
-     */
-    display: function() {
-        if(this.vectorMode) {
-            OpenLayers.Layer.Vector.prototype.display.apply(this, 
-                                                                arguments);
-        } else {
-            OpenLayers.Layer.Markers.prototype.display.apply(this, 
-                                                                 arguments);
-        }
-    },
-    
-    /**
-     * APIMethod: mergeNewParams
-     * Modify parameters for the layer and redraw.
-     * 
-     * Parameters:
-     * newParams - {Object}
-     */
-    mergeNewParams:function(newParams) {
-        var upperParams = OpenLayers.Util.upperCaseObject(newParams);
-        var newArguments = [upperParams];
-        return OpenLayers.Layer.HTTPRequest.prototype.mergeNewParams.apply(this, 
-                                                                 newArguments);
-    },
-
-    /**
-     * APIMethod: clone
-     *
-     * Parameters:
-     * obj - {Object} 
-     * 
-     * Returns:
-     * {<OpenLayers.Layer.WFS>} An exact clone of this OpenLayers.Layer.WFS
-     */
-    clone: function (obj) {
-        
-        if (obj == null) {
-            obj = new OpenLayers.Layer.WFS(this.name,
-                                           this.url,
-                                           this.params,
-                                           this.getOptions());
-        }
-
-        //get all additions from superclasses
-        if (this.vectorMode) {
-            obj = OpenLayers.Layer.Vector.prototype.clone.apply(this, [obj]);
-        } else {
-            obj = OpenLayers.Layer.Markers.prototype.clone.apply(this, [obj]);
-        }    
-
-        // copy/set any non-init, non-simple values here
-
-        return obj;
-    },
-
-    /** 
-     * APIMethod: getFullRequestString
-     * combine the layer's url with its params and these newParams. 
-     *   
-     *    Add the SRS parameter from 'projection' -- this is probably
-     *     more eloquently done via a setProjection() method, but this 
-     *     works for now and always.
-     *
-     * Parameters:
-     * newParams - {Object} 
-     * altUrl - {String} Use this as the url instead of the layer's url
-     */
-    getFullRequestString:function(newParams, altUrl) {
-        var projectionCode = this.projection.getCode() || this.map.getProjection();
-        this.params.SRS = (projectionCode == "none") ? null : projectionCode;
-
-        return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(
-                                                    this, arguments);
-    },
-   
-    /**
-     * APIMethod: commit
-     * Write out the data to a WFS server.
-     */
-    commit: function() {
-        if (!this.writer) {
-            var options = {};
-            if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
-                options.externalProjection = this.projection;
-                options.internalProjection = this.map.getProjectionObject();
-            }    
-            
-            this.writer = new OpenLayers.Format.WFS(options,this);
-        }
-
-        var data = this.writer.write(this.features);
-
-        OpenLayers.Request.POST({
-            url: this.url,
-            data: data,
-            success: this.commitSuccess,
-            failure: this.commitFailure,
-            scope: this
-        });
-    },
-
-    /**
-     * Method: commitSuccess
-     * Called when the Ajax request returns a response
-     *
-     * Parameters:
-     * response - {XmlNode} from server
-     */
-    commitSuccess: function(request) {
-        var response = request.responseText;
-        if (response.indexOf('SUCCESS') != -1) {
-            this.commitReport(OpenLayers.i18n("commitSuccess", {'response':response}));
-            
-            for(var i = 0; i < this.features.length; i++) {
-                this.features[i].state = null;
-            }    
-            // TBD redraw the layer or reset the state of features
-            // foreach features: set state to null
-        } else if (response.indexOf('FAILED') != -1 ||
-            response.indexOf('Exception') != -1) {
-            this.commitReport(OpenLayers.i18n("commitFailed", {'response':response}));
-        }
-    },
-    
-    /**
-     * Method: commitFailure
-     * Called when the Ajax request fails
-     *
-     * Parameters:
-     * response - {XmlNode} from server
-     */
-    commitFailure: function(request) {},
-    
-    /**
-     * APIMethod: commitReport 
-     * Called with a 'success' message if the commit succeeded, otherwise
-     *     a failure message, and the full request text as a second parameter.
-     *     Override this function to provide custom transaction reporting.
-     *
-     * string - {String} reporting string
-     * response - {String} full XML response
-     */
-    commitReport: function(string, response) {
-        OpenLayers.Console.userError(string);
-    },
-
-    
-    /**
-     * APIMethod: refresh
-     * Refreshes all the features of the layer
-     */
-    refresh: function() {
-        if (this.tile) {
-            if (this.vectorMode) {
-                this.renderer.clear();
-                this.features.length = 0;
-            } else {   
-                this.clearMarkers();
-                this.markers.length = 0;
-            }    
-            this.tile.draw();
-        }
-    },
-    
-    /** 
-     * APIMethod: getDataExtent
-     * Calculates the max extent which includes all of the layer data.
-     * 
-     * Returns:
-     * {<OpenLayers.Bounds>}
-     */
-    getDataExtent: function () {
-        var extent; 
-        //get all additions from superclasses
-        if (this.vectorMode) {
-            extent = OpenLayers.Layer.Vector.prototype.getDataExtent.apply(this);
-        } else {
-            extent = OpenLayers.Layer.Markers.prototype.getDataExtent.apply(this);
-        }    
-
-        return extent;
-    },
-    
-    /** 
-     * APIMethod: setOpacity 
-     * Call the setOpacity method of the appropriate parent class to set the
-     *     opacity.  
-     * 
-     * Parameter: 
-     * opacity - {Float} 
-     */
-    setOpacity: function (opacity) {
-        if (this.vectorMode) {
-            OpenLayers.Layer.Vector.prototype.setOpacity.apply(this, [opacity]);
-        } else {
-            OpenLayers.Layer.Markers.prototype.setOpacity.apply(this, [opacity]);
-        }    
-    },
-
-    CLASS_NAME: "OpenLayers.Layer.WFS"
-});
diff --git a/lib/OpenLayers/Layer/WMS.js b/lib/OpenLayers/Layer/WMS.js
index 60bf8cc..833e7b0 100644
--- a/lib/OpenLayers/Layer/WMS.js
+++ b/lib/OpenLayers/Layer/WMS.js
@@ -1,12 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  */
 
 /**
@@ -32,17 +31,6 @@ OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
                      },
     
     /**
-     * Property: reproject
-     * *Deprecated*. See http://trac.openlayers.org/wiki/SphericalMercator
-     * for information on the replacement for this functionality. 
-     * {Boolean} Try to reproject this layer if its coordinate reference system
-     *           is different than that of the base layer.  Default is false.  
-     *           Set this in the layer options.  Should be set to false in 
-     *           most cases.
-     */
-    reproject: false,
- 
-    /**
      * APIProperty: isBaseLayer
      * {Boolean} Default is true for WMS layer
      */
@@ -68,9 +56,11 @@ OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * Property: yx
      * {Object} Keys in this object are EPSG codes for which the axis order
      *     is to be reversed (yx instead of xy, LatLon instead of LonLat), with
-     *     true as value. This is only relevant for WMS versions >= 1.3.0.
+     *     true as value. This is only relevant for WMS versions >= 1.3.0, and
+     *     only if yx is not set in <OpenLayers.Projection.defaults> for the
+     *     used projection.
      */
-    yx: {'EPSG:4326': true},
+    yx: {},
     
     /**
      * Constructor: OpenLayers.Layer.WMS
@@ -153,16 +143,6 @@ OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
     },    
 
     /**
-     * Method: destroy
-     * Destroy this layer
-     */
-    destroy: function() {
-        // for now, nothing special to do here. 
-        OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);  
-    },
-
-    
-    /**
      * Method: clone
      * Create a clone of this layer
      *
@@ -195,8 +175,9 @@ OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * {Boolean} true if the axis order is reversed, false otherwise.
      */
     reverseAxisOrder: function() {
-        return (parseFloat(this.params.VERSION) >= 1.3 && 
-            !!this.yx[this.map.getProjectionObject().getCode()]);
+        var projCode = this.projection.getCode();
+        return parseFloat(this.params.VERSION) >= 1.3 && 
+            !!(this.yx[projCode] || OpenLayers.Projection.defaults[projCode].yx);
     },
     
     /**
diff --git a/lib/OpenLayers/Layer/WMS/Post.js b/lib/OpenLayers/Layer/WMS/Post.js
deleted file mode 100644
index 0042fbb..0000000
--- a/lib/OpenLayers/Layer/WMS/Post.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (c) 2006-2011 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/WMS.js
- * @requires OpenLayers/Tile/Image/IFrame.js
- */
-
-/**
- * Class: OpenLayers.Layer.WMS.Post
- * Instances of OpenLayers.Layer.WMS.Post are used to retrieve data from OGC
- * 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, {
-
-    /**
-     * APIProperty: unsupportedBrowsers
-     * {Array} Array with browsers, which should use the HTTP-GET protocol 
-     * instead of HTTP-POST for fetching tiles from a WMS .
-     * Defaults to ["mozilla", "firefox", "opera"], because Opera is not able 
-     * to show transparent images in IFrames and Firefox/Mozilla has some ugly 
-     * 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.BROWSER_NAME>.
-     */
-    unsupportedBrowsers: ["mozilla", "firefox", "opera"],
-
-    /**
-     * Property: SUPPORTED_TRANSITIONS
-     * {Array} 
-     * no supported transitions for this type of layer, because it is not
-     * possible to modify the initialized tiles (iframes)
-     */
-    SUPPORTED_TRANSITIONS: [],
-    
-    /**
-     * Property: usePost
-     * {Boolean}
-     */
-    usePost: null,
-
-    /**
-     * Constructor: OpenLayers.Layer.WMS.Post
-     * Creates a new WMS layer object.
-     *
-     * Example:
-     * (code)
-     * var wms = new OpenLayers.Layer.WMS.Post(
-     *  "NASA Global Mosaic",
-     *  "http://wms.jpl.nasa.gov/wms.cgi",
-     *  {layers: "modis, global_mosaic"});
-     * (end)
-     *
-     * Parameters:
-     * name - {String} A name for the layer
-     * url - {String} Base url for the WMS
-     *                (e.g. http://wms.jpl.nasa.gov/wms.cgi)
-     * params - {Object} An object with key/value pairs representing the
-     *                   GetMap query string parameters and parameter values.
-     * options - {Object} Hashtable of extra options to tag onto the layer.
-     */
-    initialize: function(name, url, params, options) {
-        var newArguments = [];
-        newArguments.push(name, url, params, options);
-        OpenLayers.Layer.WMS.prototype.initialize.apply(this, newArguments);
-
-        this.usePost = OpenLayers.Util.indexOf(
-            this.unsupportedBrowsers, OpenLayers.BROWSER_NAME) == -1;
-    },
-    
-    /**
-     * Method: addTile
-     * addTile creates a tile, initializes it and adds it as iframe to the
-     * layer div.
-     *
-     * Parameters:
-     * bounds - {<OpenLayers.Bounds>}
-     * position - {<OpenLayers.Pixel>}
-     *
-     * Returns:
-     * {<OpenLayers.Tile.Image.IFrame>} The added OpenLayers.Tile.Image.IFrame
-     */
-    addTile: function(bounds,position) {
-        return new OpenLayers.Tile.Image(
-            this, position, bounds, null, this.tileSize, {
-                maxGetUrlLength: this.usePost ? 0 : null
-            });
-    },
-
-    CLASS_NAME: 'OpenLayers.Layer.WMS.Post'
-});
diff --git a/lib/OpenLayers/Layer/WMS/Untiled.js b/lib/OpenLayers/Layer/WMS/Untiled.js
deleted file mode 100644
index 7589e77..0000000
--- a/lib/OpenLayers/Layer/WMS/Untiled.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 2006-2011 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/WMS.js
- * @requires OpenLayers/Console.js
- */
-
-/**
- * Class: OpenLayers.Layer.WMS.Untiled
- * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.WMS and 
- *     pass the option 'singleTile' as true.
- * 
- * Inherits from: 
- *  - <OpenLayers.Layer.WMS>
- */
-OpenLayers.Layer.WMS.Untiled = OpenLayers.Class(OpenLayers.Layer.WMS, {
-
-    /**
-     * APIProperty: singleTile
-     * {singleTile} Always true for untiled.
-     */
-    singleTile: true,
-
-    /**
-     * Constructor: OpenLayers.Layer.WMS.Untiled
-     *
-     * Parameters:
-     * name - {String} 
-     * url - {String} 
-     * params - {Object} 
-     * options - {Object} 
-     */
-    initialize: function(name, url, params, options) {
-        OpenLayers.Layer.WMS.prototype.initialize.apply(this, arguments);
-        
-        var msg = "The OpenLayers.Layer.WMS.Untiled class is deprecated and " +
-                  "will be removed in 3.0. Instead, you should use the " +
-                  "normal OpenLayers.Layer.WMS class, passing it the option " +
-                  "'singleTile' as true.";
-        OpenLayers.Console.warn(msg);
-    },    
-
-    /**
-     * Method: clone
-     * Create a clone of this layer
-     *
-     * Returns:
-     * {<OpenLayers.Layer.WMS.Untiled>} An exact clone of this layer
-     */
-    clone: function (obj) {
-        
-        if (obj == null) {
-            obj = new OpenLayers.Layer.WMS.Untiled(this.name,
-                                                   this.url,
-                                                   this.params,
-                                                   this.getOptions());
-        }
-
-        //get all additions from superclasses
-        obj = OpenLayers.Layer.WMS.prototype.clone.apply(this, [obj]);
-
-        // copy/set any non-init, non-simple values here
-
-        return obj;
-    }, 
-
-    CLASS_NAME: "OpenLayers.Layer.WMS.Untiled"
-});
diff --git a/lib/OpenLayers/Layer/WMTS.js b/lib/OpenLayers/Layer/WMTS.js
index 0e6045b..bf4cc5a 100644
--- a/lib/OpenLayers/Layer/WMTS.js
+++ b/lib/OpenLayers/Layer/WMTS.js
@@ -1,11 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  */
 
 /**
@@ -38,7 +37,10 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
     
     /**
      * APIProperty: url
-     * {String} The base URL for the WMTS service.  Must be provided.
+     * {String|Array(String)} The base URL or request URL template for the WMTS
+     * service. Must be provided. Array is only supported for base URLs, not
+     * for request URL templates. URL templates are only supported for
+     * REST <requestEncoding>.
      */
     url: null,
 
@@ -150,7 +152,23 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      *     the <matrixIds> property.  Defaults to 0 (no zoom offset).
      */
     zoomOffset: 0,
-    
+
+    /**
+     * APIProperty: serverResolutions
+     * {Array} A list of all resolutions available on the server.  Only set this
+     *     property if the map resolutions differ from the server. This
+     *     property serves two purposes. (a) <serverResolutions> can include
+     *     resolutions that the server supports and that you don't want to
+     *     provide with this layer; you can also look at <zoomOffset>, which is
+     *     an alternative to <serverResolutions> for that specific purpose.
+     *     (b) The map can work with resolutions that aren't supported by
+     *     the server, i.e. that aren't in <serverResolutions>. When the
+     *     map is displayed in such a resolution data for the closest
+     *     server-supported resolution is loaded and the layer div is
+     *     stretched as necessary.
+     */
+    serverResolutions: null,
+
     /**
      * Property: formatSuffixMap
      * {Object} a map between WMTS 'format' request parameter and tile image file suffix
@@ -278,7 +296,7 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * Method: moveTo
      * 
      * Parameters:
-     * bound - {<OpenLayers.Bounds>}
+     * bounds - {<OpenLayers.Bounds>}
      * zoomChanged - {Boolean} Tells when zoom has changed, as layers have to
      *     do some init work in that case.
      * dragging - {Boolean}
@@ -308,6 +326,14 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
         // copy/set any non-init, non-simple values here
         return obj;
     },
+
+    /**
+     * Method: getIdentifier
+     * Get the current index in the matrixIds array.
+     */
+    getIdentifier: function() {
+        return this.getServerZoom();
+    },
     
     /**
      * Method: getMatrix
@@ -316,7 +342,7 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
     getMatrix: function() {
         var matrix;
         if (!this.matrixIds || this.matrixIds.length === 0) {
-            matrix = {identifier: this.map.getZoom() + this.zoomOffset};
+            matrix = {identifier: this.getIdentifier()};
         } else {
             // get appropriate matrix given the map scale if possible
             if ("scaleDenominator" in this.matrixIds[0]) {
@@ -324,7 +350,7 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
                 var denom = 
                     OpenLayers.METERS_PER_INCH * 
                     OpenLayers.INCHES_PER_UNIT[this.units] * 
-                    this.map.getResolution() / 0.28E-3;
+                    this.getServerResolution() / 0.28E-3;
                 var diff = Number.POSITIVE_INFINITY;
                 var delta;
                 for (var i=0, ii=this.matrixIds.length; i<ii; ++i) {
@@ -336,7 +362,7 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
                 }
             } else {
                 // fall back on zoom as index
-                matrix = this.matrixIds[this.map.getZoom() + this.zoomOffset];
+                matrix = this.matrixIds[this.getIdentifier()];
             }
         }
         return matrix;
@@ -356,7 +382,7 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
      *     (respectively) of the given location within the target tile.
      */
     getTileInfo: function(loc) {
-        var res = this.map.getResolution();
+        var res = this.getServerResolution();
         
         var fx = (loc.lon - this.tileOrigin.lon) / (res * this.tileSize.w);
         var fy = (this.tileOrigin.lat - loc.lat) / (res * this.tileSize.h);
@@ -389,39 +415,59 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
             var center = bounds.getCenterLonLat();            
             var info = this.getTileInfo(center);
             var matrixId = this.matrix.identifier;
+            var dimensions = this.dimensions, params;
 
             if (this.requestEncoding.toUpperCase() === "REST") {
+                params = this.params;
+                if (typeof this.url === "string" && this.url.indexOf("{") !== -1) {
+                    var template = this.url.replace(/\{/g, "${");
+                    var context = {
+                        // spec does not make clear if capital S or not
+                        style: this.style, Style: this.style,
+                        TileMatrixSet: this.matrixSet,
+                        TileMatrix: this.matrix.identifier,
+                        TileRow: info.row,
+                        TileCol: info.col
+                    };
+                    if (dimensions) {
+                        var dimension, i;
+                        for (i=dimensions.length-1; i>=0; --i) {
+                            dimension = dimensions[i];
+                            context[dimension] = params[dimension.toUpperCase()];
+                        }
+                    }
+                    url = OpenLayers.String.format(template, context);
+                } else {
+                    // include 'version', 'layer' and 'style' in tile resource url
+                    var path = this.version + "/" + this.layer + "/" + this.style + "/";
 
-                // include 'version', 'layer' and 'style' in tile resource url
-                var path = this.version + "/" + this.layer + "/" + this.style + "/";
-
-                // append optional dimension path elements
-                if (this.dimensions) {
-                    for (var i=0; i<this.dimensions.length; i++) {
-                        if (this.params[this.dimensions[i]]) {
-                            path = path + this.params[this.dimensions[i]] + "/";
+                    // append optional dimension path elements
+                    if (dimensions) {
+                        for (var i=0; i<dimensions.length; i++) {
+                            if (params[dimensions[i]]) {
+                                path = path + params[dimensions[i]] + "/";
+                            }
                         }
                     }
-                }
 
-                // append other required path elements
-                path = path + this.matrixSet + "/" + this.matrix.identifier + 
-                    "/" + info.row + "/" + info.col + "." + this.formatSuffix;
-                
-                if (OpenLayers.Util.isArray(this.url)) {
-                    url = this.selectUrl(path, this.url);
-                } else {
-                    url = this.url;
-                }
-                if (!url.match(/\/$/)) {
-                    url = url + "/";
-                }
-                url = url + path;
+                    // append other required path elements
+                    path = path + this.matrixSet + "/" + this.matrix.identifier + 
+                        "/" + info.row + "/" + info.col + "." + this.formatSuffix;
 
+                    if (OpenLayers.Util.isArray(this.url)) {
+                        url = this.selectUrl(path, this.url);
+                    } else {
+                        url = this.url;
+                    }
+                    if (!url.match(/\/$/)) {
+                        url = url + "/";
+                    }
+                    url = url + path;
+                }
             } else if (this.requestEncoding.toUpperCase() === "KVP") {
 
                 // assemble all required parameters
-                var params = {
+                params = {
                     SERVICE: "WMTS",
                     REQUEST: "GetTile",
                     VERSION: this.version,
diff --git a/lib/OpenLayers/Layer/WorldWind.js b/lib/OpenLayers/Layer/WorldWind.js
index c15789d..650e82d 100644
--- a/lib/OpenLayers/Layer/WorldWind.js
+++ b/lib/OpenLayers/Layer/WorldWind.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -96,7 +96,7 @@ OpenLayers.Layer.WorldWind = OpenLayers.Class(OpenLayers.Layer.Grid, {
                 Y: y
               });
         } else {
-            return OpenLayers.Util.getImagesLocation() + "blank.gif";
+            return OpenLayers.Util.getImageLocation("blank.gif");
         }
 
     },
diff --git a/lib/OpenLayers/Layer/XYZ.js b/lib/OpenLayers/Layer/XYZ.js
index 86520ab..504f093 100644
--- a/lib/OpenLayers/Layer/XYZ.js
+++ b/lib/OpenLayers/Layer/XYZ.js
@@ -1,11 +1,10 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/Grid.js
- * @requires OpenLayers/Tile/Image.js
  */
 
 /** 
@@ -49,7 +48,16 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, {
     /**
      * APIProperty: serverResolutions
      * {Array} A list of all resolutions available on the server.  Only set this
-     *     property if the map resolutions differs from the server.
+     *     property if the map resolutions differ from the server. This
+     *     property serves two purposes. (a) <serverResolutions> can include
+     *     resolutions that the server supports and that you don't want to
+     *     provide with this layer; you can also look at <zoomOffset>, which is
+     *     an alternative to <serverResolutions> for that specific purpose.
+     *     (b) The map can work with resolutions that aren't supported by
+     *     the server, i.e. that aren't in <serverResolutions>. When the
+     *     map is displayed in such a resolution data for the closest
+     *     server-supported resolution is loaded and the layer div is
+     *     stretched as necessary.
      */
     serverResolutions: null,
 
@@ -64,22 +72,13 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, {
     initialize: function(name, url, options) {
         if (options && options.sphericalMercator || this.sphericalMercator) {
             options = OpenLayers.Util.extend({
-                maxExtent: new OpenLayers.Bounds(
-                    -128 * 156543.03390625,
-                    -128 * 156543.03390625,
-                    128 * 156543.03390625,
-                    128 * 156543.03390625
-                ),
-                maxResolution: 156543.03390625,
-                numZoomLevels: 19,
-                units: "m",
-                projection: "EPSG:900913"
+                projection: "EPSG:900913",
+                numZoomLevels: 19
             }, options);
         }
-        url = url || this.url;
-        name = name || this.name;
-        var newArguments = [name, url, {}, options];
-        OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
+        OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
+            name || this.name, url || this.url, {}, options
+        ]);
     },
     
     /**
@@ -139,19 +138,16 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * {Object} - an object with x, y and z properties.
      */
     getXYZ: function(bounds) {
-        var res = this.map.getResolution();
+        var res = this.getServerResolution();
         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.serverResolutions != null ?
-            OpenLayers.Util.indexOf(this.serverResolutions, res) :
-            this.map.getZoom() + this.zoomOffset;
+        var z = this.getServerZoom();
 
-        var limit = Math.pow(2, z);
-        if (this.wrapDateLine)
-        {
-           x = ((x % limit) + limit) % limit;
+        if (this.wrapDateLine) {
+            var limit = Math.pow(2, z);
+            x = ((x % limit) + limit) % limit;
         }
 
         return {'x': x, 'y': y, 'z': z};
@@ -174,37 +170,3 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, {
 
     CLASS_NAME: "OpenLayers.Layer.XYZ"
 });
-
-
-/**
- * Class: OpenLayers.Layer.OSM
- * A class to access OpenStreetMap tiles. By default, uses the OpenStreetMap
- *    hosted tile.openstreetmap.org 'Mapnik' tileset. If you wish to use
- *    tiles at home / osmarender layer instead, you can pass a layer like:
- * 
- * (code)
- *     new OpenLayers.Layer.OSM("t at h", 
- *       "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png"); 
- * (end)
- *
- * This layer defaults to Spherical Mercator.
- * 
- * Inherits from:
- *  - <OpenLayers.Layer.XYZ>
- */
-OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
-     name: "OpenStreetMap",
-     attribution: "Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>",
-     sphericalMercator: true,
-     url: 'http://tile.openstreetmap.org/${z}/${x}/${y}.png',
-     clone: function(obj) {
-         if (obj == null) {
-             obj = new OpenLayers.Layer.OSM(
-                 this.name, this.url, this.getOptions());
-         }
-         obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [obj]);
-         return obj;
-     },
-     wrapDateLine: true,
-     CLASS_NAME: "OpenLayers.Layer.OSM"
-});
diff --git a/lib/OpenLayers/Layer/Yahoo.js b/lib/OpenLayers/Layer/Yahoo.js
deleted file mode 100644
index 2818387..0000000
--- a/lib/OpenLayers/Layer/Yahoo.js
+++ /dev/null
@@ -1,431 +0,0 @@
-/* Copyright (c) 2006-2011 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/SphericalMercator.js
- * @requires OpenLayers/Layer/EventPane.js
- * @requires OpenLayers/Layer/FixedZoomLevels.js
- * @requires OpenLayers/Lang.js
- */
-
-/**
- * Class: OpenLayers.Layer.Yahoo
- * 
- * Inherits from:
- *  - <OpenLayers.Layer.EventPane>
- *  - <OpenLayers.Layer.FixedZoomLevels>
- */
-OpenLayers.Layer.Yahoo = OpenLayers.Class(
-  OpenLayers.Layer.EventPane, OpenLayers.Layer.FixedZoomLevels, {
-    
-    /** 
-     * Constant: MIN_ZOOM_LEVEL
-     * {Integer} 0 
-     */
-    MIN_ZOOM_LEVEL: 0,
-    
-    /** 
-     * Constant: MAX_ZOOM_LEVEL
-     * {Integer} 17
-     */
-    MAX_ZOOM_LEVEL: 17,
-
-    /** 
-     * Constant: RESOLUTIONS
-     * {Array(Float)} Hardcode these resolutions so that they are more closely
-     *                tied with the standard wms projection
-     */
-    RESOLUTIONS: [
-        1.40625, 
-        0.703125, 
-        0.3515625, 
-        0.17578125, 
-        0.087890625, 
-        0.0439453125,
-        0.02197265625, 
-        0.010986328125, 
-        0.0054931640625, 
-        0.00274658203125, 
-        0.001373291015625, 
-        0.0006866455078125, 
-        0.00034332275390625, 
-        0.000171661376953125, 
-        0.0000858306884765625, 
-        0.00004291534423828125,
-        0.00002145767211914062,
-        0.00001072883605957031
-    ],
-
-    /**
-     * APIProperty: type
-     * {YahooMapType}
-     */
-    type: null,
-    
-    /**
-     * APIProperty: wrapDateLine
-     * {Boolean} Allow user to pan forever east/west.  Default is true.  
-     *     Setting this to false only restricts panning if 
-     *     <sphericalMercator> is true. 
-     */
-    wrapDateLine: true,
-
-    /**
-     * APIProperty: sphericalMercator
-     * {Boolean} Should the map act as a mercator-projected map? This will
-     * cause all interactions with the map to be in the actual map projection,
-     * which allows support for vector drawing, overlaying other maps, etc. 
-     */
-    sphericalMercator: false, 
-
-    /** 
-     * Constructor: OpenLayers.Layer.Yahoo
-     * 
-     * Parameters:
-     * name - {String}
-     * options - {Object}
-     */
-    initialize: function(name, options) {
-        OpenLayers.Layer.EventPane.prototype.initialize.apply(this, arguments);
-        OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this, 
-                                                                    arguments);
-        if(this.sphericalMercator) {
-            OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator);
-            this.initMercatorParameters();
-        }
-    },
-    
-    /**
-     * Method: loadMapObject
-     */
-    loadMapObject:function() {
-        try { //do not crash! 
-            var size = this.getMapObjectSizeFromOLSize(this.map.getSize());
-            this.mapObject = new YMap(this.div, this.type, size);
-            this.mapObject.disableKeyControls();
-            this.mapObject.disableDragMap();
-
-            //can we do smooth panning? (moveByXY is not an API function)
-            if ( !this.mapObject.moveByXY || 
-                 (typeof this.mapObject.moveByXY != "function" ) ) {
-
-                this.dragPanMapObject = null;
-            }                
-        } catch(e) {}
-    },
-
-    /**
-     * Method: onMapResize
-     * 
-     */
-    onMapResize: function() {
-        try {
-            var size = this.getMapObjectSizeFromOLSize(this.map.getSize());
-            this.mapObject.resizeTo(size);
-        } catch(e) {}     
-    },    
-    
-    
-    /** 
-     * APIMethod: setMap
-     * Overridden from EventPane because we need to remove this yahoo event
-     *     pane which prohibits our drag and drop, and we can only do this 
-     *     once the map has been loaded and centered.
-     * 
-     * Parameters:
-     * map - {<OpenLayers.Map>}
-     */
-    setMap: function(map) {
-        OpenLayers.Layer.EventPane.prototype.setMap.apply(this, arguments);
-
-        this.map.events.register("moveend", this, this.fixYahooEventPane);
-    },
-
-    /** 
-     * Method: fixYahooEventPane
-     * The map has been centered, so the mysterious yahoo eventpane has been
-     *     added. we remove it so that it doesnt mess with *our* event pane.
-     */
-    fixYahooEventPane: function() {
-        var yahooEventPane = OpenLayers.Util.getElement("ygddfdiv");
-        if (yahooEventPane != null) {
-            if (yahooEventPane.parentNode != null) {
-                yahooEventPane.parentNode.removeChild(yahooEventPane);
-            }
-            this.map.events.unregister("moveend", this, 
-                                       this.fixYahooEventPane);
-        }
-    },
-
-    /** 
-     * APIMethod: getWarningHTML
-     * 
-     * Returns: 
-     * {String} String with information on why layer is broken, how to get
-     *          it working.
-     */
-    getWarningHTML:function() {
-        return OpenLayers.i18n(
-            "getLayerWarning", {'layerType':'Yahoo', 'layerLib':'Yahoo'}
-        );
-    },
-
-  /********************************************************/
-  /*                                                      */
-  /*             Translation Functions                    */
-  /*                                                      */
-  /*    The following functions translate GMaps and OL    */ 
-  /*     formats for Pixel, LonLat, Bounds, and Zoom      */
-  /*                                                      */
-  /********************************************************/
-
-
-  //
-  // TRANSLATION: MapObject Zoom <-> OpenLayers Zoom
-  //
-  
-    /**
-     * APIMethod: getOLZoomFromMapObjectZoom
-     * 
-     * Parameters:
-     * gZoom - {Integer}
-     * 
-     * Returns:
-     * {Integer} An OpenLayers Zoom level, translated from the passed in gZoom
-     *           Returns null if null value is passed in.
-     */
-    getOLZoomFromMapObjectZoom: function(moZoom) {
-        var zoom = null;
-        if (moZoom != null) {
-            zoom = OpenLayers.Layer.FixedZoomLevels.prototype.getOLZoomFromMapObjectZoom.apply(this, [moZoom]);
-            zoom = 18 - zoom;
-        }
-        return zoom;
-    },
-    
-    /**
-     * APIMethod: getMapObjectZoomFromOLZoom
-     * 
-     * Parameters:
-     * olZoom - {Integer}
-     * 
-     * Returns:
-     * {Integer} A MapObject level, translated from the passed in olZoom
-     *           Returns null if null value is passed in
-     */
-    getMapObjectZoomFromOLZoom: function(olZoom) {
-        var zoom = null; 
-        if (olZoom != null) {
-            zoom = OpenLayers.Layer.FixedZoomLevels.prototype.getMapObjectZoomFromOLZoom.apply(this, [olZoom]);
-            zoom = 18 - zoom;
-        }
-        return zoom;
-    },
-
-    /************************************
-     *                                  *
-     *   MapObject Interface Controls   *
-     *                                  *
-     ************************************/
-
-
-  // Get&Set Center, Zoom
-
-    /** 
-     * APIMethod: setMapObjectCenter
-     * Set the mapObject to the specified center and zoom
-     * 
-     * Parameters:
-     * center - {Object} MapObject LonLat format
-     * zoom - {int} MapObject zoom format
-     */
-    setMapObjectCenter: function(center, zoom) {
-        this.mapObject.drawZoomAndCenter(center, zoom); 
-    },
-   
-    /**
-     * APIMethod: getMapObjectCenter
-     * 
-     * Returns: 
-     * {Object} The mapObject's current center in Map Object format
-     */
-    getMapObjectCenter: function() {
-        return this.mapObject.getCenterLatLon();
-    },
-
-    /**
-     * APIMethod: dragPanMapObject
-     * 
-     * Parameters:
-     * dX - {Integer}
-     * dY - {Integer}
-     */
-    dragPanMapObject: function(dX, dY) {
-        this.mapObject.moveByXY({
-            'x': -dX,
-            'y': dY
-        });
-    },
-    
-    /** 
-     * APIMethod: getMapObjectZoom
-     * 
-     * Returns:
-     * {Integer} The mapObject's current zoom, in Map Object format
-     */
-    getMapObjectZoom: function() {
-        return this.mapObject.getZoomLevel();
-    },
-
-
-  // LonLat - Pixel Translation
-  
-    /**
-     * APIMethod: getMapObjectLonLatFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Object} MapObject LonLat translated from MapObject Pixel
-     */
-    getMapObjectLonLatFromMapObjectPixel: function(moPixel) {
-        return this.mapObject.convertXYLatLon(moPixel);
-    },
-
-    /**
-     * APIMethod: getMapObjectPixelFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Object} MapObject Pixel transtlated from MapObject LonLat
-     */
-    getMapObjectPixelFromMapObjectLonLat: function(moLonLat) {
-        return this.mapObject.convertLatLonXY(moLonLat);
-    },
-
-
-    /************************************
-     *                                  *
-     *       MapObject Primitives       *
-     *                                  *
-     ************************************/
-
-
-  // LonLat
-    
-    /**
-     * APIMethod: getLongitudeFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Float} Longitude of the given MapObject LonLat
-     */
-    getLongitudeFromMapObjectLonLat: function(moLonLat) {
-        return this.sphericalMercator ? 
-            this.forwardMercator(moLonLat.Lon, moLonLat.Lat).lon :
-            moLonLat.Lon;
-    },
-
-    /**
-     * APIMethod: getLatitudeFromMapObjectLonLat
-     * 
-     * Parameters:
-     * moLonLat - {Object} MapObject LonLat format
-     * 
-     * Returns:
-     * {Float} Latitude of the given MapObject LonLat
-     */
-    getLatitudeFromMapObjectLonLat: function(moLonLat) {
-        return this.sphericalMercator ? 
-            this.forwardMercator(moLonLat.Lon, moLonLat.Lat).lat :
-            moLonLat.Lat;
-    },
-
-    /**
-     * APIMethod: getMapObjectLonLatFromLonLat
-     * 
-     * Parameters:
-     * lon - {Float}
-     * lat - {Float}
-     * 
-     * Returns:
-     * {Object} MapObject LonLat built from lon and lat params
-     */
-    getMapObjectLonLatFromLonLat: function(lon, lat) {
-        var yLatLong;
-        if(this.sphericalMercator) {
-            var lonlat = this.inverseMercator(lon, lat);
-            yLatLong = new YGeoPoint(lonlat.lat, lonlat.lon);
-        } else {
-            yLatLong = new YGeoPoint(lat, lon);
-        }
-        return yLatLong;
-    },
-
-  // Pixel
-    
-    /**
-     * APIMethod: getXFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Integer} X value of the MapObject Pixel
-     */
-    getXFromMapObjectPixel: function(moPixel) {
-        return moPixel.x;
-    },
-
-    /**
-     * APIMethod: getYFromMapObjectPixel
-     * 
-     * Parameters:
-     * moPixel - {Object} MapObject Pixel format
-     * 
-     * Returns:
-     * {Integer} Y value of the MapObject Pixel
-     */
-    getYFromMapObjectPixel: function(moPixel) {
-        return moPixel.y;
-    },
-
-    /**
-     * APIMethod: getMapObjectPixelFromXY
-     * 
-     * Parameters:
-     * x - {Integer}
-     * y - {Integer}
-     * 
-     * Returns:
-     * {Object} MapObject Pixel from x and y parameters
-     */
-    getMapObjectPixelFromXY: function(x, y) {
-        return new YCoordPoint(x, y);
-    },
-    
-  // Size
-  
-    /**
-     * APIMethod: getMapObjectSizeFromOLSize
-     * 
-     * Parameters:
-     * olSize - {<OpenLayers.Size>}
-     * 
-     * Returns:
-     * {Object} MapObject Size from olSize parameter
-     */
-    getMapObjectSizeFromOLSize: function(olSize) {
-        return new YSize(olSize.w, olSize.h);
-    },
-    
-    CLASS_NAME: "OpenLayers.Layer.Yahoo"
-});
diff --git a/lib/OpenLayers/Layer/Zoomify.js b/lib/OpenLayers/Layer/Zoomify.js
index b6150a9..6179ccc 100644
--- a/lib/OpenLayers/Layer/Zoomify.js
+++ b/lib/OpenLayers/Layer/Zoomify.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /*
@@ -22,12 +22,6 @@
 OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
 
     /**
-     * Property: url
-     * {String} URL for root directory with TileGroupX subdirectories.
-     */
-    url: null,
-
-    /**
      * Property: size
      * {<OpenLayers.Size>} The Zoomify image size in pixels.
      */
@@ -63,21 +57,21 @@ OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * {Array(Integer)} Number of tiles up to the given tier of pyramid.
      *                          - filled during Zoomify pyramid initialization.
      */
-    tileCountUpToTier: new Array(),
+    tileCountUpToTier: null,
 
     /**
      * Property: tierSizeInTiles
      * {Array(<OpenLayers.Size>)} Size (in tiles) for each tier of pyramid.
      *                          - filled during Zoomify pyramid initialization.
      */
-    tierSizeInTiles: new Array(),
+    tierSizeInTiles: null,
 
     /**
      * Property: tierImageSize
      * {Array(<OpenLayers.Size>)} Image size in pixels for each pyramid tier.
      *                          - filled during Zoomify pyramid initialization.
      */
-    tierImageSize: new Array(),
+    tierImageSize: null,
 
     /**
      * Constructor: OpenLayers.Layer.Zoomify
@@ -93,12 +87,11 @@ OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
     initialize: function(name, url, size, options) {
 
         // initilize the Zoomify pyramid for given size
-        this.initializeZoomify( size );
-
-        var newArguments = [];
-        newArguments.push(name, url, size, {}, options);
+        this.initializeZoomify(size);
 
-        OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
+        OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
+            name, url, size, {}, options
+        ]);
     },
 
     /**
@@ -117,8 +110,8 @@ OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
             Math.ceil( imageSize.h / this.standardTileSize )
             );
 
-        this.tierSizeInTiles.push( tiles );
-        this.tierImageSize.push( imageSize );
+        this.tierSizeInTiles = [tiles];
+        this.tierImageSize = [imageSize];
 
         while (imageSize.w > this.standardTileSize ||
                imageSize.h > this.standardTileSize ) {
@@ -140,7 +133,7 @@ OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
 
         this.numberOfTiers = this.tierSizeInTiles.length;
 
-        this.tileCountUpToTier[0] = 0;
+        this.tileCountUpToTier = [0];
         for (var i = 1; i < this.numberOfTiers; i++) {
             this.tileCountUpToTier.push(
                 this.tierSizeInTiles[i-1].w * this.tierSizeInTiles[i-1].h +
@@ -234,10 +227,10 @@ OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
             var h = this.standardTileSize;
             if (x == this.tierSizeInTiles[z].w -1 ) {
                 var w = this.tierImageSize[z].w % this.standardTileSize;
-            };
+            }
             if (y == this.tierSizeInTiles[z].h -1 ) {
                 var h = this.tierImageSize[z].h % this.standardTileSize;
-            };
+            }
             return (new OpenLayers.Size(w, h));
         } else {
             return this.tileSize;
@@ -268,7 +261,7 @@ OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
      * resolution - {Number}
      *
      * Returns:
-     * Object containing properties tilelon, tilelat, tileoffsetlat,
+     * {Object} Object containing properties tilelon, tilelat, tileoffsetlat,
      * tileoffsetlat, tileoffsetx, tileoffsety
      */
     calculateGridLayout: function(bounds, origin, resolution) {
diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js
index 285ae0c..f344a0b 100644
--- a/lib/OpenLayers/Map.js
+++ b/lib/OpenLayers/Map.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -8,8 +8,7 @@
  * @requires OpenLayers/Util.js
  * @requires OpenLayers/Events.js
  * @requires OpenLayers/Tween.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
+ * @requires OpenLayers/Projection.js
  */
 
 /**
@@ -36,9 +35,10 @@ OpenLayers.Map = OpenLayers.Class({
     },
 
     /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+     * APIProperty: events
+     * {<OpenLayers.Events>}
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * map.events.register(type, obj, listener);
      * (end)
@@ -47,51 +47,43 @@ OpenLayers.Map = OpenLayers.Class({
      *     properties of this event depends on exactly what happened.
      *
      * All event objects have at least the following properties:
-     *  - *object* {Object} A reference to map.events.object.
-     *  - *element* {DOMElement} A reference to map.events.element.
+     * object - {Object} A reference to map.events.object.
+     * element - {DOMElement} A reference to map.events.element.
      *
      * Browser events have the following additional properties:
-     *  - *xy* {<OpenLayers.Pixel>} The pixel location of the event (relative
-     *      to the the map viewport).
-     *  - other properties that come with browser events
+     * xy - {<OpenLayers.Pixel>} The pixel location of the event (relative
+     *     to the the map viewport).
      *
      * Supported map event types:
-     *  - *preaddlayer* triggered before a layer has been added.  The event
-     *      object will include a *layer* property that references the layer  
-     *      to be added. When a listener returns "false" the adding will be 
-     *      aborted.
-     *  - *addlayer* triggered after a layer has been added.  The event object
-     *      will include a *layer* property that references the added layer.
-     *  - *preremovelayer* triggered before a layer has been removed. The event
-     *      object will include a *layer* property that references the layer  
-     *      to be removed. When a listener returns "false" the removal will be 
-     *      aborted.
-     *  - *removelayer* triggered after a layer has been removed.  The event
-     *      object will include a *layer* property that references the removed
-     *      layer.
-     *  - *changelayer* triggered after a layer name change, order change,
-     *      opacity change, params change, visibility change (due to resolution
-     *      thresholds) or attribution change (due to extent change). Listeners
-     *      will receive an event object with *layer* and *property* properties.
-     *      The *layer* property will be a reference to the changed layer. The
-     *      *property* property will be a key to the changed property (name,
-     *      order, opacity, params, visibility or attribution).
-     *  - *movestart* triggered after the start of a drag, pan, or zoom
-     *  - *move* triggered after each drag, pan, or zoom
-     *  - *moveend* triggered after a drag, pan, or zoom completes
-     *  - *zoomend* triggered after a zoom completes
-     *  - *mouseover* triggered after mouseover the map
-     *  - *mouseout* triggered after mouseout the map
-     *  - *mousemove* triggered after mousemove the map
-     *  - *changebaselayer* triggered after the base layer changes
-     */
-    EVENT_TYPES: [ 
-        "preaddlayer", "addlayer","preremovelayer", "removelayer", 
-        "changelayer", "movestart",
-        "move", "moveend", "zoomend", "popupopen", "popupclose",
-        "addmarker", "removemarker", "clearmarkers", "mouseover",
-        "mouseout", "mousemove", "dragstart", "drag", "dragend",
-        "changebaselayer"],
+     * preaddlayer - triggered before a layer has been added.  The event
+     *     object will include a *layer* property that references the layer  
+     *     to be added. When a listener returns "false" the adding will be 
+     *     aborted.
+     * addlayer - triggered after a layer has been added.  The event object
+     *     will include a *layer* property that references the added layer.
+     * preremovelayer - triggered before a layer has been removed. The event
+     *     object will include a *layer* property that references the layer  
+     *     to be removed. When a listener returns "false" the removal will be 
+     *     aborted.
+     * removelayer - triggered after a layer has been removed.  The event
+     *     object will include a *layer* property that references the removed
+     *     layer.
+     * changelayer - triggered after a layer name change, order change,
+     *     opacity change, params change, visibility change (due to resolution
+     *     thresholds) or attribution change (due to extent change). Listeners
+     *     will receive an event object with *layer* and *property* properties.
+     *     The *layer* property will be a reference to the changed layer. The
+     *     *property* property will be a key to the changed property (name,
+     *     order, opacity, params, visibility or attribution).
+     * movestart - triggered after the start of a drag, pan, or zoom
+     * move - triggered after each drag, pan, or zoom
+     * moveend - triggered after a drag, pan, or zoom completes
+     * zoomend - triggered after a zoom completes
+     * mouseover - triggered after mouseover the map
+     * mouseout - triggered after mouseout the map
+     * mousemove - triggered after mousemove the map
+     * changebaselayer - triggered after the base layer changes
+     */
 
     /**
      * Property: id
@@ -197,13 +189,13 @@ OpenLayers.Map = OpenLayers.Class({
     layers: null,
 
     /**
-     * Property: controls
+     * APIProperty: controls
      * {Array(<OpenLayers.Control>)} List of controls associated with the map.
      *
      * If not provided in the map options at construction, the map will
-     *     be given the following controls by default:
-     *  - <OpenLayers.Control.Navigation>
-     *  - <OpenLayers.Control.PanZoom>
+     *     by default be given the following controls if present in the build:
+     *  - <OpenLayers.Control.Navigation> or <OpenLayers.Control.TouchNavigation>
+     *  - <OpenLayers.Control.Zoom> or <OpenLayers.Control.PanZoom>
      *  - <OpenLayers.Control.ArgParser>
      *  - <OpenLayers.Control.Attribution>
      */
@@ -248,18 +240,10 @@ OpenLayers.Map = OpenLayers.Class({
     panRatio: 1.5,    
 
     /**
-     * Property: viewRequestID
-     * {String} Used to store a unique identifier that changes when the map 
-     *          view changes. viewRequestID should be used when adding data 
-     *          asynchronously to the map: viewRequestID is incremented when 
-     *          you initiate your request (right now during changing of 
-     *          baselayers and changing of zooms). It is stored here in the 
-     *          map and also in the data that will be coming back 
-     *          asynchronously. Before displaying this data on request 
-     *          completion, we check that the viewRequestID of the data is 
-     *          still the same as that of the map. Fix for #480
+     * APIProperty: options
+     * {Object} The options object passed to the class constructor. Read-only.
      */
-    viewRequestID: 0,
+    options: null,
 
   // Options
 
@@ -272,18 +256,23 @@ OpenLayers.Map = OpenLayers.Class({
 
     /**
      * APIProperty: projection
-     * {String} Set in the map options to override the default projection 
-     *          string this map - also set maxExtent, maxResolution, and 
-     *          units if appropriate.  Default is "EPSG:4326".
+     * {String} Set in the map options to specify the default projection 
+     *          for layers added to this map. When using a projection other than EPSG:4326
+     *          (CRS:84, Geographic) or EPSG:3857 (EPSG:900913, Web Mercator),
+     *          also set maxExtent, maxResolution or resolutions.  Default is "EPSG:4326".
+     *          Note that the projection of the map is usually determined
+     *          by that of the current baseLayer (see <baseLayer> and <getProjectionObject>).
      */
     projection: "EPSG:4326",    
         
     /**
      * APIProperty: units
-     * {String} The map units.  Defaults to 'degrees'.  Possible values are
-     *          'degrees' (or 'dd'), 'm', 'ft', 'km', 'mi', 'inches'.
+     * {String} The map units.  Possible values are 'degrees' (or 'dd'), 'm', 
+     *     'ft', 'km', 'mi', 'inches'.  Normally taken from the projection.
+     *     Only required if both map and layers do not define a projection,
+     *     or if they define a projection which does not define units
      */
-    units: 'degrees',
+    units: null,
 
     /**
      * APIProperty: resolutions
@@ -296,12 +285,10 @@ OpenLayers.Map = OpenLayers.Class({
 
     /**
      * APIProperty: maxResolution
-     * {Float} Default max is 360 deg / 256 px, which corresponds to
-     *          zoom level 0 on gmaps.  Specify a different value in the map 
-     *          options if you are not using a geographic projection and 
-     *          displaying the whole world.
+     * {Float} Required if you are not displaying the whole world on a tile
+     * with the size specified in <tileSize>.
      */
-    maxResolution: 1.40625,
+    maxResolution: null,
 
     /**
      * APIProperty: minResolution
@@ -323,24 +310,30 @@ OpenLayers.Map = OpenLayers.Class({
 
     /**
      * APIProperty: maxExtent
-     * {<OpenLayers.Bounds>} The maximum extent for the map.  Defaults to the
-     *                       whole world in decimal degrees 
-     *                       (-180, -90, 180, 90).  Specify a different
-     *                        extent in the map options if you are not using a 
-     *                        geographic projection and displaying the whole 
-     *                        world.
+     * {<OpenLayers.Bounds>|Array} If provided as an array, the array
+     *     should consist of four values (left, bottom, right, top).
+     *     The maximum extent for the map.  Defaults to the
+     *     whole world in decimal degrees (-180, -90, 180, 90).  Specify a 
+     *     different extent in the map options if you are not using a geographic
+     *     projection and displaying the whole  world. To restrict user panning
+     *     and zooming of the map, use <restrictedExtent> instead.  The value 
+     *     for <maxExtent> will change calculations for tile URLs.
      */
     maxExtent: null,
     
     /**
      * APIProperty: minExtent
-     * {<OpenLayers.Bounds>}
+     * {<OpenLayers.Bounds>|Array} If provided as an array, the array
+     *     should consist of four values (left, bottom, right, top).
+     *     The minimum extent for the map.  Defaults to null.
      */
     minExtent: null,
     
     /**
      * APIProperty: restrictedExtent
-     * {<OpenLayers.Bounds>} Limit map navigation to this extent where possible.
+     * {<OpenLayers.Bounds>|Array} If provided as an array, the array
+     *     should consist of four values (left, bottom, right, top).
+     *     Limit map navigation to this extent where possible.
      *     If a non-null restrictedExtent is set, panning will be restricted
      *     to the given bounds.  In addition, zooming to a resolution that
      *     displays more than the restricted extent will center the map
@@ -367,7 +360,8 @@ OpenLayers.Map = OpenLayers.Class({
     
     /** 
      * APIProperty: displayProjection
-     * {<OpenLayers.Projection>} Requires proj4js support.Projection used by
+     * {<OpenLayers.Projection>} Requires proj4js support for projections other
+     *     than EPSG:4326 or EPSG:900913/EPSG:3857. Projection used by
      *     several controls to display data to user. If this property is set,
      *     it will be set on any control which has a null displayProjection
      *     property at the time the control is added to the map. 
@@ -384,7 +378,7 @@ OpenLayers.Map = OpenLayers.Class({
     
     /**
      * Property: panTween
-     * {OpenLayers.Tween} Animated panning tween object, see panTo()
+     * {<OpenLayers.Tween>} Animated panning tween object, see panTo()
      */
     panTween: null,
 
@@ -423,7 +417,8 @@ OpenLayers.Map = OpenLayers.Class({
     
     /**
      * Property: minPx
-     * {<OpenLayers.Pixel>} Lower left of maxExtent in viewport pixel space.
+     * {Object} An object with a 'x' and 'y' values that is the lower
+     *     left of maxExtent in viewport pixel space.
      *     Used to verify in moveByPx that the new location we're moving to
      *     is valid. It is also used in the getLonLatFromViewPortPx function
      *     of Layer.
@@ -432,7 +427,8 @@ OpenLayers.Map = OpenLayers.Class({
     
     /**
      * Property: maxPx
-     * {<OpenLayers.Pixel>} Top right of maxExtent in viewport pixel space.
+     * {Object} An object with a 'x' and 'y' values that is the top
+     *     right of maxExtent in viewport pixel space.
      *     Used to verify in moveByPx that the new location we're moving to
      *     is valid.
      */
@@ -449,6 +445,24 @@ OpenLayers.Map = OpenLayers.Class({
      *     provided or if you intend to call the <render> method later.
      * options - {Object} Optional object with properties to tag onto the map.
      *
+     * Valid options (in addition to the listed API properties):
+     * center - {<OpenLayers.LonLat>|Array} The default initial center of the map.
+     *     If provided as array, the first value is the x coordinate,
+     *     and the 2nd value is the y coordinate.
+     *     Only specify if <layers> is provided.
+     *     Note that if an ArgParser/Permalink control is present,
+     *     and the querystring contains coordinates, center will be set
+     *     by that, and this option will be ignored.
+     * zoom - {Number} The initial zoom level for the map. Only specify if
+     *     <layers> is provided.
+     *     Note that if an ArgParser/Permalink control is present,
+     *     and the querystring contains a zoom level, zoom will be set
+     *     by that, and this option will be ignored.
+     * extent - {<OpenLayers.Bounds>|Array} The initial extent of the map.
+     *     If provided as an array, the array should consist of
+     *     four values (left, bottom, right, top).
+     *     Only specify if <center> and <zoom> are not provided.
+     * 
      * Examples:
      * (code)
      * // create a map with default options in an element with the id "map1"
@@ -456,28 +470,26 @@ OpenLayers.Map = OpenLayers.Class({
      *
      * // create a map with non-default options in an element with id "map2"
      * var options = {
+     *     projection: "EPSG:3857",
      *     maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-     *     maxResolution: 156543,
-     *     units: 'm',
-     *     projection: "EPSG:41001"
+     *     center: new OpenLayers.LonLat(-12356463.476333, 5621521.4854095)
      * };
      * var map = new OpenLayers.Map("map2", options);
      *
-     * // map with non-default options - same as above but with a single argument
+     * // map with non-default options - same as above but with a single argument,
+     * // a restricted extent, and using arrays for bounds and center
      * var map = new OpenLayers.Map({
      *     div: "map_id",
-     *     maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-     *     maxResolution: 156543,
-     *     units: 'm',
-     *     projection: "EPSG:41001"
+     *     projection: "EPSG:3857",
+     *     maxExtent: [-18924313.432222, -15538711.094146, 18924313.432222, 15538711.094146],
+     *     restrictedExtent: [-13358338.893333, -9608371.5085962, 13358338.893333, 9608371.5085962],
+     *     center: [-12356463.476333, 5621521.4854095]
      * });
      *
      * // create a map without a reference to a container - call render later
      * var map = new OpenLayers.Map({
-     *     maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
-     *     maxResolution: 156543,
-     *     units: 'm',
-     *     projection: "EPSG:41001"
+     *     projection: "EPSG:3857",
+     *     maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000)
      * });
      * (end)
      */    
@@ -494,15 +506,34 @@ OpenLayers.Map = OpenLayers.Class({
         this.tileSize = new OpenLayers.Size(OpenLayers.Map.TILE_WIDTH,
                                             OpenLayers.Map.TILE_HEIGHT);
         
-        this.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 90);
-        
         this.paddingForPopups = new OpenLayers.Bounds(15, 15, 15, 15);
 
         this.theme = OpenLayers._getScriptLocation() + 
                              'theme/default/style.css'; 
 
+        // backup original options
+        this.options = OpenLayers.Util.extend({}, options);
+
         // now override default options 
         OpenLayers.Util.extend(this, options);
+        
+        var projCode = this.projection instanceof OpenLayers.Projection ?
+            this.projection.projCode : this.projection;
+        OpenLayers.Util.applyDefaults(this, OpenLayers.Projection.defaults[projCode]);
+        
+        // allow extents and center to be arrays
+        if (this.maxExtent && !(this.maxExtent instanceof OpenLayers.Bounds)) {
+            this.maxExtent = new OpenLayers.Bounds(this.maxExtent);
+        }
+        if (this.minExtent && !(this.minExtent instanceof OpenLayers.Bounds)) {
+            this.minExtent = new OpenLayers.Bounds(this.minExtent);
+        }
+        if (this.restrictedExtent && !(this.restrictedExtent instanceof OpenLayers.Bounds)) {
+            this.restrictedExtent = new OpenLayers.Bounds(this.restrictedExtent);
+        }
+        if (this.center && !(this.center instanceof OpenLayers.LonLat)) {
+            this.center = new OpenLayers.LonLat(this.center);
+        }
 
         // initialize layers array
         this.layers = [];
@@ -528,39 +559,29 @@ OpenLayers.Map = OpenLayers.Class({
         this.viewPortDiv.className = "olMapViewport";
         this.div.appendChild(this.viewPortDiv);
 
-        // the eventsDiv is where we listen for all map events
-        var eventsDiv = document.createElement("div");
-        eventsDiv.id = this.id + "_events";
-        eventsDiv.style.position = "absolute";
-        eventsDiv.style.width = "100%";
-        eventsDiv.style.height = "100%";
-        eventsDiv.style.zIndex = this.Z_INDEX_BASE.Control - 1;
-        this.viewPortDiv.appendChild(eventsDiv);
-        this.eventsDiv = eventsDiv;
         this.events = new OpenLayers.Events(
-            this, this.eventsDiv, this.EVENT_TYPES, this.fallThrough, 
+            this, this.viewPortDiv, null, this.fallThrough, 
             {includeXY: true}
         );
 
         // the layerContainerDiv is the one that holds all the layers
         id = this.id + "_OpenLayers_Container";
         this.layerContainerDiv = OpenLayers.Util.createDiv(id);
+        this.layerContainerDiv.style.width = '100px';
+        this.layerContainerDiv.style.height = '100px';
         this.layerContainerDiv.style.zIndex=this.Z_INDEX_BASE['Popup']-1;
         
-        this.eventsDiv.appendChild(this.layerContainerDiv);
+        this.viewPortDiv.appendChild(this.layerContainerDiv);
 
         this.updateSize();
         if(this.eventListeners instanceof Object) {
             this.events.on(this.eventListeners);
         }
  
-        // update the map size and location before the map moves
-        this.events.register("movestart", this, this.updateSize);
-
         // Because Mozilla does not support the "resize" event for elements 
         // other than "window", we need to put a hack here. 
-        if (OpenLayers.String.contains(navigator.appName, "Microsoft")) {
-            // If IE, register the resize on the div
+        if (parseFloat(navigator.appVersion.split("MSIE")[1]) < 9) {
+            // If IE < 9, register the resize on the div
             this.events.register("resize", this, this.updateSize);
         } else {
             // Else updateSize on catching the window's resize
@@ -595,15 +616,27 @@ OpenLayers.Map = OpenLayers.Class({
             }
         }
         
-        if (this.controls == null) {
+        if (this.controls == null) { // default controls
+            this.controls = [];
             if (OpenLayers.Control != null) { // running full or lite?
-                this.controls = [ new OpenLayers.Control.Navigation(),
-                                  new OpenLayers.Control.PanZoom(),
-                                  new OpenLayers.Control.ArgParser(),
-                                  new OpenLayers.Control.Attribution()
-                                ];
-            } else {
-                this.controls = [];
+                // Navigation or TouchNavigation depending on what is in build
+                if (OpenLayers.Control.Navigation) {
+                    this.controls.push(new OpenLayers.Control.Navigation());
+                } else if (OpenLayers.Control.TouchNavigation) {
+                    this.controls.push(new OpenLayers.Control.TouchNavigation());
+                }
+                if (OpenLayers.Control.Zoom) {
+                    this.controls.push(new OpenLayers.Control.Zoom());
+                } else if (OpenLayers.Control.PanZoom) {
+                    this.controls.push(new OpenLayers.Control.PanZoom());
+                }
+
+                if (OpenLayers.Control.ArgParser) {
+                    this.controls.push(new OpenLayers.Control.ArgParser());
+                }
+                if (OpenLayers.Control.Attribution) {
+                    this.controls.push(new OpenLayers.Control.Attribution());
+                }
             }
         }
 
@@ -623,20 +656,31 @@ OpenLayers.Map = OpenLayers.Class({
         if (options && options.layers) {
             /** 
              * If you have set options.center, the map center property will be
-             * set at this point.  However, since setCenter has not been caleld,
+             * set at this point.  However, since setCenter has not been called,
              * addLayers gets confused.  So we delete the map center in this 
              * case.  Because the check below uses options.center, it will
              * be properly set below.
              */
             delete this.center;
-            this.addLayers(options.layers);        
+            this.addLayers(options.layers);
             // set center (and optionally zoom)
-            if (options.center) {
+            if (options.center && !this.getCenter()) {
                 // zoom can be undefined here
                 this.setCenter(options.center, options.zoom);
             }
         }
     },
+
+    /** 
+     * APIMethod: getViewport
+     * Get the DOMElement representing the view port.
+     *
+     * Returns:
+     * {DOMElement}
+     */
+    getViewport: function() {
+        return this.viewPortDiv;
+    },
     
     /**
      * APIMethod: render
@@ -733,6 +777,7 @@ OpenLayers.Map = OpenLayers.Class({
         this.events.destroy();
         this.events = null;
 
+        this.options = null;
     },
 
     /**
@@ -794,7 +839,7 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getLayersBy
      * Get a list of layers with properties matching the given criteria.
      *
-     * Parameter:
+     * Parameters:
      * property - {String} A layer property to be matched.
      * match - {String | Object} A string to match.  Can also be a regular
      *     expression literal or object.  In addition, it can be any object
@@ -815,7 +860,7 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getLayersByName
      * Get a list of layers with names matching the given name.
      *
-     * Parameter:
+     * Parameters:
      * match - {String | Object} A layer name.  The name can also be a regular
      *     expression literal or object.  In addition, it can be any object
      *     with a method named test.  For reqular expressions or other, if
@@ -835,7 +880,7 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getLayersByClass
      * Get a list of layers of a given class (CLASS_NAME).
      *
-     * Parameter:
+     * Parameters:
      * match - {String | Object} A layer class name.  The match can also be a
      *     regular expression literal or object.  In addition, it can be any
      *     object with a method named test.  For reqular expressions or other,
@@ -855,7 +900,7 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getControlsBy
      * Get a list of controls with properties matching the given criteria.
      *
-     * Parameter:
+     * Parameters:
      * property - {String} A control property to be matched.
      * match - {String | Object} A string to match.  Can also be a regular
      *     expression literal or object.  In addition, it can be any object
@@ -876,7 +921,7 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getControlsByClass
      * Get a list of controls of a given class (CLASS_NAME).
      *
-     * Parameter:
+     * Parameters:
      * match - {String | Object} A control class name.  The match can also be a
      *     regular expression literal or object.  In addition, it can be any
      *     object with a method named test.  For reqular expressions or other,
@@ -905,7 +950,7 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getLayer
      * Get a layer based on its id
      *
-     * Parameter:
+     * Parameters:
      * id - {String} A layer id
      *
      * Returns:
@@ -953,23 +998,22 @@ OpenLayers.Map = OpenLayers.Class({
     *
     * Parameters:
     * layer - {<OpenLayers.Layer>} 
+    *
+    * Returns:
+    * {Boolean} True if the layer has been added to the map.
     */    
     addLayer: function (layer) {
-        for(var i=0, len=this.layers.length; i <len; i++) {
+        for(var i = 0, len = this.layers.length; i < len; i++) {
             if (this.layers[i] == layer) {
-                var msg = OpenLayers.i18n('layerAlreadyAdded', 
-                                                      {'layerName':layer.name});
-                OpenLayers.Console.warn(msg);
                 return false;
             }
         }
         if (this.events.triggerEvent("preaddlayer", {layer: layer}) === false) {
-            return;
+            return false;
         }
         if(this.allOverlays) {
             layer.isBaseLayer = false;
         }
-
         
         layer.div.className = "olLayerDiv";
         layer.div.style.overflow = "";
@@ -997,6 +1041,8 @@ OpenLayers.Map = OpenLayers.Class({
         this.events.triggerEvent("addlayer", {layer: layer});
         layer.events.triggerEvent("added", {map: this, layer: layer});
         layer.afterAdd();
+
+        return true;
     },
 
     /**
@@ -1183,12 +1229,13 @@ OpenLayers.Map = OpenLayers.Class({
                 // set new baselayer
                 this.baseLayer = newBaseLayer;
                 
-                // Increment viewRequestID since the baseLayer is 
-                // changing. This is used by tiles to check if they should 
-                // draw themselves.
-                this.viewRequestID++;
                 if(!this.allOverlays || this.baseLayer.visibility) {
                     this.baseLayer.setVisibility(true);
+                    // Layer may previously have been visible but not in range.
+                    // In this case we need to redraw it to make it visible.
+                    if (this.baseLayer.inRange === false) {
+                        this.baseLayer.redraw();
+                    }
                 }
 
                 // recenter the map
@@ -1490,16 +1537,13 @@ OpenLayers.Map = OpenLayers.Class({
         }
     
         if ((center != null) && (resolution != null)) {
-
-            var size = this.getSize();
-            var w_deg = size.w * resolution;
-            var h_deg = size.h * resolution;
-        
-            extent = new OpenLayers.Bounds(center.lon - w_deg / 2,
-                                           center.lat - h_deg / 2,
-                                           center.lon + w_deg / 2,
-                                           center.lat + h_deg / 2);
+            var halfWDeg = (this.size.w * resolution) / 2;
+            var halfHDeg = (this.size.h * resolution) / 2;
         
+            extent = new OpenLayers.Bounds(center.lon - halfWDeg,
+                                           center.lat - halfHDeg,
+                                           center.lon + halfWDeg,
+                                           center.lat + halfHDeg);
         }
 
         return extent;
@@ -1538,9 +1582,10 @@ OpenLayers.Map = OpenLayers.Class({
      */
     getCachedCenter: function() {
         if (!this.center && this.size) {
-            this.center = this.getLonLatFromViewPortPx(
-                new OpenLayers.Pixel(this.size.w / 2, this.size.h / 2)
-            );
+            this.center = this.getLonLatFromViewPortPx({
+                x: this.size.w / 2,
+                y: this.size.h / 2
+            });
         }
         return this.center;
     },
@@ -1589,8 +1634,10 @@ OpenLayers.Map = OpenLayers.Class({
                     this.panTo(newCenterLonLat);
                 } else {
                     this.moveTo(newCenterLonLat);
-                    this.dragging = false;
-                    this.events.triggerEvent("moveend");
+                    if(this.dragging) {
+                        this.dragging = false;
+                        this.events.triggerEvent("moveend");
+                    }
                 }    
             }
         }        
@@ -1648,7 +1695,9 @@ OpenLayers.Map = OpenLayers.Class({
      * Set the map center (and optionally, the zoom level).
      * 
      * Parameters:
-     * lonlat - {<OpenLayers.LonLat>} The new center location.
+     * lonlat - {<OpenLayers.LonLat>|Array} The new center location.
+     *     If provided as array, the first value is the x coordinate,
+     *     and the 2nd value is the y coordinate.
      * zoom - {Integer} Optional zoom level.
      * dragging - {Boolean} Specifies whether or not to trigger 
      *                      movestart/end events
@@ -1692,7 +1741,6 @@ OpenLayers.Map = OpenLayers.Class({
                     x >= this.minPx.x + xRestriction ? Math.round(dx) : 0;
         dy = y <= this.maxPx.y - yRestriction &&
                     y >= this.minPx.y + yRestriction ? Math.round(dy) : 0;
-        var minX = this.minPx.x, maxX = this.maxPx.x;
         if (dx || dy) {
             if (!this.dragging) {
                 this.dragging = true;
@@ -1704,14 +1752,6 @@ OpenLayers.Map = OpenLayers.Class({
                     parseInt(this.layerContainerDiv.style.left) - dx + "px";
                 this.minPx.x -= dx;
                 this.maxPx.x -= dx;
-                if (wrapDateLine) {
-                    if (this.maxPx.x > maxX) {
-                        this.maxPx.x -= (maxX - minX);
-                    }
-                    if (this.minPx.x < minX) {
-                        this.minPx.x += (maxX - minX);
-                    }
-                }
             }
             if (dy) {
                 this.layerContainerDiv.style.top =
@@ -1731,6 +1771,30 @@ OpenLayers.Map = OpenLayers.Class({
             this.events.triggerEvent("move");
         }
     },
+    
+    /**
+     * Method: adjustZoom
+     *
+     * Parameters:
+     * zoom - {Number} The zoom level to adjust
+     *
+     * Returns:
+     * {Integer} Adjusted zoom level that shows a map not wider than its
+     * <baseLayer>'s maxExtent.
+     */
+    adjustZoom: function(zoom) {
+        var resolution, resolutions = this.baseLayer.resolutions,
+            maxResolution = this.getMaxExtent().getWidth() / this.size.w;
+        if (this.getResolutionForZoom(zoom) > maxResolution) {
+            for (var i=zoom|0, ii=resolutions.length; i<ii; ++i) {
+                if (resolutions[i] <= maxResolution) {
+                    zoom = i;
+                    break;
+                }
+            }
+        }
+        return zoom;
+    },
 
     /**
      * Method: moveTo
@@ -1741,6 +1805,9 @@ OpenLayers.Map = OpenLayers.Class({
      * options - {Object}
      */
     moveTo: function(lonlat, zoom, options) {
+        if (lonlat != null && !(lonlat instanceof OpenLayers.LonLat)) {
+            lonlat = new OpenLayers.LonLat(lonlat);
+        }
         if (!options) { 
             options = {};
         }
@@ -1750,6 +1817,14 @@ OpenLayers.Map = OpenLayers.Class({
                 zoom = Math.round(zoom);
             }
         }
+        if (this.baseLayer.wrapDateLine) {
+            var requestedZoom = zoom;
+            zoom = this.adjustZoom(zoom);
+            if (zoom !== requestedZoom) {
+                // zoom was adjusted, so keep old lonlat to avoid panning
+                lonlat = this.getCenter();
+            }
+        }
         // dragging is false by default
         var dragging = options.dragging || this.dragging;
         // forceZoomChange is false by default
@@ -1827,17 +1902,19 @@ OpenLayers.Map = OpenLayers.Class({
                 var latDelta = maxExtentCenter.lat - this.center.lat;
                 var extentWidth = Math.round(maxExtent.getWidth() / res);
                 var extentHeight = Math.round(maxExtent.getHeight() / res);
-                var left = (this.size.w - extentWidth) / 2 - lonDelta / res;
-                var top = (this.size.h - extentHeight) / 2 - latDelta / res;
-                this.minPx = new OpenLayers.Pixel(left, top);
-                this.maxPx = new OpenLayers.Pixel(left + extentWidth, top + extentHeight);
+                this.minPx = {
+                    x: (this.size.w - extentWidth) / 2 - lonDelta / res,
+                    y: (this.size.h - extentHeight) / 2 - latDelta / res
+                };
+                this.maxPx = {
+                    x: this.minPx.x + Math.round(maxExtent.getWidth() / res),
+                    y: this.minPx.y + Math.round(maxExtent.getHeight() / res)
+                };
             }
 
             if (zoomChanged) {
                 this.zoom = zoom;
                 this.resolution = res;
-                // zoom level has changed, increment viewRequestID.
-                this.viewRequestID++;
             }    
             
             var bounds = this.getExtent();
@@ -1949,7 +2026,8 @@ OpenLayers.Map = OpenLayers.Class({
         var valid = false;
         if (lonlat != null) {
             var maxExtent = this.getMaxExtent();
-            valid = maxExtent.containsLonLat(lonlat);        
+            var worldBounds = this.baseLayer.wrapDateLine && maxExtent;
+            valid = maxExtent.containsLonLat(lonlat, {worldBounds: worldBounds});
         }
         return valid;
     },
@@ -2155,7 +2233,7 @@ OpenLayers.Map = OpenLayers.Class({
     /**
      * APIMethod: getResolutionForZoom
      * 
-     * Parameter:
+     * Parameters:
      * zoom - {Float}
      * 
      * Returns:
@@ -2173,7 +2251,7 @@ OpenLayers.Map = OpenLayers.Class({
     /**
      * APIMethod: getZoomForResolution
      * 
-     * Parameter:
+     * Parameters:
      * resolution - {Float}
      * closest - {Boolean} Find the zoom level that corresponds to the absolute 
      *     closest resolution, which may result in a zoom whose corresponding
@@ -2239,7 +2317,8 @@ OpenLayers.Map = OpenLayers.Class({
      * Zoom to the passed in bounds, recenter
      * 
      * Parameters:
-     * bounds - {<OpenLayers.Bounds>}
+     * bounds - {<OpenLayers.Bounds>|Array} If provided as an array, the array
+     *     should consist of four values (left, bottom, right, top).
      * closest - {Boolean} Find the zoom level that most closely fits the 
      *     specified bounds. Note that this may result in a zoom that does 
      *     not exactly contain the entire extent.
@@ -2247,6 +2326,9 @@ OpenLayers.Map = OpenLayers.Class({
      * 
      */
     zoomToExtent: function(bounds, closest) {
+        if (!(bounds instanceof OpenLayers.Bounds)) {
+            bounds = new OpenLayers.Bounds(bounds);
+        }
         var center = bounds.getCenterLonLat();
         if (this.baseLayer.wrapDateLine) {
             var maxExtent = this.getMaxExtent();
@@ -2263,10 +2345,7 @@ OpenLayers.Map = OpenLayers.Class({
             }
             //if the bounds was straddling (see above), then the center point 
             // we got from it was wrong. So we take our new bounds and ask it
-            // for the center. Because our new bounds is at least partially 
-            // outside the bounds of maxExtent, the new calculated center 
-            // might also be. We don't want to pass a bad center value to 
-            // setCenter, so we have it wrap itself across the date line.
+            // for the center.
             //
             center = bounds.getCenterLonLat().wrapDateLine(maxExtent);
         }
@@ -2278,7 +2357,7 @@ OpenLayers.Map = OpenLayers.Class({
      * Zoom to the full extent and recenter.
      *
      * Parameters:
-     * options - 
+     * options - {Object}
      * 
      * Allowed Options:
      * restricted - {Boolean} True to zoom to restricted extent if it is 
@@ -2309,15 +2388,15 @@ OpenLayers.Map = OpenLayers.Class({
     zoomToScale: function(scale, closest) {
         var res = OpenLayers.Util.getResolutionFromScale(scale, 
                                                          this.baseLayer.units);
-        var size = this.getSize();
-        var w_deg = size.w * res;
-        var h_deg = size.h * res;
+
+        var halfWDeg = (this.size.w * res) / 2;
+        var halfHDeg = (this.size.h * res) / 2;
         var center = this.getCachedCenter();
 
-        var extent = new OpenLayers.Bounds(center.lon - w_deg / 2,
-                                           center.lat - h_deg / 2,
-                                           center.lon + w_deg / 2,
-                                           center.lat + h_deg / 2);
+        var extent = new OpenLayers.Bounds(center.lon - halfWDeg,
+                                           center.lat - halfHDeg,
+                                           center.lon + halfWDeg,
+                                           center.lat + halfHDeg);
         this.zoomToExtent(extent, closest);
     },
     
@@ -2338,7 +2417,9 @@ OpenLayers.Map = OpenLayers.Class({
      * Method: getLonLatFromViewPortPx
      * 
      * Parameters:
-     * viewPortPx - {<OpenLayers.Pixel>}
+     * viewPortPx - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or
+     *                                          an object with a 'x'
+     *                                          and 'y' properties.
      * 
      * Returns:
      * {<OpenLayers.LonLat>} An OpenLayers.LonLat which is the passed-in view 
@@ -2381,7 +2462,8 @@ OpenLayers.Map = OpenLayers.Class({
      * APIMethod: getLonLatFromPixel
      * 
      * Parameters:
-     * px - {<OpenLayers.Pixel>}
+     * px - {<OpenLayers.Pixel>|Object} An OpenLayers.Pixel or an object with
+     *                                  a 'x' and 'y' properties.
      *
      * Returns:
      * {<OpenLayers.LonLat>} An OpenLayers.LonLat corresponding to the given
diff --git a/lib/OpenLayers/Marker.js b/lib/OpenLayers/Marker.js
index c3debf8..984383f 100644
--- a/lib/OpenLayers/Marker.js
+++ b/lib/OpenLayers/Marker.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -64,6 +64,7 @@ OpenLayers.Marker = OpenLayers.Class({
     
     /** 
      * Constructor: OpenLayers.Marker
+     *
      * Parameters:
      * lonlat - {<OpenLayers.LonLat>} the position of this marker
      * icon - {<OpenLayers.Icon>}  the icon for this marker
@@ -80,7 +81,7 @@ OpenLayers.Marker = OpenLayers.Class({
             this.icon.offset = newIcon.offset;
             this.icon.calculateOffset = newIcon.calculateOffset;
         }
-        this.events = new OpenLayers.Events(this, this.icon.imageDiv, null);
+        this.events = new OpenLayers.Events(this, this.icon.imageDiv);
     },
     
     /**
@@ -135,7 +136,8 @@ OpenLayers.Marker = OpenLayers.Class({
     * Move the marker to the new location.
     *
     * Parameters:
-    * px - {<OpenLayers.Pixel>} the pixel position to move to
+    * px - {<OpenLayers.Pixel>|Object} the pixel position to move to.
+    * An OpenLayers.Pixel or an object with a 'x' and 'y' properties.
     */
     moveTo: function (px) {
         if ((px != null) && (this.icon != null)) {
@@ -181,9 +183,10 @@ OpenLayers.Marker = OpenLayers.Class({
      */
     inflate: function(inflate) {
         if (this.icon) {
-            var newSize = new OpenLayers.Size(this.icon.size.w * inflate,
-                                              this.icon.size.h * inflate);
-            this.icon.setSize(newSize);
+            this.icon.setSize({
+                w: this.icon.size.w * inflate,
+                h: this.icon.size.h * inflate
+            });
         }        
     },
     
@@ -231,13 +234,8 @@ OpenLayers.Marker = OpenLayers.Class({
  * {<OpenLayers.Icon>} A default OpenLayers.Icon to use for a marker
  */
 OpenLayers.Marker.defaultIcon = function() {
-    var url = OpenLayers.Util.getImagesLocation() + "marker.png";
-    var size = new OpenLayers.Size(21, 25);
-    var calculateOffset = function(size) {
-                    return new OpenLayers.Pixel(-(size.w/2), -size.h);
-                 };
-
-    return new OpenLayers.Icon(url, size, null, calculateOffset);        
+    return new OpenLayers.Icon(OpenLayers.Util.getImageLocation("marker.png"),
+                               {w: 21, h: 25}, {x: -10.5, y: -25});
 };
     
 
diff --git a/lib/OpenLayers/Marker/Box.js b/lib/OpenLayers/Marker/Box.js
index 74cd95a..435f221 100644
--- a/lib/OpenLayers/Marker/Box.js
+++ b/lib/OpenLayers/Marker/Box.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -40,7 +40,7 @@ OpenLayers.Marker.Box = OpenLayers.Class(OpenLayers.Marker, {
         this.bounds = bounds;
         this.div    = OpenLayers.Util.createDiv();
         this.div.style.overflow = 'hidden';
-        this.events = new OpenLayers.Events(this, this.div, null);
+        this.events = new OpenLayers.Events(this, this.div);
         this.setBorder(borderColor, borderWidth);
     },
 
diff --git a/lib/OpenLayers/Popup.js b/lib/OpenLayers/Popup.js
index 0a4d99f..2955766 100644
--- a/lib/OpenLayers/Popup.js
+++ b/lib/OpenLayers/Popup.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -513,10 +513,9 @@ OpenLayers.Popup = OpenLayers.Class({
             this.contentDiv.innerHTML + 
             "</div>";
  
-        var containerElement = (this.map) ? this.map.layerContainerDiv
-        								  : document.body;
+        var containerElement = (this.map) ? this.map.div : document.body;
         var realSize = OpenLayers.Util.getRenderedDimensions(
-            preparedHTML, null,	{
+            preparedHTML, null, {
                 displayClass: this.displayClass,
                 containerElement: containerElement
             }
@@ -533,11 +532,12 @@ OpenLayers.Popup = OpenLayers.Class({
 
         } else {
 
-            //make a new OL.Size object with the clipped dimensions 
+            // make a new 'size' object with the clipped dimensions 
             // set or null if not clipped.
-            var fixedSize = new OpenLayers.Size();
-            fixedSize.w = (safeSize.w < realSize.w) ? safeSize.w : null;
-            fixedSize.h = (safeSize.h < realSize.h) ? safeSize.h : null;
+            var fixedSize = {
+                w: (safeSize.w < realSize.w) ? safeSize.w : null,
+                h: (safeSize.h < realSize.h) ? safeSize.h : null
+            };
         
             if (fixedSize.w && fixedSize.h) {
                 //content is too big in both directions, so we will use 
@@ -684,7 +684,9 @@ OpenLayers.Popup = OpenLayers.Class({
         // 'img' properties in the context.
         //
         var onImgLoad = function() {
-            
+            if (this.popup.id === null) { // this.popup has been destroyed!
+                return;
+            }
             this.popup.updateSize();
      
             if ( this.popup.visible() && this.popup.panMapIfOutOfView ) {
@@ -836,12 +838,12 @@ OpenLayers.Popup = OpenLayers.Class({
         var contentDivPadding = this._contentDivPadding;
         if (!contentDivPadding) {
 
-        	if (this.div.parentNode == null) {
-	        	//make the div invisible and add it to the page        
-	            this.div.style.display = "none";
-	            document.body.appendChild(this.div);
-	    	}
-	            
+            if (this.div.parentNode == null) {
+                //make the div invisible and add it to the page        
+                this.div.style.display = "none";
+                document.body.appendChild(this.div);
+            }
+                    
             //read the padding settings from css, put them in an OL.Bounds        
             contentDivPadding = new OpenLayers.Bounds(
                 OpenLayers.Element.getStyle(this.contentDiv, "padding-left"),
@@ -854,9 +856,9 @@ OpenLayers.Popup = OpenLayers.Class({
             this._contentDivPadding = contentDivPadding;
 
             if (this.div.parentNode == document.body) {
-	            //remove the div from the page and make it visible again
-	            document.body.removeChild(this.div);
-	            this.div.style.display = "";
+                //remove the div from the page and make it visible again
+                document.body.removeChild(this.div);
+                this.div.style.display = "";
             }
         }
         return contentDivPadding;
@@ -872,7 +874,7 @@ OpenLayers.Popup = OpenLayers.Class({
     addCloseBox: function(callback) {
 
         this.closeDiv = OpenLayers.Util.createDiv(
-            this.id + "_close", null, new OpenLayers.Size(17, 17)
+            this.id + "_close", null, {w: 17, h: 17}
         );
         this.closeDiv.className = "olPopupCloseBox"; 
         
diff --git a/lib/OpenLayers/Popup/Anchored.js b/lib/OpenLayers/Popup/Anchored.js
index f36c0d7..0795d9f 100644
--- a/lib/OpenLayers/Popup/Anchored.js
+++ b/lib/OpenLayers/Popup/Anchored.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -18,7 +18,7 @@ OpenLayers.Popup.Anchored =
   OpenLayers.Class(OpenLayers.Popup, {
 
     /** 
-     * Parameter: relativePosition
+     * Property: relativePosition
      * {String} Relative position of the popup ("br", "tr", "tl" or "bl").
      */
     relativePosition: null,
@@ -38,7 +38,7 @@ OpenLayers.Popup.Anchored =
     keepInMap: true,
 
     /**
-     * Parameter: anchor
+     * Property: anchor
      * {Object} Object to which we'll anchor the popup. Must expose a 
      *     'size' (<OpenLayers.Size>) and 'offset' (<OpenLayers.Pixel>).
      */
@@ -162,8 +162,8 @@ OpenLayers.Popup.Anchored =
      * 
      *     Note that in the classic Anchored popup, there is nothing to do 
      *     here, since the popup looks exactly the same in all four positions.
-     *     Subclasses such as the AnchoredBubble and Framed, however, will 
-     *     want to do something special here.
+     *     Subclasses such as Framed, however, will want to do something
+     *     special here.
      */
     updateRelativePosition: function() {
         //to be overridden by subclasses
diff --git a/lib/OpenLayers/Popup/AnchoredBubble.js b/lib/OpenLayers/Popup/AnchoredBubble.js
index 76e6dd2..9d857ea 100644
--- a/lib/OpenLayers/Popup/AnchoredBubble.js
+++ b/lib/OpenLayers/Popup/AnchoredBubble.js
@@ -1,16 +1,19 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Popup/Anchored.js
+ * @requires OpenLayers/Console.js
  * @requires Rico/Corner.js
  */
 
 /**
  * Class: OpenLayers.Popup.AnchoredBubble
+ * This class is *deprecated*. Use {<OpenLayers.Popup.Anchored>} and
+ * round corners using CSS3's border-radius property.
  * 
  * Inherits from: 
  *  - <OpenLayers.Popup.Anchored>
@@ -40,6 +43,8 @@ OpenLayers.Popup.AnchoredBubble =
      */
     initialize:function(id, lonlat, contentSize, contentHTML, anchor, closeBox,
                         closeBoxCallback) {
+
+        OpenLayers.Console.warn('AnchoredBubble is deprecated');
         
         this.padding = new OpenLayers.Bounds(
             0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE,
diff --git a/lib/OpenLayers/Popup/Framed.js b/lib/OpenLayers/Popup/Framed.js
index efa1428..4d76490 100644
--- a/lib/OpenLayers/Popup/Framed.js
+++ b/lib/OpenLayers/Popup/Framed.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Popup/FramedCloud.js b/lib/OpenLayers/Popup/FramedCloud.js
index 6dec387..ce1c322 100644
--- a/lib/OpenLayers/Popup/FramedCloud.js
+++ b/lib/OpenLayers/Popup/FramedCloud.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -218,17 +218,10 @@ OpenLayers.Popup.FramedCloud =
     initialize:function(id, lonlat, contentSize, contentHTML, anchor, closeBox, 
                         closeBoxCallback) {
 
-        this.imageSrc = OpenLayers.Util.getImagesLocation() + 'cloud-popup-relative.png';
+        this.imageSrc = OpenLayers.Util.getImageLocation('cloud-popup-relative.png');
         OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments);
         this.contentDiv.className = this.contentDisplayClass;
     },
 
-    /** 
-     * APIMethod: destroy
-     */
-    destroy: function() {
-        OpenLayers.Popup.Framed.prototype.destroy.apply(this, arguments);
-    },
-
     CLASS_NAME: "OpenLayers.Popup.FramedCloud"
 });
diff --git a/lib/OpenLayers/Projection.js b/lib/OpenLayers/Projection.js
index 7e652ba..03d64e6 100644
--- a/lib/OpenLayers/Projection.js
+++ b/lib/OpenLayers/Projection.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -9,10 +9,21 @@
  */
 
 /**
- * Class: OpenLayers.Projection
- * Class for coordinate transforms between coordinate systems.
- *     Depends on the proj4js library. If proj4js is not available, 
- *     then this is just an empty stub.
+ * Namespace: OpenLayers.Projection
+ * Methods for coordinate transforms between coordinate systems.  By default,
+ *     OpenLayers ships with the ability to transform coordinates between
+ *     geographic (EPSG:4326) and web or spherical mercator (EPSG:900913 et al.)
+ *     coordinate reference systems.  See the <transform> method for details
+ *     on usage.
+ *
+ * Additional transforms may be added by using the <proj4js at http://proj4js.org/>
+ *     library.  If the proj4js library is included, the <transform> method 
+ *     will work between any two coordinate reference systems with proj4js 
+ *     definitions.
+ *
+ * If the proj4js library is not included, or if you wish to allow transforms
+ *     between arbitrary coordinate reference systems, use the <addTransform>
+ *     method to register a custom transform method.
  */
 OpenLayers.Projection = OpenLayers.Class({
 
@@ -43,7 +54,7 @@ OpenLayers.Projection = OpenLayers.Class({
      * projCode - {String} A string identifying the Well Known Identifier for
      *    the projection.
      * options - {Object} An optional object to set additional properties
-     *     on the layer.
+     *     on the projection.
      *
      * Returns:
      * {<OpenLayers.Projection>} A projection object.
@@ -101,6 +112,9 @@ OpenLayers.Projection = OpenLayers.Class({
     equals: function(projection) {
         var p = projection, equals = false;
         if (p) {
+            if (!(p instanceof OpenLayers.Projection)) {
+                p = new OpenLayers.Projection(p);
+            }
             if (window.Proj4js && this.proj.defData && p.proj.defData) {
                 equals = this.proj.defData.replace(this.titleRegEx, "") ==
                     p.proj.defData.replace(this.titleRegEx, "");
@@ -128,7 +142,7 @@ OpenLayers.Projection = OpenLayers.Class({
 
 /**
  * Property: transforms
- * Transforms is an object, with from properties, each of which may
+ * {Object} Transforms is an object, with from properties, each of which may
  * have a to property. This allows you to define projections without 
  * requiring support for proj4js to be included.
  *
@@ -149,6 +163,30 @@ OpenLayers.Projection = OpenLayers.Class({
 OpenLayers.Projection.transforms = {};
 
 /**
+ * APIProperty: defaults
+ * {Object} Defaults for the SRS codes known to OpenLayers (currently
+ * EPSG:4326, CRS:84, urn:ogc:def:crs:EPSG:6.6:4326, EPSG:900913, EPSG:3857,
+ * EPSG:102113 and EPSG:102100). Keys are the SRS code, values are units,
+ * maxExtent (the validity extent for the SRS) and yx (true if this SRS is
+ * known to have a reverse axis order).
+ */
+OpenLayers.Projection.defaults = {
+    "EPSG:4326": {
+        units: "degrees",
+        maxExtent: [-180, -90, 180, 90],
+        yx: true
+    },
+    "CRS:84": {
+        units: "degrees",
+        maxExtent: [-180, -90, 180, 90]
+    },
+    "EPSG:900913": {
+        units: "m",
+        maxExtent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34]
+    }
+};
+
+/**
  * APIMethod: addTransform
  * Set a custom transform method between two projections.  Use this method in
  *     cases where the proj4js lib is not available or where custom projections
@@ -162,6 +200,12 @@ OpenLayers.Projection.transforms = {};
  *     in place.  The original point should be modified.
  */
 OpenLayers.Projection.addTransform = function(from, to, method) {
+    if (method === OpenLayers.Projection.nullTransform) {
+        var defaults = OpenLayers.Projection.defaults[from];
+        if (defaults && !OpenLayers.Projection.defaults[to]) {
+            OpenLayers.Projection.defaults[to] = defaults;
+        }
+    }
     if(!OpenLayers.Projection.transforms[from]) {
         OpenLayers.Projection.transforms[from] = {};
     }
@@ -183,12 +227,23 @@ OpenLayers.Projection.addTransform = function(from, to, method) {
  * point - {object} A transformed coordinate.  The original point is modified.
  */
 OpenLayers.Projection.transform = function(point, source, dest) {
-    if (source.proj && dest.proj) {
-        point = Proj4js.transform(source.proj, dest.proj, point);
-    } else if (source && dest && 
-               OpenLayers.Projection.transforms[source.getCode()] && 
-               OpenLayers.Projection.transforms[source.getCode()][dest.getCode()]) {
-        OpenLayers.Projection.transforms[source.getCode()][dest.getCode()](point); 
+    if (source && dest) {
+        if (!(source instanceof OpenLayers.Projection)) {
+            source = new OpenLayers.Projection(source);
+        }
+        if (!(dest instanceof OpenLayers.Projection)) {
+            dest = new OpenLayers.Projection(dest);
+        }
+        if (source.proj && dest.proj) {
+            point = Proj4js.transform(source.proj, dest.proj, point);
+        } else {
+            var sourceCode = source.getCode();
+            var destCode = dest.getCode();
+            var transforms = OpenLayers.Projection.transforms;
+            if (transforms[sourceCode] && transforms[sourceCode][destCode]) {
+                transforms[sourceCode][destCode](point);
+            }
+        }
     }
     return point;
 };
@@ -199,10 +254,6 @@ OpenLayers.Projection.transform = function(point, source, dest) {
  * 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",
@@ -212,3 +263,59 @@ OpenLayers.Projection.transform = function(point, source, dest) {
 OpenLayers.Projection.nullTransform = function(point) {
     return point;
 };
+
+/**
+ * Note: Transforms for web mercator <-> geographic
+ * 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.
+ * For geographic, OpenLayers recognizes EPSG:4326, CRS:84 and
+ * urn:ogc:def:crs:EPSG:6.6:4326. OpenLayers also knows about the reverse axis
+ * order for EPSG:4326. 
+ */
+(function() {
+
+    var pole = 20037508.34;
+
+    function inverseMercator(xy) {
+        xy.x = 180 * xy.x / pole;
+        xy.y = 180 / Math.PI * (2 * Math.atan(Math.exp((xy.y / pole) * Math.PI)) - Math.PI / 2);
+        return xy;
+    }
+
+    function forwardMercator(xy) {
+        xy.x = xy.x * pole / 180;
+        xy.y = Math.log(Math.tan((90 + xy.y) * Math.PI / 360)) / Math.PI * pole;
+        return xy;
+    }
+
+    function map(base, codes) {
+        var add = OpenLayers.Projection.addTransform;
+        var same = OpenLayers.Projection.nullTransform;
+        var i, len, code, other, j;
+        for (i=0, len=codes.length; i<len; ++i) {
+            code = codes[i];
+            add(base, code, forwardMercator);
+            add(code, base, inverseMercator);
+            for (j=i+1; j<len; ++j) {
+                other = codes[j];
+                add(code, other, same);
+                add(other, code, same);
+            }
+        }
+    }
+    
+    // list of equivalent codes for web mercator
+    var mercator = ["EPSG:900913", "EPSG:3857", "EPSG:102113", "EPSG:102100"],
+        geographic = ["CRS:84", "urn:ogc:def:crs:EPSG:6.6:4326", "EPSG:4326"],
+        i;
+    for (i=mercator.length-1; i>=0; --i) {
+        map(mercator[i], geographic);
+    }
+    for (i=geographic.length-1; i>=0; --i) {
+        map(geographic[i], mercator);
+    }
+
+})();
diff --git a/lib/OpenLayers/Protocol.js b/lib/OpenLayers/Protocol.js
index 601e595..e094c06 100644
--- a/lib/OpenLayers/Protocol.js
+++ b/lib/OpenLayers/Protocol.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -36,7 +36,7 @@ OpenLayers.Protocol = OpenLayers.Class({
    
     /**
      * Property: defaultFilter
-     * {OpenLayers.Filter} Optional default filter to read requests
+     * {<OpenLayers.Filter>} Optional default filter to read requests
      */
     defaultFilter: null,
     
@@ -59,7 +59,7 @@ OpenLayers.Protocol = OpenLayers.Class({
      * Merge filter passed to the read method with the default one
      *
      * Parameters:
-     * filter - {OpenLayers.Filter}
+     * filter - {<OpenLayers.Filter>}
      */
     mergeWithDefaultFilter: function(filter) {
         var merged;
@@ -231,11 +231,20 @@ OpenLayers.Protocol.Response = OpenLayers.Class({
     /**
      * Property: features
      * {Array({<OpenLayers.Feature.Vector>})} or {<OpenLayers.Feature.Vector>}
-     * The features returned in the response by the server.
+     * The features returned in the response by the server. Depending on the 
+     * protocol's read payload, either features or data will be populated.
      */
     features: null,
 
     /**
+     * Property: data
+     * {Object}
+     * The data returned in the response by the server. Depending on the 
+     * protocol's read payload, either features or data will be populated.
+     */
+    data: null,
+
+    /**
      * Property: reqFeatures
      * {Array({<OpenLayers.Feature.Vector>})} or {<OpenLayers.Feature.Vector>}
      * The features provided by the user and placed in the request by the
diff --git a/lib/OpenLayers/Protocol/CSW.js b/lib/OpenLayers/Protocol/CSW.js
new file mode 100644
index 0000000..aa912bf
--- /dev/null
+++ b/lib/OpenLayers/Protocol/CSW.js
@@ -0,0 +1,30 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Protocol.js
+ */
+
+/**
+ * Class: OpenLayers.Protocol.CSW
+ * Used to create a versioned CSW protocol. Default version is 2.0.2.
+ */
+OpenLayers.Protocol.CSW = function(options) {
+    options = OpenLayers.Util.applyDefaults(
+        options, OpenLayers.Protocol.CSW.DEFAULTS
+    );
+    var cls = OpenLayers.Protocol.CSW["v"+options.version.replace(/\./g, "_")];
+    if(!cls) {
+        throw "Unsupported CSW version: " + options.version;
+    }
+    return new cls(options);
+};
+
+/**
+ * Constant: OpenLayers.Protocol.CSW.DEFAULTS
+ */
+OpenLayers.Protocol.CSW.DEFAULTS = {
+    "version": "2.0.2"
+};
diff --git a/lib/OpenLayers/Protocol/CSW/v2_0_2.js b/lib/OpenLayers/Protocol/CSW/v2_0_2.js
new file mode 100644
index 0000000..dc07622
--- /dev/null
+++ b/lib/OpenLayers/Protocol/CSW/v2_0_2.js
@@ -0,0 +1,127 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Protocol/CSW.js
+ * @requires OpenLayers/Format/CSWGetRecords/v2_0_2.js
+ */
+
+/**
+ * Class: OpenLayers.Protocol.CSW.v2_0_2
+ * CS-W (Catalogue services for the Web) version 2.0.2 protocol.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Protocol>
+ */
+OpenLayers.Protocol.CSW.v2_0_2 = OpenLayers.Class(OpenLayers.Protocol, {
+
+    /**
+     * Property: formatOptions
+     * {Object} Optional options for the format.  If a format is not provided,
+     *     this property can be used to extend the default format options.
+     */
+    formatOptions: null,
+
+    /**
+     * Constructor: OpenLayers.Protocol.CSW.v2_0_2
+     * A class for CSW version 2.0.2 protocol management.
+     *
+     * Parameters:
+     * options - {Object} Optional object whose properties will be set on the
+     *     instance.
+     */
+    initialize: function(options) {
+        OpenLayers.Protocol.prototype.initialize.apply(this, [options]);
+        if(!options.format) {
+            this.format = new OpenLayers.Format.CSWGetRecords.v2_0_2(OpenLayers.Util.extend({
+            }, this.formatOptions));
+        }
+    },
+
+    /**
+     * APIMethod: destroy
+     * Clean up the protocol.
+     */
+    destroy: function() {
+        if(this.options && !this.options.format) {
+            this.format.destroy();
+        }
+        this.format = null;
+        OpenLayers.Protocol.prototype.destroy.apply(this);
+    },
+
+    /**
+     * Method: read
+     * Construct a request for reading new records from the Catalogue.
+     */
+    read: function(options) {
+        options = OpenLayers.Util.extend({}, options);
+        OpenLayers.Util.applyDefaults(options, this.options || {});
+        var response = new OpenLayers.Protocol.Response({requestType: "read"});
+
+        var data = this.format.write(options.params);
+
+        response.priv = OpenLayers.Request.POST({
+            url: options.url,
+            callback: this.createCallback(this.handleRead, response, options),
+            params: options.params,
+            headers: options.headers,
+            data: data
+        });
+
+        return response;
+    },
+
+    /**
+     * Method: handleRead
+     * Deal with response from the read request.
+     *
+     * Parameters:
+     * response - {<OpenLayers.Protocol.Response>} The response object to pass
+     *     to the user callback.
+     *     This response is given a code property, and optionally a data property.
+     *     The latter represents the CSW records as returned by the call to
+     *     the CSW format read method.
+     * options - {Object} The user options passed to the read call.
+     */
+    handleRead: function(response, options) {
+        if(options.callback) {
+            var request = response.priv;
+            if(request.status >= 200 && request.status < 300) {
+                // success
+                response.data = this.parseData(request);
+                response.code = OpenLayers.Protocol.Response.SUCCESS;
+            } else {
+                // failure
+                response.code = OpenLayers.Protocol.Response.FAILURE;
+            }
+            options.callback.call(options.scope, response);
+        }
+    },
+
+    /**
+     * Method: parseData
+     * Read HTTP response body and return records
+     *
+     * Parameters:
+     * request - {XMLHttpRequest} The request object
+     *
+     * Returns:
+     * {Object} The CSW records as returned by the call to the format read method.
+     */
+    parseData: function(request) {
+        var doc = request.responseXML;
+        if(!doc || !doc.documentElement) {
+            doc = request.responseText;
+        }
+        if(!doc || doc.length <= 0) {
+            return null;
+        }
+        return this.format.read(doc);
+    },
+
+    CLASS_NAME: "OpenLayers.Protocol.CSW.v2_0_2"
+
+});
diff --git a/lib/OpenLayers/Protocol/HTTP.js b/lib/OpenLayers/Protocol/HTTP.js
index 2b86c0c..75aeda3 100644
--- a/lib/OpenLayers/Protocol/HTTP.js
+++ b/lib/OpenLayers/Protocol/HTTP.js
@@ -1,21 +1,16 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository 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
- * @requires OpenLayers/Filter/Comparison.js
- * @requires OpenLayers/Filter/Logical.js
  * @requires OpenLayers/Request/XMLHttpRequest.js
  */
 
 /**
- * TODO: remove this dependency in 3.0
- * @requires OpenLayers/Format/QueryStringFilter.js
+ * if application uses the query string, for example, for BBOX parameters,
+ * OpenLayers/Format/QueryStringFilter.js should be included in the build config file
  */
 
 /**
@@ -67,13 +62,28 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
     scope: null,
 
     /**
-     * Property: readWithPOST
+     * APIProperty: readWithPOST
      * {Boolean} true if read operations are done with POST requests
      *     instead of GET, defaults to false.
      */
     readWithPOST: false,
 
     /**
+     * APIProperty: updateWithPOST
+     * {Boolean} true if update operations are done with POST requests
+     *     defaults to false.
+     */
+    updateWithPOST: false,
+    
+    /**
+     * APIProperty: deleteWithPOST
+     * {Boolean} true if delete operations are done with POST requests
+     *     defaults to false.
+     *     if true, POST data is set to output of format.write().
+     */
+    deleteWithPOST: false,
+
+    /**
      * Property: wildcarded.
      * {Boolean} If true percent signs are added around values
      *     read from LIKE filters, for example if the protocol
@@ -104,7 +114,7 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
      * Valid options include:
      * url - {String}
      * headers - {Object} 
-     * params - {Object}
+     * params - {Object} URL parameters for GET requests
      * format - {<OpenLayers.Format>}
      * callback - {Function}
      * scope - {Object}
@@ -122,7 +132,7 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
             });
             this.filterToParams = function(filter, params) {
                 return format.write(filter, params);
-            }
+            };
         }
     },
     
@@ -141,7 +151,7 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
      * Optional method to translate an <OpenLayers.Filter> object into an object
      *     that can be serialized as request query string provided.  If a custom
      *     method is not provided, the filter will be serialized using the 
-     *     <OpenLayers.Protocol.simpleFilterSerializer> method.
+     *     <OpenLayers.Format.QueryStringFilter> class.
      *
      * Parameters:
      * filter - {<OpenLayers.Filter>} filter to convert.
@@ -171,7 +181,7 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
      * {<OpenLayers.Protocol.Response>} A response object, whose "priv" property
      *     references the HTTP request, this object is also passed to the
      *     callback function when the request completes, its "features" property
-     *     is then populated with the the features received from the server.
+     *     is then populated with the features received from the server.
      */
     read: function(options) {
         OpenLayers.Protocol.prototype.read.apply(this, arguments);
@@ -188,13 +198,13 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
                            options.readWithPOST : this.readWithPOST;
         var resp = new OpenLayers.Protocol.Response({requestType: "read"});
         if(readWithPOST) {
+            var headers = options.headers || {};
+            headers["Content-Type"] = "application/x-www-form-urlencoded";
             resp.priv = OpenLayers.Request.POST({
                 url: options.url,
                 callback: this.createCallback(this.handleRead, resp, options),
                 data: OpenLayers.Util.getParameterString(options.params),
-                headers: {
-                    "Content-Type": "application/x-www-form-urlencoded"
-                }
+                headers: headers
             });
         } else {
             resp.priv = OpenLayers.Request.GET({
@@ -298,7 +308,8 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
             requestType: "update"
         });
 
-        resp.priv = OpenLayers.Request.PUT({
+        var method = this.updateWithPOST ? "POST" : "PUT";
+        resp.priv = OpenLayers.Request[method]({
             url: url,
             callback: this.createCallback(this.handleUpdate, resp, options),
             headers: options.headers,
@@ -349,11 +360,16 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
             requestType: "delete"
         });
 
-        resp.priv = OpenLayers.Request.DELETE({
+        var method = this.deleteWithPOST ? "POST" : "DELETE";
+        var requestOptions = {
             url: url,
             callback: this.createCallback(this.handleDelete, resp, options),
             headers: options.headers
-        });
+        };
+        if (this.deleteWithPOST) {
+            requestOptions.data = this.format.write(feature);
+        }
+        resp.priv = OpenLayers.Request[method](requestOptions);
 
         return resp;
     },
diff --git a/lib/OpenLayers/Protocol/SOS.js b/lib/OpenLayers/Protocol/SOS.js
index 8f3ba9a..1211b60 100644
--- a/lib/OpenLayers/Protocol/SOS.js
+++ b/lib/OpenLayers/Protocol/SOS.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Protocol/SOS/v1_0_0.js b/lib/OpenLayers/Protocol/SOS/v1_0_0.js
index 7e23644..367065b 100644
--- a/lib/OpenLayers/Protocol/SOS/v1_0_0.js
+++ b/lib/OpenLayers/Protocol/SOS/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -38,6 +38,7 @@
      * Parameters:
      * options - {Object} Optional object whose properties will be set on the
      *     instance.
+     *
      * Valid options properties:
      * url - {String} URL to send requests to (required).
      * fois - {Array} The features of interest (required).
diff --git a/lib/OpenLayers/Protocol/SQL.js b/lib/OpenLayers/Protocol/SQL.js
deleted file mode 100644
index 404a3ba..0000000
--- a/lib/OpenLayers/Protocol/SQL.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) 2006-2011 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.js
- */
-
-/**
- * Class: OpenLayers.Protocol.SQL
- * Abstract SQL protocol class.  Not to be instantiated directly.  Use
- *     one of the SQL protocol subclasses instead.
- *
- * Inherits from:
- *  - <OpenLayers.Protocol>
- */
-OpenLayers.Protocol.SQL = OpenLayers.Class(OpenLayers.Protocol, {
-
-    /**
-     * APIProperty: databaseName
-     * {String}
-     */
-    databaseName: 'ol',
-
-    /**
-     * APIProperty: tableName
-     * Name of the database table into which Features should be saved.
-     */
-    tableName: "ol_vector_features",
-
-    /**
-     * Property: postReadFiltering
-     * {Boolean} Whether the filter (if there's one) must be applied after
-     *      the features have been read from the database; for example the
-     *      BBOX strategy passes the read method a BBOX spatial filter, if
-     *      postReadFiltering is true every feature read from the database
-     *      will go through the BBOX spatial filter, which can be costly;
-     *      defaults to true.
-     */
-    postReadFiltering: true,
-
-    /**
-     * Constructor: OpenLayers.Protocol.SQL
-     */
-    initialize: function(options) {
-        OpenLayers.Protocol.prototype.initialize.apply(this, [options]);
-    },
-
-    /**
-     * APIMethod: destroy
-     * Clean up the protocol.
-     */
-    destroy: function() {
-        OpenLayers.Protocol.prototype.destroy.apply(this);
-    },
-
-    /**
-     * APIMethod: supported
-     * This should be overridden by specific subclasses
-     *
-     * Returns:
-     * {Boolean} Whether or not the browser supports the SQL backend
-     */
-    supported: function() {
-        return false;
-    },
-
-    /**
-     * Method: evaluateFilter
-     * If postReadFiltering is true evaluate the filter against the feature
-     * and return the result of the evaluation, otherwise return true.
-     *
-     * Parameters:
-     * {<OpenLayers.Feature.Vector>} The feature.
-     * {<OpenLayers.Filter>} The filter.
-     *
-     * Returns:
-     * {Boolean} true if postReadFiltering if false, the result of the
-     * filter evaluation otherwise.
-     */
-    evaluateFilter: function(feature, filter) {
-        return filter && this.postReadFiltering ?
-            filter.evaluate(feature) : true;
-    },
-
-    CLASS_NAME: "OpenLayers.Protocol.SQL"
-});
diff --git a/lib/OpenLayers/Protocol/SQL/Gears.js b/lib/OpenLayers/Protocol/SQL/Gears.js
deleted file mode 100644
index 55cb72d..0000000
--- a/lib/OpenLayers/Protocol/SQL/Gears.js
+++ /dev/null
@@ -1,561 +0,0 @@
-/* Copyright (c) 2006-2011 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 Gears/gears_init.js
- * @requires OpenLayers/Protocol/SQL.js
- * @requires OpenLayers/Format/JSON.js
- * @requires OpenLayers/Format/WKT.js
- */
-
-/**
- * Class: OpenLayers.Protocol.SQL.Gears
- * This Protocol stores feature in the browser via the Gears Database module 
- * <http://code.google.com/apis/gears/api_database.html>.
- *
- * The main advantage is that all the read, create, update and delete operations 
- * can be done offline.
- *
- * Inherits from:
- *  - <OpenLayers.Protocol.SQL>
- */
-OpenLayers.Protocol.SQL.Gears = OpenLayers.Class(OpenLayers.Protocol.SQL, {
-
-    /**
-     * Property: FID_PREFIX
-     * {String}
-     */
-    FID_PREFIX: '__gears_fid__',
-
-    /**
-     * Property: NULL_GEOMETRY
-     * {String}
-     */
-    NULL_GEOMETRY: '__gears_null_geometry__',
-
-    /**
-     * Property: NULL_FEATURE_STATE
-     * {String}
-     */
-    NULL_FEATURE_STATE: '__gears_null_feature_state__',
-
-    /**
-     * Property: jsonParser
-     * {<OpenLayers.Format.JSON>}
-     */
-    jsonParser: null,
-
-    /**
-     * Property: wktParser
-     * {<OpenLayers.Format.WKT>}
-     */
-    wktParser: null,
-
-    /**
-     * Property: fidRegExp
-     * {RegExp} Regular expression to know whether a feature was
-     *      created in offline mode.
-     */
-    fidRegExp: null,
-
-    /**
-     * Property: saveFeatureState
-     * {Boolean} Whether to save the feature state (<OpenLayers.State>)
-     *      into the database, defaults to true.
-     */    
-    saveFeatureState: true,
-
-    /**
-     * Property: typeOfFid
-     * {String} The type of the feature identifier, either "number" or
-     *      "string", defaults to "string".
-     */
-    typeOfFid: "string",
-
-    /**
-     * Property: db
-     * {GearsDatabase}
-     */
-    db: null,
-
-    /**
-     * Constructor: OpenLayers.Protocol.SQL.Gears
-     */
-    initialize: function(options) {
-        if (!this.supported()) {
-            return;
-        }
-        OpenLayers.Protocol.SQL.prototype.initialize.apply(this, [options]);
-        this.jsonParser = new OpenLayers.Format.JSON();
-        this.wktParser = new OpenLayers.Format.WKT();
-
-        this.fidRegExp = new RegExp('^' + this.FID_PREFIX);
-        this.initializeDatabase();
-
-        
-    },
-
-    /**
-     * Method: initializeDatabase
-     */
-    initializeDatabase: function() {
-        this.db = google.gears.factory.create('beta.database');
-        this.db.open(this.databaseName);
-        this.db.execute(
-            "CREATE TABLE IF NOT EXISTS " + this.tableName +
-            " (fid TEXT UNIQUE, geometry TEXT, properties TEXT," +
-            "  state TEXT)");
-   },
-
-    /**
-     * APIMethod: destroy
-     * Clean up the protocol.
-     */
-    destroy: function() {
-        this.db.close();
-        this.db = null;
-
-        this.jsonParser = null;
-        this.wktParser = null;
-
-        OpenLayers.Protocol.SQL.prototype.destroy.apply(this);
-    },
-
-    /**
-     * APIMethod: supported
-     * Determine whether a browser supports Gears
-     *
-     * Returns:
-     * {Boolean} The browser supports Gears
-     */
-    supported: function() {
-        return !!(window.google && google.gears);
-    },
-
-    /**
-     * APIMethod: read
-     * Read all features from the database and return a
-     * <OpenLayers.Protocol.Response> instance. If the options parameter
-     * contains a callback attribute, the function is called with the response
-     * as a parameter.
-     *
-     * Parameters:
-     * options - {Object} Optional object for configuring the request; it
-     *      can have the {Boolean} property "noFeatureStateReset" which
-     *      specifies if the state of features read from the Gears
-     *      database must be reset to null, if "noFeatureStateReset"
-     *      is undefined or false then each feature's state is reset
-     *      to null, if "noFeatureStateReset" is true the feature state
-     *      is preserved.
-     *
-     * Returns:
-     * {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
-     *      object.
-     */
-    read: function(options) {
-        OpenLayers.Protocol.prototype.read.apply(this, arguments);
-        options = OpenLayers.Util.applyDefaults(options, this.options);
-
-        var feature, features = [];
-        var rs = this.db.execute("SELECT * FROM " + this.tableName);
-        while (rs.isValidRow()) {
-            feature = this.unfreezeFeature(rs);
-            if (this.evaluateFilter(feature, options.filter)) {
-                if (!options.noFeatureStateReset) {
-                    feature.state = null;
-                }
-                features.push(feature);
-            }
-            rs.next();
-        }
-        rs.close();
-
-        var resp = new OpenLayers.Protocol.Response({
-            code: OpenLayers.Protocol.Response.SUCCESS,
-            requestType: "read",
-            features: features
-        });
-
-        if (options && options.callback) {
-            options.callback.call(options.scope, resp);
-        }
-
-        return resp;
-    },
-
-    /**
-     * Method: unfreezeFeature
-     *
-     * Parameters:
-     * row - {ResultSet}
-     *
-     * Returns:
-     * {<OpenLayers.Feature.Vector>}
-     */
-    unfreezeFeature: function(row) {
-        var feature;
-        var wkt = row.fieldByName('geometry');
-        if (wkt == this.NULL_GEOMETRY) {
-            feature = new OpenLayers.Feature.Vector();
-        } else {
-            feature = this.wktParser.read(wkt);
-        }
-
-        feature.attributes = this.jsonParser.read(
-            row.fieldByName('properties'));
-
-        feature.fid = this.extractFidFromField(row.fieldByName('fid'));
-
-        var state = row.fieldByName('state');
-        if (state == this.NULL_FEATURE_STATE) {
-            state = null;
-        }
-        feature.state = state;
-
-        return feature;
-    },
-
-    /**
-     * Method: extractFidFromField
-     *
-     * Parameters:
-     * field - {String}
-     *
-     * Returns
-     * {String} or {Number} The fid.
-     */
-    extractFidFromField: function(field) {
-        if (!field.match(this.fidRegExp) && this.typeOfFid == "number") {
-            field = parseFloat(field);
-        }
-        return field;
-    },
-
-    /**
-     * APIMethod: create
-     * Create new features into the database.
-     *
-     * Parameters:
-     * features - {Array({<OpenLayers.Feature.Vector>})} or
-     *            {<OpenLayers.Feature.Vector>} The features to create in
-     *            the database.
-     * options - {Object} Optional object for configuring the request.
-     *
-     * Returns:
-     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
-     *          object.
-     */
-    create: function(features, options) {
-        options = OpenLayers.Util.applyDefaults(options, this.options);
-
-        var resp = this.createOrUpdate(features);
-        resp.requestType = "create";
-
-        if (options && options.callback) {
-            options.callback.call(options.scope, resp);
-        }
-
-        return resp;
-    },
-
-    /**
-     * APIMethod: update
-     * Construct a request updating modified feature.
-     *
-     * Parameters:
-     * features - {Array({<OpenLayers.Feature.Vector>})} or
-     *            {<OpenLayers.Feature.Vector>} The features to update in
-     *            the database.
-     * options - {Object} Optional object for configuring the request.
-     *
-     * Returns:
-     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
-     *          object.
-     */
-    update: function(features, options) {
-        options = OpenLayers.Util.applyDefaults(options, this.options);
-
-        var resp = this.createOrUpdate(features);
-        resp.requestType = "update";
-
-        if (options && options.callback) {
-            options.callback.call(options.scope, resp);
-        }
-
-        return resp;
-    },
-
-    /**
-     * Method: createOrUpdate
-     * Construct a request for updating or creating features in the
-     * database.
-     *
-     * Parameters:
-     * features - {Array({<OpenLayers.Feature.Vector>})} or
-     *      {<OpenLayers.Feature.Vector>} The feature to create or update
-     *      in the database.
-     *
-     * Returns:
-     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
-     *          object.
-     */
-    createOrUpdate: function(features) {
-        if (!(OpenLayers.Util.isArray(features))) {
-            features = [features];
-        }
-
-        var i, len = features.length, feature;
-        var insertedFeatures = new Array(len);
- 
-        for (i = 0; i < len; i++) {
-            feature = features[i];
-            var params = this.freezeFeature(feature);
-            this.db.execute(
-                "REPLACE INTO " + this.tableName + 
-                " (fid, geometry, properties, state)" + 
-                " VALUES (?, ?, ?, ?)",
-                params);
-
-            var clone = feature.clone();
-            clone.fid = this.extractFidFromField(params[0]);
-            insertedFeatures[i] = clone;
-        }
-
-        return new OpenLayers.Protocol.Response({
-            code: OpenLayers.Protocol.Response.SUCCESS,
-            features: insertedFeatures,
-            reqFeatures: features
-        });
-    },
-
-    /**
-     * Method: freezeFeature
-     *
-     * Parameters:
-     * feature - {<OpenLayers.Feature.Vector>}
-     * state - {String} The feature state to store in the database.
-     *
-     * Returns:
-     * {Array}
-     */
-    freezeFeature: function(feature) {
-        // 2 notes:
-        // - fid might not be a string
-        // - getFeatureStateForFreeze needs the feature fid to it's stored
-        //   in the feature here
-        feature.fid = feature.fid != null ?
-            "" + feature.fid : OpenLayers.Util.createUniqueID(this.FID_PREFIX);
-
-        var geometry = feature.geometry != null ?
-            feature.geometry.toString() : this.NULL_GEOMETRY;
-
-        var properties = this.jsonParser.write(feature.attributes);
-
-        var state = this.getFeatureStateForFreeze(feature);
-
-        return [feature.fid, geometry, properties, state];
-    },
-
-    /**
-     * Method: getFeatureStateForFreeze
-     * Get the state of the feature to store into the database.
-     *
-     * Parameters:
-     * feature - {<OpenLayers.Feature.Vector>} The feature.
-     *
-     * Returns
-     * {String} The state
-     */
-    getFeatureStateForFreeze: function(feature) {
-        var state;
-        if (!this.saveFeatureState) {
-            state = this.NULL_FEATURE_STATE;
-        } else if (this.createdOffline(feature)) {
-            // if the feature was created in offline mode, its
-            // state must remain INSERT
-            state = OpenLayers.State.INSERT;
-        } else {
-            state = feature.state;
-        }
-        return state;
-    },
-
-    /**
-     * APIMethod: delete
-     * Delete features from the database.
-     *
-     * Parameters:
-     * features - {Array({<OpenLayers.Feature.Vector>})} or
-     *            {<OpenLayers.Feature.Vector>}
-     * options - {Object} Optional object for configuring the request.
-     *       This object is modified and should not be reused.
-     *
-     * Returns:
-     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
-     *          object.
-     */
-    "delete": function(features, options) {
-        if (!(OpenLayers.Util.isArray(features))) {
-            features = [features];
-        }
-
-        options = OpenLayers.Util.applyDefaults(options, this.options);
-
-        var i, len, feature;
-        for (i = 0, len = features.length; i < len; i++) {
-            feature = features[i];
-
-            // if saveFeatureState is set to true and if the feature wasn't created
-            // in offline mode we don't delete it in the database but just update 
-            // it state column
-            if (this.saveFeatureState && !this.createdOffline(feature)) {
-                var toDelete = feature.clone();
-                toDelete.fid = feature.fid;
-                if (toDelete.geometry) {
-                    toDelete.geometry.destroy();
-                    toDelete.geometry = null;
-                }
-                toDelete.state = feature.state;
-                this.createOrUpdate(toDelete);
-            } else {
-                this.db.execute(
-                    "DELETE FROM " + this.tableName +
-                    " WHERE fid = ?", [feature.fid]);
-            }
-        }
-
-        var resp = new OpenLayers.Protocol.Response({
-            code: OpenLayers.Protocol.Response.SUCCESS,
-            requestType: "delete",
-            reqFeatures: features
-        });
-
-        if (options && options.callback) {
-            options.callback.call(options.scope, resp);
-        }
-
-        return resp;
-    },
-
-    /**
-     * Method: createdOffline
-     * Returns true if the feature had a feature id when it was created in
-     *      the Gears database, false otherwise; this is determined by
-     *      checking the form of the feature's fid value.
-     *
-     * Parameters:
-     * feature - {<OpenLayers.Feature.Vector>}
-     *
-     * Returns:
-     * {Boolean}
-     */
-    createdOffline: function(feature) {
-        return (typeof feature.fid == "string" &&
-                !!(feature.fid.match(this.fidRegExp)));
-    },
-
-    /**
-     * APIMethod: commit
-     * Go over the features and for each take action
-     * based on the feature state. Possible actions are create,
-     * update and delete.
-     *
-     * Parameters:
-     * features - {Array({<OpenLayers.Feature.Vector>})}
-     * options - {Object} Object whose possible keys are "create", "update",
-     *      "delete", "callback" and "scope", the values referenced by the
-     *      first three are objects as passed to the "create", "update", and
-     *      "delete" methods, the value referenced by the "callback" key is
-     *      a function which is called when the commit operation is complete
-     *      using the scope referenced by the "scope" key.
-     *
-     * Returns:
-     * {Array({<OpenLayers.Protocol.Response>})} An array of
-     *       <OpenLayers.Protocol.Response> objects, one per request made
-     *       to the database.
-     */
-    commit: function(features, options) {
-        var opt, resp = [], nRequests = 0, nResponses = 0;
-
-        function callback(resp) {
-            if (++nResponses < nRequests) {
-                resp.last = false;
-            }
-            this.callUserCallback(options, resp);
-        }
-
-        var feature, toCreate = [], toUpdate = [], toDelete = [];
-        for (var i = features.length - 1; i >= 0; i--) {
-            feature = features[i];
-            switch (feature.state) {
-            case OpenLayers.State.INSERT:
-                toCreate.push(feature);
-                break;
-            case OpenLayers.State.UPDATE:
-                toUpdate.push(feature);
-                break;
-            case OpenLayers.State.DELETE:
-                toDelete.push(feature);
-                break;
-            }
-        }
-        if (toCreate.length > 0) {
-            nRequests++;
-            opt = OpenLayers.Util.applyDefaults(
-                {"callback": callback, "scope": this},
-                options.create
-            );
-            resp.push(this.create(toCreate, opt));
-        }
-        if (toUpdate.length > 0) {
-            nRequests++;
-            opt = OpenLayers.Util.applyDefaults(
-                {"callback": callback, "scope": this},
-                options.update
-            );
-            resp.push(this.update(toUpdate, opt));
-        }
-        if (toDelete.length > 0) {
-            nRequests++;
-            opt = OpenLayers.Util.applyDefaults(
-                {"callback": callback, "scope": this},
-                options["delete"]
-            );
-            resp.push(this["delete"](toDelete, opt));
-        }
-
-        return resp;
-    },
-
-    /**
-     * Method: clear
-     * Removes all rows of the table.
-     */
-    clear: function() {
-        this.db.execute("DELETE FROM " + this.tableName);
-    },
-
-    /**
-     * Method: callUserCallback
-     * This method is called from within commit each time a request is made
-     * to the database, it is responsible for calling the user-supplied
-     * callbacks.
-     *
-     * Parameters:
-     * options - {Object} The map of options passed to the commit call.
-     * resp - {<OpenLayers.Protocol.Response>}
-     */
-    callUserCallback: function(options, resp) {
-        var opt = options[resp.requestType];
-        if (opt && opt.callback) {
-            opt.callback.call(opt.scope, resp);
-        }
-        if (resp.last && options.callback) {
-            options.callback.call(options.scope);
-        }
-    },
-
-    CLASS_NAME: "OpenLayers.Protocol.SQL.Gears"
-});
diff --git a/lib/OpenLayers/Protocol/Script.js b/lib/OpenLayers/Protocol/Script.js
index 2e47de7..925a36f 100644
--- a/lib/OpenLayers/Protocol/Script.js
+++ b/lib/OpenLayers/Protocol/Script.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -10,6 +10,11 @@
  */
 
 /**
+ * if application uses the query string, for example, for BBOX parameters,
+ * OpenLayers/Format/QueryStringFilter.js should be included in the build config file
+ */
+
+/**
  * Class: OpenLayers.Protocol.Script
  * A basic Script protocol for vector layers.  Create a new instance with the
  *     <OpenLayers.Protocol.Script> constructor.  A script protocol is used to
@@ -49,20 +54,13 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
     callback: null,
 
     /**
-     * APIProperty: scope
-     * {Object} Optional ``this`` object for the callback. Read-only, set 
-     *     through the options passed to the constructor.
+     * APIProperty: callbackTemplate
+     * {String} Template for creating a unique callback function name
+     * for the registry. Should include ${id}.  The ${id} variable will be
+     * replaced with a string identifier prefixed with a "c" (e.g. c1, c2).
+     * Default is "OpenLayers.Protocol.Script.registry.${id}".
      */
-    scope: null,
-
-    /**
-     * APIProperty: format
-     * {<OpenLayers.Format>} Format for parsing features.  Default is an 
-     *     <OpenLayers.Format.GeoJSON> format.  If an alternative is provided,
-     *     the format's read method must take an object and return an array
-     *     of features.
-     */
-    format: null,
+    callbackTemplate: "OpenLayers.Protocol.Script.registry.${id}",
 
     /**
      * APIProperty: callbackKey
@@ -84,6 +82,22 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
     callbackPrefix: "",
 
     /**
+     * APIProperty: scope
+     * {Object} Optional ``this`` object for the callback. Read-only, set 
+     *     through the options passed to the constructor.
+     */
+    scope: null,
+
+    /**
+     * APIProperty: format
+     * {<OpenLayers.Format>} Format for parsing features.  Default is an 
+     *     <OpenLayers.Format.GeoJSON> format.  If an alternative is provided,
+     *     the format's read method must take an object and return an array
+     *     of features.
+     */
+    format: null,
+
+    /**
      * Property: pendingRequests
      * {Object} References all pending requests.  Property names are script 
      *     identifiers and property values are script elements.
@@ -130,7 +144,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
             });
             this.filterToParams = function(filter, params) {
                 return format.write(filter, params);
-            }
+            };
         }
     },
     
@@ -207,7 +221,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
      */
     createRequest: function(url, params, callback) {
         var id = OpenLayers.Protocol.Script.register(callback);
-        var name = "OpenLayers.Protocol.Script.registry[" + id + "]";
+        var name = OpenLayers.String.format(this.callbackTemplate, {id: id});
         params = OpenLayers.Util.extend({}, params);
         params[this.callbackKey] = this.callbackPrefix + name;
         url = OpenLayers.Util.urlAppend(
@@ -328,24 +342,23 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
 (function() {
     var o = OpenLayers.Protocol.Script;
     var counter = 0;
-    o.registry = [];
+    o.registry = {};
     
     /**
      * Function: OpenLayers.Protocol.Script.register
      * Register a callback for a newly created script.
      *
      * Parameters:
-     * callback: {Function} The callback to be executed when the newly added
+     * callback - {Function} The callback to be executed when the newly added
      *     script loads.  This callback will be called with a single argument
      *     that is the JSON returned by the service.
      *
      * Returns:
-     * {Number} An identifier for retreiving the registered callback.
+     * {Number} An identifier for retrieving the registered callback.
      */
     o.register = function(callback) {
-        var id = ++counter;
+        var id = "c"+(++counter);
         o.registry[id] = function() {
-            o.unregister(id);
             callback.apply(this, arguments);
         };
         return id;
@@ -356,7 +369,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
      * Unregister a callback previously registered with the register function.
      *
      * Parameters:
-     * id: {Number} The identifer returned by the register function.
+     * id - {Number} The identifer returned by the register function.
      */
     o.unregister = function(id) {
         delete o.registry[id];
diff --git a/lib/OpenLayers/Protocol/WFS.js b/lib/OpenLayers/Protocol/WFS.js
index ca4ee5e..194fd8a 100644
--- a/lib/OpenLayers/Protocol/WFS.js
+++ b/lib/OpenLayers/Protocol/WFS.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -54,6 +54,8 @@ OpenLayers.Protocol.WFS = function(options) {
  *     FeatureType at the same server url with the same typename.
  * options - {Object} Default properties to be set on the protocol.
  *
+ * Returns:
+ * {<OpenLayers.Protocol.WFS>}
  */
 OpenLayers.Protocol.WFS.fromWMSLayer = function(layer, options) {
     var typeName, featurePrefix;
diff --git a/lib/OpenLayers/Protocol/WFS/v1.js b/lib/OpenLayers/Protocol/WFS/v1.js
index 905dadc..eb1abf6 100644
--- a/lib/OpenLayers/Protocol/WFS/v1.js
+++ b/lib/OpenLayers/Protocol/WFS/v1.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -384,7 +384,7 @@ OpenLayers.Protocol.WFS.v1 = OpenLayers.Class(OpenLayers.Protocol, {
      * Send a request that deletes all features by their filter.
      * 
      * Parameters:
-     * filter - {OpenLayers.Filter} filter
+     * filter - {<OpenLayers.Filter>} filter
      */
     filterDelete: function(filter, options) {
         options = OpenLayers.Util.extend({}, options);
diff --git a/lib/OpenLayers/Protocol/WFS/v1_0_0.js b/lib/OpenLayers/Protocol/WFS/v1_0_0.js
index 1201e3f..2de88ed 100644
--- a/lib/OpenLayers/Protocol/WFS/v1_0_0.js
+++ b/lib/OpenLayers/Protocol/WFS/v1_0_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Protocol/WFS/v1_1_0.js b/lib/OpenLayers/Protocol/WFS/v1_1_0.js
index 36c1038..52eaeb0 100644
--- a/lib/OpenLayers/Protocol/WFS/v1_1_0.js
+++ b/lib/OpenLayers/Protocol/WFS/v1_1_0.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Renderer.js b/lib/OpenLayers/Renderer.js
index 6a35b3f..111a13d 100644
--- a/lib/OpenLayers/Renderer.js
+++ b/lib/OpenLayers/Renderer.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -74,6 +74,14 @@ OpenLayers.Renderer = OpenLayers.Class({
     map: null,
     
     /**
+     * Property: featureDx
+     * {Number} Feature offset in x direction. Will be calculated for and
+     * applied to the current feature while rendering (see
+     * <calculateFeatureDx>).
+     */
+    featureDx: 0,
+    
+    /**
      * Constructor: OpenLayers.Renderer 
      *
      * Parameters:
@@ -122,12 +130,23 @@ OpenLayers.Renderer = OpenLayers.Class({
      * Parameters:
      * extent - {<OpenLayers.Bounds>}
      * resolutionChanged - {Boolean}
+     *
+     * Returns:
+     * {Boolean} true to notify the layer that the new extent does not exceed
+     *     the coordinate range, and the features will not need to be redrawn.
+     *     False otherwise.
      */
     setExtent: function(extent, resolutionChanged) {
         this.extent = extent.clone();
+        if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) {
+            var ratio = extent.getWidth() / this.map.getExtent().getWidth(),
+                extent = extent.scale(1 / ratio);
+            this.extent = extent.wrapDateLine(this.map.getMaxExtent()).scale(ratio);
+        }
         if (resolutionChanged) {
             this.resolution = null;
         }
+        return true;
     },
     
     /**
@@ -151,7 +170,7 @@ OpenLayers.Renderer = OpenLayers.Class({
      * Uses cached copy of resolution if available to minimize computing
      * 
      * Returns:
-     * The current map's resolution
+     * {Float} The current map's resolution
      */
     getResolution: function() {
         this.resolution = this.resolution || this.map.getResolution();
@@ -179,11 +198,18 @@ OpenLayers.Renderer = OpenLayers.Class({
         if (feature.geometry) {
             var bounds = feature.geometry.getBounds();
             if(bounds) {
-                if (!bounds.intersectsBounds(this.extent)) {
+                var worldBounds;
+                if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) {
+                    worldBounds = this.map.getMaxExtent();
+                }
+                if (!bounds.intersectsBounds(this.extent, {worldBounds: worldBounds})) {
                     style = {display: "none"};
+                } else {
+                    this.calculateFeatureDx(bounds, worldBounds);
                 }
                 var rendered = this.drawGeometry(feature.geometry, style, feature.id);
                 if(style.display != "none" && style.label && rendered !== false) {
+
                     var location = feature.geometry.getCentroid(); 
                     if(style.labelXOffset || style.labelYOffset) {
                         var xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset;
@@ -200,6 +226,29 @@ OpenLayers.Renderer = OpenLayers.Class({
         }
     },
 
+    /**
+     * Method: calculateFeatureDx
+     * {Number} Calculates the feature offset in x direction. Looking at the
+     * center of the feature bounds and the renderer extent, we calculate how
+     * many world widths the two are away from each other. This distance is
+     * used to shift the feature as close as possible to the center of the
+     * current enderer extent, which ensures that the feature is visible in the
+     * current viewport.
+     *
+     * Parameters:
+     * bounds - {<OpenLayers.Bounds>} Bounds of the feature
+     * worldBounds - {<OpenLayers.Bounds>} Bounds of the world
+     */
+    calculateFeatureDx: function(bounds, worldBounds) {
+        this.featureDx = 0;
+        if (worldBounds) {
+            var worldWidth = worldBounds.getWidth(),
+                rendererCenterX = (this.extent.left + this.extent.right) / 2,
+                featureCenterX = (bounds.left + bounds.right) / 2,
+                worldsAway = Math.round((featureCenterX - rendererCenterX) / worldWidth);
+            this.featureDx = worldsAway * worldWidth;
+        }
+    },
 
     /** 
      * Method: drawGeometry
@@ -255,7 +304,7 @@ OpenLayers.Renderer = OpenLayers.Class({
      * evt - {<OpenLayers.Event>} 
      *
      * Returns:
-     * {String} A feature id or null.
+     * {String} A feature id or undefined.
      */
     getFeatureIdFromEvent: function(evt) {},
     
@@ -362,6 +411,22 @@ OpenLayers.Renderer.defaultSymbolizer = {
     strokeWidth: 2,
     fillOpacity: 1,
     strokeOpacity: 1,
-    pointRadius: 0
+    pointRadius: 0,
+    labelAlign: 'cm'
 };
     
+
+
+/**
+ * Constant: OpenLayers.Renderer.symbol
+ * Coordinate arrays for well known (named) symbols.
+ */
+OpenLayers.Renderer.symbol = {
+    "star": [350,75, 379,161, 469,161, 397,215, 423,301, 350,250, 277,301,
+            303,215, 231,161, 321,161, 350,75],
+    "cross": [4,0, 6,0, 6,4, 10,4, 10,6, 6,6, 6,10, 4,10, 4,6, 0,6, 0,4, 4,4,
+            4,0],
+    "x": [0,0, 25,0, 50,35, 75,0, 100,0, 65,50, 100,100, 75,100, 50,65, 25,100, 0,100, 35,50, 0,0],
+    "square": [0,0, 0,1, 1,1, 1,0, 0,0],
+    "triangle": [0,10, 10,10, 5,0, 0,10]
+};
diff --git a/lib/OpenLayers/Renderer/Canvas.js b/lib/OpenLayers/Renderer/Canvas.js
index d9e7828..7c2421a 100644
--- a/lib/OpenLayers/Renderer/Canvas.js
+++ b/lib/OpenLayers/Renderer/Canvas.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -52,6 +52,12 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
     pendingRedraw: false,
     
     /**
+     * Property: cachedSymbolBounds
+     * {Object} Internal cache of calculated symbol extents.
+     */
+    cachedSymbolBounds: {},
+    
+    /**
      * Constructor: OpenLayers.Renderer.Canvas
      *
      * Parameters:
@@ -70,6 +76,25 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
         }
     },
     
+    /**
+     * Method: setExtent
+     * Set the visible part of the layer.
+     *
+     * Parameters:
+     * extent - {<OpenLayers.Bounds>}
+     * resolutionChanged - {Boolean}
+     *
+     * Returns:
+     * {Boolean} true to notify the layer that the new extent does not exceed
+     *     the coordinate range, and the features will not need to be redrawn.
+     *     False otherwise.
+     */
+    setExtent: function() {
+        OpenLayers.Renderer.prototype.setExtent.apply(this, arguments);
+        // always redraw features
+        return false;
+    },
+    
     /** 
      * Method: eraseGeometry
      * Erase a geometry from the renderer. Because the Canvas renderer has
@@ -91,8 +116,7 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
      * {Boolean} Whether or not the browser supports the renderer class
      */
     supported: function() {
-        var canvas = document.createElement("canvas");
-        return !!canvas.getContext;
+        return OpenLayers.CANVAS_SUPPORTED;
     },    
     
     /**
@@ -141,8 +165,15 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
             style = this.applyDefaultSymbolizer(style || feature.style);
             // don't render if display none or feature outside extent
             var bounds = feature.geometry.getBounds();
-            rendered = (style.display !== "none") && !!bounds && 
-                bounds.intersectsBounds(this.extent);
+
+            var worldBounds;
+            if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) {
+                worldBounds = this.map.getMaxExtent();
+            }
+
+            var intersects = bounds && bounds.intersectsBounds(this.extent, {worldBounds: worldBounds});
+
+            rendered = (style.display !== "none") && !!bounds && intersects;
             if (rendered) {
                 // keep track of what we have rendered for redraw
                 this.features[feature.id] = [feature, style];
@@ -259,6 +290,147 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
     },
 
     /**
+     * Method: drawNamedSymbol
+     * Called to draw Well Known Graphic Symbol Name. 
+     * This method is only called by the renderer itself.
+     * 
+     * Parameters: 
+     * geometry - {<OpenLayers.Geometry>}
+     * style    - {Object}
+     * featureId - {String}
+     */ 
+    drawNamedSymbol: function(geometry, style, featureId) {
+        var x, y, cx, cy, i, symbolBounds, scaling, angle;
+        var unscaledStrokeWidth;
+        var deg2rad = Math.PI / 180.0;
+        
+        var symbol = OpenLayers.Renderer.symbol[style.graphicName];
+         
+        if (!symbol) {
+            throw new Error(style.graphicName + ' is not a valid symbol name');
+        }
+        
+        if (!symbol.length || symbol.length < 2) return;
+        
+        var pt = this.getLocalXY(geometry);
+        var p0 = pt[0];
+        var p1 = pt[1];
+       
+        if (isNaN(p0) || isNaN(p1)) return;
+        
+        // Use rounded line caps
+        this.canvas.lineCap = "round";
+        this.canvas.lineJoin = "round";
+        
+        if (this.hitDetection) {
+            this.hitContext.lineCap = "round";
+            this.hitContext.lineJoin = "round";
+        }
+        
+        // Scale and rotate symbols, using precalculated bounds whenever possible.
+        if (style.graphicName in this.cachedSymbolBounds) {
+            symbolBounds = this.cachedSymbolBounds[style.graphicName];
+        } else {
+            symbolBounds = new OpenLayers.Bounds();
+            for(i = 0; i < symbol.length; i+=2) {
+                symbolBounds.extend(new OpenLayers.LonLat(symbol[i], symbol[i+1]));
+            }
+            this.cachedSymbolBounds[style.graphicName] = symbolBounds;
+        }
+        
+        // Push symbol scaling, translation and rotation onto the transformation stack in reverse order.
+        // Don't forget to apply all canvas transformations to the hitContext canvas as well(!)
+        this.canvas.save();
+        if (this.hitDetection) { this.hitContext.save(); }
+        
+        // Step 3: place symbol at the desired location
+        this.canvas.translate(p0,p1);
+        if (this.hitDetection) { this.hitContext.translate(p0,p1); }
+        
+        // Step 2a. rotate the symbol if necessary
+        angle = deg2rad * style.rotation; // will be NaN when style.rotation is undefined.
+        if (!isNaN(angle)) {
+            this.canvas.rotate(angle);
+            if (this.hitDetection) { this.hitContext.rotate(angle); }
+        }
+                
+        // // Step 2: scale symbol such that pointRadius equals half the maximum symbol dimension.
+        scaling = 2.0 * style.pointRadius / Math.max(symbolBounds.getWidth(), symbolBounds.getHeight());
+        this.canvas.scale(scaling,scaling);
+        if (this.hitDetection) { this.hitContext.scale(scaling,scaling); }
+        
+        // Step 1: center the symbol at the origin        
+        cx = symbolBounds.getCenterLonLat().lon;
+        cy = symbolBounds.getCenterLonLat().lat;
+        this.canvas.translate(-cx,-cy);
+        if (this.hitDetection) { this.hitContext.translate(-cx,-cy); }        
+
+        // Don't forget to scale stroke widths, because they are affected by canvas scale transformations as well(!)
+        // Alternative: scale symbol coordinates manually, so stroke width scaling is not needed anymore.
+        unscaledStrokeWidth = style.strokeWidth;
+        style.strokeWidth = unscaledStrokeWidth / scaling;
+            
+        if (style.fill !== false) {
+            this.setCanvasStyle("fill", style);
+            this.canvas.beginPath();
+            for (i=0; i<symbol.length; i=i+2) {
+                x = symbol[i];
+                y = symbol[i+1];
+                if (i == 0) this.canvas.moveTo(x,y);
+                this.canvas.lineTo(x,y);
+            }
+            this.canvas.closePath();
+            this.canvas.fill();
+
+            if (this.hitDetection) {
+                this.setHitContextStyle("fill", featureId, style);
+                this.hitContext.beginPath();
+                for (i=0; i<symbol.length; i=i+2) {
+                    x = symbol[i];
+                    y = symbol[i+1];
+                    if (i == 0) this.canvas.moveTo(x,y);
+                    this.hitContext.lineTo(x,y);
+                }
+                this.hitContext.closePath();
+                this.hitContext.fill();
+            }
+        }  
+        
+        if (style.stroke !== false) {
+            this.setCanvasStyle("stroke", style);
+            this.canvas.beginPath();
+            for (i=0; i<symbol.length; i=i+2) {
+                x = symbol[i];
+                y = symbol[i+1];
+                if (i == 0) this.canvas.moveTo(x,y);
+                this.canvas.lineTo(x,y);
+            }
+            this.canvas.closePath();
+            this.canvas.stroke();
+            
+            
+            if (this.hitDetection) {
+                this.setHitContextStyle("stroke", featureId, style, scaling);
+                this.hitContext.beginPath();
+                for (i=0; i<symbol.length; i=i+2) {
+                    x = symbol[i];
+                    y = symbol[i+1];
+                    if (i == 0) this.hitContext.moveTo(x,y);
+                    this.hitContext.lineTo(x,y);
+                }
+                this.hitContext.closePath();
+                this.hitContext.stroke();
+            }
+            
+        }
+        
+        style.strokeWidth = unscaledStrokeWidth;
+        this.canvas.restore();
+        if (this.hitDetection) { this.hitContext.restore(); }
+        this.setCanvasStyle("reset");  
+    },
+
+    /**
      * Method: setCanvasStyle
      * Prepare the canvas for drawing by setting various global settings.
      *
@@ -311,7 +483,7 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
      * featureId - {String} The feature id.
      * symbolizer - {<OpenLayers.Symbolizer>} The symbolizer.
      */
-    setHitContextStyle: function(type, featureId, symbolizer) {
+    setHitContextStyle: function(type, featureId, symbolizer, strokeScaling) {
         var hex = this.featureIdToHex(featureId);
         if (type == "fill") {
             this.hitContext.globalAlpha = 1.0;
@@ -319,8 +491,13 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
         } else if (type == "stroke") {  
             this.hitContext.globalAlpha = 1.0;
             this.hitContext.strokeStyle = hex;
-            // bump up stroke width to deal with antialiasing
-            this.hitContext.lineWidth = symbolizer.strokeWidth + 2;
+            // bump up stroke width to deal with antialiasing. If strokeScaling is defined, we're rendering a symbol 
+            // on a transformed canvas, so the antialias width bump has to scale as well.
+            if (typeof strokeScaling === "undefined") {
+                this.hitContext.lineWidth = symbolizer.strokeWidth + 2;
+            } else {
+                if (!isNaN(strokeScaling)) { this.hitContext.lineWidth = symbolizer.strokeWidth + 2.0 / strokeScaling; }
+            }
         } else {
             this.hitContext.globalAlpha = 0;
             this.hitContext.lineWidth = 1;
@@ -340,6 +517,8 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
         if(style.graphic !== false) {
             if(style.externalGraphic) {
                 this.drawExternalGraphic(geometry, style, featureId);
+            } else if (style.graphicName && (style.graphicName != "circle")) {
+                this.drawNamedSymbol(geometry, style, featureId);
             } else {
                 var pt = this.getLocalXY(geometry);
                 var p0 = pt[0];
@@ -499,10 +678,6 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
      * style    - {Object}
      */
     drawText: function(location, style) {
-        style = OpenLayers.Util.extend({
-            fontColor: "#000000",
-            labelAlign: "cm"
-        }, style);
         var pt = this.getLocalXY(location);
 
         this.setCanvasStyle("reset");
@@ -534,6 +709,13 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
                 this.canvas.measureText('xx').width;
             pt[1] += lineHeight*vfactor*(numRows-1);
             for (var i = 0; i < numRows; i++) {
+                if (style.labelOutlineWidth) {
+                    this.canvas.save();
+                    this.canvas.strokeStyle = style.labelOutlineColor;
+                    this.canvas.lineWidth = style.labelOutlineWidth;
+                    this.canvas.strokeText(labelRows[i], pt[0], pt[1] + (lineHeight*i) + 1);
+                    this.canvas.restore();
+                }
                 this.canvas.fillText(labelRows[i], pt[0], pt[1] + (lineHeight*i));
             }
         } else if (this.canvas.mozDrawText) {
@@ -573,7 +755,7 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
     getLocalXY: function(point) {
         var resolution = this.getResolution();
         var extent = this.extent;
-        var x = (point.x / resolution + (-extent.left / resolution));
+        var x = ((point.x - this.featureDx) / resolution + (-extent.left / resolution));
         var y = ((extent.top / resolution) - point.y / resolution);
         return [x, y];
     },
@@ -600,13 +782,14 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
      * evt - {<OpenLayers.Event>} 
      *
      * Returns:
-     * {<OpenLayers.Feature.Vector} A feature or null.  This method returns a 
+     * {<OpenLayers.Feature.Vector} A feature or undefined.  This method returns a 
      *     feature instead of a feature id to avoid an unnecessary lookup on the
      *     layer.
      */
     getFeatureIdFromEvent: function(evt) {
-        var feature = null;
-        if (this.hitDetection) {
+        var featureId, feature;
+        
+        if (this.hitDetection && this.root.style.display !== "none") {
             // this dragging check should go in the feature handler
             if (!this.map.dragging) {
                 var xy = evt.xy;
@@ -616,7 +799,14 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
                 if (data[3] === 255) { // antialiased
                     var id = data[2] + (256 * (data[1] + (256 * data[0])));
                     if (id) {
-                        feature = this.features["OpenLayers.Feature.Vector_" + (id - 1 + this.hitOverflow)][0];
+                        featureId = "OpenLayers.Feature.Vector_" + (id - 1 + this.hitOverflow);
+                        try {
+                            feature = this.features[featureId][0];
+                        } catch(err) {
+                            // Because of antialiasing on the canvas, when the hit location is at a point where the edge of
+                            // one symbol intersects the interior of another symbol, a wrong hit color (and therefore id) results.
+                            // todo: set Antialiasing = 'off' on the hitContext as soon as browsers allow it.
+                        }
                     }
                 }
             }
@@ -659,12 +849,15 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
                 this.hitContext.clearRect(0, 0, width, height);
             }
             var labelMap = [];
-            var feature, style;
+            var feature, geometry, style;
+            var worldBounds = (this.map.baseLayer && this.map.baseLayer.wrapDateLine) && this.map.getMaxExtent();
             for (var id in this.features) {
                 if (!this.features.hasOwnProperty(id)) { continue; }
                 feature = this.features[id][0];
+                geometry = feature.geometry;
+                this.calculateFeatureDx(geometry.getBounds(), worldBounds);
                 style = this.features[id][1];
-                this.drawGeometry(feature.geometry, style, feature.id);
+                this.drawGeometry(geometry, style, feature.id);
                 if(style.label) {
                     labelMap.push([feature, style]);
                 }
diff --git a/lib/OpenLayers/Renderer/Elements.js b/lib/OpenLayers/Renderer/Elements.js
index 12b036b..8f11d92 100644
--- a/lib/OpenLayers/Renderer/Elements.js
+++ b/lib/OpenLayers/Renderer/Elements.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -150,7 +150,7 @@ OpenLayers.ElementsIndexer = OpenLayers.Class({
      * APIMethod: exists
      *
      * Parameters:
-     * node- {DOMElement} The node to test for existence.
+     * node - {DOMElement} The node to test for existence.
      *
      * Returns:
      * {Boolean} Whether or not the node exists in the indexer?
@@ -374,6 +374,28 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
     xmlns: null,
     
     /**
+     * Property: xOffset
+     * {Number} Offset to apply to the renderer viewport translation in x
+     * direction. If the renderer extent's center is on the right of the
+     * dateline (i.e. exceeds the world bounds), we shift the viewport to the
+     * left by one world width. This avoids that features disappear from the
+     * map viewport. Because our dateline handling logic in other places
+     * ensures that extents crossing the dateline always have a center
+     * exceeding the world bounds on the left, we need this offset to make sure
+     * that the same is true for the renderer extent in pixel space as well.
+     */
+    xOffset: 0,
+    
+    /**
+     * Property: rightOfDateLine
+     * {Boolean} Keeps track of the location of the map extent relative to the
+     * date line. The <setExtent> method compares this value (which is the one
+     * from the previous <setExtent> call) with the current position of the map
+     * extent relative to the date line and updates the xOffset when the extent
+     * has moved from one side of the date line to the other.
+     */
+    
+    /**
      * Property: Indexer
      * {<OpenLayers.ElementIndexer>} An instance of OpenLayers.ElementsIndexer 
      *     created upon initialization if the zIndexing or yOrdering options
@@ -394,13 +416,21 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
     LABEL_ID_SUFFIX: "_label",
     
     /**
+     * Constant: LABEL_OUTLINE_SUFFIX
+     * {String}
+     */
+    LABEL_OUTLINE_SUFFIX: "_outline",
+
+    /**
      * Constructor: OpenLayers.Renderer.Elements
      * 
      * Parameters:
      * containerID - {String}
-     * options - {Object} options for this renderer. Supported options are:
-     *     * yOrdering - {Boolean} Whether to use y-ordering
-     *     * zIndexing - {Boolean} Whether to use z-indexing. Will be ignored
+     * options - {Object} options for this renderer. 
+     *
+     * Supported options are:
+     *     yOrdering - {Boolean} Whether to use y-ordering
+     *     zIndexing - {Boolean} Whether to use z-indexing. Will be ignored
      *         if yOrdering is set to true.
      */
     initialize: function(containerID, options) {
@@ -458,6 +488,42 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
             this.indexer.clear();
         }
     },
+    
+    /**
+     * Method: setExtent
+     * Set the visible part of the layer.
+     *
+     * Parameters:
+     * extent - {<OpenLayers.Bounds>}
+     * resolutionChanged - {Boolean}
+     *
+     * Returns:
+     * {Boolean} true to notify the layer that the new extent does not exceed
+     *     the coordinate range, and the features will not need to be redrawn.
+     *     False otherwise.
+     */
+    setExtent: function(extent, resolutionChanged) {
+        var coordSysUnchanged = OpenLayers.Renderer.prototype.setExtent.apply(this, arguments);
+        var resolution = this.getResolution();
+        if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) {
+            var rightOfDateLine,
+                ratio = extent.getWidth() / this.map.getExtent().getWidth(),
+                extent = extent.scale(1 / ratio),
+                world = this.map.getMaxExtent();
+            if (world.right > extent.left && world.right < extent.right) {
+                rightOfDateLine = true;
+            } else if (world.left > extent.left && world.left < extent.right) {
+                rightOfDateLine = false;
+            }
+            if (rightOfDateLine !== this.rightOfDateLine || resolutionChanged) {
+                coordSysUnchanged = false;
+                this.xOffset = rightOfDateLine === true ?
+                    world.getWidth() / resolution : 0;
+            }
+            this.rightOfDateLine = rightOfDateLine;
+        }
+        return coordSysUnchanged;
+    },
 
     /** 
      * Method: getNodeType
@@ -504,7 +570,7 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
                     geometry.components[i], style, featureId) && rendered;
             }
             return rendered;
-        };
+        }
 
         rendered = false;
         var removeBackground = false;
@@ -683,9 +749,6 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
             case "OpenLayers.Geometry.Polygon":
                 drawn = this.drawPolygon(node, geometry);
                 break;
-            case "OpenLayers.Geometry.Surface":
-                drawn = this.drawSurface(node, geometry);
-                break;
             case "OpenLayers.Geometry.Rectangle":
                 drawn = this.drawRectangle(node, geometry);
                 break;
@@ -811,21 +874,6 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
     drawCircle: function(node, geometry) {},
 
     /**
-     * Method: drawSurface
-     * Virtual function for drawing Surface Geometry. 
-     *     Should be implemented by subclasses.
-     *     This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or false if the renderer could not draw the surface
-     */ 
-    drawSurface: function(node, geometry) {},
-
-    /**
      * Method: removeText
      * Removes a label
      * 
@@ -837,6 +885,10 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
         if (label) {
             this.textRoot.removeChild(label);
         }
+        var outline = document.getElementById(featureId + this.LABEL_OUTLINE_SUFFIX);
+        if (outline) {
+            this.textRoot.removeChild(outline);
+        }
     },
 
     /**
@@ -846,15 +898,13 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
      * evt - {Object} An <OpenLayers.Event> object
      *
      * Returns:
-     * {<OpenLayers.Geometry>} A geometry from an event that 
-     *     happened on a layer.
+     * {String} A feature id or undefined.
      */
     getFeatureIdFromEvent: function(evt) {
         var target = evt.target;
         var useElement = target && target.correspondingUseElement;
         var node = useElement ? useElement : (target || evt.srcElement);
-        var featureId = node._featureId;
-        return featureId;
+        return node._featureId;
     },
 
     /** 
@@ -1001,17 +1051,3 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
     CLASS_NAME: "OpenLayers.Renderer.Elements"
 });
 
-
-/**
- * Constant: OpenLayers.Renderer.symbol
- * Coordinate arrays for well known (named) symbols.
- */
-OpenLayers.Renderer.symbol = {
-    "star": [350,75, 379,161, 469,161, 397,215, 423,301, 350,250, 277,301,
-            303,215, 231,161, 321,161, 350,75],
-    "cross": [4,0, 6,0, 6,4, 10,4, 10,6, 6,6, 6,10, 4,10, 4,6, 0,6, 0,4, 4,4,
-            4,0],
-    "x": [0,0, 25,0, 50,35, 75,0, 100,0, 65,50, 100,100, 75,100, 50,65, 25,100, 0,100, 35,50, 0,0],
-    "square": [0,0, 0,1, 1,1, 1,0, 0,0],
-    "triangle": [0,10, 10,10, 5,0, 0,10]
-};
diff --git a/lib/OpenLayers/Renderer/NG.js b/lib/OpenLayers/Renderer/NG.js
deleted file mode 100644
index 7ce39ba..0000000
--- a/lib/OpenLayers/Renderer/NG.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Copyright (c) 2006-2011 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/Renderer/Elements.js
- */
-
-/**
- * Class: OpenLayers.Renderer.NG
- * 
- * Inherits from:
- *  - <OpenLayers.Renderer.Elements>
- */
-OpenLayers.Renderer.NG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
-    
-    /**
-     * Constant: labelNodeType
-     * {String} The node type for text label containers. To be defined by
-     * subclasses.
-     */
-    labelNodeType: null,
-    
-    /**
-     * Constructor: OpenLayers.Renderer.NG
-     * 
-     * Parameters:
-     * containerID - {String}
-     * options - {Object} options for this renderer. Supported options are:
-     *     * yOrdering - {Boolean} Whether to use y-ordering
-     *     * zIndexing - {Boolean} Whether to use z-indexing. Will be ignored
-     *         if yOrdering is set to true.
-     */
-
-    /**
-     * Method: updateDimensions
-     * To be extended by subclasses - here we set positioning related styles
-     * on HTML elements, subclasses have to do the same for renderer specific
-     * elements (e.g. viewBox, width and height of the rendererRoot)
-     *
-     * Parameters:
-     * zoomChanged - {Boolean} Has the zoom changed? If so, subclasses may have
-     *     to update feature styles/dimensions.
-     */
-    updateDimensions: function(zoomChanged) {
-        var mapExtent = this.map.getExtent();
-        var renderExtent = mapExtent.scale(3);
-        this.setExtent(renderExtent, true);
-        var res = this.getResolution();
-        var div = this.rendererRoot.parentNode;
-        var layerLeft = parseFloat(div.parentNode.style.left);
-        var layerTop = parseFloat(div.parentNode.style.top);
-        div.style.left = ((renderExtent.left - mapExtent.left) / res - layerLeft) + "px";
-        div.style.top = ((mapExtent.top - renderExtent.top) / res - layerTop) + "px";
-    },
-    
-    /**
-     * Method: resize
-     */
-    setSize: function() {
-        this.map.getExtent() && this.updateDimensions();
-    },
-
-    /**
-     * Method: drawFeature
-     * Draw the feature.  The optional style argument can be used
-     * to override the feature's own style.  This method should only
-     * be called from layer.drawFeature().
-     *
-     * Parameters:
-     * feature - {<OpenLayers.Feature.Vector>} 
-     * style - {<Object>}
-     * 
-     * Returns:
-     * {Boolean} true if the feature has been drawn completely, false if not,
-     *     undefined if the feature had no geometry
-     */
-    drawFeature: function(feature, style) {
-        if(style == null) {
-            style = feature.style;
-        }
-        if (feature.geometry) {
-            var rendered = this.drawGeometry(feature.geometry, style, feature.id);
-            if(rendered !== false && style.label) {
-                var location = feature.geometry.getCentroid(); 
-                this.drawText(feature.id, style, location);
-            } else {
-                this.removeText(feature.id);
-            }
-            return rendered;
-        }
-    },
-    
-    /**
-     * Method: drawText
-     * Function for drawing text labels.
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * featureId - {String|DOMElement}
-     * style - {Object}
-     * location - {<OpenLayers.Geometry.Point>}, will be modified inline
-     *
-     * Returns:
-     * {DOMElement} container holding the text label (to be populated by
-     * subclasses)
-     */
-    drawText: function(featureId, style, location) {
-        var label;
-        if (typeof featureId !== "string") {
-            label = featureId;
-        } else {
-            label = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX, this.labelNodeType);
-            label._featureId = featureId;
-        }
-        label._style = style;
-        label._x = location.x;
-        label._y = location.y;
-        if(style.labelXOffset || 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);
-        }
-
-        if(label.parentNode !== this.textRoot) {
-            this.textRoot.appendChild(label);
-        }   
-
-        return label;
-    },
-
-    CLASS_NAME: "OpenLayers.Renderer.NG"
-});
diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js
index f7f53bf..fece889 100644
--- a/lib/OpenLayers/Renderer/SVG.js
+++ b/lib/OpenLayers/Renderer/SVG.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -114,12 +114,11 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      *     False otherwise.
      */
     setExtent: function(extent, resolutionChanged) {
-        OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, 
-                                                               arguments);
+        var coordSysUnchanged = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments);
         
-        var resolution = this.getResolution();
-        var left = -extent.left / resolution;
-        var top = extent.top / resolution;
+        var resolution = this.getResolution(),
+            left = -extent.left / resolution,
+            top = extent.top / resolution;
 
         // If the resolution has changed, start over changing the corner, because
         // the features will redraw.
@@ -130,15 +129,15 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
             var extentString = "0 0 " + this.size.w + " " + this.size.h;
 
             this.rendererRoot.setAttributeNS(null, "viewBox", extentString);
-            this.translate(0, 0);
+            this.translate(this.xOffset, 0);
             return true;
         } else {
-            var inRange = this.translate(left - this.left, top - this.top);
+            var inRange = this.translate(left - this.left + this.xOffset, top - this.top);
             if (!inRange) {
                 // recenter the coordinate system
                 this.setExtent(extent, true);
             }
-            return inRange;
+            return coordSysUnchanged && inRange;
         }
     },
     
@@ -215,7 +214,6 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
                 break;
             case "OpenLayers.Geometry.Polygon":
             case "OpenLayers.Geometry.Curve":
-            case "OpenLayers.Geometry.Surface":
                 nodeType = "path";
                 break;
             default:
@@ -254,9 +252,15 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
                 if (style.graphicTitle) {
                     node.setAttributeNS(null, "title", style.graphicTitle);
                     //Standards-conformant SVG
-                    var label = this.nodeFactory(null, "title");
-                    label.textContent = style.graphicTitle;
-                    node.appendChild(label);
+                    // Prevent duplicate nodes. See issue https://github.com/openlayers/openlayers/issues/92 
+                    var titleNode = node.getElementsByTagName("title");
+                    if (titleNode.length > 0) {
+                        titleNode[0].firstChild.textContent = style.graphicTitle;
+                    } else {
+                        var label = this.nodeFactory(null, "title");
+                        label.textContent = style.graphicTitle;
+                        node.appendChild(label);
+                    }
                 }
                 if (style.graphicWidth && style.graphicHeight) {
                   node.setAttributeNS(null, "preserveAspectRatio", "none");
@@ -442,13 +446,15 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      * {DOMElement} The specific render engine's root element
      */
     createRenderRoot: function() {
-        return this.nodeFactory(this.container.id + "_svgRoot", "svg");
+        var svg = this.nodeFactory(this.container.id + "_svgRoot", "svg");
+        svg.style.display = "block";
+        return svg;
     },
 
     /**
      * Method: createRoot
      * 
-     * Parameter:
+     * Parameters:
      * suffix - {String} suffix to append to the id
      * 
      * Returns:
@@ -505,7 +511,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      */
     drawCircle: function(node, geometry, radius) {
         var resolution = this.getResolution();
-        var x = (geometry.x / resolution + this.left);
+        var x = ((geometry.x - this.featureDx) / resolution + this.left);
         var y = (this.top - geometry.y / resolution);
 
         if (this.inValidRange(x, y)) { 
@@ -615,7 +621,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      */ 
     drawRectangle: function(node, geometry) {
         var resolution = this.getResolution();
-        var x = (geometry.x / resolution + this.left);
+        var x = ((geometry.x - this.featureDx) / resolution + this.left);
         var y = (this.top - geometry.y / resolution);
 
         if (this.inValidRange(x, y)) { 
@@ -630,46 +636,6 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
     },
     
     /**
-     * Method: drawSurface
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or false if the renderer could not draw the surface
-     */ 
-    drawSurface: function(node, geometry) {
-
-        // create the svg path string representation
-        var d = null;
-        var draw = true;
-        for (var i=0, len=geometry.components.length; i<len; i++) {
-            if ((i%3) == 0 && (i/3) == 0) {
-                var component = this.getShortString(geometry.components[i]);
-                if (!component) { draw = false; }
-                d = "M " + component;
-            } else if ((i%3) == 1) {
-                var component = this.getShortString(geometry.components[i]);
-                if (!component) { draw = false; }
-                d += " C " + component;
-            } else {
-                var component = this.getShortString(geometry.components[i]);
-                if (!component) { draw = false; }
-                d += " " + component;
-            }
-        }
-        d += " Z";
-        if (draw) {
-            node.setAttributeNS(null, "d", d);
-            return node;
-        } else {
-            return false;
-        }    
-    },
-    
-    /**
      * Method: drawText
      * This method is only called by the renderer itself.
      *
@@ -679,12 +645,25 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      * location - {<OpenLayers.Geometry.Point>}
      */
     drawText: function(featureId, style, location) {
+        var drawOutline = (!!style.labelOutlineWidth);
+        // First draw text in halo color and size and overlay the
+        // normal text afterwards
+        if (drawOutline) {
+            var outlineStyle = OpenLayers.Util.extend({}, style);
+            outlineStyle.fontColor = outlineStyle.labelOutlineColor;
+            outlineStyle.fontStrokeColor = outlineStyle.labelOutlineColor;
+            outlineStyle.fontStrokeWidth = style.labelOutlineWidth;
+            delete outlineStyle.labelOutlineWidth;
+            this.drawText(featureId, outlineStyle, location);
+        }
+
         var resolution = this.getResolution();
 
-        var x = (location.x / resolution + this.left);
+        var x = ((location.x - this.featureDx) / resolution + this.left);
         var y = (location.y / resolution - this.top);
 
-        var label = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX, "text");
+        var suffix = (drawOutline)?this.LABEL_OUTLINE_SUFFIX:this.LABEL_ID_SUFFIX;
+        var label = this.nodeFactory(featureId + suffix, "text");
 
         label.setAttributeNS(null, "x", x);
         label.setAttributeNS(null, "y", -y);
@@ -692,6 +671,12 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         if (style.fontColor) {
             label.setAttributeNS(null, "fill", style.fontColor);
         }
+        if (style.fontStrokeColor) {
+            label.setAttributeNS(null, "stroke", style.fontStrokeColor);
+        }
+        if (style.fontStrokeWidth) {
+            label.setAttributeNS(null, "stroke-width", style.fontStrokeWidth);
+        }
         if (style.fontOpacity) {
             label.setAttributeNS(null, "opacity", style.fontOpacity);
         }
@@ -713,7 +698,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         } else {
             label.setAttributeNS(null, "pointer-events", "none");
         }
-        var align = style.labelAlign || "cm";
+        var align = style.labelAlign || OpenLayers.Renderer.defaultSymbolizer.labelAlign;
         label.setAttributeNS(null, "text-anchor",
             OpenLayers.Renderer.SVG.LABEL_ALIGN[align[0]] || "middle");
 
@@ -728,7 +713,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
             label.removeChild(label.lastChild);
         }
         for (var i = 0; i < numRows; i++) {
-            var tspan = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_tspan_" + i, "tspan");
+            var tspan = this.nodeFactory(featureId + suffix + "_tspan_" + i, "tspan");
             if (style.labelSelect === true) {
                 tspan._featureId = featureId;
                 tspan._geometry = location;
@@ -833,9 +818,9 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         var resolution = this.getResolution();
         var maxX = this.MAX_PIXEL - this.translationParameters.x;
         var maxY = this.MAX_PIXEL - this.translationParameters.y;
-        var x1 = goodComponent.x / resolution + this.left;
+        var x1 = (goodComponent.x - this.featureDx) / resolution + this.left;
         var y1 = this.top - goodComponent.y / resolution;
-        var x2 = badComponent.x / resolution + this.left;
+        var x2 = (badComponent.x - this.featureDx) / resolution + this.left;
         var y2 = this.top - badComponent.y / resolution;
         var k;
         if (x2 < -maxX || x2 > maxX) {
@@ -862,7 +847,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      */
     getShortString: function(point) {
         var resolution = this.getResolution();
-        var x = (point.x / resolution + this.left);
+        var x = ((point.x - this.featureDx) / resolution + this.left);
         var y = (this.top - point.y / resolution);
 
         if (this.inValidRange(x, y)) { 
@@ -908,7 +893,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         var id = this.container.id + "-" + graphicName;
         
         // check if symbol already exists in the defs
-        var existing = document.getElementById(id)
+        var existing = document.getElementById(id);
         if (existing != null) {
             return existing;
         }
@@ -962,15 +947,14 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      * evt - {Object} An <OpenLayers.Event> object
      *
      * Returns:
-     * {<OpenLayers.Geometry>} A geometry from an event that 
-     *     happened on a layer.
+     * {String} A feature id or undefined.
      */
     getFeatureIdFromEvent: function(evt) {
         var featureId = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments);
         if(!featureId) {
             var target = evt.target;
-            featureId = target.parentNode && target != this.rendererRoot &&
-                target.parentNode._featureId;
+            featureId = target.parentNode && target != this.rendererRoot ?
+                target.parentNode._featureId : undefined;
         }
         return featureId;
     },
diff --git a/lib/OpenLayers/Renderer/SVG2.js b/lib/OpenLayers/Renderer/SVG2.js
deleted file mode 100644
index bbaf6e4..0000000
--- a/lib/OpenLayers/Renderer/SVG2.js
+++ /dev/null
@@ -1,826 +0,0 @@
-/* Copyright (c) 2006-2011 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/Renderer/NG.js
- */
-
-/**
- * Class: OpenLayers.Renderer.SVG2
- * 
- * Inherits from:
- *  - <OpenLayers.Renderer.NG>
- */
-OpenLayers.Renderer.SVG2 = OpenLayers.Class(OpenLayers.Renderer.NG, {
-
-    /** 
-     * Property: xmlns
-     * {String}
-     */
-    xmlns: "http://www.w3.org/2000/svg",
-    
-    /**
-     * Property: xlinkns
-     * {String}
-     */
-    xlinkns: "http://www.w3.org/1999/xlink",
-
-    /**
-     * Property: symbolMetrics
-     * {Object} Cache for symbol metrics according to their svg coordinate
-     *     space. This is an object keyed by the symbol's id, and values are
-     *     an object with size, x and y properties.
-     */
-    symbolMetrics: null,
-    
-    /**
-     * Constant: labelNodeType
-     * {String} The node type for text label containers.
-     */
-    labelNodeType: "g",
-
-    /**
-     * Constructor: OpenLayers.Renderer.SVG2
-     * 
-     * Parameters:
-     * containerID - {String}
-     */
-    initialize: function(containerID) {
-        if (!this.supported()) { 
-            return; 
-        }
-        OpenLayers.Renderer.Elements.prototype.initialize.apply(this, 
-                                                                arguments);
-        
-        this.symbolMetrics = {};
-    },
-
-    /**
-     * APIMethod: supported
-     * 
-     * Returns:
-     * {Boolean} Whether or not the browser supports the SVG renderer
-     */
-    supported: function() {
-        var svgFeature = "http://www.w3.org/TR/SVG11/feature#";
-        return (document.implementation && 
-           (document.implementation.hasFeature("org.w3c.svg", "1.0") || 
-            document.implementation.hasFeature(svgFeature + "SVG", "1.1") || 
-            document.implementation.hasFeature(svgFeature + "BasicStructure", "1.1") ));
-    },    
-
-    /**
-     * Method: updateDimensions
-     *
-     * Parameters:
-     * zoomChanged - {Boolean}
-     */
-    updateDimensions: function(zoomChanged) {
-        OpenLayers.Renderer.NG.prototype.updateDimensions.apply(this, arguments);
-        
-        var res = this.getResolution();
-        
-        var width = this.extent.getWidth();
-        var height = this.extent.getHeight();
-        
-        var extentString = [
-            this.extent.left,
-            -this.extent.top,
-            width,
-            height
-        ].join(" ");
-        this.rendererRoot.setAttributeNS(null, "viewBox", extentString);
-        this.rendererRoot.setAttributeNS(null, "width", width / res);
-        this.rendererRoot.setAttributeNS(null, "height", height / res);
-
-        if (zoomChanged === true) {
-            // update styles for the new resolution
-            var i, len;
-            var nodes = this.vectorRoot.childNodes;
-            for (i=0, len=nodes.length; i<len; ++i) {
-                this.setStyle(nodes[i]);
-            }
-            var textNodes = this.textRoot.childNodes;
-            var label;
-            for (i=0, len=textNodes.length; i<len; ++i) {
-                label = textNodes[i];
-                this.drawText(label, label._style,
-                    new OpenLayers.Geometry.Point(label._x, label._y)
-                );
-            }
-        }
-    },
-    
-    /** 
-     * Method: getNodeType
-     * 
-     * Parameters:
-     * geometry - {<OpenLayers.Geometry>}
-     * style - {Object}
-     * 
-     * Returns:
-     * {String} The corresponding node type for the specified geometry
-     */
-    getNodeType: function(geometry, style) {
-        var nodeType = null;
-        switch (geometry.CLASS_NAME) {
-            case "OpenLayers.Geometry.Point":
-                if (style.externalGraphic) {
-                    nodeType = "image";
-                } else if (this.isComplexSymbol(style.graphicName)) {
-                    nodeType = "svg";
-                } else {
-                    nodeType = "circle";
-                }
-                break;
-            case "OpenLayers.Geometry.Rectangle":
-                nodeType = "rect";
-                break;
-            case "OpenLayers.Geometry.LineString":
-                nodeType = "polyline";
-                break;
-            case "OpenLayers.Geometry.LinearRing":
-                nodeType = "polygon";
-                break;
-            case "OpenLayers.Geometry.Polygon":
-            case "OpenLayers.Geometry.Curve":
-            case "OpenLayers.Geometry.Surface":
-                nodeType = "path";
-                break;
-            default:
-                break;
-        }
-        return nodeType;
-    },
-
-    /** 
-     * Method: setStyle
-     * Use to set all the style attributes to a SVG node.
-     * 
-     * Takes care to adjust stroke width and point radius to be
-     * resolution-relative
-     *
-     * Parameters:
-     * node - {SVGDomElement} An SVG element to decorate
-     * style - {Object}
-     * options - {Object} Currently supported options include 
-     *                              'isFilled' {Boolean} and
-     *                              'isStroked' {Boolean}
-     */
-    setStyle: function(node, style, options) {
-        style = style  || node._style;
-        options = options || node._options;
-        var resolution = this.getResolution();
-        var r = node._radius;
-        var widthFactor = resolution;
-        if (node._geometryClass == "OpenLayers.Geometry.Point" && r) {
-            node.style.visibility = "";
-            if (style.graphic === false) {
-                node.style.visibility = "hidden";
-            } else if (style.externalGraphic) {
-                
-                if (style.graphicTitle) {
-                    node.setAttributeNS(null, "title", style.graphicTitle);
-                    //Standards-conformant SVG 
-                    var label = this.nodeFactory(null, "title"); 
-                    label.textContent = style.graphicTitle; 
-                    node.appendChild(label); 
-                }
-                if (style.graphicWidth && style.graphicHeight) {
-                    node.setAttributeNS(null, "preserveAspectRatio", "none");
-                }
-                var width = style.graphicWidth || style.graphicHeight;
-                var height = style.graphicHeight || style.graphicWidth;
-                width = width ? width : style.pointRadius*2;
-                height = height ? height : style.pointRadius*2;
-                width *= resolution;
-                height *= resolution;
-                
-                var xOffset = (style.graphicXOffset != undefined) ?
-                    style.graphicXOffset * resolution : -(0.5 * width);
-                var yOffset = (style.graphicYOffset != undefined) ?
-                    style.graphicYOffset * resolution : -(0.5 * height);
-
-                var opacity = style.graphicOpacity || style.fillOpacity;
-                
-                node.setAttributeNS(null, "x", node._x + xOffset);
-                node.setAttributeNS(null, "y", node._y + yOffset);
-                node.setAttributeNS(null, "width", width);
-                node.setAttributeNS(null, "height", height);
-                node.setAttributeNS(this.xlinkns, "href", style.externalGraphic);
-                node.setAttributeNS(null, "style", "opacity: "+opacity);
-                node.onclick = OpenLayers.Renderer.SVG2.preventDefault;
-            } else if (this.isComplexSymbol(style.graphicName)) {
-                // the symbol viewBox is three times as large as the symbol
-                var offset = style.pointRadius * 3 * resolution;
-                var size = offset * 2;
-                var src = this.importSymbol(style.graphicName);
-                widthFactor = this.symbolMetrics[src.id].size * 3 / size * resolution;
-                
-                // remove the node from the dom before we modify it. This
-                // prevents various rendering issues in Safari and FF
-                var parent = node.parentNode;
-                var nextSibling = node.nextSibling;
-                if(parent) {
-                    parent.removeChild(node);
-                }
-                
-                // 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 
-                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", node._x - offset);
-                node.setAttributeNS(null, "y", node._y - offset);
-                
-                // now that the node has all its new properties, insert it
-                // back into the dom where it was
-                if(nextSibling) {
-                    parent.insertBefore(node, nextSibling);
-                } else if(parent) {
-                    parent.appendChild(node);
-                }
-            } else {
-                node.setAttributeNS(null, "r", style.pointRadius * resolution);
-            }
-
-            var rotation = style.rotation;
-            if (rotation !== undefined || node._rotation !== undefined) {
-                node._rotation = rotation;
-                rotation |= 0;
-                if (node.nodeName !== "svg") { 
-                    node.setAttributeNS(null, "transform", 
-                        ["rotate(", rotation, node._x, node._y, ")"].join(" ")
-                    ); 
-                } else {
-                    var metrics = this.symbolMetrics[src.id]; 
-                    node.firstChild.setAttributeNS(null, "transform",
-                        ["rotate(", rotation, metrics.x, metrics.y, ")"].join(" ")
-                    );
-                }
-            }
-        }
-        
-        if (options.isFilled) {
-            node.setAttributeNS(null, "fill", style.fillColor);
-            node.setAttributeNS(null, "fill-opacity", style.fillOpacity);
-        } else {
-            node.setAttributeNS(null, "fill", "none");
-        }
-
-        if (options.isStroked) {
-            node.setAttributeNS(null, "stroke", style.strokeColor);
-            node.setAttributeNS(null, "stroke-opacity", style.strokeOpacity);
-            node.setAttributeNS(null, "stroke-width", style.strokeWidth * widthFactor);
-            node.setAttributeNS(null, "stroke-linecap", style.strokeLinecap || "round");
-            // Hard-coded linejoin for now, to make it look the same as in VML.
-            // There is no strokeLinejoin property yet for symbolizers.
-            node.setAttributeNS(null, "stroke-linejoin", "round");
-            style.strokeDashstyle && node.setAttributeNS(null,
-                "stroke-dasharray", this.dashStyle(style, widthFactor));
-        } else {
-            node.setAttributeNS(null, "stroke", "none");
-        }
-        
-        if (style.pointerEvents) {
-            node.setAttributeNS(null, "pointer-events", style.pointerEvents);
-        }
-                
-        if (style.cursor != null) {
-            node.setAttributeNS(null, "cursor", style.cursor);
-        }
-        
-        return node;
-    },
-
-    /** 
-     * Method: dashStyle
-     * 
-     * Parameters:
-     * style - {Object}
-     * widthFactor - {Number}
-     * 
-     * Returns:
-     * {String} A SVG compliant 'stroke-dasharray' value
-     */
-    dashStyle: function(style, widthFactor) {
-        var w = style.strokeWidth * widthFactor;
-        var str = style.strokeDashstyle;
-        switch (str) {
-            case 'solid':
-                return 'none';
-            case 'dot':
-                return [widthFactor, 4 * w].join();
-            case 'dash':
-                return [4 * w, 4 * w].join();
-            case 'dashdot':
-                return [4 * w, 4 * w, widthFactor, 4 * w].join();
-            case 'longdash':
-                return [8 * w, 4 * w].join();
-            case 'longdashdot':
-                return [8 * w, 4 * w, widthFactor, 4 * w].join();
-            default:
-                var parts = OpenLayers.String.trim(str).split(/\s+/g);
-                for (var i=0, ii=parts.length; i<ii; i++) {
-                    parts[i] = parts[i] * widthFactor;
-                }
-                return parts.join();            
-        }
-    },
-    
-    /** 
-     * Method: createNode
-     * 
-     * Parameters:
-     * type - {String} Kind of node to draw
-     * id - {String} Id for node
-     * 
-     * Returns:
-     * {DOMElement} A new node of the given type and id
-     */
-    createNode: function(type, id) {
-        var node = document.createElementNS(this.xmlns, type);
-        if (id) {
-            node.setAttributeNS(null, "id", id);
-        }
-        return node;    
-    },
-    
-    /** 
-     * Method: nodeTypeCompare
-     * 
-     * Parameters:
-     * node - {SVGDomElement} An SVG element
-     * type - {String} Kind of node
-     * 
-     * Returns:
-     * {Boolean} Whether or not the specified node is of the specified type
-     */
-    nodeTypeCompare: function(node, type) {
-        return (type == node.nodeName);
-    },
-   
-    /**
-     * Method: createRenderRoot
-     * 
-     * Returns:
-     * {DOMElement} The specific render engine's root element
-     */
-    createRenderRoot: function() {
-        return this.nodeFactory(this.container.id + "_svgRoot", "svg");
-    },
-
-    /**
-     * Method: createRoot
-     * 
-     * Parameter:
-     * suffix - {String} suffix to append to the id
-     * 
-     * Returns:
-     * {DOMElement}
-     */
-    createRoot: function(suffix) {
-        return this.nodeFactory(this.container.id + suffix, "g");
-    },
-
-    /**
-     * Method: createDefs
-     *
-     * Returns:
-     * {DOMElement} The element to which we'll add the symbol definitions
-     */
-    createDefs: function() {
-        var defs = this.nodeFactory(this.container.id + "_defs", "defs");
-        this.rendererRoot.appendChild(defs);
-        return defs;
-    },
-
-    /**************************************
-     *                                    *
-     *     GEOMETRY DRAWING FUNCTIONS     *
-     *                                    *
-     **************************************/
-
-    /**
-     * Method: drawPoint
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or false if the renderer could not draw the point
-     */ 
-    drawPoint: function(node, geometry) {
-        return this.drawCircle(node, geometry, 1);
-    },
-
-    /**
-     * Method: drawCircle
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * radius - {Float}
-     * 
-     * Returns:
-     * {DOMElement} or false if the renderer could not draw the circle
-     */
-    drawCircle: function(node, geometry, radius) {
-        var x = geometry.x;
-        var y = -geometry.y;
-        node.setAttributeNS(null, "cx", x);
-        node.setAttributeNS(null, "cy", y);
-        node._x = x;
-        node._y = y;
-        node._radius = radius;
-        return node;
-    },
-    
-    /**
-     * Method: drawLineString
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or null if the renderer could not draw all components of
-     *     the linestring, or false if nothing could be drawn
-     */ 
-    drawLineString: function(node, geometry) {
-        var path = this.getComponentsString(geometry.components);
-        node.setAttributeNS(null, "points", path);
-        return node;
-    },
-    
-    /**
-     * Method: drawLinearRing
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or null if the renderer could not draw all components
-     *     of the linear ring, or false if nothing could be drawn
-     */ 
-    drawLinearRing: function(node, geometry) {
-        var path = this.getComponentsString(geometry.components);
-        node.setAttributeNS(null, "points", path);
-        return node;
-    },
-    
-    /**
-     * Method: drawPolygon
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or null if the renderer could not draw all components
-     *     of the polygon, or false if nothing could be drawn
-     */ 
-    drawPolygon: function(node, geometry) {
-        var d = [];
-        var draw = true;
-        var complete = true;
-        var linearRingResult, path;
-        for (var j=0, len=geometry.components.length; j<len; j++) {
-            d.push("M");
-            path = this.getComponentsString(
-                geometry.components[j].components, " ");
-            d.push(path);
-        }
-        d.push("z");
-        node.setAttributeNS(null, "d", d.join(" "));
-        node.setAttributeNS(null, "fill-rule", "evenodd");
-        return node;
-    },
-    
-    /**
-     * Method: drawRectangle
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or false if the renderer could not draw the rectangle
-     */ 
-    drawRectangle: function(node, geometry) {
-        node.setAttributeNS(null, "x", geometry.x);
-        node.setAttributeNS(null, "y", -geometry.y);
-        node.setAttributeNS(null, "width", geometry.width);
-        node.setAttributeNS(null, "height", geometry.height);
-        return node;
-    },
-    
-    /**
-     * Method: drawSurface
-     * This method is only called by the renderer itself.
-     * 
-     * Parameters: 
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement} or false if the renderer could not draw the surface
-     */ 
-    drawSurface: function(node, geometry) {
-
-        // create the svg path string representation
-        var d = [];
-        var draw = true;
-        for (var i=0, len=geometry.components.length; i<len; i++) {
-            if ((i%3) == 0 && (i/3) == 0) {
-                var component = this.getShortString(geometry.components[i]);
-                d.push("M", component);
-            } else if ((i%3) == 1) {
-                var component = this.getShortString(geometry.components[i]);
-                d.push("C", component);
-            } else {
-                var component = this.getShortString(geometry.components[i]);
-                d.push(component);
-            }
-        }
-        d.push("Z");
-        node.setAttributeNS(null, "d", d.join(" "));
-        return node;
-    },
-    
-    /**
-     * Method: drawText
-     * Function for drawing text labels.
-     * This method is only called by the renderer itself.
-     *
-     * Parameters:
-     * featureId - {String|DOMElement}
-     * style - {Object}
-     * location - {<OpenLayers.Geometry.Point>}, will be modified inline
-     *
-     * Returns:
-     * {DOMElement} container holding the text label
-     */
-    drawText: function(featureId, style, location) {
-        var g = OpenLayers.Renderer.NG.prototype.drawText.apply(this, arguments);
-        var text = g.firstChild ||
-            this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_text", "text");
-
-        var res = this.getResolution();
-        text.setAttributeNS(null, "x", location.x / res);
-        text.setAttributeNS(null, "y", - location.y / res);
-        g.setAttributeNS(null, "transform", "scale(" + res + ")");
-
-        if (style.fontColor) {
-            text.setAttributeNS(null, "fill", style.fontColor);
-        }
-        if (style.fontOpacity) {
-            text.setAttributeNS(null, "opacity", style.fontOpacity);
-        }
-        if (style.fontFamily) {
-            text.setAttributeNS(null, "font-family", style.fontFamily);
-        }
-        if (style.fontSize) {
-            text.setAttributeNS(null, "font-size", style.fontSize);
-        }
-        if (style.fontWeight) {
-            text.setAttributeNS(null, "font-weight", style.fontWeight);
-        }
-        if (style.fontStyle) {
-            text.setAttributeNS(null, "font-style", style.fontStyle);
-        }
-        if (style.labelSelect === true) {
-            text.setAttributeNS(null, "pointer-events", "visible");
-            text._featureId = featureId;
-        } else {
-            text.setAttributeNS(null, "pointer-events", "none");
-        }
-        var align = style.labelAlign || "cm";
-        text.setAttributeNS(null, "text-anchor",
-            OpenLayers.Renderer.SVG2.LABEL_ALIGN[align[0]] || "middle");
-
-        if (OpenLayers.IS_GECKO === true) {
-            text.setAttributeNS(null, "dominant-baseline",
-                OpenLayers.Renderer.SVG2.LABEL_ALIGN[align[1]] || "central");
-        }
-
-        var labelRows = style.label.split('\n');
-        var numRows = labelRows.length;
-        while (text.childNodes.length > numRows) {
-            text.removeChild(text.lastChild);
-        }
-        for (var i = 0; i < numRows; i++) {
-            var tspan = text.childNodes[i] ||
-                this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_tspan_" + i, "tspan");
-            if (style.labelSelect === true) {
-                tspan._featureId = featureId;
-            }
-            if (OpenLayers.IS_GECKO === false) {
-                tspan.setAttributeNS(null, "baseline-shift",
-                    OpenLayers.Renderer.SVG2.LABEL_VSHIFT[align[1]] || "-35%");
-            }
-            tspan.setAttribute("x", location.x / res);
-            if (i == 0) {
-                var vfactor = OpenLayers.Renderer.SVG2.LABEL_VFACTOR[align[1]];
-                if (vfactor == null) {
-                    vfactor = -.5;
-                }
-                tspan.setAttribute("dy", (vfactor*(numRows-1)) + "em");
-            } else {
-                tspan.setAttribute("dy", "1em");
-            }
-            tspan.textContent = (labelRows[i] === '') ? ' ' : labelRows[i];
-            if (!tspan.parentNode) {
-                text.appendChild(tspan);
-            }
-        }
-
-        if (!text.parentNode) {
-            g.appendChild(text);
-        }
-
-        return g;
-    },
-    
-    /** 
-     * Method: getComponentString
-     * 
-     * Parameters:
-     * components - {Array(<OpenLayers.Geometry.Point>)} Array of points
-     * separator - {String} character between coordinate pairs. Defaults to ","
-     * 
-     * Returns:
-     * {Object} hash with properties "path" (the string created from the
-     *     components and "complete" (false if the renderer was unable to
-     *     draw all components)
-     */
-    getComponentsString: function(components, separator) {
-        var len = components.length;
-        var strings = new Array(len);
-        for (var i=0; i<len; i++) {
-            strings[i] = this.getShortString(components[i]);
-        }
-
-        return strings.join(separator || ",");
-    },
-    
-    /** 
-     * Method: getShortString
-     * 
-     * Parameters:
-     * point - {<OpenLayers.Geometry.Point>}
-     * 
-     * Returns:
-     * {String} or false if point is outside the valid range
-     */
-    getShortString: function(point) {
-        return point.x + "," + (-point.y);
-    },
-    
-    /**
-     * Method: importSymbol
-     * add a new symbol definition from the rendererer's symbol hash
-     * 
-     * Parameters:
-     * graphicName - {String} name of the symbol to import
-     * 
-     * Returns:
-     * {DOMElement} - the imported symbol
-     */      
-    importSymbol: function (graphicName)  {
-        if (!this.defs) {
-            // create svg defs tag
-            this.defs = this.createDefs();
-        }
-        var id = this.container.id + "-" + graphicName;
-        
-        // check if symbol already exists in the defs
-        var existing = document.getElementById(id);
-        if (existing != null) {
-            return existing;
-        }
-        
-        var symbol = OpenLayers.Renderer.symbol[graphicName];
-        if (!symbol) {
-            throw new Error(graphicName + ' is not a valid symbol name');
-        }
-
-        var symbolNode = this.nodeFactory(id, "symbol");
-        var node = this.nodeFactory(null, "polygon");
-        symbolNode.appendChild(node);
-        var symbolExtent = new OpenLayers.Bounds(
-                                    Number.MAX_VALUE, Number.MAX_VALUE, 0, 0);
-
-        var points = [];
-        var x,y;
-        for (var i=0, len=symbol.length; i<len; i=i+2) {
-            x = symbol[i];
-            y = symbol[i+1];
-            symbolExtent.left = Math.min(symbolExtent.left, x);
-            symbolExtent.bottom = Math.min(symbolExtent.bottom, y);
-            symbolExtent.right = Math.max(symbolExtent.right, x);
-            symbolExtent.top = Math.max(symbolExtent.top, y);
-            points.push(x, ",", y);
-        }
-        
-        node.setAttributeNS(null, "points", points.join(" "));
-        
-        var width = symbolExtent.getWidth();
-        var height = symbolExtent.getHeight();
-        // create a viewBox three times as large as the symbol itself,
-        // to allow for strokeWidth being displayed correctly at the corners.
-        var viewBox = [symbolExtent.left - width,
-                        symbolExtent.bottom - height, width * 3, height * 3];
-        symbolNode.setAttributeNS(null, "viewBox", viewBox.join(" "));
-        this.symbolMetrics[id] = {
-            size: Math.max(width, height),
-            x: symbolExtent.getCenterLonLat().lon,
-            y: symbolExtent.getCenterLonLat().lat
-        };
-        
-        this.defs.appendChild(symbolNode);
-        return symbolNode;
-    },
-    
-    /**
-     * Method: getFeatureIdFromEvent
-     * 
-     * Parameters:
-     * evt - {Object} An <OpenLayers.Event> object
-     *
-     * Returns:
-     * {<OpenLayers.Geometry>} A geometry from an event that 
-     *     happened on a layer.
-     */
-    getFeatureIdFromEvent: function(evt) {
-        var featureId = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments);
-        if(!featureId) {
-            var target = evt.target;
-            featureId = target.parentNode && target != this.rendererRoot &&
-                target.parentNode._featureId;
-        }
-        return featureId;
-    },
-
-    CLASS_NAME: "OpenLayers.Renderer.SVG2"
-});
-
-/**
- * Constant: OpenLayers.Renderer.SVG2.LABEL_ALIGN
- * {Object}
- */
-OpenLayers.Renderer.SVG2.LABEL_ALIGN = {
-    "l": "start",
-    "r": "end",
-    "b": "bottom",
-    "t": "hanging"
-};
-
-/**
- * Constant: OpenLayers.Renderer.SVG2.LABEL_VSHIFT
- * {Object}
- */
-OpenLayers.Renderer.SVG2.LABEL_VSHIFT = {
-    // according to
-    // http://www.w3.org/Graphics/SVG/Test/20061213/htmlObjectHarness/full-text-align-02-b.html
-    // a baseline-shift of -70% shifts the text exactly from the
-    // bottom to the top of the baseline, so -35% moves the text to
-    // the center of the baseline.
-    "t": "-70%",
-    "b": "0"    
-};
-
-/**
- * Constant: OpenLayers.Renderer.SVG2.LABEL_VFACTOR
- * {Object}
- */
-OpenLayers.Renderer.SVG2.LABEL_VFACTOR = {
-    "t": 0,
-    "b": -1
-};
-
-/** 
- * Function: OpenLayers.Renderer.SVG2.preventDefault 
- * Used to prevent default events (especially opening images in a new tab on 
- * ctrl-click) from being executed for externalGraphic and graphicName symbols 
- */ 
-OpenLayers.Renderer.SVG2.preventDefault = function(e) { 
-    e.preventDefault && e.preventDefault(); 
-};
diff --git a/lib/OpenLayers/Renderer/VML.js b/lib/OpenLayers/Renderer/VML.js
index 88c6f29..50c3d68 100644
--- a/lib/OpenLayers/Renderer/VML.js
+++ b/lib/OpenLayers/Renderer/VML.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -90,8 +90,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
      *     the coordinate range, and the features will not need to be redrawn.
      */
     setExtent: function(extent, resolutionChanged) {
-        OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, 
-                                                               arguments);
+        var coordSysUnchanged = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments);
         var resolution = this.getResolution();
     
         var left = (extent.left/resolution) | 0;
@@ -106,7 +105,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         }
 
         
-        var org = left + " " + top;
+        var org = (left - this.xOffset) + " " + top;
         this.root.coordorigin = org;
         var roots = [this.root, this.vectorRoot, this.textRoot];
         var root;
@@ -121,7 +120,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         // matches the display Y axis of the map
         this.root.style.flip = "y";
         
-        return true;
+        return coordSysUnchanged;
     },
 
 
@@ -183,7 +182,6 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
             case "OpenLayers.Geometry.LinearRing":
             case "OpenLayers.Geometry.Polygon":
             case "OpenLayers.Geometry.Curve":
-            case "OpenLayers.Geometry.Surface":
                 nodeType = "olv:shape";
                 break;
             default:
@@ -226,7 +224,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
                 var yOffset = (style.graphicYOffset != undefined) ?
                     style.graphicYOffset : -(0.5 * height);
                 
-                node.style.left = (((geometry.x/resolution - this.offset.x)+xOffset) | 0) + "px";
+                node.style.left = ((((geometry.x - this.featureDx)/resolution - this.offset.x)+xOffset) | 0) + "px";
                 node.style.top = (((geometry.y/resolution - this.offset.y)-(yOffset+height)) | 0) + "px";
                 node.style.width = width + "px";
                 node.style.height = height + "px";
@@ -483,9 +481,9 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
             var resolution = this.getResolution();
         
             var scaledBox = 
-                new OpenLayers.Bounds((bbox.left/resolution - this.offset.x) | 0,
+                new OpenLayers.Bounds(((bbox.left - this.featureDx)/resolution - this.offset.x) | 0,
                                       (bbox.bottom/resolution - this.offset.y) | 0,
-                                      (bbox.right/resolution - this.offset.x) | 0,
+                                      ((bbox.right - this.featureDx)/resolution - this.offset.x) | 0,
                                       (bbox.top/resolution - this.offset.y) | 0);
             
             // Set the internal coordinate system to draw the path
@@ -652,7 +650,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         if(!isNaN(geometry.x)&& !isNaN(geometry.y)) {
             var resolution = this.getResolution();
 
-            node.style.left = (((geometry.x /resolution - this.offset.x) | 0) - radius) + "px";
+            node.style.left = ((((geometry.x - this.featureDx) /resolution - this.offset.x) | 0) - radius) + "px";
             node.style.top = (((geometry.y /resolution - this.offset.y) | 0) - radius) + "px";
     
             var diameter = radius * 2;
@@ -718,7 +716,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         var comp, x, y;
         for (var i = 0; i < numComponents; i++) {
             comp = geometry.components[i];
-            x = (comp.x/resolution - this.offset.x) | 0;
+            x = ((comp.x - this.featureDx)/resolution - this.offset.x) | 0;
             y = (comp.y/resolution - this.offset.y) | 0;
             parts[i] = " " + x + "," + y + " l ";
         }
@@ -754,7 +752,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
             second = null;
             for (i=0, ii=points.length; i<ii; i++) {
                 comp = points[i];
-                x = (comp.x / resolution - this.offset.x) | 0;
+                x = ((comp.x - this.featureDx) / resolution - this.offset.x) | 0;
                 y = (comp.y / resolution - this.offset.y) | 0;
                 pathComp = " " + x + "," + y;
                 path.push(pathComp);
@@ -801,7 +799,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
     drawRectangle: function(node, geometry) {
         var resolution = this.getResolution();
     
-        node.style.left = ((geometry.x/resolution - this.offset.x) | 0) + "px";
+        node.style.left = (((geometry.x - this.featureDx)/resolution - this.offset.x) | 0) + "px";
         node.style.top = ((geometry.y/resolution - this.offset.y) | 0) + "px";
         node.style.width = ((geometry.width/resolution) | 0) + "px";
         node.style.height = ((geometry.height/resolution) | 0) + "px";
@@ -823,7 +821,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         var textbox = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_textbox", "olv:textbox");
         
         var resolution = this.getResolution();
-        label.style.left = ((location.x/resolution - this.offset.x) | 0) + "px";
+        label.style.left = (((location.x - this.featureDx)/resolution - this.offset.x) | 0) + "px";
         label.style.top = ((location.y/resolution - this.offset.y) | 0) + "px";
         label.style.flip = "y";
 
@@ -879,41 +877,6 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
         label.style.top = parseInt(label.style.top)+yshift+"px";
         
     },
-
-    /**
-     * Method: drawSurface
-     * 
-     * Parameters:
-     * node - {DOMElement}
-     * geometry - {<OpenLayers.Geometry>}
-     * 
-     * Returns:
-     * {DOMElement}
-     */
-    drawSurface: function(node, geometry) {
-
-        this.setNodeDimension(node, geometry);
-
-        var resolution = this.getResolution();
-    
-        var path = [];
-        var comp, x, y;
-        for (var i=0, len=geometry.components.length; i<len; i++) {
-            comp = geometry.components[i];
-            x = (comp.x / resolution - this.offset.x) | 0;
-            y = (comp.y / resolution - this.offset.y) | 0;
-            if ((i%3)==0 && (i/3)==0) {
-                path.push("m");
-            } else if ((i%3)==1) {
-                path.push(" c");
-            }
-            path.push(" " + x + "," + y);
-        }
-        path.push(" x e");
-
-        node.path = path.join("");
-        return node;
-    },
     
     /**
      * Method: moveRoot
diff --git a/lib/OpenLayers/Request.js b/lib/OpenLayers/Request.js
index 4c6578b..63edf6b 100644
--- a/lib/OpenLayers/Request.js
+++ b/lib/OpenLayers/Request.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -8,6 +8,12 @@
  */
 
 /**
+ * TODO: deprecate me
+ * Use OpenLayers.Request.proxy instead.
+ */
+OpenLayers.ProxyHost = "";
+
+/**
  * Namespace: OpenLayers.Request
  * The OpenLayers.Request namespace contains convenience methods for working
  *     with XMLHttpRequests.  These methods work with a cross-browser
@@ -57,9 +63,50 @@ OpenLayers.Request = {
      * success - Triggered when the HTTP response has a success code (200-299).
      * failure - Triggered when the HTTP response does not have a success code.
      */
-    events: new OpenLayers.Events(this, null, ["complete", "success", "failure"]),
+    events: new OpenLayers.Events(this),
     
     /**
+     * Method: makeSameOrigin
+     * Using the specified proxy, returns a same origin url of the provided url.
+     *
+     * Parameters:
+     * url - {String} An arbitrary url
+     * proxy {String|Function} The proxy to use to make the provided url a
+     *     same origin url.
+     *
+     * Returns
+     * {String} the same origin url. If no proxy is provided, the returned url
+     *     will be the same as the provided url.
+     */
+    makeSameOrigin: function(url, proxy) {
+        var sameOrigin = url.indexOf("http") !== 0;
+        var urlParts = !sameOrigin && url.match(this.URL_SPLIT_REGEX);
+        if (urlParts) {
+            var location = window.location;
+            sameOrigin =
+                urlParts[1] == location.protocol &&
+                urlParts[3] == location.hostname;
+            var uPort = urlParts[4], lPort = location.port;
+            if (uPort != 80 && uPort != "" || lPort != "80" && lPort != "") {
+                sameOrigin = sameOrigin && uPort == lPort;
+            }
+        }
+        if (!sameOrigin) {
+            if (proxy) {
+                if (typeof proxy == "function") {
+                    url = proxy(url);
+                } else {
+                    url = proxy + encodeURIComponent(url);
+                }
+            } else {
+                OpenLayers.Console.warn(
+                    OpenLayers.i18n("proxyNeeded"), {url: url});
+            }
+        }
+        return url;
+    },
+
+    /**
      * APIMethod: issue
      * Create a new XMLHttpRequest object, open it, set any headers, bind
      *     a callback to done state, and send any data.  It is recommended that
@@ -122,35 +169,32 @@ OpenLayers.Request = {
             {proxy: OpenLayers.ProxyHost}
         );
         config = OpenLayers.Util.applyDefaults(config, defaultConfig);
+        
+        // Always set the "X-Requested-With" header to signal that this request
+        // was issued through the XHR-object. Since header keys are case 
+        // insensitive and we want to allow overriding of the "X-Requested-With"
+        // header through the user we cannot use applyDefaults, but have to 
+        // check manually whether we were called with a "X-Requested-With"
+        // header.
+        var customRequestedWithHeader = false,
+            headerKey;
+        for(headerKey in config.headers) {
+            if (config.headers.hasOwnProperty( headerKey )) {
+                if (headerKey.toLowerCase() === 'x-requested-with') {
+                    customRequestedWithHeader = true;
+                }
+            }
+        }
+        if (customRequestedWithHeader === false) {
+            // we did not have a custom "X-Requested-With" header
+            config.headers['X-Requested-With'] = 'XMLHttpRequest';
+        }
 
         // create request, open, and set headers
         var request = new OpenLayers.Request.XMLHttpRequest();
         var url = OpenLayers.Util.urlAppend(config.url, 
             OpenLayers.Util.getParameterString(config.params || {}));
-        var sameOrigin = !(url.indexOf("http") == 0);
-        var urlParts = !sameOrigin && url.match(this.URL_SPLIT_REGEX);
-        if (urlParts) {
-            var location = window.location;
-            sameOrigin =
-                urlParts[1] == location.protocol &&
-                urlParts[3] == location.hostname;
-            var uPort = urlParts[4], lPort = location.port;
-            if (uPort != 80 && uPort != "" || lPort != "80" && lPort != "") {
-                sameOrigin = sameOrigin && uPort == lPort;
-            }
-        }
-        if (!sameOrigin) {
-            if (config.proxy) {
-                if (typeof config.proxy == "function") {
-                    url = config.proxy(url);
-                } else {
-                    url = config.proxy + encodeURIComponent(url);
-                }
-            } else {
-                OpenLayers.Console.warn(
-                    OpenLayers.i18n("proxyNeeded"), {url: url});
-            }
-        }
+        url = OpenLayers.Request.makeSameOrigin(url, config.proxy);
         request.open(
             config.method, url, config.async, config.user, config.password
         );
diff --git a/lib/OpenLayers/Request/XMLHttpRequest.js b/lib/OpenLayers/Request/XMLHttpRequest.js
index f5b932b..db32295 100644
--- a/lib/OpenLayers/Request/XMLHttpRequest.js
+++ b/lib/OpenLayers/Request/XMLHttpRequest.js
@@ -249,8 +249,8 @@
         // 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 (!oRequest._headers["Content-Type"])
-                oRequest._object.setRequestHeader("Content-Type", "application/xml");
+            if (!this._headers["Content-Type"])
+                this._object.setRequestHeader("Content-Type", "application/xml");
         }
 
         this._data    = vData;
diff --git a/lib/OpenLayers/Rule.js b/lib/OpenLayers/Rule.js
index a6d78a9..e9631cd 100644
--- a/lib/OpenLayers/Rule.js
+++ b/lib/OpenLayers/Rule.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -8,11 +8,6 @@
  * @requires OpenLayers/BaseTypes/Class.js
  * @requires OpenLayers/Util.js
  * @requires OpenLayers/Style.js
- * @requires OpenLayers/Symbolizer/Point.js
- * @requires OpenLayers/Symbolizer/Line.js
- * @requires OpenLayers/Symbolizer/Polygon.js
- * @requires OpenLayers/Symbolizer/Text.js
- * @requires OpenLayers/Symbolizer/Raster.js
  */
 
 /**
diff --git a/lib/OpenLayers/SingleFile.js b/lib/OpenLayers/SingleFile.js
index afb0f65..3e5d662 100644
--- a/lib/OpenLayers/SingleFile.js
+++ b/lib/OpenLayers/SingleFile.js
@@ -1,13 +1,13 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 var OpenLayers = {
     /**
      * Constant: VERSION_NUMBER
      */
-    VERSION_NUMBER: "Release 2.11",
+    VERSION_NUMBER: "Release 2.12",
 
     /**
      * Constant: singleFile
@@ -25,13 +25,13 @@ var OpenLayers = {
      * {String} Path to this script
      */
     _getScriptLocation: (function() {
-        var r = new RegExp("(^|(.*?\\/))(OpenLayers\.js)(\\?|$)"),
+        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);
+                m = src.match(r);
                 if(m) {
                     l = m[1];
                     break;
@@ -39,5 +39,40 @@ var OpenLayers = {
             }
         }
         return (function() { return l; });
-    })()
+    })(),
+    
+    /**
+     * Property: ImgPath
+     * {String} Set this to the path where control images are stored, a path  
+     * given here must end with a slash. If set to '' (which is the default) 
+     * OpenLayers will use its script location + "img/".
+     * 
+     * You will need to set this property when you have a singlefile build of 
+     * OpenLayers that either is not named "OpenLayers.js" or if you move
+     * the file in a way such that the image directory cannot be derived from 
+     * the script location.
+     * 
+     * If your custom OpenLayers build is named "my-custom-ol.js" and the images
+     * of OpenLayers are in a folder "/resources/external/images/ol" a correct
+     * way of including OpenLayers in your HTML would be:
+     * 
+     * (code)
+     *   <script src="/path/to/my-custom-ol.js" type="text/javascript"></script>
+     *   <script type="text/javascript">
+     *      // tell OpenLayers where the control images are
+     *      // remember the trailing slash
+     *      OpenLayers.ImgPath = "/resources/external/images/ol/";
+     *   </script>
+     * (end code)
+     * 
+     * Please remember that when your OpenLayers script is not named 
+     * "OpenLayers.js" you will have to make sure that the default theme is 
+     * loaded into the page by including an appropriate <link>-tag, 
+     * e.g.:
+     * 
+     * (code)
+     *   <link rel="stylesheet" href="/path/to/default/style.css"  type="text/css">
+     * (end code)
+     */
+    ImgPath : ''
 };
diff --git a/lib/OpenLayers/Spherical.js b/lib/OpenLayers/Spherical.js
new file mode 100644
index 0000000..566014d
--- /dev/null
+++ b/lib/OpenLayers/Spherical.js
@@ -0,0 +1,67 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/SingleFile.js
+ */
+
+/**
+ * Namespace: Spherical
+ * The OpenLayers.Spherical namespace includes utility functions for
+ * calculations on the basis of a spherical earth (ignoring ellipsoidal
+ * effects), which is accurate enough for most purposes.
+ *
+ * Relevant links:
+ * * http://www.movable-type.co.uk/scripts/latlong.html
+ * * http://code.google.com/apis/maps/documentation/javascript/reference.html#spherical
+ */
+
+OpenLayers.Spherical = OpenLayers.Spherical || {};
+
+OpenLayers.Spherical.DEFAULT_RADIUS = 6378137;
+
+/**
+ * APIFunction: computeDistanceBetween
+ * Computes the distance between two LonLats.
+ *
+ * Parameters:
+ * from   - {<OpenLayers.LonLat>} or {Object} Starting point. A LonLat or
+ *          a JavaScript literal with lon lat properties.
+ * to     - {<OpenLayers.LonLat>} or {Object} Ending point. A LonLat or a
+ *          JavaScript literal with lon lat properties.
+ * radius - {Float} The radius. Optional. Defaults to 6378137 meters.
+ *
+ * Returns:
+ * {Float} The distance in meters.
+ */
+OpenLayers.Spherical.computeDistanceBetween = function(from, to, radius) {
+  var R = radius || OpenLayers.Spherical.DEFAULT_RADIUS;
+  var sinHalfDeltaLon = Math.sin(Math.PI * (to.lon - from.lon) / 360);
+  var sinHalfDeltaLat = Math.sin(Math.PI * (to.lat - from.lat) / 360);
+  var a = sinHalfDeltaLat * sinHalfDeltaLat +
+      sinHalfDeltaLon * sinHalfDeltaLon * Math.cos(Math.PI * from.lat / 180) * Math.cos(Math.PI * to.lat / 180); 
+  return 2 * R * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
+};
+
+
+/**
+ * APIFunction: computeHeading
+ * Computes the heading from one LonLat to another LonLat.
+ *
+ * Parameters:
+ * from   - {<OpenLayers.LonLat>} or {Object} Starting point. A LonLat or
+ *          a JavaScript literal with lon lat properties.
+ * to     - {<OpenLayers.LonLat>} or {Object} Ending point. A LonLat or a
+ *          JavaScript literal with lon lat properties.
+ *
+ * Returns:
+ * {Float} The heading in degrees.
+ */
+OpenLayers.Spherical.computeHeading = function(from, to) {
+    var y = Math.sin(Math.PI * (from.lon - to.lon) / 180) * Math.cos(Math.PI * to.lat / 180);
+    var x = Math.cos(Math.PI * from.lat / 180) * Math.sin(Math.PI * to.lat / 180) -
+        Math.sin(Math.PI * from.lat / 180) * Math.cos(Math.PI * to.lat / 180) * Math.cos(Math.PI * (from.lon - to.lon) / 180);
+    return 180 * Math.atan2(y, x) / Math.PI;
+};
diff --git a/lib/OpenLayers/Strategy.js b/lib/OpenLayers/Strategy.js
index e9acf5c..eeba84b 100644
--- a/lib/OpenLayers/Strategy.js
+++ b/lib/OpenLayers/Strategy.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -78,7 +78,7 @@ OpenLayers.Strategy = OpenLayers.Class({
      * Called to set the <layer> property.
      *
      * Parameters:
-     * {<OpenLayers.Layer.Vector>}
+     * layer - {<OpenLayers.Layer.Vector>}
      */
     setLayer: function(layer) {
         this.layer = layer;
diff --git a/lib/OpenLayers/Strategy/BBOX.js b/lib/OpenLayers/Strategy/BBOX.js
index 59b1b22..6df04b1 100644
--- a/lib/OpenLayers/Strategy/BBOX.js
+++ b/lib/OpenLayers/Strategy/BBOX.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -81,20 +81,11 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, {
         if(activated) {
             this.layer.events.on({
                 "moveend": this.update,
-                scope: this
-            });
-            this.layer.events.on({
                 "refresh": this.update,
+                "visibilitychanged": this.update,
                 scope: this
             });
-            if(this.layer.visibility === true && this.layer.inRange === true) {
-                this.update();
-            } else {
-                this.layer.events.on({
-                    "visibilitychanged": this.update,
-                    scope: this
-                });
-            }
+            this.update();
         }
         return activated;
     },
@@ -124,14 +115,17 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, {
      * Callback function called on "moveend" or "refresh" layer events.
      *
      * Parameters:
-     * options - {Object} An object with a property named "force", this
-     *      property references a boolean value indicating if new data
-     *      must be incondtionally read.
+     * options - {Object} Optional object whose properties will determine
+     *     the behaviour of this Strategy
+     *
+     * Valid options include:
+     * force - {Boolean} if true, new data must be unconditionally read.
+     * noAbort - {Boolean} if true, do not abort previous requests.
      */
     update: function(options) {
         var mapBounds = this.getMapBounds();
         if (mapBounds !== null && ((options && options.force) ||
-                                   this.invalidBounds(mapBounds))) {
+          (this.layer.visibility && this.layer.calculateInRange() && this.invalidBounds(mapBounds)))) {
             this.calculateBounds(mapBounds);
             this.resolution = this.layer.map.getResolution(); 
             this.triggerRead(options);
@@ -211,14 +205,15 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, {
      * Method: triggerRead
      *
      * Parameters:
-     * options - Additional options for the protocol's read method (optional)
+     * options - {Object} Additional options for the protocol's read method 
+     *     (optional)
      *
      * Returns:
      * {<OpenLayers.Protocol.Response>} The protocol response object
      *      returned by the layer protocol.
      */
     triggerRead: function(options) {
-        if (this.response) {
+        if (this.response && !(options && options.noAbort === true)) {
             this.layer.protocol.abort(this.response);
             this.layer.events.triggerEvent("loadend");
         }
diff --git a/lib/OpenLayers/Strategy/Cluster.js b/lib/OpenLayers/Strategy/Cluster.js
index dbc589f..50a14b7 100644
--- a/lib/OpenLayers/Strategy/Cluster.js
+++ b/lib/OpenLayers/Strategy/Cluster.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Strategy/Filter.js b/lib/OpenLayers/Strategy/Filter.js
index 0e876d1..987325e 100644
--- a/lib/OpenLayers/Strategy/Filter.js
+++ b/lib/OpenLayers/Strategy/Filter.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -127,7 +127,7 @@ OpenLayers.Strategy.Filter = OpenLayers.Class(OpenLayers.Strategy, {
      *     added to the layer.  Others will be cached by the strategy.
      *
      * Parameters:
-     * filter - <OpenLayers.Filter> A filter for evaluating features.
+     * filter - {<OpenLayers.Filter>} A filter for evaluating features.
      */
     setFilter: function(filter) {
         this.filter = filter;
diff --git a/lib/OpenLayers/Strategy/Fixed.js b/lib/OpenLayers/Strategy/Fixed.js
index 56fc8e4..0893b0d 100644
--- a/lib/OpenLayers/Strategy/Fixed.js
+++ b/lib/OpenLayers/Strategy/Fixed.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -105,7 +105,7 @@ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, {
      * Add all features to the layer.
      *
      * Parameters:
-     * mapProjection - {OpenLayers.Projection} the map projection
+     * mapProjection - {<OpenLayers.Projection>} the map projection
      * resp - {Object} options to pass to protocol read.
      */
     merge: function(mapProjection, resp) {
diff --git a/lib/OpenLayers/Strategy/Paging.js b/lib/OpenLayers/Strategy/Paging.js
index 3ca965c..649c14c 100644
--- a/lib/OpenLayers/Strategy/Paging.js
+++ b/lib/OpenLayers/Strategy/Paging.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -146,7 +146,7 @@ OpenLayers.Strategy.Paging = OpenLayers.Class(OpenLayers.Strategy, {
      * Gets or sets page length.
      *
      * Parameters:
-     * newLength: {Integer} Optional length to be set.
+     * newLength - {Integer} Optional length to be set.
      *
      * Returns:
      * {Integer} The length of a page (number of features per page).
diff --git a/lib/OpenLayers/Strategy/Refresh.js b/lib/OpenLayers/Strategy/Refresh.js
index 8b4feaf..b513a2c 100644
--- a/lib/OpenLayers/Strategy/Refresh.js
+++ b/lib/OpenLayers/Strategy/Refresh.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Strategy/Save.js b/lib/OpenLayers/Strategy/Save.js
index 5efae29..8a82573 100644
--- a/lib/OpenLayers/Strategy/Save.js
+++ b/lib/OpenLayers/Strategy/Save.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -20,19 +20,21 @@
 OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
     
     /**
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types.  Register a listener
-     *     for a particular event with the following syntax:
+     * APIProperty: events
+     * {<OpenLayers.Events>} An events object that handles all 
+     *     events on the strategy object.
+     *
+     * Register a listener for a particular event with the following syntax:
      * (code)
      * strategy.events.register(type, obj, listener);
      * (end)
      *
-     *  - *start* Triggered before saving
-     *  - *success* Triggered after a successful transaction
-     *  - *fail* Triggered after a failed transaction
-     *      
+     * Supported event types:
+     * start - Triggered before saving
+     * success - Triggered after a successful transaction
+     * fail - Triggered after a failed transaction
+     * 
      */
-    EVENT_TYPES: ["start", "success", "fail"],
  
     /** 
      * Property: events
@@ -66,7 +68,7 @@ OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
      */
     initialize: function(options) {
         OpenLayers.Strategy.prototype.initialize.apply(this, [options]);
-        this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES);
+        this.events = new OpenLayers.Events(this);
     },
    
     /**
diff --git a/lib/OpenLayers/Style.js b/lib/OpenLayers/Style.js
index 302a9f2..d33d79d 100644
--- a/lib/OpenLayers/Style.js
+++ b/lib/OpenLayers/Style.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -111,7 +111,7 @@ OpenLayers.Style = OpenLayers.Class({
      * rules - {Array(<OpenLayers.Rule>)} List of rules to be added to the
      *     style.
      * 
-     * Return:
+     * Returns:
      * {<OpenLayers.Style>}
      */
     initialize: function(style, options) {
@@ -191,7 +191,7 @@ OpenLayers.Style = OpenLayers.Class({
             style.display = "none";
         }
         
-        if (style.label && typeof style.label !== "string") {
+        if (style.label != null && typeof style.label !== "string") {
             style.label = String(style.label);
         }
         
@@ -202,7 +202,7 @@ OpenLayers.Style = OpenLayers.Class({
      * Method: applySymbolizer
      *
      * Parameters:
-     * rule - {OpenLayers.Rule}
+     * rule - {<OpenLayers.Rule>}
      * style - {Object}
      * feature - {<OpenLayer.Feature.Vector>}
      *
@@ -368,7 +368,7 @@ OpenLayers.Style = OpenLayers.Class({
      * geometry type of the passed geometry
      * 
      * Parameters:
-     * geometry {<OpenLayers.Geometry>}
+     * geometry - {<OpenLayers.Geometry>}
      * 
      * Returns:
      * {String} key of the according symbolizer
diff --git a/lib/OpenLayers/Style2.js b/lib/OpenLayers/Style2.js
index aecdd39..cf45526 100644
--- a/lib/OpenLayers/Style2.js
+++ b/lib/OpenLayers/Style2.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -70,7 +70,7 @@ OpenLayers.Style2 = OpenLayers.Class({
      * config - {Object} An object containing properties to be set on the 
      *     style.  Any documented properties may be set at construction.
      *
-     * Return:
+     * Returns:
      * {<OpenLayers.Style2>} A new style object.
      */
     initialize: function(config) {
diff --git a/lib/OpenLayers/StyleMap.js b/lib/OpenLayers/StyleMap.js
index c5e3644..1218983 100644
--- a/lib/OpenLayers/StyleMap.js
+++ b/lib/OpenLayers/StyleMap.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -16,7 +16,7 @@ OpenLayers.StyleMap = OpenLayers.Class({
     
     /**
      * Property: styles
-     * Hash of {<OpenLayers.Style>}, keyed by names of well known
+     * {Object} Hash of {<OpenLayers.Style>}, keyed by names of well known
      * rendering intents (e.g. "default", "temporary", "select", "delete").
      */
     styles: null,
diff --git a/lib/OpenLayers/Symbolizer.js b/lib/OpenLayers/Symbolizer.js
index 3ad2dce..87b2484 100644
--- a/lib/OpenLayers/Symbolizer.js
+++ b/lib/OpenLayers/Symbolizer.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Symbolizer/Line.js b/lib/OpenLayers/Symbolizer/Line.js
index 7c35a39..453d3d0 100644
--- a/lib/OpenLayers/Symbolizer/Line.js
+++ b/lib/OpenLayers/Symbolizer/Line.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Symbolizer/Point.js b/lib/OpenLayers/Symbolizer/Point.js
index b5a36cf..e7d3cee 100644
--- a/lib/OpenLayers/Symbolizer/Point.js
+++ b/lib/OpenLayers/Symbolizer/Point.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Symbolizer/Polygon.js b/lib/OpenLayers/Symbolizer/Polygon.js
index b2abeb7..4707577 100644
--- a/lib/OpenLayers/Symbolizer/Polygon.js
+++ b/lib/OpenLayers/Symbolizer/Polygon.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Symbolizer/Raster.js b/lib/OpenLayers/Symbolizer/Raster.js
index 038a8db..b8228be 100644
--- a/lib/OpenLayers/Symbolizer/Raster.js
+++ b/lib/OpenLayers/Symbolizer/Raster.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Symbolizer/Text.js b/lib/OpenLayers/Symbolizer/Text.js
index 86898eb..2537407 100644
--- a/lib/OpenLayers/Symbolizer/Text.js
+++ b/lib/OpenLayers/Symbolizer/Text.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
diff --git a/lib/OpenLayers/Tile.js b/lib/OpenLayers/Tile.js
index 5d114e9..f800a61 100644
--- a/lib/OpenLayers/Tile.js
+++ b/lib/OpenLayers/Tile.js
@@ -1,17 +1,15 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
  * @requires OpenLayers/Util.js
- * @requires OpenLayers/Console.js
- * @requires OpenLayers/Lang.js
  */
 
-/*
+/**
  * Class: OpenLayers.Tile 
  * This is a class designed to designate a single tile, however
  *     it is explicitly designed to do relatively little. Tiles store 
@@ -25,20 +23,55 @@
  */
 OpenLayers.Tile = OpenLayers.Class({
     
-    /** 
-     * Constant: EVENT_TYPES
-     * {Array(String)} Supported application event types
-     */
-    EVENT_TYPES: [ "loadstart", "loadend", "reload", "unload"],
-    
     /**
      * APIProperty: events
      * {<OpenLayers.Events>} An events object that handles all 
-     *                       events on the tile.
+     *     events on the tile.
+     *
+     * Register a listener for a particular event with the following syntax:
+     * (code)
+     * tile.events.register(type, obj, listener);
+     * (end)
+     *
+     * Supported event types:
+     * beforedraw - Triggered before the tile is drawn. Used to defer
+     *     drawing to an animation queue. To defer drawing, listeners need
+     *     to return false, which will abort drawing. The queue handler needs
+     *     to call <draw>(true) to actually draw the tile.
+     * loadstart - Triggered when tile loading starts.
+     * loadend - Triggered when tile loading ends.
+     * loaderror - Triggered before the loadend event (i.e. when the tile is
+     *     still hidden) if the tile could not be loaded.
+     * reload - Triggered when an already loading tile is reloaded.
+     * unload - Triggered before a tile is unloaded.
      */
     events: null,
 
     /**
+     * APIProperty: eventListeners
+     * {Object} If set as an option at construction, the eventListeners
+     *     object will be registered with <OpenLayers.Events.on>.  Object
+     *     structure must be a listeners object as shown in the example for
+     *     the events.on method.
+     *
+     * This options can be set in the ``tileOptions`` option from
+     * <OpenLayers.Layer.Grid>. For example, to be notified of the
+     * ``loadend`` event of each tiles:
+     * (code)
+     * new OpenLayers.Layer.OSM('osm', 'http://tile.openstreetmap.org/${z}/${x}/${y}.png', {
+     *     tileOptions: {
+     *         eventListeners: {
+     *             'loadend': function(evt) {
+     *                 // do something on loadend
+     *             }
+     *         }
+     *     }
+     * });
+     * (end)
+     */
+    eventListeners: null,
+
+    /**
      * Property: id 
      * {String} null
      */
@@ -77,16 +110,18 @@ OpenLayers.Tile = OpenLayers.Class({
      * {<OpenLayers.Pixel>} Top Left pixel of the tile
      */    
     position: null,
-
+    
     /**
      * Property: isLoading
      * {Boolean} Is the tile loading?
      */
     isLoading: false,
-        
+    
     /** TBD 3.0 -- remove 'url' from the list of parameters to the constructor.
      *             there is no need for the base tile class to have a url.
-     * 
+     */
+
+    /** 
      * Constructor: OpenLayers.Tile
      * Constructor for a new <OpenLayers.Tile> instance.
      * 
@@ -101,7 +136,7 @@ OpenLayers.Tile = OpenLayers.Class({
     initialize: function(layer, position, bounds, url, size, options) {
         this.layer = layer;
         this.position = position.clone();
-        this.bounds = bounds.clone();
+        this.setBounds(bounds);
         this.url = url;
         if (size) {
             this.size = size.clone();
@@ -109,10 +144,13 @@ OpenLayers.Tile = OpenLayers.Class({
 
         //give the tile a unique id based on its BBOX.
         this.id = OpenLayers.Util.createUniqueID("Tile_");
-        
-        this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES);
 
         OpenLayers.Util.extend(this, options);
+
+        this.events = new OpenLayers.Events(this);
+        if (this.eventListeners instanceof Object) {
+            this.events.on(this.eventListeners);
+        }
     },
 
     /**
@@ -139,58 +177,83 @@ OpenLayers.Tile = OpenLayers.Class({
         this.size = null;
         this.position = null;
         
+        if (this.eventListeners) {
+            this.events.un(this.eventListeners);
+        }
         this.events.destroy();
+        this.eventListeners = null;
         this.events = null;
     },
     
     /**
-     * Method: clone
+     * Method: draw
+     * Clear whatever is currently in the tile, then return whether or not 
+     *     it should actually be re-drawn. This is an example implementation
+     *     that can be overridden by subclasses. The minimum thing to do here
+     *     is to call <clear> and return the result from <shouldDraw>.
      *
      * Parameters:
-     * obj - {<OpenLayers.Tile>} The tile to be cloned
-     *
+     * deferred - {Boolean} When drawing was aborted by returning false from a
+     *     *beforedraw* listener, the queue manager needs to pass true, so the
+     *     tile will not be cleared and immediately be drawn. Otherwise, the
+     *     tile will be cleared and a *beforedraw* event will be fired.
+     * 
      * Returns:
-     * {<OpenLayers.Tile>} An exact clone of this <OpenLayers.Tile>
+     * {Boolean} Whether or not the tile should actually be drawn.
      */
-    clone: function (obj) {
-        if (obj == null) {
-            obj = new OpenLayers.Tile(this.layer, 
-                                      this.position, 
-                                      this.bounds, 
-                                      this.url, 
-                                      this.size);
-        } 
-        
-        // catch any randomly tagged-on properties
-        OpenLayers.Util.applyDefaults(obj, this);
-        
-        return obj;
+    draw: function(deferred) {
+        if (!deferred) {
+            //clear tile's contents and mark as not drawn
+            this.clear();
+        }
+        var draw = this.shouldDraw();
+        if (draw && !deferred) {
+            draw = this.events.triggerEvent("beforedraw") !== false;
+        }
+        return draw;
     },
-
+    
     /**
-     * Method: draw
-     * Clear whatever is currently in the tile, then return whether or not 
-     *     it should actually be re-drawn.
+     * Method: shouldDraw
+     * Return whether or not the tile should actually be (re-)drawn. The only
+     * case where we *wouldn't* want to draw the tile is if the tile is outside
+     * its layer's maxExtent
      * 
      * Returns:
-     * {Boolean} Whether or not the tile should actually be drawn. Note that 
-     *     this is not really the best way of doing things, but such is 
-     *     the way the code has been developed. Subclasses call this and
-     *     depend on the return to know if they should draw or not.
+     * {Boolean} Whether or not the tile should actually be drawn.
      */
-    draw: function() {
-        var maxExtent = this.layer.maxExtent;
-        var withinMaxExtent = (maxExtent &&
-                               this.bounds.intersectsBounds(maxExtent, false));
- 
-        // The only case where we *wouldn't* want to draw the tile is if the 
-        // tile is outside its layer's maxExtent.
-        this.shouldDraw = (withinMaxExtent || this.layer.displayOutsideMaxExtent);
-                
-        //clear tile's contents and mark as not drawn
-        this.clear();
+    shouldDraw: function() {        
+        var withinMaxExtent = false,
+            maxExtent = this.layer.maxExtent;
+        if (maxExtent) {
+            var map = this.layer.map;
+            var worldBounds = map.baseLayer.wrapDateLine && map.getMaxExtent();
+            if (this.bounds.intersectsBounds(maxExtent, {inclusive: false, worldBounds: worldBounds})) {
+                withinMaxExtent = true;
+            }
+        }
         
-        return this.shouldDraw;
+        return withinMaxExtent || this.layer.displayOutsideMaxExtent;
+    },
+    
+    /**
+     * Method: setBounds
+     * Sets the bounds on this instance
+     *
+     * Parameters:
+     * bounds {<OpenLayers.Bounds>}
+     */
+    setBounds: function(bounds) {
+        bounds = bounds.clone();
+        if (this.layer.map.baseLayer.wrapDateLine) {
+            var worldExtent = this.layer.map.getMaxExtent(),
+                tolerance = this.layer.map.getResolution();
+            bounds = bounds.wrapDateLine(worldExtent, {
+                leftTolerance: tolerance,
+                rightTolerance: tolerance
+            });
+        }
+        this.bounds = bounds;
     },
     
     /** 
@@ -208,7 +271,7 @@ OpenLayers.Tile = OpenLayers.Class({
             redraw = true;
         }
 
-        this.bounds = bounds.clone();
+        this.setBounds(bounds);
         this.position = position.clone();
         if (redraw) {
             this.draw();
@@ -218,71 +281,11 @@ OpenLayers.Tile = OpenLayers.Class({
     /** 
      * Method: clear
      * Clear the tile of any bounds/position-related data so that it can 
-     *     be reused in a new location. To be implemented by subclasses.
-     */
-    clear: function() {
-        // to be implemented by subclasses
-    },
-    
-    /**   
-     * Method: getBoundsFromBaseLayer
-     * Take the pixel locations of the corner of the tile, and pass them to 
-     *     the base layer and ask for the location of those pixels, so that 
-     *     displaying tiles over Google works fine.
-     *
-     * Parameters:
-     * position - {<OpenLayers.Pixel>}
-     *
-     * Returns:
-     * bounds - {<OpenLayers.Bounds>} 
-     */
-    getBoundsFromBaseLayer: function(position) {
-        var msg = OpenLayers.i18n('reprojectDeprecated',
-                                              {'layerName':this.layer.name});
-        OpenLayers.Console.warn(msg);
-        var topLeft = this.layer.map.getLonLatFromLayerPx(position); 
-        var bottomRightPx = position.clone();
-        bottomRightPx.x += this.size.w;
-        bottomRightPx.y += this.size.h;
-        var bottomRight = this.layer.map.getLonLatFromLayerPx(bottomRightPx); 
-        // Handle the case where the base layer wraps around the date line.
-        // Google does this, and it breaks WMS servers to request bounds in 
-        // that fashion.  
-        if (topLeft.lon > bottomRight.lon) {
-            if (topLeft.lon < 0) {
-                topLeft.lon = -180 - (topLeft.lon+180);
-            } else {
-                bottomRight.lon = 180+bottomRight.lon+180;
-            }        
-        }
-        var bounds = new OpenLayers.Bounds(topLeft.lon, 
-                                       bottomRight.lat, 
-                                       bottomRight.lon, 
-                                       topLeft.lat);  
-        return bounds;
-    },        
-        
-    /** 
-     * Method: showTile
-     * Show the tile only if it should be drawn.
+     *     be reused in a new location.
      */
-    showTile: function() { 
-        if (this.shouldDraw) {
-            this.show();
-        }
+    clear: function(draw) {
+        // to be extended by subclasses
     },
     
-    /** 
-     * Method: show
-     * Show the tile.  To be implemented by subclasses.
-     */
-    show: function() { },
-    
-    /** 
-     * Method: hide
-     * Hide the tile.  To be implemented by subclasses.
-     */
-    hide: function() { },
-    
     CLASS_NAME: "OpenLayers.Tile"
 });
diff --git a/lib/OpenLayers/Tile/Image.js b/lib/OpenLayers/Tile/Image.js
index 0351c08..50c2548 100644
--- a/lib/OpenLayers/Tile/Image.js
+++ b/lib/OpenLayers/Tile/Image.js
@@ -1,11 +1,12 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Tile.js
+ * @requires OpenLayers/Animation.js
  */
 
 /**
@@ -20,24 +21,31 @@
 OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
 
     /** 
-     * Property: url
+     * APIProperty: url
      * {String} The URL of the image being requested. No default. Filled in by
-     * layer.getURL() function. 
+     * layer.getURL() function. May be modified by loadstart listeners.
      */
     url: null,
     
     /** 
      * Property: imgDiv
-     * {DOMElement} The div element which wraps the image.
+     * {HTMLImageElement} The image for this tile.
      */
     imgDiv: null,
-
+    
     /**
      * Property: frame
      * {DOMElement} The image element is appended to the frame.  Any gutter on
-     * the image will be hidden behind the frame. 
+     * the image will be hidden behind the frame. If no gutter is set,
+     * this will be null.
      */ 
     frame: null, 
+
+    /** 
+     * Property: imageReloadAttempts
+     * {Integer} Attempts to load the image.
+     */
+    imageReloadAttempts: null,
     
     /**
      * Property: layerAlphaHack
@@ -46,29 +54,20 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
     layerAlphaHack: null,
     
     /**
-     * Property: isBackBuffer
-     * {Boolean} Is this tile a back buffer tile?
+     * Property: asyncRequestId
+     * {Integer} ID of an request to see if request is still valid. This is a
+     * number which increments by 1 for each asynchronous request.
      */
-    isBackBuffer: false,
+    asyncRequestId: null,
     
     /**
-     * Property: isFirstDraw
-     * {Boolean} Is this the first time the tile is being drawn?
-     *     This is used to force resetBackBuffer to synchronize
-     *     the backBufferTile with the foreground tile the first time
-     *     the foreground tile loads so that if the user zooms
-     *     before the layer has fully loaded, the backBufferTile for
-     *     tiles that have been loaded can be used.
+     * Property: blankImageUrl
+     * {String} Using a data scheme url is not supported by all browsers, but
+     * we don't care because we either set it as css backgroundImage, or the
+     * image's display style is set to "none" when we use it.
      */
-    isFirstDraw: true,
-        
-    /**
-     * Property: backBufferTile
-     * {<OpenLayers.Tile>} A clone of the tile used to create transition
-     *     effects when the tile is moved or changes resolution.
-     */
-    backBufferTile: null,
-    
+    blankImageUrl: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAQAIBRAA7",
+
     /**
      * APIProperty: maxGetUrlLength
      * {Number} If set, requests that would result in GET urls with more
@@ -77,19 +76,35 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
      * 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.
+     * Older versions of Gecko based browsers (e.g. Firefox < 3.5) and most
+     * Opera versions do not fully support this option. On all browsers,
+     * transition effects are not supported if POST requests are used.
      */
     maxGetUrlLength: null,
+
+    /**
+     * Property: canvasContext
+     * {CanvasRenderingContext2D} A canvas context associated with
+     * the tile image.
+     */
+    canvasContext: null,
     
+    /**
+     * APIProperty: crossOriginKeyword
+     * The value of the crossorigin keyword to use when loading images. This is
+     * only relevant when using <getCanvasContext> for tiles from remote
+     * origins and should be set to either 'anonymous' or 'use-credentials'
+     * for servers that send Access-Control-Allow-Origin headers with their
+     * tiles.
+     */
+    crossOriginKeyword: 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.
-     * 
+     */
+
+    /** 
      * Constructor: OpenLayers.Tile.Image
      * Constructor for a new <OpenLayers.Tile.Image> instance.
      * 
@@ -104,174 +119,64 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
     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();        
+        if (this.maxGetUrlLength != null || this.layer.gutter || this.layerAlphaHack) {
+            // only create frame if it's needed
+            this.frame = document.createElement("div");
+            this.frame.style.position = "absolute";
+            this.frame.style.overflow = "hidden";
+        }
+        if (this.maxGetUrlLength != null) {
+            OpenLayers.Util.extend(this, OpenLayers.Tile.Image.IFrame);
+        }
     },
-
+    
     /** 
      * APIMethod: destroy
      * nullify references to prevent circular references and memory leaks
      */
     destroy: function() {
-        if (this.imgDiv != null)  {
-            this.removeImgDiv();
-        }
-        this.imgDiv = null;
-        if ((this.frame != null) && (this.frame.parentNode == this.layer.div)) { 
-            this.layer.div.removeChild(this.frame); 
-        }
-        this.frame = null; 
-        
-        /* clean up the backBufferTile if it exists */
-        if (this.backBufferTile) {
-            this.backBufferTile.destroy();
-            this.backBufferTile = null;
+        if (this.imgDiv)  {
+            this.clear();
+            this.imgDiv = null;
+            this.frame = null;
         }
-        
-        this.layer.events.unregister("loadend", this, this.resetBackBuffer);
-        
+        // don't handle async requests any more
+        this.asyncRequestId = null;
         OpenLayers.Tile.prototype.destroy.apply(this, arguments);
     },
     
     /**
-     * Method: clone
-     *
-     * Parameters:
-     * obj - {<OpenLayers.Tile.Image>} The tile to be cloned
-     *
-     * Returns:
-     * {<OpenLayers.Tile.Image>} An exact clone of this <OpenLayers.Tile.Image>
-     */
-    clone: function (obj) {
-        if (obj == null) {
-            obj = new OpenLayers.Tile.Image(this.layer, 
-                                            this.position, 
-                                            this.bounds, 
-                                            this.url, 
-                                            this.size);        
-        } 
-        
-        //pick up properties from superclass
-        obj = OpenLayers.Tile.prototype.clone.apply(this, [obj]);
-        
-        //dont want to directly copy the image div
-        obj.imgDiv = null;
-            
-        
-        return obj;
-    },
-    
-    /**
      * Method: draw
      * Check that a tile should be drawn, and draw it.
      * 
      * Returns:
-     * {Boolean} Always returns true.
+     * {Boolean} Was a tile drawn?
      */
     draw: function() {
-        if (this.layer != this.layer.map.baseLayer && this.layer.reproject) {
-            this.bounds = this.getBoundsFromBaseLayer(this.position);
-        }
-        var drawTile = OpenLayers.Tile.prototype.draw.apply(this, arguments);
-        
-        if ((OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS, this.layer.transitionEffect) != -1) || 
-            this.layer.singleTile) {
-            if (drawTile) {
-                //we use a clone of this tile to create a double buffer for visual
-                //continuity.  The backBufferTile is used to create transition
-                //effects while the tile in the grid is repositioned and redrawn
-                if (!this.backBufferTile) {
-                    this.backBufferTile = this.clone();
-                    this.backBufferTile.hide();
-                    // this is important.  It allows the backBuffer to place itself
-                    // appropriately in the DOM.  The Image subclass needs to put
-                    // the backBufferTile behind the main tile so the tiles can
-                    // load over top and display as soon as they are loaded.
-                    this.backBufferTile.isBackBuffer = true;
-                    
-                    // potentially end any transition effects when the tile loads
-                    this.events.register('loadend', this, this.resetBackBuffer);
-                    
-                    // clear transition back buffer tile only after all tiles in
-                    // this layer have loaded to avoid visual glitches
-                    this.layer.events.register("loadend", this, this.resetBackBuffer);
-                }
-                // run any transition effects
-                this.startTransition();
+        var drawn = OpenLayers.Tile.prototype.draw.apply(this, arguments);
+        if (drawn) {
+            // The layer's reproject option is deprecated.
+            if (this.layer != this.layer.map.baseLayer && this.layer.reproject) {
+                // getBoundsFromBaseLayer is defined in deprecated.js.
+                this.bounds = this.getBoundsFromBaseLayer(this.position);
+            }
+            if (this.isLoading) {
+                //if we're already loading, send 'reload' instead of 'loadstart'.
+                this._loadEvent = "reload"; 
             } else {
-                // if we aren't going to draw the tile, then the backBuffer should
-                // be hidden too!
-                if (this.backBufferTile) {
-                    this.backBufferTile.clear();
-                }
+                this.isLoading = true;
+                this._loadEvent = "loadstart";
             }
+            this.positionTile();
+            this.renderTile();
         } else {
-            if (drawTile && this.isFirstDraw) {
-                this.events.register('loadend', this, this.showTile);
-                this.isFirstDraw = false;
-            }   
-        }    
-        
-        if (!drawTile) {
-            return false;
-        }
-        
-        if (this.isLoading) {
-            //if we're already loading, send 'reload' instead of 'loadstart'.
-            this.events.triggerEvent("reload"); 
-        } else {
-            this.isLoading = true;
-            this.events.triggerEvent("loadstart");
-        }
-        
-        return this.renderTile();
-    },
-    
-    /** 
-     * Method: resetBackBuffer
-     * Triggered by two different events, layer loadend, and tile loadend.
-     *     In any of these cases, we check to see if we can hide the 
-     *     backBufferTile yet and update its parameters to match the 
-     *     foreground tile.
-     *
-     * Basic logic:
-     *  - If the backBufferTile hasn't been drawn yet, reset it
-     *  - If layer is still loading, show foreground tile but don't hide
-     *    the backBufferTile yet
-     *  - If layer is done loading, reset backBuffer tile and show 
-     *    foreground tile
-     */
-    resetBackBuffer: function() {
-        this.showTile();
-        if (this.backBufferTile && 
-            (this.isFirstDraw || !this.layer.numLoadingTiles)) {
-            this.isFirstDraw = false;
-            // check to see if the backBufferTile is within the max extents
-            // before rendering it 
-            var maxExtent = this.layer.maxExtent;
-            var withinMaxExtent = (maxExtent &&
-                                   this.bounds.intersectsBounds(maxExtent, false));
-            if (withinMaxExtent) {
-                this.backBufferTile.position = this.position;
-                this.backBufferTile.bounds = this.bounds;
-                this.backBufferTile.size = this.size;
-                this.backBufferTile.imageSize = this.layer.getImageSize(this.bounds) || this.size;
-                this.backBufferTile.imageOffset = this.layer.imageOffset;
-                this.backBufferTile.resolution = this.layer.getResolution();
-                this.backBufferTile.renderTile();
-            }
-
-            this.backBufferTile.hide();
+            this.unload();
         }
+        return drawn;
     },
     
     /**
@@ -280,324 +185,297 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
      *     position it correctly, and set its url.
      */
     renderTile: function() {
+        this.layer.div.appendChild(this.getTile());
         if (this.layer.async) {
-            this.initImgDiv();
-            // 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
-            // the callback 'positionFrame' when the image request returns.
-            this.layer.getURLasync(this.bounds, this, "url", this.positionImage);
+            // Asynchronous image requests call the asynchronous getURL method
+            // on the layer to fetch an image that covers 'this.bounds'.
+            var id = this.asyncRequestId = (this.asyncRequestId || 0) + 1;
+            this.layer.getURLasync(this.bounds, function(url) {
+                if (id == this.asyncRequestId) {
+                    this.url = url;
+                    this.initImage();
+                }
+            }, this);
         } else {
-            // syncronous image requests get the url and position the frame immediately,
-            // and don't wait for an image request to come back.
-          
+            // synchronous image requests get the url immediately.
             this.url = this.layer.getURL(this.bounds);
-
-            this.initImgDiv();
-          
-            // position the frame immediately
-            this.positionImage(); 
+            this.initImage();
         }
-        return true;
     },
 
     /**
-     * Method: positionImage
+     * Method: positionTile
      * Using the properties currenty set on the layer, position the tile correctly.
      * This method is used both by the async and non-async versions of the Tile.Image
      * code.
      */
-     positionImage: function() {
-        // if the this layer doesn't exist at the point the image is
-        // returned, do not attempt to use it for size computation
-        if (this.layer === null) {
-            return;
-        }
-        // position the frame 
-        OpenLayers.Util.modifyDOMElement(this.frame, 
-                                          null, this.position, this.size);   
-
-        var imageSize = this.layer.getImageSize(this.bounds); 
-        if (this.layerAlphaHack) {
-            OpenLayers.Util.modifyAlphaImageDiv(this.imgDiv,
-                    null, null, imageSize, this.url);
-        } else {
-            OpenLayers.Util.modifyDOMElement(this.imgDiv,
-                    null, null, imageSize) ;
-            this.imgDiv.src = this.url;
-        }
+    positionTile: function() {
+        var style = this.getTile().style,
+            size = this.frame ? this.size :
+                                this.layer.getImageSize(this.bounds);
+        style.left = this.position.x + "%";
+        style.top = this.position.y + "%";
+        style.width = size.w + "%";
+        style.height = size.h + "%";
     },
 
     /** 
      * Method: clear
-     *  Clear the tile of any bounds/position-related data so that it can 
-     *   be reused in a new location.
+     * Remove the tile from the DOM, clear it of any image related data so that
+     * it can be reused in a new location.
      */
     clear: function() {
-        if(this.imgDiv) {
-            this.hide();
-            if (OpenLayers.Tile.Image.useBlankTile) { 
-                this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif";
-            }    
+        OpenLayers.Tile.prototype.clear.apply(this, arguments);
+        var img = this.imgDiv;
+        if (img) {
+            OpenLayers.Event.stopObservingElement(img);
+            var tile = this.getTile();
+            if (tile.parentNode === this.layer.div) {
+                this.layer.div.removeChild(tile);
+            }
+            this.setImgSrc();
+            if (this.layerAlphaHack === true) {
+                img.style.filter = "";
+            }
+            OpenLayers.Element.removeClass(img, "olImageLoadError");
         }
+        this.canvasContext = null;
     },
-
+    
     /**
-     * Method: initImgDiv
-     * Creates the imgDiv property on the tile.
+     * Method: getImage
+     * Returns or creates and returns the tile image.
      */
-    initImgDiv: function() {
-        if (this.imgDiv == null) {
-            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);
+    getImage: function() {
+        if (!this.imgDiv) {
+            this.imgDiv = document.createElement("img");
+
+            this.imgDiv.className = "olTileImage";
+            // avoid image gallery menu in IE6
+            this.imgDiv.galleryImg = "no";
+
+            var style = this.imgDiv.style;
+            if (this.frame) {
+                var left = 0, top = 0;
+                if (this.layer.gutter) {
+                    left = this.layer.gutter / this.layer.tileSize.w * 100;
+                    top = this.layer.gutter / this.layer.tileSize.h * 100;
+                }
+                style.left = -left + "%";
+                style.top = -top + "%";
+                style.width = (2 * left + 100) + "%";
+                style.height = (2 * top + 100) + "%";
             }
-
-            // needed for changing to a different server for onload error
-            if (OpenLayers.Util.isArray(this.layer.url)) {
-                this.imgDiv.urls = this.layer.url.slice();
+            style.visibility = "hidden";
+            style.opacity = 0;
+            if (this.layer.opacity < 1) {
+                style.filter = 'alpha(opacity=' +
+                               (this.layer.opacity * 100) +
+                               ')';
             }
-      
-            this.imgDiv.className = 'olTileImage';
-
-            /* 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
-
-            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); 
-
-            if(this.layer.opacity != null) {
-
-                OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, null,
-                                                 null, null, null, 
-                                                 this.layer.opacity);
+            style.position = "absolute";
+            if (this.layerAlphaHack) {
+                // move the image out of sight
+                style.paddingTop = style.height;
+                style.height = "0";
+                style.width = "100%";
+            }
+            if (this.frame) {
+                this.frame.appendChild(this.imgDiv);
             }
-
-            // 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));
         }
-        
-        this.imgDiv.viewRequestID = this.layer.map.viewRequestID;
+
+        return this.imgDiv;
     },
 
     /**
-     * Method: removeImgDiv
-     * Removes the imgDiv from the DOM and stops listening to events on it.
+     * Method: initImage
+     * Creates the content for the frame on the tile.
      */
-    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;
-
-        var child = this.imgDiv.firstChild;
-        //check for children (alphaHack img or IFrame)
-        if (child) {
-            OpenLayers.Event.stopObservingElement(child);
-            this.imgDiv.removeChild(child);
-            delete child;
+    initImage: function() {
+        this.events.triggerEvent(this._loadEvent);
+        var img = this.getImage();
+        if (this.url && img.getAttribute("src") == this.url) {
+            this.onImageLoad();
         } else {
-            // abort any currently loading image
-            this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif";
+            // We need to start with a blank image, to make sure that no
+            // loading image placeholder and no old image is displayed when we
+            // set the display style to "" in onImageLoad, which is called
+            // after the image is loaded, but before it is rendered. So we set
+            // a blank image with a data scheme URI, and register for the load
+            // event (for browsers that support data scheme) and the error
+            // event (for browsers that don't). In the event handler, we set
+            // the final src.
+            var load = OpenLayers.Function.bind(function() {
+                OpenLayers.Event.stopObservingElement(img);
+                OpenLayers.Event.observe(img, "load",
+                    OpenLayers.Function.bind(this.onImageLoad, this)
+                );
+                OpenLayers.Event.observe(img, "error",
+                    OpenLayers.Function.bind(this.onImageError, this)
+                );
+                this.imageReloadAttempts = 0;
+                this.setImgSrc(this.url);
+            }, this);
+            if (img.getAttribute("src") == this.blankImageUrl) {
+                load();
+            } else {
+                OpenLayers.Event.observe(img, "load", load);
+                OpenLayers.Event.observe(img, "error", load);
+                if (this.crossOriginKeyword) {
+                    img.removeAttribute("crossorigin");
+                }
+                img.src = this.blankImageUrl;
+            }
         }
     },
-
+    
     /**
-     * Method: checkImgURL
-     * Make sure that the image that just loaded is the one this tile is meant
-     * to display, since panning/zooming might have changed the tile's URL in
-     * the meantime. If the tile URL did change before the image loaded, set
-     * the imgDiv display to 'none', as either (a) it will be reset to visible
-     * when the new URL loads in the image, or (b) we don't want to display
-     * this tile after all because its new bounds are outside our maxExtent.
-     * 
-     * This function should no longer  be neccesary with the improvements to
-     * Grid.js in OpenLayers 2.3. The lack of a good isEquivilantURL function
-     * caused problems in 2.2, but it's possible that with the improved 
-     * isEquivilant URL function, this might be neccesary at some point.
-     * 
-     * See discussion in the thread at 
-     * http://openlayers.org/pipermail/dev/2007-January/000205.html
+     * Method: setImgSrc
+     * Sets the source for the tile image
+     *
+     * Parameters:
+     * url - {String} or undefined to hide the image
      */
-    checkImgURL: function () {
-        // Sometimes our image will load after it has already been removed
-        // from the map, in which case this check is not needed.  
-        if (this.layer) {
-            var loaded = this.layerAlphaHack ? this.imgDiv.firstChild.src : this.imgDiv.src;
-            if (!OpenLayers.Util.isEquivalentUrl(loaded, this.url)) {
-                this.hide();
+    setImgSrc: function(url) {
+        var img = this.imgDiv;
+        img.style.visibility = 'hidden';
+        img.style.opacity = 0;
+        if (url) {
+            // don't set crossOrigin if the url is a data URL
+            if (this.crossOriginKeyword) {
+                if (url.substr(0, 5) !== 'data:') {
+                    img.setAttribute("crossorigin", this.crossOriginKeyword);
+                } else {
+                    img.removeAttribute("crossorigin");
+                }
             }
+            img.src = url;
         }
     },
     
     /**
-     * Method: startTransition
-     * This method is invoked on tiles that are backBuffers for tiles in the
-     *     grid.  The grid tile is about to be cleared and a new tile source
-     *     loaded.  This is where the transition effect needs to be started
-     *     to provide visual continuity.
+     * Method: getTile
+     * Get the tile's markup.
+     *
+     * Returns:
+     * {DOMElement} The tile's markup
      */
-    startTransition: function() {
-        // backBufferTile has to be valid and ready to use
-        if (!this.backBufferTile || !this.backBufferTile.imgDiv) {
+    getTile: function() {
+        return this.frame ? this.frame : this.getImage();
+    },
+
+    /**
+     * Method: createBackBuffer
+     * Create a backbuffer for this tile. A backbuffer isn't exactly a clone
+     * of the tile's markup, because we want to avoid the reloading of the
+     * image. So we clone the frame, and steal the image from the tile.
+     *
+     * Returns:
+     * {DOMElement} The markup, or undefined if the tile has no image
+     * or if it's currently loading.
+     */
+    createBackBuffer: function() {
+        if (!this.imgDiv || this.isLoading) {
             return;
         }
-
-        // calculate the ratio of change between the current resolution of the
-        // backBufferTile and the layer.  If several animations happen in a
-        // row, then the backBufferTile will scale itself appropriately for
-        // each request.
-        var ratio = 1;
-        if (this.backBufferTile.resolution) {
-            ratio = this.backBufferTile.resolution / this.layer.getResolution();
+        var backBuffer;
+        if (this.frame) {
+            backBuffer = this.frame.cloneNode(false);
+            backBuffer.appendChild(this.imgDiv);
+        } else {
+            backBuffer = this.imgDiv;
         }
-        
-        // if the ratio is not the same as it was last time (i.e. we are
-        // zooming), then we need to adjust the backBuffer tile
-        if (ratio != 1) {
-            if (this.layer.transitionEffect == 'resize') {
-                // In this case, we can just immediately resize the 
-                // backBufferTile.
-                var upperLeft = new OpenLayers.LonLat(
-                    this.backBufferTile.bounds.left, 
-                    this.backBufferTile.bounds.top
-                );
-                var size = new OpenLayers.Size(
-                    this.backBufferTile.size.w * ratio,
-                    this.backBufferTile.size.h * ratio
-                );
-
-                var px = this.layer.map.getLayerPxFromLonLat(upperLeft);
-                OpenLayers.Util.modifyDOMElement(this.backBufferTile.frame, 
-                                                 null, px, size);
-                var imageSize = this.backBufferTile.imageSize;
-                imageSize = new OpenLayers.Size(imageSize.w * ratio, 
-                                                imageSize.h * ratio);
-                var imageOffset = this.backBufferTile.imageOffset;
-                if(imageOffset) {
-                    imageOffset = new OpenLayers.Pixel(
-                        imageOffset.x * ratio, imageOffset.y * ratio
-                    );
-                }
-
-                OpenLayers.Util.modifyDOMElement(
-                    this.backBufferTile.imgDiv, null, imageOffset, imageSize
-                ) ;
+        this.imgDiv = null;
+        return backBuffer;
+    },
 
-                this.backBufferTile.show();
-            }
-        } else {
-            // default effect is just to leave the existing tile
-            // until the new one loads if this is a singleTile and
-            // there was no change in resolution.  Otherwise we
-            // don't bother to show the backBufferTile at all
-            if (this.layer.singleTile) {
-                this.backBufferTile.show();
-            } else {
-                this.backBufferTile.hide();
-            }
+    /**
+     * Method: onImageLoad
+     * Handler for the image onload event
+     */
+    onImageLoad: function() {
+        var img = this.imgDiv;
+        OpenLayers.Event.stopObservingElement(img);
+
+        img.style.visibility = 'inherit';
+        img.style.opacity = this.layer.opacity;
+
+        this.isLoading = false;
+        this.canvasContext = null;
+        this.events.triggerEvent("loadend");
+
+        // IE<7 needs a reflow when the tiles are loaded because of the
+        // percentage based positioning. Otherwise nothing is shown
+        // until the user interacts with the map in some way.
+        if (parseFloat(navigator.appVersion.split("MSIE")[1]) < 7 &&
+                this.layer && this.layer.div) {
+            var span = document.createElement("span");
+            span.style.display = "none";
+            var layerDiv = this.layer.div;
+            layerDiv.appendChild(span);
+            window.setTimeout(function() {
+                span.parentNode === layerDiv && span.parentNode.removeChild(span);
+            }, 0);
         }
 
+        if (this.layerAlphaHack === true) {
+            img.style.filter =
+                "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+                img.src + "', sizingMethod='scale')";
+        }
     },
     
-    /** 
-     * Method: show
-     * Show the tile by showing its frame.
+    /**
+     * Method: onImageError
+     * Handler for the image onerror event
      */
-    show: function() {
-        this.frame.style.display = '';
-        // Force a reflow on gecko based browsers to actually show the element
-        // before continuing execution.
-        if (OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS, 
-                this.layer.transitionEffect) != -1) {
-            if (OpenLayers.IS_GECKO === true) { 
-                this.frame.scrollLeft = this.frame.scrollLeft; 
-            } 
+    onImageError: function() {
+        var img = this.imgDiv;
+        if (img.src != null) {
+            this.imageReloadAttempts++;
+            if (this.imageReloadAttempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS) {
+                this.setImgSrc(this.layer.getURL(this.bounds));
+            } else {
+                OpenLayers.Element.addClass(img, "olImageLoadError");
+                this.events.triggerEvent("loaderror");
+                this.onImageLoad();
+            }
         }
     },
-    
-    /** 
-     * Method: hide
-     * Hide the tile by hiding its frame.
+
+    /**
+     * APIMethod: getCanvasContext
+     * Returns a canvas context associated with the tile image (with
+     * the image drawn on it).
+     * Returns undefined if the browser does not support canvas, if
+     * the tile has no image or if it's currently loading.
+     *
+     * The function returns a canvas context instance but the
+     * underlying canvas is still available in the 'canvas' property:
+     * (code)
+     * var context = tile.getCanvasContext();
+     * if (context) {
+     *     var data = context.canvas.toDataURL('image/jpeg');
+     * }
+     * (end)
+     *
+     * Returns:
+     * {Boolean}
      */
-    hide: function() {
-        this.frame.style.display = 'none';
+    getCanvasContext: function() {
+        if (OpenLayers.CANVAS_SUPPORTED && this.imgDiv && !this.isLoading) {
+            if (!this.canvasContext) {
+                var canvas = document.createElement("canvas");
+                canvas.width = this.size.w;
+                canvas.height = this.size.h;
+                this.canvasContext = canvas.getContext("2d");
+                this.canvasContext.drawImage(this.imgDiv, 0, 0);
+            }
+            return this.canvasContext;
+        }
     },
-    
+
     CLASS_NAME: "OpenLayers.Tile.Image"
-  }
-);
 
-OpenLayers.Tile.Image.useBlankTile = ( 
-    OpenLayers.BROWSER_NAME == "safari" || 
-    OpenLayers.BROWSER_NAME == "opera"); 
+});
diff --git a/lib/OpenLayers/Tile/Image/IFrame.js b/lib/OpenLayers/Tile/Image/IFrame.js
index 7735637..f3e408e 100644
--- a/lib/OpenLayers/Tile/Image/IFrame.js
+++ b/lib/OpenLayers/Tile/Image/IFrame.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 
@@ -14,14 +14,10 @@
  * 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>
+ * configured with <OpenLayers.Tile.Image.maxGetUrlLength> set.
  */
 OpenLayers.Tile.Image.IFrame = {
-    
+
     /**
      * Property: useIFrame
      * {Boolean} true if we are currently using an IFrame to render POST
@@ -30,156 +26,116 @@ OpenLayers.Tile.Image.IFrame = {
     useIFrame: null,
 
     /**
-     * Method: clear
-     * Removes the iframe from DOM (avoids back-button problems).
+     * Method: draw
+     * Set useIFrame in the instance, and operate the image/iframe switch.
+     * Then call Tile.Image.draw.
+     *
+     * Returns:
+     * {Boolean}
      */
-    clear: function() {
-        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);
-        }
-    },
+    draw: function() {
+        var draw = OpenLayers.Tile.Image.prototype.shouldDraw.call(this);
+        if(draw) {
 
-    /**
-     * Method: renderTile
-     */
-     renderTile: function() {
-        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);
-
-            // submit the form (means fetching the image)
-            form.submit();
-            this.imgDiv.removeChild(form);
-            delete form;
-        }
-        return true;
-    },
+            // this.url isn't set to the currect value yet, so we call getURL
+            // on the layer and store the result in a local variable
+            var url = this.layer.getURL(this.bounds);
 
-    /**
-     * Method: initImgDiv
-     * Creates the imgDiv property on the tile.
-     */
-    initImgDiv: function() {
-        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");
-
-                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)';
-                }
-
-                OpenLayers.Util.modifyDOMElement(eventPane, null,
-                    new OpenLayers.Pixel(0,0), this.layer.getImageSize(), "absolute");
+            var usedIFrame = this.useIFrame;
+            this.useIFrame = this.maxGetUrlLength !== null &&
+                             !this.layer.async &&
+                             url.length > this.maxGetUrlLength;
 
-                this.imgDiv = document.createElement("div");
-                this.imgDiv.appendChild(eventPane);
+            var fromIFrame = usedIFrame && !this.useIFrame;
+            var toIFrame = !usedIFrame && this.useIFrame;
 
-                OpenLayers.Util.modifyDOMElement(this.imgDiv, this.id, null,
-                    this.layer.getImageSize(), "relative");
-                this.imgDiv.className = 'olTileImage';
+            if(fromIFrame || toIFrame) {
 
-                this.frame.appendChild(this.imgDiv); 
-                this.layer.div.appendChild(this.frame); 
+                // Switching between GET (image) and POST (iframe).
 
-                if(this.layer.opacity != null) {
+                // We remove the imgDiv (really either an image or an iframe)
+                // from the frame and set it to null to make sure initImage
+                // will call getImage.
 
-                    OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null,
-                                                     null, null, null, null, 
-                                                     this.layer.opacity);
+                if(this.imgDiv && this.imgDiv.parentNode === this.frame) {
+                    this.frame.removeChild(this.imgDiv);
                 }
+                this.imgDiv = null;
 
-                // we need this reference to check back the viewRequestID
-                this.imgDiv.map = this.layer.map;
-            }
-            this.imgDiv.viewRequestID = this.layer.map.viewRequestID;
+                // And if we had an iframe we also remove the event pane.
 
-        } else {
-            OpenLayers.Tile.Image.prototype.initImgDiv.apply(this, arguments);
+                if(fromIFrame) {
+                    this.blankImageUrl = this._blankImageUrl;
+                    this.frame.removeChild(this.frame.firstChild);
+                } else {
+                    this._blankImageUrl = this.blankImageUrl;
+                    this.blankImageUrl = "about:blank";
+                }
+            }
         }
+        return OpenLayers.Tile.Image.prototype.draw.apply(this, arguments);
     },
 
     /**
-     * Method: createIFrame
-     * Create the IFrame which shows the image.
-     *
-     * Returns:
-     * {DOMElement} Iframe
+     * Method: getImage
+     * Creates the content for the frame on the tile.
      */
-    createIFrame: function() {
-        var id = this.id+'_iFrame';
-        var iframe;
-        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.
-            iframe = document.createElement('<iframe name="'+id+'">');
-
-            // IFrames in InternetExplorer are not transparent, if you set the
-            // backgroundColor transparent. This is a workarround to get 
-            // transparent iframes.
-            iframe.style.backgroundColor = '#FFFFFF';
-            iframe.style.filter          = 'chroma(color=#FFFFFF)';
-        }
-        else {
-            iframe = document.createElement('iframe');
-            iframe.style.backgroundColor = 'transparent';
-        
-            // iframe.name needs to be an unique id, otherwise it 
-            // could happen that other iframes are overwritten.
-            iframe.name = id;
-        }
-        iframe.id = id;
-
-        // some special properties to avoid scaling the images and scrollbars 
-        // in the iframe
-        iframe.scrolling             = 'no';
-        iframe.marginWidth           = '0px';
-        iframe.marginHeight          = '0px';
-        iframe.frameBorder           = '0';
-
-        OpenLayers.Util.modifyDOMElement(iframe, id, 
-            new OpenLayers.Pixel(0,0), this.layer.getImageSize(), "absolute");
-
-        //bind a listener to the onload of the iframe 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");
+    getImage: function() {
+        if (this.useIFrame === true) {
+            if (!this.frame.childNodes.length) {
+                var eventPane = document.createElement("div"),
+                    style = eventPane.style;
+                style.position = "absolute";
+                style.width = "100%";
+                style.height = "100%";
+                style.zIndex = 1;
+                style.backgroundImage = "url(" + this._blankImageUrl + ")";
+                this.frame.appendChild(eventPane);
+            }
+
+            var id = this.id + '_iFrame', iframe;
+            if (parseFloat(navigator.appVersion.split("MSIE")[1]) < 9) {
+                // Older IE versions do not set the name attribute of an iFrame 
+                // properly via DOM manipulation, so we need to do it on our own with
+                // this hack.
+                iframe = document.createElement('<iframe name="'+id+'">');
+
+                // IFrames in older IE versions are not transparent, if you set
+                // the backgroundColor transparent. This is a workaround to get 
+                // transparent iframes.
+                iframe.style.backgroundColor = '#FFFFFF';
+                iframe.style.filter          = 'chroma(color=#FFFFFF)';
             }
-        };
-        OpenLayers.Event.observe(iframe, 'load',
-            OpenLayers.Function.bind(onload, this));
+            else {
+                iframe = document.createElement('iframe');
+                iframe.style.backgroundColor = 'transparent';
 
-        return iframe;
+                // iframe.name needs to be an unique id, otherwise it 
+                // could happen that other iframes are overwritten.
+                iframe.name = id;
+            }
+
+            // some special properties to avoid scaling the images and scrollbars 
+            // in the iframe
+            iframe.scrolling      = 'no';
+            iframe.marginWidth    = '0px';
+            iframe.marginHeight   = '0px';
+            iframe.frameBorder    = '0';
+
+            iframe.style.position = "absolute";
+            iframe.style.width    = "100%";
+            iframe.style.height   = "100%";
+
+            if (this.layer.opacity < 1) {
+                OpenLayers.Util.modifyDOMElement(iframe, null, null, null,
+                    null, null, null, this.layer.opacity);
+            }
+            this.frame.appendChild(iframe);
+            this.imgDiv = iframe;
+            return iframe;
+        } else {
+            return OpenLayers.Tile.Image.prototype.getImage.apply(this, arguments);
+        }
     },
     
     /**
@@ -198,20 +154,16 @@ OpenLayers.Tile.Image.IFrame = {
         var cacheId = this.layer.params["_OLSALT"];
         cacheId = (cacheId ? cacheId + "_" : "") + this.bounds.toBBOX();
         form.action = OpenLayers.Util.urlAppend(this.layer.url, cacheId);
-
-        // insert the iframe, which has been removed to avoid back-button
-        // problems
-        this.imgDiv.insertBefore(this.createIFrame(), this.imgDiv.firstChild);
-
-        form.target = this.id+'_iFrame';
+        form.target = this.id + '_iFrame';
 
         // adding all parameters in layer params as hidden fields to the html
         // form element
-        var imageSize = this.layer.getImageSize();
-        var params = OpenLayers.Util.getParameters(this.url);
+        var imageSize = this.layer.getImageSize(),
+            params = OpenLayers.Util.getParameters(this.url),
+            field;
             
         for(var par in params) {
-            var field = document.createElement('input');
+            field = document.createElement('input');
             field.type  = 'hidden';
             field.name  = par;
             field.value = params[par];
@@ -219,6 +171,59 @@ OpenLayers.Tile.Image.IFrame = {
         }   
 
         return form;
+    },
+
+    /**
+     * Method: setImgSrc
+     * Sets the source for the tile image
+     *
+     * Parameters:
+     * url - {String}
+     */
+    setImgSrc: function(url) {
+        if (this.useIFrame === true) {
+            if (url) {
+                var form = this.createRequestForm();
+                this.frame.appendChild(form);
+                form.submit();
+                this.frame.removeChild(form);
+            } else if (this.imgDiv.parentNode === this.frame) {
+                // we don't reuse iframes to avoid caching issues
+                this.frame.removeChild(this.imgDiv);
+                this.imgDiv = null;
+            }
+        } else {
+            OpenLayers.Tile.Image.prototype.setImgSrc.apply(this, arguments);
+        }
+    },
+    
+    /**
+     * Method: onImageLoad
+     * Handler for the image onload event
+     */
+    onImageLoad: function() {
+        //TODO de-uglify opacity handling
+        OpenLayers.Tile.Image.prototype.onImageLoad.apply(this, arguments);
+        if (this.useIFrame === true) {
+            this.imgDiv.style.opacity = 1;
+            this.frame.style.opacity = this.layer.opacity;
+        }
+    },
+
+    /**
+     * Method: createBackBuffer
+     * Override createBackBuffer to do nothing when we use an iframe. Moving an
+     * iframe from one element to another makes it necessary to reload the iframe
+     * because its content is lost. So we just give up.
+     *
+     * Returns:
+     * {DOMElement}
+     */
+    createBackBuffer: function() {
+        var backBuffer;
+        if(this.useIFrame === false) {
+            backBuffer = OpenLayers.Tile.Image.prototype.createBackBuffer.call(this);
+        }
+        return backBuffer;
     }
 };
-
diff --git a/lib/OpenLayers/Tile/UTFGrid.js b/lib/OpenLayers/Tile/UTFGrid.js
new file mode 100644
index 0000000..1b3708c
--- /dev/null
+++ b/lib/OpenLayers/Tile/UTFGrid.js
@@ -0,0 +1,251 @@
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+
+/**
+ * @requires OpenLayers/Tile.js
+ * @requires OpenLayers/Format/JSON.js
+ */
+
+/**
+ * Class: OpenLayers.Tile.UTFGrid
+ * Instances of OpenLayers.Tile.UTFGrid are used to manage 
+ * UTFGrids. This is an unusual tile type in that it doesn't have a
+ * rendered image; only a 'hit grid' that can be used to 
+ * look up feature attributes.
+ *
+ * See the <OpenLayers.Tile.UTFGrid> constructor for details on constructing a
+ * new instance.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Tile>
+ */
+OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
+
+    /** 
+     * Property: url
+     * {String}
+     * The URL of the UTFGrid file being requested. Provided by the <getURL>
+     *     method. 
+     */
+    url: null,
+    
+    /**
+     * Property: utfgridResolution
+     * {Number}
+     * Ratio of the pixel width to the width of a UTFGrid data point.  If an 
+     *     entry in the grid represents a 4x4 block of pixels, the 
+     *     utfgridResolution would be 4.  Default is 2.
+     */
+    utfgridResolution: 2,
+    
+    /** 
+     * Property: json
+     * {Object}
+     * Stores the parsed JSON tile data structure. 
+     */
+    json: null,
+    
+    /** 
+     * Property: format
+     * {OpenLayers.Format.JSON}
+     * Parser instance used to parse JSON for cross browser support.  The native
+     *     JSON.parse method will be used where available (all except IE<8).
+     */
+    format: null,
+
+    /** 
+     * Constructor: OpenLayers.Tile.UTFGrid
+     * Constructor for a new <OpenLayers.Tile.UTFGrid> instance.
+     * 
+     * Parameters:
+     * layer - {<OpenLayers.Layer>} layer that the tile will go in.
+     * position - {<OpenLayers.Pixel>}
+     * bounds - {<OpenLayers.Bounds>}
+     * url - {<String>} Deprecated. Remove me in 3.0.
+     * size - {<OpenLayers.Size>}
+     * options - {Object}
+     */
+
+    /** 
+     * APIMethod: destroy
+     * Clean up.
+     */
+    destroy: function() {
+        this.clear();
+        OpenLayers.Tile.prototype.destroy.apply(this, arguments);
+    },
+    
+    /**
+     * Method: draw
+     * Check that a tile should be drawn, and draw it.
+     * In the case of UTFGrids, "drawing" it means fetching and
+     * parsing the json. 
+     * 
+     * Returns:
+     * {Boolean} Was a tile drawn?
+     */
+    draw: function() {
+        var drawn = OpenLayers.Tile.prototype.draw.apply(this, arguments);
+        if (drawn) {
+            if (this.isLoading) {
+                this.abortLoading();
+                //if we're already loading, send 'reload' instead of 'loadstart'.
+                this.events.triggerEvent("reload"); 
+            } else {
+                this.isLoading = true;
+                this.events.triggerEvent("loadstart");
+            }
+            this.url = this.layer.getURL(this.bounds);
+
+            if (this.layer.useJSONP) {
+                // Use JSONP method to avoid xbrowser policy
+                var ols = new OpenLayers.Protocol.Script({
+                    url: this.url,
+                    callback: function(response) {
+                        this.isLoading = false;
+                        this.events.triggerEvent("loadend");
+                        this.json = response.data;
+                    },
+                    scope: this
+                });
+                ols.read();
+                this.request = ols;
+            } else {
+                // Use standard XHR
+                this.request = OpenLayers.Request.GET({
+                    url: this.url,
+                    callback: function(response) {
+                        this.isLoading = false;
+                        this.events.triggerEvent("loadend");
+                        if (response.status === 200) {
+                            this.parseData(response.responseText);
+                        }
+                    },
+                    scope: this
+                });
+            }
+        } else {
+            this.unload();
+        }
+        return drawn;
+    },
+    
+    /**
+     * Method: abortLoading
+     * Cancel a pending request.
+     */
+    abortLoading: function() {
+        if (this.request) {
+            this.request.abort();
+            delete this.request;
+        }
+        this.isLoading = false;
+    },
+    
+    /**
+     * Method: getFeatureInfo
+     * Get feature information associated with a pixel offset.  If the pixel
+     *     offset corresponds to a feature, the returned object will have id
+     *     and data properties.  Otherwise, null will be returned.
+     *     
+     *
+     * Parameters:
+     * i - {Number} X-axis pixel offset (from top left of tile)
+     * j - {Number} Y-axis pixel offset (from top left of tile)
+     *
+     * Returns:
+     * {Object} Object with feature id and data properties corresponding to the 
+     *     given pixel offset.
+     */
+    getFeatureInfo: function(i, j) {
+        var info = null;
+        if (this.json) {
+            var id = this.getFeatureId(i, j);
+            if (id !== null) {
+                info = {id: id, data: this.json.data[id]};
+            }
+        }
+        return info;
+    },
+    
+    /**
+     * Method: getFeatureId
+     * Get the identifier for the feature associated with a pixel offset.
+     *
+     * Parameters:
+     * i - {Number} X-axis pixel offset (from top left of tile)
+     * j - {Number} Y-axis pixel offset (from top left of tile)
+     *
+     * Returns:
+     * {Object} The feature identifier corresponding to the given pixel offset.
+     *     Returns null if pixel doesn't correspond to a feature.
+     */
+    getFeatureId: function(i, j) {
+        var id = null;
+        if (this.json) {
+            var resolution = this.utfgridResolution;
+            var row = Math.floor(j / resolution);
+            var col = Math.floor(i / resolution);
+            var charCode = this.json.grid[row].charCodeAt(col);
+            var index = this.indexFromCharCode(charCode);
+            var keys = this.json.keys;
+            if (!isNaN(index) && (index in keys)) {
+                id = keys[index];
+            }
+        }
+        return id;
+    },
+    
+    /**
+     * Method: indexFromCharCode
+     * Given a character code for one of the UTFGrid "grid" characters, 
+     *     resolve the integer index for the feature id in the UTFGrid "keys"
+     *     array.
+     *
+     * Parameters:
+     * charCode - {Integer}
+     *
+     * Returns:
+     * {Integer} Index for the feature id from the keys array.
+     */
+    indexFromCharCode: function(charCode) {
+        if (charCode >= 93) {
+            charCode--;
+        }
+        if (charCode >= 35) {
+            charCode --;
+        }
+        return charCode - 32;
+    },
+    
+    /**
+     * Method: parseData
+     * Parse the JSON from a request
+     *
+     * Parameters:
+     * str - {String} UTFGrid as a JSON string. 
+     * 
+     * Returns:
+     * {Object} parsed javascript data
+     */
+    parseData: function(str) {
+        if (!this.format) {
+            this.format = new OpenLayers.Format.JSON();
+        }
+        this.json = this.format.read(str);
+    },
+    
+    /** 
+     * Method: clear
+     * Delete data stored with this tile.
+     */
+    clear: function() {
+        this.json = null;
+    },
+    
+    CLASS_NAME: "OpenLayers.Tile.UTFGrid"
+
+});
diff --git a/lib/OpenLayers/Tile/WFS.js b/lib/OpenLayers/Tile/WFS.js
deleted file mode 100644
index d892a08..0000000
--- a/lib/OpenLayers/Tile/WFS.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Copyright (c) 2006-2011 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/Tile.js
- * @requires OpenLayers/Request/XMLHttpRequest.js
- */
-
-/**
- * Class: OpenLayers.Tile.WFS
- * Instances of OpenLayers.Tile.WFS are used to manage the image tiles
- * used by various layers.  Create a new image tile with the
- * <OpenLayers.Tile.WFS> constructor.
- *
- * Inherits from:
- *  - <OpenLayers.Tile>
- */
-OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, {
-
-    /** 
-     * Property: features 
-     * {Array(<OpenLayers.Feature>)} list of features in this tile 
-     */
-    features: null,
-
-    /** 
-     * Property: url 
-     * {String} 
-     */
-    url: null,
-    
-    /** 
-     * Property: request 
-     * {<OpenLayers.Request.XMLHttpRequest>} 
-     */ 
-    request: null,     
-    
-    /** TBD 3.0 - reorder the parameters to the init function to put URL 
-     *             as last, so we can continue to call tile.initialize() 
-     *             without changing the arguments. 
-     * 
-     * Constructor: OpenLayers.Tile.WFS
-     * Constructor for a new <OpenLayers.Tile.WFS> instance.
-     * 
-     * Parameters:
-     * layer - {<OpenLayers.Layer>} layer that the tile will go in.
-     * position - {<OpenLayers.Pixel>}
-     * bounds - {<OpenLayers.Bounds>}
-     * url - {<String>}
-     * size - {<OpenLayers.Size>}
-     */   
-    initialize: function(layer, position, bounds, url, size) {
-        OpenLayers.Tile.prototype.initialize.apply(this, arguments);
-        this.url = url;        
-        this.features = [];
-    },
-
-    /** 
-     * APIMethod: destroy
-     * nullify references to prevent circular references and memory leaks
-     */
-    destroy: function() {
-        OpenLayers.Tile.prototype.destroy.apply(this, arguments);
-        this.destroyAllFeatures();
-        this.features = null;
-        this.url = null;
-        if(this.request) {
-            this.request.abort();
-            //this.request.destroy();
-            this.request = null;
-        }
-    },
-
-    /** 
-     * Method: clear
-     *  Clear the tile of any bounds/position-related data so that it can 
-     *   be reused in a new location.
-     */
-    clear: function() {
-        this.destroyAllFeatures();
-    },
-    
-    /**
-     * Method: draw
-     * Check that a tile should be drawn, and load features for it.
-     */
-    draw:function() {
-        if (OpenLayers.Tile.prototype.draw.apply(this, arguments)) {
-            if (this.isLoading) {
-                //if already loading, send 'reload' instead of 'loadstart'.
-                this.events.triggerEvent("reload"); 
-            } else {
-                this.isLoading = true;
-                this.events.triggerEvent("loadstart");
-            }
-            this.loadFeaturesForRegion(this.requestSuccess);
-        }
-    },
-
-    /** 
-    * Method: loadFeaturesForRegion
-    * Abort any pending requests and issue another request for data. 
-    *
-    * Input are function pointers for what to do on success and failure.
-    *
-    * Parameters:
-    * success - {function}
-    * failure - {function}
-    */
-    loadFeaturesForRegion:function(success, failure) {
-        if(this.request) {
-            this.request.abort();
-        }
-        this.request = OpenLayers.Request.GET({
-            url: this.url,
-            success: success,
-            failure: failure,
-            scope: this
-        });
-    },
-    
-    /**
-    * Method: requestSuccess
-    * Called on return from request succcess. Adds results via 
-    * layer.addFeatures in vector mode, addResults otherwise. 
-    *
-    * Parameters:
-    * request - {<OpenLayers.Request.XMLHttpRequest>}
-    */
-    requestSuccess:function(request) {
-        if (this.features) {
-            var doc = request.responseXML;
-            if (!doc || !doc.documentElement) {
-                doc = request.responseText; 
-            }
-            if (this.layer.vectorMode) {
-                this.layer.addFeatures(this.layer.formatObject.read(doc));
-            } else {
-                var xml = new OpenLayers.Format.XML();
-                if (typeof doc == "string") {
-                    doc = xml.read(doc);
-                }
-                var resultFeatures = xml.getElementsByTagNameNS(
-                    doc, "http://www.opengis.net/gml", "featureMember"
-                );
-                this.addResults(resultFeatures);
-            }
-        }
-        if (this.events) {
-            this.events.triggerEvent("loadend"); 
-        }
-
-        //request produced with success, we can delete the request object.
-        //this.request.destroy();
-        this.request = null;
-    },
-
-    /**
-     * Method: addResults
-     * Construct new feature via layer featureClass constructor, and add to
-     * this.features.
-     * 
-     * Parameters:
-     * results - {Object}
-     */
-    addResults: function(results) {
-        for (var i=0; i < results.length; i++) {
-            var feature = new this.layer.featureClass(this.layer, 
-                                                      results[i]);
-            this.features.push(feature);
-        }
-    },
-
-
-    /** 
-     * Method: destroyAllFeatures
-     * Iterate through and call destroy() on each feature, removing it from
-     *   the local array
-     */
-    destroyAllFeatures: function() {
-        while(this.features.length > 0) {
-            var feature = this.features.shift();
-            feature.destroy();
-        }
-    },
-
-    CLASS_NAME: "OpenLayers.Tile.WFS"
-  }
-);
diff --git a/lib/OpenLayers/Tween.js b/lib/OpenLayers/Tween.js
index 5b16b03..4e50438 100644
--- a/lib/OpenLayers/Tween.js
+++ b/lib/OpenLayers/Tween.js
@@ -1,11 +1,11 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/BaseTypes/Class.js
- * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Animation.js
  */
 
 /**
@@ -14,12 +14,6 @@
 OpenLayers.Tween = OpenLayers.Class({
     
     /**
-     * Constant: INTERVAL
-     * {int} Interval in milliseconds between 2 steps
-     */
-    INTERVAL: 10,
-    
-    /**
      * APIProperty: easing
      * {<OpenLayers.Easing>(Function)} Easing equation used for the animation
      *     Defaultly set to OpenLayers.Easing.Expo.easeOut
@@ -59,10 +53,10 @@ OpenLayers.Tween = OpenLayers.Class({
     time: null,
     
     /**
-     * Property: interval
-     * {int} Interval id returned by window.setInterval
+     * Property: animationId
+     * {int} Loop id returned by OpenLayers.Animation.start
      */
-    interval: null,
+    animationId: null,
     
     /**
      * Property: playing
@@ -98,15 +92,14 @@ OpenLayers.Tween = OpenLayers.Class({
         this.duration = duration;
         this.callbacks = options.callbacks;
         this.time = 0;
-        if (this.interval) {
-            window.clearInterval(this.interval);
-            this.interval = null;
-        }
+        OpenLayers.Animation.stop(this.animationId);
+        this.animationId = null;
         if (this.callbacks && this.callbacks.start) {
             this.callbacks.start.call(this, this.begin);
         }
-        this.interval = window.setInterval(
-            OpenLayers.Function.bind(this.play, this), this.INTERVAL);
+        this.animationId = OpenLayers.Animation.start(
+            OpenLayers.Function.bind(this.play, this)
+        );
     },
     
     /**
@@ -122,8 +115,8 @@ OpenLayers.Tween = OpenLayers.Class({
         if (this.callbacks && this.callbacks.done) {
             this.callbacks.done.call(this, this.finish);
         }
-        window.clearInterval(this.interval);
-        this.interval = null;
+        OpenLayers.Animation.stop(this.animationId);
+        this.animationId = null;
         this.playing = false;
     },
     
@@ -137,9 +130,9 @@ OpenLayers.Tween = OpenLayers.Class({
             var b = this.begin[i];
             var f = this.finish[i];
             if (b == null || f == null || isNaN(b) || isNaN(f)) {
-                OpenLayers.Console.error('invalid value for Tween');
+                throw new TypeError('invalid value for Tween');
             }
-            
+
             var c = f - b;
             value[i] = this.easing.apply(this, [this.time, b, c, this.duration]);
         }
@@ -186,6 +179,9 @@ OpenLayers.Easing.Linear = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeIn: function(t, b, c, d) {
         return c*t/d + b;
@@ -199,6 +195,9 @@ OpenLayers.Easing.Linear = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeOut: function(t, b, c, d) {
         return c*t/d + b;
@@ -212,6 +211,9 @@ OpenLayers.Easing.Linear = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeInOut: function(t, b, c, d) {
         return c*t/d + b;
@@ -233,6 +235,9 @@ OpenLayers.Easing.Expo = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeIn: function(t, b, c, d) {
         return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
@@ -246,6 +251,9 @@ OpenLayers.Easing.Expo = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeOut: function(t, b, c, d) {
         return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
@@ -259,6 +267,9 @@ OpenLayers.Easing.Expo = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeInOut: function(t, b, c, d) {
         if (t==0) return b;
@@ -283,6 +294,9 @@ OpenLayers.Easing.Quad = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeIn: function(t, b, c, d) {
         return c*(t/=d)*t + b;
@@ -296,6 +310,9 @@ OpenLayers.Easing.Quad = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeOut: function(t, b, c, d) {
         return -c *(t/=d)*(t-2) + b;
@@ -309,6 +326,9 @@ OpenLayers.Easing.Quad = {
      * b - {Float} beginning position
      * c - {Float} total change
      * d - {Float} duration of the transition
+     *
+     * Returns:
+     * {Float}
      */
     easeInOut: function(t, b, c, d) {
         if ((t/=d/2) < 1) return c/2*t*t + b;
diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js
index 6d7681b..8e326a3 100644
--- a/lib/OpenLayers/Util.js
+++ b/lib/OpenLayers/Util.js
@@ -1,6 +1,6 @@
-/* Copyright (c) 2006-2011 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
+/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
  * full text of the license. */
 
 /**
@@ -10,7 +10,6 @@
  * @requires OpenLayers/BaseTypes/LonLat.js
  * @requires OpenLayers/BaseTypes/Pixel.js
  * @requires OpenLayers/BaseTypes/Size.js
- * @requires OpenLayers/Console.js
  * @requires OpenLayers/Lang.js
  */
 
@@ -25,8 +24,9 @@ OpenLayers.Util = OpenLayers.Util || {};
  *
  * Parameters:
  * e - {String or DOMElement or Window}
- * Return:
- * {Array(DOMElement)}
+ *
+ * Returns:
+ * {Array(DOMElement) or DOMElement}
  */
 OpenLayers.Util.getElement = function() {
     var elements = [];
@@ -67,7 +67,7 @@ OpenLayers.Util.isElement = function(o) {
  * Parameters:
  * a - {Object} the object test.
  * 
- * Returns
+ * Returns:
  * {Boolean} true if the object is an array.
  */
 OpenLayers.Util.isArray = function(a) {
@@ -90,7 +90,7 @@ if(typeof window.$  === "undefined") {
  * array - {Array}
  * item - {Object}
  * 
- * Return
+ * Returns:
  * {Array} A reference to the array
  */
 OpenLayers.Util.removeItem = function(array, item) {
@@ -103,23 +103,6 @@ OpenLayers.Util.removeItem = function(array, item) {
     return array;
 };
 
-/**
- * Function: clearArray
- * *Deprecated*. This function will disappear in 3.0.
- * Please use "array.length = 0" instead.
- * 
- * Parameters:
- * array - {Array}
- */
-OpenLayers.Util.clearArray = function(array) {
-    OpenLayers.Console.warn(
-        OpenLayers.i18n(
-            "methodDeprecated", {'newMethod': 'array = []'}
-        )
-    );
-    array.length = 0;
-};
-
 /** 
  * Function: indexOf
  * Seems to exist already in FF, but not in MOZ.
@@ -157,8 +140,12 @@ OpenLayers.Util.indexOf = function(array, obj) {
  * Parameters:
  * element - {DOMElement} DOM element to modify.
  * id - {String} The element id attribute to set.
- * px - {<OpenLayers.Pixel>} The left and top style position.
- * sz - {<OpenLayers.Size>}  The width and height style attributes.
+ * px - {<OpenLayers.Pixel>|Object} The element left and top position,
+ *                                  OpenLayers.Pixel or an object with
+ *                                  a 'x' and 'y' properties.
+ * sz - {<OpenLayers.Size>|Object} The element width and height,
+ *                                 OpenLayers.Size or an object with a
+ *                                 'w' and 'h' properties.
  * position - {String}       The position attribute.  eg: absolute, 
  *                           relative, etc.
  * border - {String}         The style.border attribute.  eg:
@@ -209,8 +196,12 @@ OpenLayers.Util.modifyDOMElement = function(element, id, px, sz, position,
  * id - {String} An identifier for this element.  If no id is
  *               passed an identifier will be created 
  *               automatically.
- * px - {<OpenLayers.Pixel>} The element left and top position. 
- * sz - {<OpenLayers.Size>} The element width and height.
+ * px - {<OpenLayers.Pixel>|Object} The element left and top position,
+ *                                  OpenLayers.Pixel or an object with
+ *                                  a 'x' and 'y' properties.
+ * sz - {<OpenLayers.Size>|Object} The element width and height,
+ *                                 OpenLayers.Size or an object with a
+ *                                 'w' and 'h' properties.
  * imgURL - {String} A url pointing to an image to use as a 
  *                   background image.
  * position - {String} The style.position value. eg: absolute,
@@ -252,8 +243,12 @@ OpenLayers.Util.createDiv = function(id, px, sz, imgURL, position,
  * Parameters:
  * id - {String} The id field for the img.  If none assigned one will be
  *               automatically generated.
- * px - {<OpenLayers.Pixel>} The left and top positions.
- * sz - {<OpenLayers.Size>} The style.width and style.height values.
+ * px - {<OpenLayers.Pixel>|Object} The element left and top position,
+ *                                  OpenLayers.Pixel or an object with
+ *                                  a 'x' and 'y' properties.
+ * sz - {<OpenLayers.Size>|Object} The element width and height,
+ *                                 OpenLayers.Size or an object with a
+ *                                 'w' and 'h' properties.
  * imgURL - {String} The url to use as the image source.
  * position - {String} The style.position value.
  * border - {String} The border to place around the image.
@@ -279,13 +274,14 @@ OpenLayers.Util.createImage = function(id, px, sz, imgURL, position, border,
     OpenLayers.Util.modifyDOMElement(image, id, px, sz, position, 
                                      border, null, opacity);
 
-    if(delayDisplay) {
+    if (delayDisplay) {
         image.style.display = "none";
-        OpenLayers.Event.observe(image, "load", 
-            OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, image));
-        OpenLayers.Event.observe(image, "error", 
-            OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, image));
-        
+        function display() {
+            image.style.display = "";
+            OpenLayers.Event.stopObservingElement(image);
+        }
+        OpenLayers.Event.observe(image, "load", display);
+        OpenLayers.Event.observe(image, "error", display);
     }
     
     //set special properties
@@ -294,61 +290,11 @@ OpenLayers.Util.createImage = function(id, px, sz, imgURL, position, border,
     if (imgURL) {
         image.src = imgURL;
     }
-
-
         
     return image;
 };
 
 /**
- * Function: setOpacity
- * *Deprecated*.  This function has been deprecated. Instead, please use 
- *     <OpenLayers.Util.modifyDOMElement> 
- *     or 
- *     <OpenLayers.Util.modifyAlphaImageDiv>
- * 
- * Set the opacity of a DOM Element
- *     Note that for this function to work in IE, elements must "have layout"
- *     according to:
- *     http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/haslayout.asp
- *
- * Parameters:
- * element - {DOMElement} Set the opacity on this DOM element
- * opacity - {Float} Opacity value (0.0 - 1.0)
- */
-OpenLayers.Util.setOpacity = function(element, opacity) {
-    OpenLayers.Util.modifyDOMElement(element, null, null, null,
-                                     null, null, null, opacity);
-};
-
-/**
- * Function: onImageLoad
- * Bound to image load events.  For all images created with <createImage> or
- *     <createAlphaImageDiv>, this function will be bound to the load event.
- */
-OpenLayers.Util.onImageLoad = function() {
-    // The complex check here is to solve issues described in #480.
-    // Every time a map view changes, it increments the 'viewRequestID' 
-    // property. As the requests for the images for the new map view are sent
-    // out, they are tagged with this unique viewRequestID. 
-    // 
-    // If an image has no viewRequestID property set, we display it regardless, 
-    // but if it does have a viewRequestID property, we check that it matches 
-    // the viewRequestID set on the map.
-    // 
-    // If the viewRequestID on the map has changed, that means that the user
-    // has changed the map view since this specific request was sent out, and
-    // therefore this tile does not need to be displayed (so we do not execute
-    // this code that turns its display on).
-    //
-    if (!this.viewRequestID ||
-        (this.map && this.viewRequestID == this.map.viewRequestID)) { 
-        this.style.display = "";  
-    }
-    OpenLayers.Element.removeClass(this, "olImageLoadError");
-};
-
-/**
  * Property: IMAGE_RELOAD_ATTEMPTS
  * {Integer} How many times should we try to reload an image before giving up?
  *           Default is 0
@@ -356,38 +302,6 @@ OpenLayers.Util.onImageLoad = function() {
 OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0;
 
 /**
- * Function: onImageLoadError 
- */
-OpenLayers.Util.onImageLoadError = function() {
-    this._attempts = (this._attempts) ? (this._attempts + 1) : 1;
-    if (this._attempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS) {
-        var urls = this.urls;
-        if (urls && OpenLayers.Util.isArray(urls) && urls.length > 1){
-            var src = this.src.toString();
-            var current_url, k;
-            for (k = 0; current_url = urls[k]; k++){
-                if(src.indexOf(current_url) != -1){
-                    break;
-                }
-            }
-            var guess = Math.floor(urls.length * Math.random());
-            var new_url = urls[guess];
-            k = 0;
-            while(new_url == current_url && k++ < 4){
-                guess = Math.floor(urls.length * Math.random());
-                new_url = urls[guess];
-            }
-            this.src = src.replace(current_url, new_url);
-        } else {
-            this.src = this.src;
-        }
-    } else {
-        OpenLayers.Element.addClass(this, "olImageLoadError");
-    }
-    this.style.display = "";
-};
-
-/**
  * Property: alphaHackNeeded
  * {Boolean} true if the png alpha hack is necessary and possible, false otherwise.
  */
@@ -429,8 +343,10 @@ OpenLayers.Util.alphaHack = function() {
  * Parameters:
  * div - {DOMElement} Div containing Alpha-adjusted Image
  * id - {String}
- * px - {<OpenLayers.Pixel>}
- * sz - {<OpenLayers.Size>}
+ * px - {<OpenLayers.Pixel>|Object} OpenLayers.Pixel or an object with
+ *                                  a 'x' and 'y' properties.
+ * sz - {<OpenLayers.Size>|Object} OpenLayers.Size or an object with
+ *                                 a 'w' and 'h' properties.
  * imgURL - {String}
  * position - {String}
  * border - {String}
@@ -477,8 +393,10 @@ OpenLayers.Util.modifyAlphaImageDiv = function(div, id, px, sz, imgURL,
  * 
  * Parameters:
  * id - {String}
- * px - {<OpenLayers.Pixel>}
- * sz - {<OpenLayers.Size>}
+ * px - {<OpenLayers.Pixel>|Object} OpenLayers.Pixel or an object with
+ *                                  a 'x' and 'y' properties.
+ * sz - {<OpenLayers.Size>|Object} OpenLayers.Size or an object with
+ *                                 a 'w' and 'h' properties.
  * imgURL - {String}
  * position - {String}
  * border - {String}
@@ -497,17 +415,10 @@ OpenLayers.Util.createAlphaImageDiv = function(id, px, sz, imgURL,
     
     var div = OpenLayers.Util.createDiv();
     var img = OpenLayers.Util.createImage(null, null, null, null, null, null, 
-                                          null, false);
+                                          null, delayDisplay);
+    img.className = "olAlphaImg";
     div.appendChild(img);
 
-    if (delayDisplay) {
-        img.style.display = "none";
-        OpenLayers.Event.observe(img, "load",
-            OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, div));
-        OpenLayers.Event.observe(img, "error",
-            OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, div));
-    }
-
     OpenLayers.Util.modifyAlphaImageDiv(div, id, px, sz, imgURL, position, 
                                         border, sizing, opacity);
     
@@ -648,12 +559,6 @@ OpenLayers.Util.urlAppend = function(url, paramStr) {
     return newUrl;
 };
 
-/**
- * Property: ImgPath
- * {String} Default is ''.
- */
-OpenLayers.ImgPath = '';
-
 /** 
  * Function: getImagesLocation
  * 
@@ -664,6 +569,16 @@ OpenLayers.Util.getImagesLocation = function() {
     return OpenLayers.ImgPath || (OpenLayers._getScriptLocation() + "img/");
 };
 
+/** 
+ * Function: getImageLocation
+ * 
+ * Returns:
+ * {String} The fully formatted location string for a specified image
+ */
+OpenLayers.Util.getImageLocation = function(image) {
+    return OpenLayers.Util.getImagesLocation() + image;
+};
+
 
 /** 
  * Function: Try
@@ -999,27 +914,6 @@ OpenLayers.Util.getParameters = function(url) {
 };
 
 /**
- * Function: getArgs
- * *Deprecated*.  Will be removed in 3.0.  Please use instead
- *     <OpenLayers.Util.getParameters>
- * 
- * Parameters:
- * url - {String} Optional url used to extract the query string.
- *                If null, query string is taken from page location.
- * 
- * Returns:
- * {Object} An object of key/value pairs from the query string.
- */
-OpenLayers.Util.getArgs = function(url) {
-    OpenLayers.Console.warn(
-        OpenLayers.i18n(
-            "methodDeprecated", {'newMethod': 'OpenLayers.Util.getParameters'}
-        )
-    );
-    return OpenLayers.Util.getParameters(url);
-};
-
-/**
  * Property: lastSeqID
  * {Integer} The ever-incrementing count variable.
  *           Used for generating unique ids.
@@ -1033,7 +927,7 @@ OpenLayers.Util.lastSeqID = 0;
  *     prefix (defaults to "id_") appended with the counter value.
  * 
  * Parameters:
- * prefix {String} Optionsal string to prefix unique id. Default is "id_".
+ * prefix - {String} Optional string to prefix unique id. Default is "id_".
  * 
  * Returns:
  * {String} A unique id string, built on the passed in prefix.
@@ -1224,22 +1118,6 @@ OpenLayers.Util.getScaleFromResolution = function (resolution, units) {
 };
 
 /**
- * Function: safeStopPropagation
- * *Deprecated*. This function has been deprecated. Please use directly 
- *     <OpenLayers.Event.stop> passing 'true' as the 2nd 
- *     argument (preventDefault)
- * 
- * Safely stop the propagation of an event *without* preventing
- *   the default browser action from occurring.
- * 
- * Parameter:
- * evt - {Event}
- */
-OpenLayers.Util.safeStopPropagation = function(evt) {
-    OpenLayers.Event.stop(evt, true);
-};
-
-/**
  * Function: pagePosition
  * Calculates the position of an element on the page (see
  * http://code.google.com/p/doctype/wiki/ArticlePageOffset)
@@ -1366,6 +1244,9 @@ OpenLayers.Util.pagePosition =  function(forElement) {
  * document.body or document.documentElement, depending on the document's
  * compatibility mode (see
  * http://code.google.com/p/doctype/wiki/ArticleClientViewportElement)
+ *
+ * Returns:
+ * {DOMElement}
  */
 OpenLayers.Util.getViewportElement = function() {
     var viewportElement = arguments.callee.viewportElement;
@@ -1444,10 +1325,12 @@ OpenLayers.Util.isEquivalentUrl = function(url1, url2, options) {
  * 
  * Parameters:
  * url - {String}
- * options - {Object} A hash of options.  Can be one of:
- *            ignoreCase: lowercase url,
- *            ignorePort80: don't include explicit port if port is 80,
- *            ignoreHash: Don't include part of url after the hash (#).
+ * options - {Object} A hash of options.
+ *
+ * Valid options:
+ *   ignoreCase - {Boolean} lowercase url,
+ *   ignorePort80 - {Boolean} don't include explicit port if port is 80,
+ *   ignoreHash - {Boolean} Don't include part of url after the hash (#).
  * 
  * Returns:
  * {Object} An object with separate url, a, port, host, and args parsed out 
@@ -1505,7 +1388,11 @@ OpenLayers.Util.createUrlObject = function(url, options) {
     }
     urlObject.args = OpenLayers.Util.getParameters(queryString);
 
-    //pathname (uniform browser behavior with leading "/")
+    // pathname
+    //
+    // This is a workaround for Internet Explorer where
+    // window.location.pathname has a leading "/", but
+    // a.pathname has no leading "/".
     urlObject.pathname = (a.pathname.charAt(0) == "/") ? a.pathname : "/" + a.pathname;
     
     return urlObject; 
@@ -1546,6 +1433,15 @@ OpenLayers.IS_GECKO = (function() {
 })();
 
 /**
+ * Constant: CANVAS_SUPPORTED
+ * {Boolean} True if canvas 2d is supported.
+ */
+OpenLayers.CANVAS_SUPPORTED = (function() {
+    var elem = document.createElement('canvas');
+    return !!(elem.getContext && elem.getContext('2d'));
+})();
+
+/**
  * Constant: BROWSER_NAME
  * {String}
  * A substring of the navigator.userAgent property.  Depending on the userAgent
@@ -1618,7 +1514,7 @@ OpenLayers.Util.getBrowserName = function() {
  *         this node instead of the body root when calculating dimensions. 
  * 
  * Returns:
- * {OpenLayers.Size}
+ * {<OpenLayers.Size>}
  */
 OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
     
@@ -1630,6 +1526,33 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
         
     var containerElement = (options && options.containerElement) 
     	? options.containerElement : document.body;
+    
+    // Opera and IE7 can't handle a node with position:aboslute if it inherits
+    // position:absolute from a parent.
+    var parentHasPositionAbsolute = false;
+    var superContainer = null;
+    var parent = containerElement;
+    while (parent && parent.tagName.toLowerCase()!="body") {
+        var parentPosition = OpenLayers.Element.getStyle(parent, "position");
+        if(parentPosition == "absolute") {
+            parentHasPositionAbsolute = true;
+            break;
+        } else if (parentPosition && parentPosition != "static") {
+            break;
+        }
+        parent = parent.parentNode;
+    }
+    if(parentHasPositionAbsolute && (containerElement.clientHeight === 0 || 
+                                     containerElement.clientWidth === 0) ){
+        superContainer = document.createElement("div");
+        superContainer.style.visibility = "hidden";
+        superContainer.style.position = "absolute";
+        superContainer.style.overflow = "visible";
+        superContainer.style.width = document.body.clientWidth + "px";
+        superContainer.style.height = document.body.clientHeight + "px";
+        superContainer.appendChild(container);
+    }
+    container.style.position = "absolute";
 
     //fix a dimension, if specified.
     if (size) {
@@ -1664,25 +1587,10 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
     container.appendChild(content);
     
     // append container to body for rendering
-    containerElement.appendChild(container);
-    
-    // Opera and IE7 can't handle a node with position:aboslute if it inherits
-    // position:absolute from a parent.
-    var parentHasPositionAbsolute = false;
-    var parent = container.parentNode;
-    while (parent && parent.tagName.toLowerCase()!="body") {
-        var parentPosition = OpenLayers.Element.getStyle(parent, "position");
-        if(parentPosition == "absolute") {
-            parentHasPositionAbsolute = true;
-            break;
-        } else if (parentPosition && parentPosition != "static") {
-            break;
-        }
-        parent = parent.parentNode;
-    }
-
-    if(!parentHasPositionAbsolute) {
-        container.style.position = "absolute";
+    if (superContainer) {
+        containerElement.appendChild(superContainer);
+    } else {
+        containerElement.appendChild(container);
     }
     
     // calculate scroll width of content and add corners and shadow width
@@ -1699,7 +1607,12 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
 
     // remove elements
     container.removeChild(content);
-    containerElement.removeChild(container);
+    if (superContainer) {
+        superContainer.removeChild(container);
+        containerElement.removeChild(superContainer);
+    } else {
+        containerElement.removeChild(container);
+    }
     
     return new OpenLayers.Size(w, h);
 };
diff --git a/lib/Rico/Color.js b/lib/Rico/Color.js
index 6741e7c..7d9ab6f 100644
--- a/lib/Rico/Color.js
+++ b/lib/Rico/Color.js
@@ -1,4 +1,6 @@
 /** 
+ * @requires Rico/license.js
+ * @requires OpenLayers/Console.js
  * @requires OpenLayers/BaseTypes/Class.js
  * @requires OpenLayers/BaseTypes/Element.js
  */
@@ -7,9 +9,10 @@
 /*
  * This file has been edited substantially from the Rico-released version by
  * the OpenLayers development team.
- *
- * This file is licensed under the Apache License, Version 2.0.
  */
+
+OpenLayers.Console.warn("OpenLayers.Rico is deprecated");
+
 OpenLayers.Rico = OpenLayers.Rico || {};
 OpenLayers.Rico.Color = OpenLayers.Class({
 
diff --git a/lib/Rico/Corner.js b/lib/Rico/Corner.js
index 729017b..e5479e5 100644
--- a/lib/Rico/Corner.js
+++ b/lib/Rico/Corner.js
@@ -1,4 +1,5 @@
 /**
+ * @requires OpenLayers/Console.js
  * @requires Rico/Color.js
  */
 
@@ -22,6 +23,9 @@
  * permissions * and limitations under the License.
  *
  */
+
+OpenLayers.Console.warn("OpenLayers.Rico is deprecated");
+
 OpenLayers.Rico = OpenLayers.Rico || {};
 OpenLayers.Rico.Corner = {
 
@@ -332,4 +336,4 @@ OpenLayers.Rico.Corner = {
    _isTopRounded: function() { return this._hasString(this.options.corners, "all", "top", "tl", "tr"); },
    _isBottomRounded: function() { return this._hasString(this.options.corners, "all", "bottom", "bl", "br"); },
    _hasSingleTextChild: function(el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; }
-};
\ No newline at end of file
+};
diff --git a/lib/Rico/license.js b/lib/Rico/license.js
new file mode 100644
index 0000000..aad5cf3
--- /dev/null
+++ b/lib/Rico/license.js
@@ -0,0 +1,19 @@
+/**
+ * @license Apache 2 
+ *  
+ * Contains portions of Rico <http://openrico.org/>
+ * 
+ * Copyright 2005 Sabre Airline Solutions  
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you
+ * may not use this file except in compliance with the License. You
+ * may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0  
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License. 
+ */
diff --git a/lib/deprecated.js b/lib/deprecated.js
new file mode 100644
index 0000000..0cc3c1b
--- /dev/null
+++ b/lib/deprecated.js
@@ -0,0 +1,5648 @@
+/**
+ * @requires OpenLayers/BaseTypes/Class.js
+ * @requires OpenLayers/Util.js
+ * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Format.js
+ * @requires OpenLayers/Request.js
+ * @requires OpenLayers/Layer/WMS.js
+ * @requires OpenLayers/Layer/MapServer.js
+ * @requires OpenLayers/Tile.js
+ * @requires OpenLayers/Request/XMLHttpRequest.js
+ * @requires OpenLayers/Layer/Vector.js
+ * @requires OpenLayers/Layer/Markers.js
+ * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
+ * @requires OpenLayers/Feature.js
+ * @requires OpenLayers/Layer/EventPane.js
+ * @requires OpenLayers/Layer/FixedZoomLevels.js
+ * @requires OpenLayers/Layer/SphericalMercator.js
+ * @requires OpenLayers/Protocol.js
+ * @requires OpenLayers/Format/JSON.js
+ * @requires OpenLayers/Format/WKT.js
+ * @requires OpenLayers/Format/XML.js
+ * @requires OpenLayers/Geometry.js
+ * @requires OpenLayers/Renderer/Elements.js
+ */
+
+/**
+ * About: Deprecated
+ * The deprecated.js script includes all methods, properties, and constructors
+ * that are not supported as part of the long-term API.  If you use any of
+ * these, you have to explicitly include this script in your application.
+ *
+ * For example:
+ * (code)
+ *     <script src="deprecated.js" type="text/javascript"></script>
+ * (end)
+ *
+ * You are strongly encouraged to avoid using deprecated functionality.  The
+ * documentation here should point you to the supported alternatives.
+ */
+
+/**
+ * Namespace: OpenLayers.Class
+ */
+
+/**
+ * Property: isPrototype
+ * *Deprecated*.  This is no longer needed and will be removed at 3.0.
+ */
+OpenLayers.Class.isPrototype = function () {};
+
+/**
+ * APIFunction: OpenLayers.create
+ * *Deprecated*.  Old method to create an OpenLayers style class.  Use the
+ *     <OpenLayers.Class> constructor instead.
+ *
+ * Returns:
+ * An OpenLayers class
+ */
+OpenLayers.Class.create = function() {
+    return function() {
+        if (arguments && arguments[0] != OpenLayers.Class.isPrototype) {
+            this.initialize.apply(this, arguments);
+        }
+    };
+};
+
+/**
+ * APIFunction: inherit
+ * *Deprecated*.  Old method to inherit from one or more OpenLayers style
+ *     classes.  Use the <OpenLayers.Class> constructor instead.
+ *
+ * Parameters:
+ * class - One or more classes can be provided as arguments
+ *
+ * Returns:
+ * An object prototype
+ */
+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;
+};
+
+/**
+ * Namespace: OpenLayers.Util
+ */
+
+/**
+ * Function: clearArray
+ * *Deprecated*. This function will disappear in 3.0.
+ * Please use "array.length = 0" instead.
+ * 
+ * Parameters:
+ * array - {Array}
+ */
+OpenLayers.Util.clearArray = function(array) {
+    OpenLayers.Console.warn(
+        OpenLayers.i18n(
+            "methodDeprecated", {'newMethod': 'array = []'}
+        )
+    );
+    array.length = 0;
+};
+
+/**
+ * Function: setOpacity
+ * *Deprecated*.  This function has been deprecated. Instead, please use 
+ *     <OpenLayers.Util.modifyDOMElement> 
+ *     or 
+ *     <OpenLayers.Util.modifyAlphaImageDiv>
+ * 
+ * Set the opacity of a DOM Element
+ *     Note that for this function to work in IE, elements must "have layout"
+ *     according to:
+ *     http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/haslayout.asp
+ *
+ * Parameters:
+ * element - {DOMElement} Set the opacity on this DOM element
+ * opacity - {Float} Opacity value (0.0 - 1.0)
+ */
+OpenLayers.Util.setOpacity = function(element, opacity) {
+    OpenLayers.Util.modifyDOMElement(element, null, null, null,
+                                     null, null, null, opacity);
+};
+
+/**
+ * Function: safeStopPropagation
+ * *Deprecated*. This function has been deprecated. Please use directly 
+ *     <OpenLayers.Event.stop> passing 'true' as the 2nd 
+ *     argument (preventDefault)
+ * 
+ * Safely stop the propagation of an event *without* preventing
+ *   the default browser action from occurring.
+ * 
+ * Parameters:
+ * evt - {Event}
+ */
+OpenLayers.Util.safeStopPropagation = function(evt) {
+    OpenLayers.Event.stop(evt, true);
+};
+
+/**
+ * Function: getArgs
+ * *Deprecated*.  Will be removed in 3.0.  Please use instead
+ *     <OpenLayers.Util.getParameters>
+ * 
+ * Parameters:
+ * url - {String} Optional url used to extract the query string.
+ *                If null, query string is taken from page location.
+ * 
+ * Returns:
+ * {Object} An object of key/value pairs from the query string.
+ */
+OpenLayers.Util.getArgs = function(url) {
+    OpenLayers.Console.warn(
+        OpenLayers.i18n(
+            "methodDeprecated", {'newMethod': 'OpenLayers.Util.getParameters'}
+        )
+    );
+    return OpenLayers.Util.getParameters(url);
+};
+
+/**
+ * Namespace: OpenLayers.Ajax
+ */
+
+/**
+ * Function: OpenLayers.nullHandler
+ * @param {} request
+ */
+OpenLayers.nullHandler = function(request) {
+    OpenLayers.Console.userError(OpenLayers.i18n("unhandledRequest", {'statusText':request.statusText}));
+};
+
+/** 
+ * APIFunction: OpenLayers.loadURL
+ * Background load a document.
+ * *Deprecated*.  Use <OpenLayers.Request.GET> method instead.
+ *
+ * Parameters:
+ * uri - {String} URI of source doc
+ * params - {String} or {Object} GET params. Either a string in the form
+ *     "?hello=world&foo=bar" (do not forget the leading question mark)
+ *     or an object in the form {'hello': 'world', 'foo': 'bar}
+ * caller - {Object} object which gets callbacks
+ * onComplete - {Function} Optional callback for success.  The callback
+ *     will be called with this set to caller and will receive the request
+ *     object as an argument.  Note that if you do not specify an onComplete
+ *     function, <OpenLayers.nullHandler> will be called (which pops up a 
+ *     user friendly error message dialog).
+ * onFailure - {Function} Optional callback for failure.  In the event of
+ *     a failure, the callback will be called with this set to caller and will
+ *     receive the request object as an argument.  Note that if you do not
+ *     specify an onComplete function, <OpenLayers.nullHandler> will be called
+ *     (which pops up a user friendly error message dialog).
+ *
+ * Returns:
+ * {<OpenLayers.Request.XMLHttpRequest>}  The request object. To abort loading,
+ *     call request.abort().
+ */
+OpenLayers.loadURL = function(uri, params, caller,
+                                  onComplete, onFailure) {
+    
+    if(typeof params == 'string') {
+        params = OpenLayers.Util.getParameters(params);
+    }
+    var success = (onComplete) ? onComplete : OpenLayers.nullHandler;
+    var failure = (onFailure) ? onFailure : OpenLayers.nullHandler;
+    
+    return OpenLayers.Request.GET({
+        url: uri, params: params,
+        success: success, failure: failure, scope: caller
+    });
+};
+
+/** 
+ * Function: OpenLayers.parseXMLString
+ * Parse XML into a doc structure
+ * 
+ * Parameters:
+ * text - {String} 
+ * 
+ * Returns:
+ * {?} Parsed AJAX Responsev
+ */
+OpenLayers.parseXMLString = function(text) {
+
+    //MS sucks, if the server is bad it dies
+    var index = text.indexOf('<');
+    if (index > 0) {
+        text = text.substring(index);
+    }
+
+    var ajaxResponse = OpenLayers.Util.Try(
+        function() {
+            var xmldom = new ActiveXObject('Microsoft.XMLDOM');
+            xmldom.loadXML(text);
+            return xmldom;
+        },
+        function() {
+            return new DOMParser().parseFromString(text, 'text/xml');
+        },
+        function() {
+            var req = new XMLHttpRequest();
+            req.open("GET", "data:" + "text/xml" +
+                     ";charset=utf-8," + encodeURIComponent(text), false);
+            if (req.overrideMimeType) {
+                req.overrideMimeType("text/xml");
+            }
+            req.send(null);
+            return req.responseXML;
+        }
+    );
+
+    return ajaxResponse;
+};
+
+OpenLayers.Ajax = {
+
+    /**
+     * Method: emptyFunction
+     */
+    emptyFunction: function () {},
+
+    /**
+     * Method: getTransport
+     * 
+     * Returns: 
+     * {Object} Transport mechanism for whichever browser we're in, or false if
+     *          none available.
+     */
+    getTransport: function() {
+        return OpenLayers.Util.Try(
+            function() {return new XMLHttpRequest();},
+            function() {return new ActiveXObject('Msxml2.XMLHTTP');},
+            function() {return new ActiveXObject('Microsoft.XMLHTTP');}
+        ) || false;
+    },
+
+    /**
+     * Property: activeRequestCount
+     * {Integer}
+     */
+    activeRequestCount: 0
+};
+
+/**
+ * Namespace: OpenLayers.Ajax.Responders
+ * {Object}
+ */
+OpenLayers.Ajax.Responders = {
+  
+    /**
+     * Property: responders
+     * {Array}
+     */
+    responders: [],
+
+    /**
+     * Method: register
+     *  
+     * Parameters:
+     * responderToAdd - {?}
+     */
+    register: function(responderToAdd) {
+        for (var i = 0; i < this.responders.length; i++){
+            if (responderToAdd == this.responders[i]){
+                return;
+            }
+        }
+        this.responders.push(responderToAdd);
+    },
+
+    /**
+     * Method: unregister
+     *  
+     * Parameters:
+     * responderToRemove - {?}
+     */
+    unregister: function(responderToRemove) {
+        OpenLayers.Util.removeItem(this.reponders, responderToRemove);
+    },
+
+    /**
+     * Method: dispatch
+     * 
+     * Parameters:
+     * callback - {?}
+     * request - {?}
+     * transport - {?}
+     */
+    dispatch: function(callback, request, transport) {
+        var responder;
+        for (var i = 0; i < this.responders.length; i++) {
+            responder = this.responders[i];
+     
+            if (responder[callback] && 
+                typeof responder[callback] == 'function') {
+                try {
+                    responder[callback].apply(responder, 
+                                              [request, transport]);
+                } catch (e) {}
+            }
+        }
+    }
+};
+
+OpenLayers.Ajax.Responders.register({
+    /** 
+     * Function: onCreate
+     */
+    onCreate: function() {
+        OpenLayers.Ajax.activeRequestCount++;
+    },
+
+    /**
+     * Function: onComplete
+     */
+     onComplete: function() {
+         OpenLayers.Ajax.activeRequestCount--;
+     }
+});
+
+/**
+ * Class: OpenLayers.Ajax.Base
+ */
+OpenLayers.Ajax.Base = OpenLayers.Class({
+      
+    /**
+     * Constructor: OpenLayers.Ajax.Base
+     * 
+     * Parameters: 
+     * options - {Object}
+     */
+    initialize: function(options) {
+        this.options = {
+            method:       'post',
+            asynchronous: true,
+            contentType:  'application/xml',
+            parameters:   ''
+        };
+        OpenLayers.Util.extend(this.options, options || {});
+        
+        this.options.method = this.options.method.toLowerCase();
+        
+        if (typeof this.options.parameters == 'string') {
+            this.options.parameters = 
+                OpenLayers.Util.getParameters(this.options.parameters);
+        }
+    }
+});
+
+/**
+ * Class: OpenLayers.Ajax.Request
+ * *Deprecated*.  Use <OpenLayers.Request> method instead.
+ *
+ * Inherit:
+ *  - <OpenLayers.Ajax.Base>
+ */
+OpenLayers.Ajax.Request = OpenLayers.Class(OpenLayers.Ajax.Base, {
+
+    /**
+     * Property: _complete
+     *
+     * {Boolean}
+     */
+    _complete: false,
+      
+    /**
+     * Constructor: OpenLayers.Ajax.Request
+     * 
+     * Parameters: 
+     * url - {String}
+     * options - {Object}
+     */
+    initialize: function(url, options) {
+        OpenLayers.Ajax.Base.prototype.initialize.apply(this, [options]);
+        
+        if (OpenLayers.ProxyHost && OpenLayers.String.startsWith(url, "http")) {
+            url = OpenLayers.ProxyHost + encodeURIComponent(url);
+        }
+        
+        this.transport = OpenLayers.Ajax.getTransport();
+        this.request(url);
+    },
+
+    /**
+     * Method: request
+     * 
+     * Parameters:
+     * url - {String}
+     */
+    request: function(url) {
+        this.url = url;
+        this.method = this.options.method;
+        var params = OpenLayers.Util.extend({}, this.options.parameters);
+        
+        if (this.method != 'get' && this.method != 'post') {
+            // simulate other verbs over post
+            params['_method'] = this.method;
+            this.method = 'post';
+        }
+
+        this.parameters = params;        
+        
+        if (params = OpenLayers.Util.getParameterString(params)) {
+            // when GET, append parameters to URL
+            if (this.method == 'get') {
+                this.url += ((this.url.indexOf('?') > -1) ? '&' : '?') + params;
+            } else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
+                params += '&_=';
+            }
+        }
+        try {
+            var response = new OpenLayers.Ajax.Response(this);
+            if (this.options.onCreate) {
+                this.options.onCreate(response);
+            }
+            
+            OpenLayers.Ajax.Responders.dispatch('onCreate', 
+                                                this, 
+                                                response);
+    
+            this.transport.open(this.method.toUpperCase(), 
+                                this.url,
+                                this.options.asynchronous);
+    
+            if (this.options.asynchronous) {
+                window.setTimeout(
+                    OpenLayers.Function.bind(this.respondToReadyState, this, 1),
+                    10);
+            }
+            
+            this.transport.onreadystatechange = 
+                OpenLayers.Function.bind(this.onStateChange, this);    
+            this.setRequestHeaders();
+    
+            this.body =  this.method == 'post' ?
+                (this.options.postBody || params) : null;
+            this.transport.send(this.body);
+    
+            // Force Firefox to handle ready state 4 for synchronous requests
+            if (!this.options.asynchronous && 
+                this.transport.overrideMimeType) {
+                this.onStateChange();
+            }
+        } catch (e) {
+            this.dispatchException(e);
+        }
+    },
+
+    /**
+     * Method: onStateChange
+     */
+    onStateChange: function() {
+        var readyState = this.transport.readyState;
+        if (readyState > 1 && !((readyState == 4) && this._complete)) {
+            this.respondToReadyState(this.transport.readyState);
+        }
+    },
+     
+    /**
+     * Method: setRequestHeaders
+     */
+    setRequestHeaders: function() {
+        var headers = {
+            'X-Requested-With': 'XMLHttpRequest',
+            'Accept': 'text/javascript, text/html, application/xml, text/xml, */*',
+            'OpenLayers': true
+        };
+
+        if (this.method == 'post') {
+            headers['Content-type'] = this.options.contentType +
+                (this.options.encoding ? '; charset=' + this.options.encoding : '');
+    
+            /* Force "Connection: close" for older Mozilla browsers to work
+             * around a bug where XMLHttpRequest sends an incorrect
+             * Content-length header. See Mozilla Bugzilla #246651.
+             */
+            if (this.transport.overrideMimeType &&
+                (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) {
+                headers['Connection'] = 'close';
+            }
+        }
+        // user-defined headers
+        if (typeof this.options.requestHeaders == 'object') {    
+            var extras = this.options.requestHeaders;
+            
+            if (typeof extras.push == 'function') {
+                for (var i = 0, length = extras.length; i < length; i += 2) {
+                    headers[extras[i]] = extras[i+1];
+                }
+            } else {
+                for (var i in extras) {
+                    headers[i] = extras[i];
+                }
+            }
+        }
+        
+        for (var name in headers) {
+            this.transport.setRequestHeader(name, headers[name]);
+        }
+    },
+    
+    /**
+     * Method: success
+     *
+     * Returns:
+     * {Boolean} - 
+     */
+    success: function() {
+        var status = this.getStatus();
+        return !status || (status >=200 && status < 300);
+    },
+    
+    /**
+     * Method: getStatus
+     *
+     * Returns:
+     * {Integer} - Status
+     */
+    getStatus: function() {
+        try {
+            return this.transport.status || 0;
+        } catch (e) {
+            return 0;
+        }
+    },
+
+    /**
+     * Method: respondToReadyState
+     *
+     * Parameters:
+     * readyState - {?}
+     */
+    respondToReadyState: function(readyState) {
+        var state = OpenLayers.Ajax.Request.Events[readyState];
+        var response = new OpenLayers.Ajax.Response(this);
+    
+        if (state == 'Complete') {
+            try {
+                this._complete = true;
+                (this.options['on' + response.status] ||
+                    this.options['on' + (this.success() ? 'Success' : 'Failure')] ||
+                    OpenLayers.Ajax.emptyFunction)(response);
+            } catch (e) {
+                this.dispatchException(e);
+            }
+    
+            var contentType = response.getHeader('Content-type');
+        }
+    
+        try {
+            (this.options['on' + state] || 
+             OpenLayers.Ajax.emptyFunction)(response);
+             OpenLayers.Ajax.Responders.dispatch('on' + state, 
+                                                 this, 
+                                                 response);
+        } catch (e) {
+            this.dispatchException(e);
+        }
+    
+        if (state == 'Complete') {
+            // avoid memory leak in MSIE: clean up
+            this.transport.onreadystatechange = OpenLayers.Ajax.emptyFunction;
+        }
+    },
+    
+    /**
+     * Method: getHeader
+     * 
+     * Parameters:
+     * name - {String} Header name
+     *
+     * Returns:
+     * {?} - response header for the given name
+     */
+    getHeader: function(name) {
+        try {
+            return this.transport.getResponseHeader(name);
+        } catch (e) {
+            return null;
+        }
+    },
+
+    /**
+     * Method: dispatchException
+     * If the optional onException function is set, execute it
+     * and then dispatch the call to any other listener registered
+     * for onException.
+     * 
+     * If no optional onException function is set, we suspect that
+     * the user may have also not used
+     * OpenLayers.Ajax.Responders.register to register a listener
+     * for the onException call.  To make sure that something
+     * gets done with this exception, only dispatch the call if there
+     * are listeners.
+     *
+     * If you explicitly want to swallow exceptions, set
+     * request.options.onException to an empty function (function(){})
+     * or register an empty function with <OpenLayers.Ajax.Responders>
+     * for onException.
+     * 
+     * Parameters:
+     * exception - {?}
+     */
+    dispatchException: function(exception) {
+        var handler = this.options.onException;
+        if(handler) {
+            // call options.onException and alert any other listeners
+            handler(this, exception);
+            OpenLayers.Ajax.Responders.dispatch('onException', this, exception);
+        } else {
+            // check if there are any other listeners
+            var listener = false;
+            var responders = OpenLayers.Ajax.Responders.responders;
+            for (var i = 0; i < responders.length; i++) {
+                if(responders[i].onException) {
+                    listener = true;
+                    break;
+                }
+            }
+            if(listener) {
+                // call all listeners
+                OpenLayers.Ajax.Responders.dispatch('onException', this, exception);
+            } else {
+                // let the exception through
+                throw exception;
+            }
+        }
+    }
+});
+
+/** 
+ * Property: Events
+ * {Array(String)}
+ */
+OpenLayers.Ajax.Request.Events =
+  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+/**
+ * Class: OpenLayers.Ajax.Response
+ */
+OpenLayers.Ajax.Response = OpenLayers.Class({
+
+    /**
+     * Property: status
+     *
+     * {Integer}
+     */
+    status: 0,
+    
+
+    /**
+     * Property: statusText
+     *
+     * {String}
+     */
+    statusText: '',
+      
+    /**
+     * Constructor: OpenLayers.Ajax.Response
+     * 
+     * Parameters: 
+     * request - {Object}
+     */
+    initialize: function(request) {
+        this.request = request;
+        var transport = this.transport = request.transport,
+            readyState = this.readyState = transport.readyState;
+        
+        if ((readyState > 2 &&
+            !(!!(window.attachEvent && !window.opera))) ||
+            readyState == 4) {
+            this.status       = this.getStatus();
+            this.statusText   = this.getStatusText();
+            this.responseText = transport.responseText == null ?
+                '' : String(transport.responseText);
+        }
+        
+        if(readyState == 4) {
+            var xml = transport.responseXML;
+            this.responseXML  = xml === undefined ? null : xml;
+        }
+    },
+    
+    /**
+     * Method: getStatus
+     */
+    getStatus: OpenLayers.Ajax.Request.prototype.getStatus,
+    
+    /**
+     * Method: getStatustext
+     *
+     * Returns:
+     * {String} - statusText
+     */
+    getStatusText: function() {
+        try {
+            return this.transport.statusText || '';
+        } catch (e) {
+            return '';
+        }
+    },
+    
+    /**
+     * Method: getHeader
+     */
+    getHeader: OpenLayers.Ajax.Request.prototype.getHeader,
+    
+    /** 
+     * Method: getResponseHeader
+     *
+     * Returns:
+     * {?} - response header for given name
+     */
+    getResponseHeader: function(name) {
+        return this.transport.getResponseHeader(name);
+    }
+});
+
+
+/**
+ * Function: getElementsByTagNameNS
+ * 
+ * Parameters:
+ * parentnode - {?}
+ * nsuri - {?}
+ * nsprefix - {?}
+ * tagname - {?}
+ * 
+ * Returns:
+ * {?}
+ */
+OpenLayers.Ajax.getElementsByTagNameNS  = function(parentnode, nsuri, 
+                                                   nsprefix, tagname) {
+    var elem = null;
+    if (parentnode.getElementsByTagNameNS) {
+        elem = parentnode.getElementsByTagNameNS(nsuri, tagname);
+    } else {
+        elem = parentnode.getElementsByTagName(nsprefix + ':' + tagname);
+    }
+    return elem;
+};
+
+
+/**
+ * Function: serializeXMLToString
+ * Wrapper function around XMLSerializer, which doesn't exist/work in
+ *     IE/Safari. We need to come up with a way to serialize in those browser:
+ *     for now, these browsers will just fail. #535, #536
+ *
+ * Parameters: 
+ * xmldom {XMLNode} xml dom to serialize
+ * 
+ * Returns:
+ * {?}
+ */
+OpenLayers.Ajax.serializeXMLToString = function(xmldom) {
+    var serializer = new XMLSerializer();
+    var data = serializer.serializeToString(xmldom);
+    return data;
+};
+
+/**
+ * Namespace: OpenLayers.Element
+ */
+OpenLayers.Util.extend(OpenLayers.Element, {
+
+    /**
+     * APIFunction: hide
+     * *Deprecated*. Hide element(s) passed in
+     * 
+     * Parameters:
+     * element - {DOMElement} Actually user can pass any number of elements
+     */
+    hide: function() {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", {
+            newMethod: "element.style.display = 'none';"
+        }));
+
+        for (var i=0, len=arguments.length; i<len; i++) {
+            var element = OpenLayers.Util.getElement(arguments[i]);
+            if (element) {
+                element.style.display = 'none';
+            }
+        }
+    },
+
+    /**
+     * APIFunction: show
+     * *Deprecated*. Show element(s) passed in
+     * 
+     * Parameters:
+     * element - {DOMElement} Actually user can pass any number of elements
+     */
+    show: function() {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", {
+            newMethod: "element.style.display = '';"
+        }));
+
+        for (var i=0, len=arguments.length; i<len; i++) {
+            var element = OpenLayers.Util.getElement(arguments[i]);
+            if (element) {
+                element.style.display = '';
+            }
+        }
+    },
+
+    /**
+     * APIFunction: getDimensions
+     * *Deprecated*. Returns dimensions of the element passed in.
+     *  
+     * Parameters:
+     * element - {DOMElement}
+     * 
+     * Returns:
+     * {Object} Object with 'width' and 'height' properties which are the 
+     *          dimensions of the element passed in.
+     */
+    getDimensions: function(element) {
+        element = OpenLayers.Util.getElement(element);
+        if (OpenLayers.Element.getStyle(element, 'display') != 'none') {
+            return {width: element.offsetWidth, height: element.offsetHeight};
+        }
+    
+        // All *Width and *Height properties give 0 on elements with display none,
+        // so enable the element temporarily
+        var els = element.style;
+        var originalVisibility = els.visibility;
+        var originalPosition = els.position;
+        var originalDisplay = els.display;
+        els.visibility = 'hidden';
+        els.position = 'absolute';
+        els.display = '';
+        var originalWidth = element.clientWidth;
+        var originalHeight = element.clientHeight;
+        els.display = originalDisplay;
+        els.position = originalPosition;
+        els.visibility = originalVisibility;
+        return {width: originalWidth, height: originalHeight};
+    }
+    
+});
+
+if (!String.prototype.startsWith) {
+    /**
+     * APIMethod: String.startsWith
+     * *Deprecated*. Whether or not a string starts with another string. 
+     * 
+     * Parameters:
+     * sStart - {String} The string we're testing for.
+     *  
+     * Returns:
+     * {Boolean} Whether or not this string starts with the string passed in.
+     */
+    String.prototype.startsWith = function(sStart) {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
+                                {'newMethod':'OpenLayers.String.startsWith'}));
+        return OpenLayers.String.startsWith(this, sStart);
+    };
+}
+
+if (!String.prototype.contains) {
+    /**
+     * APIMethod: String.contains
+     * *Deprecated*. Whether or not a string contains another string.
+     * 
+     * Parameters:
+     * str - {String} The string that we're testing for.
+     * 
+     * Returns:
+     * {Boolean} Whether or not this string contains with the string passed in.
+     */
+    String.prototype.contains = function(str) {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
+                                  {'newMethod':'OpenLayers.String.contains'}));
+        return OpenLayers.String.contains(this, str);
+    };
+}
+
+if (!String.prototype.trim) {
+    /**
+     * APIMethod: String.trim
+     * *Deprecated*. Removes leading and trailing whitespace characters from a string.
+     * 
+     * Returns:
+     * {String} A trimmed version of the string - all leading and 
+     *          trailing spaces removed
+     */
+    String.prototype.trim = function() {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
+                                      {'newMethod':'OpenLayers.String.trim'}));
+        return OpenLayers.String.trim(this);
+    };
+}
+
+if (!String.prototype.camelize) {
+    /**
+     * APIMethod: String.camelize
+     * *Deprecated*. Camel-case a hyphenated string. 
+     *     Ex. "chicken-head" becomes "chickenHead", and
+     *     "-chicken-head" becomes "ChickenHead".
+     * 
+     * Returns:
+     * {String} The string, camelized
+     */
+    String.prototype.camelize = function() {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
+                                  {'newMethod':'OpenLayers.String.camelize'}));
+        return OpenLayers.String.camelize(this);
+    };
+}
+
+if (!Function.prototype.bind) {
+    /**
+     * APIMethod: Function.bind
+     * *Deprecated*. Bind a function to an object. 
+     * Method to easily create closures with 'this' altered.
+     * 
+     * Parameters:
+     * object - {Object} the this parameter
+     * 
+     * Returns:
+     * {Function} A closure with 'this' altered to the first
+     *            argument.
+     */
+    Function.prototype.bind = function() {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
+                                {'newMethod':'OpenLayers.Function.bind'}));
+        // new function takes the same arguments with this function up front
+        Array.prototype.unshift.apply(arguments, [this]);
+        return OpenLayers.Function.bind.apply(null, arguments);
+    };
+}
+
+if (!Function.prototype.bindAsEventListener) {
+    /**
+     * APIMethod: Function.bindAsEventListener
+     * *Deprecated*. Bind a function to an object, and configure it to receive the
+     *     event object as first parameter when called. 
+     * 
+     * Parameters:
+     * object - {Object} A reference to this.
+     * 
+     * Returns:
+     * {Function}
+     */
+    Function.prototype.bindAsEventListener = function(object) {
+        OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated",
+                        {'newMethod':'OpenLayers.Function.bindAsEventListener'}));
+        return OpenLayers.Function.bindAsEventListener(this, object);
+    };
+}
+
+// FIXME: Remove this in 3.0. In 3.0, Event.stop will no longer be provided
+// by OpenLayers.
+if (window.Event) {
+    OpenLayers.Util.applyDefaults(window.Event, OpenLayers.Event);
+} else {
+    var Event = OpenLayers.Event;
+}
+
+/**
+ * Namespace: OpenLayers.Tile
+ */
+OpenLayers.Util.extend(OpenLayers.Tile.prototype, {
+    /**   
+     * Method: getBoundsFromBaseLayer
+     * Take the pixel locations of the corner of the tile, and pass them to 
+     *     the base layer and ask for the location of those pixels, so that 
+     *     displaying tiles over Google works fine.
+     *
+     * Parameters:
+     * position - {<OpenLayers.Pixel>}
+     *
+     * Returns:
+     * bounds - {<OpenLayers.Bounds>} 
+     */
+    getBoundsFromBaseLayer: function(position) {
+        var msg = OpenLayers.i18n('reprojectDeprecated',
+                                              {'layerName':this.layer.name});
+        OpenLayers.Console.warn(msg);
+        var topLeft = this.layer.map.getLonLatFromLayerPx(position); 
+        var bottomRightPx = position.clone();
+        bottomRightPx.x += this.size.w;
+        bottomRightPx.y += this.size.h;
+        var bottomRight = this.layer.map.getLonLatFromLayerPx(bottomRightPx); 
+        // Handle the case where the base layer wraps around the date line.
+        // Google does this, and it breaks WMS servers to request bounds in 
+        // that fashion.  
+        if (topLeft.lon > bottomRight.lon) {
+            if (topLeft.lon < 0) {
+                topLeft.lon = -180 - (topLeft.lon+180);
+            } else {
+                bottomRight.lon = 180+bottomRight.lon+180;
+            }        
+        }
+        var bounds = new OpenLayers.Bounds(topLeft.lon, 
+                                       bottomRight.lat, 
+                                       bottomRight.lon, 
+                                       topLeft.lat);  
+        return bounds;
+    }    
+});
+
+/**
+ * Class: OpenLayers.Control.MouseDefaults
+ * This class is DEPRECATED in 2.4 and will be removed by 3.0.
+ * If you need this functionality, use <OpenLayers.Control.Navigation> 
+ * instead!!!
+ *
+ * Inherits from:
+ *  - <OpenLayers.Control>
+ */
+OpenLayers.Control.MouseDefaults = OpenLayers.Class(OpenLayers.Control, {
+
+    /** WARNING WARNING WARNING!!!
+        This class is DEPRECATED in 2.4 and will be removed by 3.0.
+        If you need this functionality, use Control.Navigation instead!!! */
+
+    /** 
+     * Property: performedDrag
+     * {Boolean}
+     */
+    performedDrag: false,
+
+    /** 
+     * Property: wheelObserver 
+     * {Function}
+     */
+    wheelObserver: null,
+
+    /** 
+     * Constructor: OpenLayers.Control.MouseDefaults
+     */
+    initialize: function() {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+    },
+
+    /**
+     * APIMethod: destroy
+     */    
+    destroy: function() {
+        
+        if (this.handler) {
+            this.handler.destroy();
+        }
+        this.handler = null;
+
+        this.map.events.un({
+            "click": this.defaultClick,
+            "dblclick": this.defaultDblClick,
+            "mousedown": this.defaultMouseDown,
+            "mouseup": this.defaultMouseUp,
+            "mousemove": this.defaultMouseMove,
+            "mouseout": this.defaultMouseOut,
+            scope: this
+        });
+
+        //unregister mousewheel events specifically on the window and document
+        OpenLayers.Event.stopObserving(window, "DOMMouseScroll", 
+                                        this.wheelObserver);
+        OpenLayers.Event.stopObserving(window, "mousewheel", 
+                                        this.wheelObserver);
+        OpenLayers.Event.stopObserving(document, "mousewheel", 
+                                        this.wheelObserver);
+        this.wheelObserver = null;
+                      
+        OpenLayers.Control.prototype.destroy.apply(this, arguments);        
+    },
+
+    /**
+     * Method: draw
+     */
+    draw: function() {
+        this.map.events.on({
+            "click": this.defaultClick,
+            "dblclick": this.defaultDblClick,
+            "mousedown": this.defaultMouseDown,
+            "mouseup": this.defaultMouseUp,
+            "mousemove": this.defaultMouseMove,
+            "mouseout": this.defaultMouseOut,
+            scope: this
+        });
+
+        this.registerWheelEvents();
+
+    },
+
+    /**
+     * Method: registerWheelEvents
+     */
+    registerWheelEvents: function() {
+
+        this.wheelObserver = OpenLayers.Function.bindAsEventListener(
+            this.onWheelEvent, this
+        );
+        
+        //register mousewheel events specifically on the window and document
+        OpenLayers.Event.observe(window, "DOMMouseScroll", this.wheelObserver);
+        OpenLayers.Event.observe(window, "mousewheel", this.wheelObserver);
+        OpenLayers.Event.observe(document, "mousewheel", this.wheelObserver);
+    },
+
+    /**
+     * Method: defaultClick
+     * 
+     * Parameters:
+     * evt - {Event} 
+     *
+     * Returns:
+     * {Boolean}
+     */
+    defaultClick: function (evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        var notAfterDrag = !this.performedDrag;
+        this.performedDrag = false;
+        return notAfterDrag;
+    },
+
+    /**
+     * Method: defaultDblClick
+     * 
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultDblClick: function (evt) {
+        var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 
+        this.map.setCenter(newCenter, this.map.zoom + 1);
+        OpenLayers.Event.stop(evt);
+        return false;
+    },
+
+    /**
+     * Method: defaultMouseDown
+     * 
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseDown: function (evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        this.mouseDragStart = evt.xy.clone();
+        this.performedDrag  = false;
+        if (evt.shiftKey) {
+            this.map.div.style.cursor = "crosshair";
+            this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
+                                                     this.mouseDragStart,
+                                                     null,
+                                                     null,
+                                                     "absolute",
+                                                     "2px solid red");
+            this.zoomBox.style.backgroundColor = "white";
+            this.zoomBox.style.filter = "alpha(opacity=50)"; // IE
+            this.zoomBox.style.opacity = "0.50";
+            this.zoomBox.style.fontSize = "1px";
+            this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
+            this.map.viewPortDiv.appendChild(this.zoomBox);
+        }
+        document.onselectstart = OpenLayers.Function.False;
+        OpenLayers.Event.stop(evt);
+    },
+
+    /**
+     * Method: defaultMouseMove
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseMove: function (evt) {
+        // record the mouse position, used in onWheelEvent
+        this.mousePosition = evt.xy.clone();
+
+        if (this.mouseDragStart != null) {
+            if (this.zoomBox) {
+                var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x);
+                var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y);
+                this.zoomBox.style.width = Math.max(1, deltaX) + "px";
+                this.zoomBox.style.height = Math.max(1, deltaY) + "px";
+                if (evt.xy.x < this.mouseDragStart.x) {
+                    this.zoomBox.style.left = evt.xy.x+"px";
+                }
+                if (evt.xy.y < this.mouseDragStart.y) {
+                    this.zoomBox.style.top = evt.xy.y+"px";
+                }
+            } else {
+                var deltaX = this.mouseDragStart.x - evt.xy.x;
+                var deltaY = this.mouseDragStart.y - evt.xy.y;
+                var size = this.map.getSize();
+                var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX,
+                                                 size.h / 2 + deltaY);
+                var newCenter = this.map.getLonLatFromViewPortPx( newXY ); 
+                this.map.setCenter(newCenter, null, true);
+                this.mouseDragStart = evt.xy.clone();
+                this.map.div.style.cursor = "move";
+            }
+            this.performedDrag = true;
+        }
+    },
+
+    /**
+     * Method: defaultMouseUp
+     * 
+     * Parameters:
+     * evt - {<OpenLayers.Event>} 
+     */
+    defaultMouseUp: function (evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        if (this.zoomBox) {
+            this.zoomBoxEnd(evt);    
+        } else {
+            if (this.performedDrag) {
+                this.map.setCenter(this.map.center);
+            }
+        }
+        document.onselectstart=null;
+        this.mouseDragStart = null;
+        this.map.div.style.cursor = "";
+    },
+
+    /**
+     * Method: defaultMouseOut
+     * 
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseOut: function (evt) {
+        if (this.mouseDragStart != null && 
+            OpenLayers.Util.mouseLeft(evt, this.map.viewPortDiv)) {
+            if (this.zoomBox) {
+                this.removeZoomBox();
+            }
+            this.mouseDragStart = null;
+        }
+    },
+
+
+    /** 
+     * Method: defaultWheelUp
+     * User spun scroll wheel up
+     * 
+     */
+    defaultWheelUp: function(evt) {
+        if (this.map.getZoom() <= this.map.getNumZoomLevels()) {
+            this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),
+                               this.map.getZoom() + 1);
+        }
+    },
+
+    /**
+     * Method: defaultWheelDown
+     * User spun scroll wheel down
+     */
+    defaultWheelDown: function(evt) {
+        if (this.map.getZoom() > 0) {
+            this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),
+                               this.map.getZoom() - 1);
+        }
+    },
+
+    /**
+     * Method: zoomBoxEnd
+     * Zoombox function. 
+     */
+    zoomBoxEnd: function(evt) {
+        if (this.mouseDragStart != null) {
+            if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 ||    
+                Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) {   
+                var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); 
+                var end = this.map.getLonLatFromViewPortPx( evt.xy );
+                var top = Math.max(start.lat, end.lat);
+                var bottom = Math.min(start.lat, end.lat);
+                var left = Math.min(start.lon, end.lon);
+                var right = Math.max(start.lon, end.lon);
+                var bounds = new OpenLayers.Bounds(left, bottom, right, top);
+                this.map.zoomToExtent(bounds);
+            } else {
+                var end = this.map.getLonLatFromViewPortPx( evt.xy );
+                this.map.setCenter(new OpenLayers.LonLat(
+                  (end.lon),
+                  (end.lat)
+                 ), this.map.getZoom() + 1);
+            }    
+            this.removeZoomBox();
+       }
+    },
+
+    /**
+     * Method: removeZoomBox
+     * Remove the zoombox from the screen and nullify our reference to it.
+     */
+    removeZoomBox: function() {
+        this.map.viewPortDiv.removeChild(this.zoomBox);
+        this.zoomBox = null;
+    },
+
+
+/**
+ *  Mouse ScrollWheel code thanks to http://adomas.org/javascript-mouse-wheel/
+ */
+
+
+    /**
+     * Method: onWheelEvent
+     * Catch the wheel event and handle it xbrowserly
+     *
+     * Parameters: 
+     * e - {Event} 
+     */
+    onWheelEvent: function(e){
+    
+        // first determine whether or not the wheeling was inside the map
+        var inMap = false;
+        var elem = OpenLayers.Event.element(e);
+        while(elem != null) {
+            if (this.map && elem == this.map.div) {
+                inMap = true;
+                break;
+            }
+            elem = elem.parentNode;
+        }
+        
+        if (inMap) {
+            
+            var delta = 0;
+            if (!e) {
+                e = window.event;
+            }
+            if (e.wheelDelta) {
+                delta = e.wheelDelta/120; 
+                if (window.opera && window.opera.version() < 9.2) {
+                    delta = -delta;
+                }
+            } else if (e.detail) {
+                delta = -e.detail / 3;
+            }
+            if (delta) {
+                // add the mouse position to the event because mozilla has a bug
+                // with clientX and clientY (see https://bugzilla.mozilla.org/show_bug.cgi?id=352179)
+                // getLonLatFromViewPortPx(e) returns wrong values
+                e.xy = this.mousePosition;
+
+                if (delta < 0) {
+                   this.defaultWheelDown(e);
+                } else {
+                   this.defaultWheelUp(e);
+                }
+            }
+            
+            //only wheel the map, not the window
+            OpenLayers.Event.stop(e);
+        }
+    },
+
+    CLASS_NAME: "OpenLayers.Control.MouseDefaults"
+});
+
+/**
+ * Class: OpenLayers.Control.MouseToolbar
+ * This class is DEPRECATED in 2.4 and will be removed by 3.0.
+ * If you need this functionality, use <OpenLayers.Control.NavToolbar>
+ * instead!!! 
+ */
+OpenLayers.Control.MouseToolbar = OpenLayers.Class(
+                                            OpenLayers.Control.MouseDefaults, {
+    
+    /**
+     * Property: mode
+     */ 
+    mode: null,
+    /**
+     * Property: buttons
+     */
+    buttons: null,
+    
+    /**
+     * APIProperty: direction
+     * {String} 'vertical' or 'horizontal'
+     */
+    direction: "vertical",
+    
+    /**
+     * Property: buttonClicked
+     * {String}
+     */
+    buttonClicked: null,
+    
+    /**
+     * Constructor: OpenLayers.Control.MouseToolbar
+     *
+     * Parameters:
+     * position - {<OpenLayers.Pixel>}
+     * direction - {String}
+     */
+    initialize: function(position, direction) {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+        this.position = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X,
+                                             OpenLayers.Control.MouseToolbar.Y);
+        if (position) {
+            this.position = position;
+        }
+        if (direction) {
+            this.direction = direction; 
+        }
+        this.measureDivs = [];
+    },
+    
+    /**
+     * APIMethod: destroy 
+     */
+    destroy: function() {
+        for( var btnId in this.buttons) {
+            var btn = this.buttons[btnId];
+            btn.map = null;
+            btn.events.destroy();
+        }
+        OpenLayers.Control.MouseDefaults.prototype.destroy.apply(this, 
+                                                                 arguments);
+    },
+    
+    /**
+     * Method: draw
+     */
+    draw: function() {
+        OpenLayers.Control.prototype.draw.apply(this, arguments); 
+        OpenLayers.Control.MouseDefaults.prototype.draw.apply(this, arguments);
+        this.buttons = {};
+        var sz = new OpenLayers.Size(28,28);
+        var centered = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X,0);
+        this._addButton("zoombox", "drag-rectangle-off.png", "drag-rectangle-on.png", centered, sz, "Shift->Drag to zoom to area");
+        centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0));
+        this._addButton("pan", "panning-hand-off.png", "panning-hand-on.png", centered, sz, "Drag the map to pan.");
+        centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0));
+        this.switchModeTo("pan");
+
+        return this.div;
+    },
+    
+    /**
+     * Method: _addButton
+     */
+    _addButton:function(id, img, activeImg, xy, sz, title) {
+        var imgLocation = OpenLayers.Util.getImageLocation(img);
+        var activeImgLocation = OpenLayers.Util.getImageLocation(activeImg);
+        // var btn = new ol.AlphaImage("_"+id, imgLocation, xy, sz);
+        var btn = OpenLayers.Util.createAlphaImageDiv(
+                                    "OpenLayers_Control_MouseToolbar_" + id, 
+                                    xy, sz, imgLocation, "absolute");
+
+        //we want to add the outer div
+        this.div.appendChild(btn);
+        btn.imgLocation = imgLocation;
+        btn.activeImgLocation = activeImgLocation;
+        
+        btn.events = new OpenLayers.Events(this, btn, null, true);
+        btn.events.on({
+            "mousedown": this.buttonDown,
+            "mouseup": this.buttonUp,
+            "dblclick": OpenLayers.Event.stop,
+            scope: this
+        });
+        btn.action = id;
+        btn.title = title;
+        btn.alt = title;
+        btn.map = this.map;
+
+        //we want to remember/reference the outer div
+        this.buttons[id] = btn;
+        return btn;
+    },
+
+    /**
+     * Method: buttonDown
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    buttonDown: function(evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        this.buttonClicked = evt.element.action;
+        OpenLayers.Event.stop(evt);
+    },
+
+    /**
+     * Method: buttonUp
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    buttonUp: function(evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        if (this.buttonClicked != null) {
+            if (this.buttonClicked == evt.element.action) {
+                this.switchModeTo(evt.element.action);
+            }
+            OpenLayers.Event.stop(evt);
+            this.buttonClicked = null;
+        }
+    },
+    
+    /**
+     * Method: defaultDblClick 
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultDblClick: function (evt) {
+        this.switchModeTo("pan");
+        this.performedDrag = false;
+        var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 
+        this.map.setCenter(newCenter, this.map.zoom + 1);
+        OpenLayers.Event.stop(evt);
+        return false;
+    },
+
+    /**
+     * Method: defaultMouseDown
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseDown: function (evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        this.mouseDragStart = evt.xy.clone();
+        this.performedDrag = false;
+        this.startViaKeyboard = false;
+        if (evt.shiftKey && this.mode !="zoombox") {
+            this.switchModeTo("zoombox");
+            this.startViaKeyboard = true;
+        } else if (evt.altKey && this.mode !="measure") {
+            this.switchModeTo("measure");
+        } else if (!this.mode) {
+            this.switchModeTo("pan");
+        }
+        
+        switch (this.mode) {
+            case "zoombox":
+                this.map.div.style.cursor = "crosshair";
+                this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
+                                                         this.mouseDragStart,
+                                                         null,
+                                                         null,
+                                                         "absolute",
+                                                         "2px solid red");
+                this.zoomBox.style.backgroundColor = "white";
+                this.zoomBox.style.filter = "alpha(opacity=50)"; // IE
+                this.zoomBox.style.opacity = "0.50";
+                this.zoomBox.style.fontSize = "1px";
+                this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
+                this.map.viewPortDiv.appendChild(this.zoomBox);
+                this.performedDrag = true;
+                break;
+            case "measure":
+                var distance = "";
+                if (this.measureStart) {
+                    var measureEnd = this.map.getLonLatFromViewPortPx(this.mouseDragStart);
+                    distance = OpenLayers.Util.distVincenty(this.measureStart, measureEnd);
+                    distance = Math.round(distance * 100) / 100;
+                    distance = distance + "km";
+                    this.measureStartBox = this.measureBox;
+                }    
+                this.measureStart = this.map.getLonLatFromViewPortPx(this.mouseDragStart);;
+                this.measureBox = OpenLayers.Util.createDiv(null,
+                                                         this.mouseDragStart.add(
+                                                           -2-parseInt(this.map.layerContainerDiv.style.left),
+                                                           -2-parseInt(this.map.layerContainerDiv.style.top)),
+                                                         null,
+                                                         null,
+                                                         "absolute");
+                this.measureBox.style.width="4px";
+                this.measureBox.style.height="4px";
+                this.measureBox.style.fontSize = "1px";
+                this.measureBox.style.backgroundColor="red";
+                this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
+                this.map.layerContainerDiv.appendChild(this.measureBox);
+                if (distance) {
+                    this.measureBoxDistance = OpenLayers.Util.createDiv(null,
+                                                         this.mouseDragStart.add(
+                                                           -2-parseInt(this.map.layerContainerDiv.style.left),
+                                                           2-parseInt(this.map.layerContainerDiv.style.top)),
+                                                         null,
+                                                         null,
+                                                         "absolute");
+                    
+                    this.measureBoxDistance.innerHTML = distance;
+                    this.measureBoxDistance.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
+                    this.map.layerContainerDiv.appendChild(this.measureBoxDistance);
+                    this.measureDivs.push(this.measureBoxDistance);
+                }
+                this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
+                this.map.layerContainerDiv.appendChild(this.measureBox);
+                this.measureDivs.push(this.measureBox);
+                break;
+            default:
+                this.map.div.style.cursor = "move";
+                break;
+        }
+        document.onselectstart = OpenLayers.Function.False;
+        OpenLayers.Event.stop(evt);
+    },
+
+    /**
+     * Method: switchModeTo 
+     *
+     * Parameters:
+     * mode - {String} 
+     */
+    switchModeTo: function(mode) {
+        if (mode != this.mode) {
+            
+
+            if (this.mode && this.buttons[this.mode]) {
+                OpenLayers.Util.modifyAlphaImageDiv(this.buttons[this.mode], null, null, null, this.buttons[this.mode].imgLocation);
+            }
+            if (this.mode == "measure" && mode != "measure") {
+                for(var i=0, len=this.measureDivs.length; i<len; i++) {
+                    if (this.measureDivs[i]) { 
+                        this.map.layerContainerDiv.removeChild(this.measureDivs[i]);
+                    }
+                }
+                this.measureDivs = [];
+                this.measureStart = null;
+            }
+            this.mode = mode;
+            if (this.buttons[mode]) {
+                OpenLayers.Util.modifyAlphaImageDiv(this.buttons[mode], null, null, null, this.buttons[mode].activeImgLocation);
+            }
+            switch (this.mode) {
+                case "zoombox":
+                    this.map.div.style.cursor = "crosshair";
+                    break;
+                default:
+                    this.map.div.style.cursor = "";
+                    break;
+            }
+
+        } 
+    }, 
+
+    /**
+     * Method: leaveMode
+     */
+    leaveMode: function() {
+        this.switchModeTo("pan");
+    },
+    
+    /**
+     * Method: defaultMouseMove
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseMove: function (evt) {
+        if (this.mouseDragStart != null) {
+            switch (this.mode) {
+                case "zoombox": 
+                    var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x);
+                    var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y);
+                    this.zoomBox.style.width = Math.max(1, deltaX) + "px";
+                    this.zoomBox.style.height = Math.max(1, deltaY) + "px";
+                    if (evt.xy.x < this.mouseDragStart.x) {
+                        this.zoomBox.style.left = evt.xy.x+"px";
+                    }
+                    if (evt.xy.y < this.mouseDragStart.y) {
+                        this.zoomBox.style.top = evt.xy.y+"px";
+                    }
+                    break;
+                default:
+                    var deltaX = this.mouseDragStart.x - evt.xy.x;
+                    var deltaY = this.mouseDragStart.y - evt.xy.y;
+                    var size = this.map.getSize();
+                    var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX,
+                                                     size.h / 2 + deltaY);
+                    var newCenter = this.map.getLonLatFromViewPortPx( newXY ); 
+                    this.map.setCenter(newCenter, null, true);
+                    this.mouseDragStart = evt.xy.clone();
+            }
+            this.performedDrag = true;
+        }
+    },
+
+    /**
+     * Method: defaultMouseUp
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseUp: function (evt) {
+        if (!OpenLayers.Event.isLeftClick(evt)) {
+            return;
+        }
+        switch (this.mode) {
+            case "zoombox":
+                this.zoomBoxEnd(evt);
+                if (this.startViaKeyboard) {
+                    this.leaveMode();
+                }
+                break;
+            case "pan":
+                if (this.performedDrag) {
+                    this.map.setCenter(this.map.center);
+                }        
+        }
+        document.onselectstart = null;
+        this.mouseDragStart = null;
+        this.map.div.style.cursor = "default";
+    },
+
+    /**
+     * Method: defaultMouseOut
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultMouseOut: function (evt) {
+        if (this.mouseDragStart != null
+            && OpenLayers.Util.mouseLeft(evt, this.map.viewPortDiv)) {
+            if (this.zoomBox) {
+                this.removeZoomBox();
+                if (this.startViaKeyboard) {
+                    this.leaveMode();
+                }
+            }
+            this.mouseDragStart = null;
+            this.map.div.style.cursor = "default";
+        }
+    },
+
+    /**
+     * Method: defaultClick
+     *
+     * Parameters:
+     * evt - {Event} 
+     */
+    defaultClick: function (evt) {
+        if (this.performedDrag)  {
+            this.performedDrag = false;
+            return false;
+        }
+    },
+    
+    CLASS_NAME: "OpenLayers.Control.MouseToolbar"
+});
+
+OpenLayers.Control.MouseToolbar.X = 6;
+OpenLayers.Control.MouseToolbar.Y = 300;
+
+/**
+ * Class: OpenLayers.Layer.Grid
+ */
+
+OpenLayers.Util.extend(OpenLayers.Layer.Grid.prototype, {
+
+    /**
+     * Method: getGridBounds
+     * Deprecated. This function will be removed in 3.0. Please use 
+     *     getTilesBounds() instead.
+     * 
+     * Returns:
+     * {<OpenLayers.Bounds>} A Bounds object representing the bounds of all the
+     * currently loaded tiles (including those partially or not at all seen 
+     * onscreen)
+     */
+    getGridBounds: function() {
+        var msg = "The getGridBounds() function is deprecated. It will be " +
+                  "removed in 3.0. Please use getTilesBounds() instead.";
+        OpenLayers.Console.warn(msg);
+        return this.getTilesBounds();
+    }
+});
+
+/**
+ * Class: OpenLayers.Format.XML
+ */
+OpenLayers.Util.extend(OpenLayers.Format.XML.prototype, {
+
+    /**
+     * APIMethod: concatChildValues
+     * *Deprecated*. Use <getChildValue> instead.
+     *
+     * Concatenate the value of all child nodes if any exist, or return an
+     *     optional default string.  Returns an empty string if no children
+     *     exist and no default value is supplied.  Not optimized for large
+     *     numbers of child nodes.
+     *
+     * Parameters:
+     * node - {DOMElement} The element used to look for child values.
+     * def - {String} Optional string to return in the event that no
+     *     child exist.
+     *
+     * Returns:
+     * {String} The concatenated value of all child nodes of the given node.
+     */
+    concatChildValues: function(node, def) {
+        var value = "";
+        var child = node.firstChild;
+        var childValue;
+        while(child) {
+            childValue = child.nodeValue;
+            if(childValue) {
+                value += childValue;
+            }
+            child = child.nextSibling;
+        }
+        if(value == "" && def != undefined) {
+            value = def;
+        }
+        return value;
+    }
+
+});
+
+/**
+ * Class: OpenLayers.Layer.WMS.Post
+ * Instances of OpenLayers.Layer.WMS.Post are used to retrieve data from OGC
+ * 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, {
+
+    /**
+     * APIProperty: unsupportedBrowsers
+     * {Array} Array with browsers, which should use the HTTP-GET protocol 
+     * instead of HTTP-POST for fetching tiles from a WMS .
+     * Defaults to ["mozilla", "firefox", "opera"], because Opera is not able 
+     * to show transparent images in IFrames and Firefox/Mozilla has some ugly 
+     * 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.BROWSER_NAME>.
+     */
+    unsupportedBrowsers: ["mozilla", "firefox", "opera"],
+
+    /**
+     * Property: SUPPORTED_TRANSITIONS
+     * {Array} 
+     * no supported transitions for this type of layer, because it is not
+     * possible to modify the initialized tiles (iframes)
+     */
+    SUPPORTED_TRANSITIONS: [],
+    
+    /**
+     * Property: usePost
+     * {Boolean}
+     */
+    usePost: null,
+
+    /**
+     * Constructor: OpenLayers.Layer.WMS.Post
+     * Creates a new WMS layer object.
+     *
+     * Example:
+     * (code)
+     * var wms = new OpenLayers.Layer.WMS.Post(
+     *  "NASA Global Mosaic",
+     *  "http://wms.jpl.nasa.gov/wms.cgi",
+     *  {layers: "modis, global_mosaic"});
+     * (end)
+     *
+     * Parameters:
+     * name - {String} A name for the layer
+     * url - {String} Base url for the WMS
+     *                (e.g. http://wms.jpl.nasa.gov/wms.cgi)
+     * params - {Object} An object with key/value pairs representing the
+     *                   GetMap query string parameters and parameter values.
+     * options - {Object} Hashtable of extra options to tag onto the layer.
+     */
+    initialize: function(name, url, params, options) {
+        var newArguments = [];
+        newArguments.push(name, url, params, options);
+        OpenLayers.Layer.WMS.prototype.initialize.apply(this, newArguments);
+
+        this.usePost = OpenLayers.Util.indexOf(
+            this.unsupportedBrowsers, OpenLayers.BROWSER_NAME) == -1;
+    },
+    
+    /**
+     * Method: addTile
+     * addTile creates a tile, initializes it and adds it as iframe to the
+     * layer div.
+     *
+     * Parameters:
+     * bounds - {<OpenLayers.Bounds>}
+     * position - {<OpenLayers.Pixel>}
+     *
+     * Returns:
+     * {<OpenLayers.Tile.Image.IFrame>} The added OpenLayers.Tile.Image.IFrame
+     */
+    addTile: function(bounds,position) {
+        return new OpenLayers.Tile.Image(
+            this, position, bounds, null, this.tileSize, {
+                maxGetUrlLength: this.usePost ? 0 : null
+            });
+    },
+
+    CLASS_NAME: 'OpenLayers.Layer.WMS.Post'
+});
+
+/**
+ * Class: OpenLayers.Layer.WMS.Untiled
+ * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.WMS and 
+ *     pass the option 'singleTile' as true.
+ * 
+ * Inherits from: 
+ *  - <OpenLayers.Layer.WMS>
+ */
+OpenLayers.Layer.WMS.Untiled = OpenLayers.Class(OpenLayers.Layer.WMS, {
+
+    /**
+     * APIProperty: singleTile
+     * {singleTile} Always true for untiled.
+     */
+    singleTile: true,
+
+    /**
+     * Constructor: OpenLayers.Layer.WMS.Untiled
+     *
+     * Parameters:
+     * name - {String} 
+     * url - {String} 
+     * params - {Object} 
+     * options - {Object} 
+     */
+    initialize: function(name, url, params, options) {
+        OpenLayers.Layer.WMS.prototype.initialize.apply(this, arguments);
+        
+        var msg = "The OpenLayers.Layer.WMS.Untiled class is deprecated and " +
+                  "will be removed in 3.0. Instead, you should use the " +
+                  "normal OpenLayers.Layer.WMS class, passing it the option " +
+                  "'singleTile' as true.";
+        OpenLayers.Console.warn(msg);
+    },    
+
+    /**
+     * Method: clone
+     * Create a clone of this layer
+     *
+     * Returns:
+     * {<OpenLayers.Layer.WMS.Untiled>} An exact clone of this layer
+     */
+    clone: function (obj) {
+        
+        if (obj == null) {
+            obj = new OpenLayers.Layer.WMS.Untiled(this.name,
+                                                   this.url,
+                                                   this.params,
+                                                   this.getOptions());
+        }
+
+        //get all additions from superclasses
+        obj = OpenLayers.Layer.WMS.prototype.clone.apply(this, [obj]);
+
+        // copy/set any non-init, non-simple values here
+
+        return obj;
+    }, 
+
+    CLASS_NAME: "OpenLayers.Layer.WMS.Untiled"
+});
+
+/**
+ * Class: OpenLayers.Layer.MapServer.Untiled
+ * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.MapServer
+ *     and pass the option 'singleTile' as true.
+ * 
+ * Inherits from: 
+ *  - <OpenLayers.Layer.MapServer>
+ */
+OpenLayers.Layer.MapServer.Untiled = OpenLayers.Class(OpenLayers.Layer.MapServer, {
+
+    /**
+     * APIProperty: singleTile
+     * {singleTile} Always true for untiled.
+     */
+    singleTile: true,
+
+    /**
+     * Constructor: OpenLayers.Layer.MapServer.Untiled
+     *
+     * Parameters:
+     * name - {String} 
+     * url - {String} 
+     * params - {Object} 
+     * options - {Object} 
+     */
+    initialize: function(name, url, params, options) {
+        OpenLayers.Layer.MapServer.prototype.initialize.apply(this, arguments);
+        
+        var msg = "The OpenLayers.Layer.MapServer.Untiled class is deprecated and " +
+                  "will be removed in 3.0. Instead, you should use the " +
+                  "normal OpenLayers.Layer.MapServer class, passing it the option " +
+                  "'singleTile' as true.";
+        OpenLayers.Console.warn(msg);
+    },    
+
+    /**
+     * Method: clone
+     * Create a clone of this layer
+     *
+     * Returns:
+     * {<OpenLayers.Layer.MapServer.Untiled>} An exact clone of this layer
+     */
+    clone: function (obj) {
+        
+        if (obj == null) {
+            obj = new OpenLayers.Layer.MapServer.Untiled(this.name,
+                                                         this.url,
+                                                         this.params,
+                                                         this.getOptions());
+        }
+
+        //get all additions from superclasses
+        obj = OpenLayers.Layer.MapServer.prototype.clone.apply(this, [obj]);
+
+        // copy/set any non-init, non-simple values here
+        
+        return obj;
+    }, 
+
+    CLASS_NAME: "OpenLayers.Layer.MapServer.Untiled"
+});
+
+/**
+ * Class: OpenLayers.Tile.WFS
+ * Instances of OpenLayers.Tile.WFS are used to manage the image tiles
+ * used by various layers.  Create a new image tile with the
+ * <OpenLayers.Tile.WFS> constructor.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Tile>
+ */
+OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, {
+
+    /**
+     * Property: features
+     * {Array(<OpenLayers.Feature>)} list of features in this tile
+     */
+    features: null,
+
+    /**
+     * Property: url
+     * {String}
+     */
+    url: null,
+
+    /**
+     * Property: request
+     * {<OpenLayers.Request.XMLHttpRequest>}
+     */
+    request: null,
+
+    /** TBD 3.0 - reorder the parameters to the init function to put URL
+     *             as last, so we can continue to call tile.initialize()
+     *             without changing the arguments.
+     *
+     * Constructor: OpenLayers.Tile.WFS
+     * Constructor for a new <OpenLayers.Tile.WFS> instance.
+     *
+     * Parameters:
+     * layer - {<OpenLayers.Layer>} layer that the tile will go in.
+     * position - {<OpenLayers.Pixel>}
+     * bounds - {<OpenLayers.Bounds>}
+     * url - {<String>}
+     * size - {<OpenLayers.Size>}
+     */
+    initialize: function(layer, position, bounds, url, size) {
+        OpenLayers.Tile.prototype.initialize.apply(this, arguments);
+        this.url = url;
+        this.features = [];
+    },
+
+    /**
+     * APIMethod: destroy
+     * nullify references to prevent circular references and memory leaks
+     */
+    destroy: function() {
+        OpenLayers.Tile.prototype.destroy.apply(this, arguments);
+        this.destroyAllFeatures();
+        this.features = null;
+        this.url = null;
+        if(this.request) {
+            this.request.abort();
+            //this.request.destroy();
+            this.request = null;
+        }
+    },
+
+    /**
+     * Method: clear
+     *  Clear the tile of any bounds/position-related data so that it can
+     *   be reused in a new location.
+     */
+    clear: function() {
+        this.destroyAllFeatures();
+    },
+
+    /**
+     * Method: draw
+     * Check that a tile should be drawn, and load features for it.
+     */
+    draw:function() {
+        if (OpenLayers.Tile.prototype.draw.apply(this, arguments)) {
+            if (this.isLoading) {
+                //if already loading, send 'reload' instead of 'loadstart'.
+                this.events.triggerEvent("reload");
+            } else {
+                this.isLoading = true;
+                this.events.triggerEvent("loadstart");
+            }
+            this.loadFeaturesForRegion(this.requestSuccess);
+        }
+    },
+
+    /**
+    * Method: loadFeaturesForRegion
+    * Abort any pending requests and issue another request for data.
+    *
+    * Input are function pointers for what to do on success and failure.
+    *
+    * Parameters:
+    * success - {function}
+    * failure - {function}
+    */
+    loadFeaturesForRegion:function(success, failure) {
+        if(this.request) {
+            this.request.abort();
+        }
+        this.request = OpenLayers.Request.GET({
+            url: this.url,
+            success: success,
+            failure: failure,
+            scope: this
+        });
+    },
+
+    /**
+    * Method: requestSuccess
+    * Called on return from request succcess. Adds results via
+    * layer.addFeatures in vector mode, addResults otherwise.
+    *
+    * Parameters:
+    * request - {<OpenLayers.Request.XMLHttpRequest>}
+    */
+    requestSuccess:function(request) {
+        if (this.features) {
+            var doc = request.responseXML;
+            if (!doc || !doc.documentElement) {
+                doc = request.responseText;
+            }
+            if (this.layer.vectorMode) {
+                this.layer.addFeatures(this.layer.formatObject.read(doc));
+            } else {
+                var xml = new OpenLayers.Format.XML();
+                if (typeof doc == "string") {
+                    doc = xml.read(doc);
+                }
+                var resultFeatures = xml.getElementsByTagNameNS(
+                    doc, "http://www.opengis.net/gml", "featureMember"
+                );
+                this.addResults(resultFeatures);
+            }
+        }
+        if (this.events) {
+            this.events.triggerEvent("loadend");
+        }
+
+        //request produced with success, we can delete the request object.
+        //this.request.destroy();
+        this.request = null;
+    },
+
+    /**
+     * Method: addResults
+     * Construct new feature via layer featureClass constructor, and add to
+     * this.features.
+     *
+     * Parameters:
+     * results - {Object}
+     */
+    addResults: function(results) {
+        for (var i=0; i < results.length; i++) {
+            var feature = new this.layer.featureClass(this.layer,
+                                                      results[i]);
+            this.features.push(feature);
+        }
+    },
+
+
+    /**
+     * Method: destroyAllFeatures
+     * Iterate through and call destroy() on each feature, removing it from
+     *   the local array
+     */
+    destroyAllFeatures: function() {
+        while(this.features.length > 0) {
+            var feature = this.features.shift();
+            feature.destroy();
+        }
+    },
+
+    CLASS_NAME: "OpenLayers.Tile.WFS"
+  }
+);
+
+/**
+ * Class: OpenLayers.Feature.WFS
+ * WFS handling class, for use as a featureClass on the WFS layer for handling
+ * 'point' WFS types. Good for subclassing when creating a custom WFS like
+ * XML application.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Feature>
+ */
+OpenLayers.Feature.WFS = OpenLayers.Class(OpenLayers.Feature, {
+
+    /**
+     * Constructor: OpenLayers.Feature.WFS
+     * Create a WFS feature.
+     *
+     * Parameters:
+     * layer - {<OpenLayers.Layer>}
+     * xmlNode - {XMLNode}
+     */
+    initialize: function(layer, xmlNode) {
+        var newArguments = arguments;
+        var data = this.processXMLNode(xmlNode);
+        newArguments = new Array(layer, data.lonlat, data);
+        OpenLayers.Feature.prototype.initialize.apply(this, newArguments);
+        this.createMarker();
+        this.layer.addMarker(this.marker);
+    },
+
+    /**
+     * Method: destroy
+     * nullify references to prevent circular references and memory leaks
+     */
+    destroy: function() {
+        if (this.marker != null) {
+            this.layer.removeMarker(this.marker);
+        }
+        OpenLayers.Feature.prototype.destroy.apply(this, arguments);
+    },
+
+    /**
+     * Method: processXMLNode
+     * When passed an xmlNode, parses it for a GML point, and passes
+     * back an object describing that point.
+     *
+     * For subclasses of Feature.WFS, this is the feature to change.
+     *
+     * Parameters:
+     * xmlNode - {XMLNode}
+     *
+     * Returns:
+     * {Object} Data Object with 'id', 'lonlat', and private properties set
+     */
+    processXMLNode: function(xmlNode) {
+        //this should be overridden by subclasses
+        // must return an Object with 'id' and 'lonlat' values set
+        var point = OpenLayers.Ajax.getElementsByTagNameNS(xmlNode, "http://www.opengis.net/gml", "gml", "Point");
+        var text  = OpenLayers.Util.getXmlNodeValue(OpenLayers.Ajax.getElementsByTagNameNS(point[0], "http://www.opengis.net/gml","gml", "coordinates")[0]);
+        var floats = text.split(",");
+        return {lonlat: new OpenLayers.LonLat(parseFloat(floats[0]),
+                                              parseFloat(floats[1])),
+                id: null};
+
+    },
+
+    CLASS_NAME: "OpenLayers.Feature.WFS"
+});
+
+
+/**
+ * Class: OpenLayers.Layer.WFS
+ * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.Vector
+ *     with a Protocol.WFS and one or more Strategies.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Layer.Vector>
+ *  - <OpenLayers.Layer.Markers>
+ */
+OpenLayers.Layer.WFS = OpenLayers.Class(
+  OpenLayers.Layer.Vector, OpenLayers.Layer.Markers, {
+
+    /**
+     * APIProperty: isBaseLayer
+     * {Boolean} WFS layer is not a base layer by default.
+     */
+    isBaseLayer: false,
+
+    /**
+     * Property: tile
+     * {<OpenLayers.Tile.WFS>}
+     */
+    tile: null,
+
+    /**
+     * APIProperty: ratio
+     * {Float} The ratio property determines the size of the serverside query
+     *    relative to the map viewport size. By default, we load an area twice
+     *    as big as the map, to allow for panning without immediately reload.
+     *    Setting this to 1 will cause the area of the WFS request to match
+     *    the map area exactly. It is recommended to set this to some number
+     *    at least slightly larger than 1, otherwise accidental clicks can
+     *    cause a data reload, by moving the map only 1 pixel.
+     */
+    ratio: 2,
+
+    /**
+     * Property: DEFAULT_PARAMS
+     * {Object} Hashtable of default key/value parameters
+     */
+    DEFAULT_PARAMS: { service: "WFS",
+                      version: "1.0.0",
+                      request: "GetFeature"
+                    },
+
+    /**
+     * APIProperty: featureClass
+     * {<OpenLayers.Feature>} If featureClass is defined, an old-style markers
+     *     based WFS layer is created instead of a new-style vector layer. If
+     *     sent, this should be a subclass of OpenLayers.Feature
+     */
+    featureClass: null,
+
+    /**
+      * APIProperty: format
+      * {<OpenLayers.Format>} The format you want the data to be parsed with.
+      * Must be passed in the constructor. Should be a class, not an instance.
+      * This option can only be used if no featureClass is passed / vectorMode
+      * is false: if a featureClass is passed, then this parameter is ignored.
+      */
+    format: null,
+
+    /**
+     * Property: formatObject
+     * {<OpenLayers.Format>} Internally created/managed format object, used by
+     * the Tile to parse data.
+     */
+    formatObject: null,
+
+    /**
+     * APIProperty: formatOptions
+     * {Object} Hash of options which should be passed to the format when it is
+     * created. Must be passed in the constructor.
+     */
+    formatOptions: null,
+
+    /**
+     * Property: vectorMode
+     * {Boolean} Should be calculated automatically. Determines whether the
+     *     layer is in vector mode or marker mode.
+     */
+    vectorMode: true,
+
+    /**
+     * APIProperty: encodeBBOX
+     * {Boolean} Should the BBOX commas be encoded? The WMS spec says 'no',
+     *     but some services want it that way. Default false.
+     */
+    encodeBBOX: false,
+
+    /**
+     * APIProperty: extractAttributes
+     * {Boolean} Should the WFS layer parse attributes from the retrieved
+     *     GML? Defaults to false. If enabled, parsing is slower, but
+     *     attributes are available in the attributes property of
+     *     layer features.
+     */
+    extractAttributes: false,
+
+    /**
+     * Constructor: OpenLayers.Layer.WFS
+     *
+     * Parameters:
+     * name - {String}
+     * url - {String}
+     * params - {Object}
+     * options - {Object} Hashtable of extra options to tag onto the layer
+     */
+    initialize: function(name, url, params, options) {
+        if (options == undefined) { options = {}; }
+
+        if (options.featureClass ||
+            !OpenLayers.Layer.Vector ||
+            !OpenLayers.Feature.Vector) {
+            this.vectorMode = false;
+        }
+
+        // Uppercase params
+        params = OpenLayers.Util.upperCaseObject(params);
+
+        // Turn off error reporting, browsers like Safari may work
+        // depending on the setup, and we don't want an unneccesary alert.
+        OpenLayers.Util.extend(options, {'reportError': false});
+        var newArguments = [];
+        newArguments.push(name, options);
+        OpenLayers.Layer.Vector.prototype.initialize.apply(this, newArguments);
+        if (!this.renderer || !this.vectorMode) {
+            this.vectorMode = false;
+            if (!options.featureClass) {
+                options.featureClass = OpenLayers.Feature.WFS;
+            }
+            OpenLayers.Layer.Markers.prototype.initialize.apply(this,
+                                                                newArguments);
+        }
+
+        if (this.params && this.params.typename && !this.options.typename) {
+            this.options.typename = this.params.typename;
+        }
+
+        if (!this.options.geometry_column) {
+            this.options.geometry_column = "the_geom";
+        }
+
+        this.params = OpenLayers.Util.applyDefaults(
+            params,
+            OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)
+        );
+        this.url = url;
+    },
+
+
+    /**
+     * APIMethod: destroy
+     */
+    destroy: function() {
+        if (this.vectorMode) {
+            OpenLayers.Layer.Vector.prototype.destroy.apply(this, arguments);
+        } else {
+            OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments);
+        }
+        if (this.tile) {
+            this.tile.destroy();
+        }
+        this.tile = null;
+
+        this.ratio = null;
+        this.featureClass = null;
+        this.format = null;
+
+        if (this.formatObject && this.formatObject.destroy) {
+            this.formatObject.destroy();
+        }
+        this.formatObject = null;
+
+        this.formatOptions = null;
+        this.vectorMode = null;
+        this.encodeBBOX = null;
+        this.extractAttributes = null;
+    },
+
+    /**
+     * Method: setMap
+     *
+     * Parameters:
+     * map - {<OpenLayers.Map>}
+     */
+    setMap: function(map) {
+        if (this.vectorMode) {
+            OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments);
+
+            var options = {
+              'extractAttributes': this.extractAttributes
+            };
+
+            OpenLayers.Util.extend(options, this.formatOptions);
+            if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
+                options.externalProjection = this.projection;
+                options.internalProjection = this.map.getProjectionObject();
+            }
+
+            this.formatObject = this.format ? new this.format(options) : new OpenLayers.Format.GML(options);
+        } else {
+            OpenLayers.Layer.Markers.prototype.setMap.apply(this, arguments);
+        }
+    },
+
+    /**
+     * Method: moveTo
+     *
+     * Parameters:
+     * bounds - {<OpenLayers.Bounds>}
+     * zoomChanged - {Boolean}
+     * dragging - {Boolean}
+     */
+    moveTo:function(bounds, zoomChanged, dragging) {
+        if (this.vectorMode) {
+            OpenLayers.Layer.Vector.prototype.moveTo.apply(this, arguments);
+        } else {
+            OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments);
+        }
+
+        // don't load wfs features while dragging, wait for drag end
+        if (dragging) {
+            // TBD try to hide the vector layer while dragging
+            // this.setVisibility(false);
+            // this will probably help for panning performances
+            return false;
+        }
+
+        if ( zoomChanged ) {
+            if (this.vectorMode) {
+                this.renderer.clear();
+            }
+        }
+
+    //DEPRECATED - REMOVE IN 3.0
+        // don't load data if current zoom level doesn't match
+        if (this.options.minZoomLevel) {
+            OpenLayers.Console.warn(OpenLayers.i18n('minZoomLevelError'));
+
+            if (this.map.getZoom() < this.options.minZoomLevel) {
+                return null;
+            }
+        }
+
+        if (bounds == null) {
+            bounds = this.map.getExtent();
+        }
+
+        var firstRendering = (this.tile == null);
+
+        //does the new bounds to which we need to move fall outside of the
+        // current tile's bounds?
+        var outOfBounds = (!firstRendering &&
+                           !this.tile.bounds.containsBounds(bounds));
+
+        if (zoomChanged || firstRendering || (!dragging && outOfBounds)) {
+            //determine new tile bounds
+            var center = bounds.getCenterLonLat();
+            var tileWidth = bounds.getWidth() * this.ratio;
+            var tileHeight = bounds.getHeight() * this.ratio;
+            var tileBounds =
+                new OpenLayers.Bounds(center.lon - (tileWidth / 2),
+                                      center.lat - (tileHeight / 2),
+                                      center.lon + (tileWidth / 2),
+                                      center.lat + (tileHeight / 2));
+
+            //determine new tile size
+            var tileSize = this.map.getSize();
+            tileSize.w = tileSize.w * this.ratio;
+            tileSize.h = tileSize.h * this.ratio;
+
+            //determine new position (upper left corner of new bounds)
+            var ul = new OpenLayers.LonLat(tileBounds.left, tileBounds.top);
+            var pos = this.map.getLayerPxFromLonLat(ul);
+
+            //formulate request url string
+            var url = this.getFullRequestString();
+
+            var params = null;
+
+            // Cant combine "filter" and "BBOX". This is a cheap hack to help
+            // people out who can't migrate to the WFS protocol immediately.
+            var filter = this.params.filter || this.params.FILTER;
+            if (filter) {
+                params = {FILTER: filter};
+            }
+            else {
+                params = {BBOX: this.encodeBBOX ? tileBounds.toBBOX()
+                                                    : tileBounds.toArray()};
+            }
+
+            if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
+                var projectedBounds = tileBounds.clone();
+                projectedBounds.transform(this.map.getProjectionObject(),
+                                          this.projection);
+                if (!filter){
+                    params.BBOX = this.encodeBBOX ? projectedBounds.toBBOX()
+                                                : projectedBounds.toArray();
+                }
+            }
+
+            url += "&" + OpenLayers.Util.getParameterString(params);
+
+            if (!this.tile) {
+                this.tile = new OpenLayers.Tile.WFS(this, pos, tileBounds,
+                                                     url, tileSize);
+                this.addTileMonitoringHooks(this.tile);
+                this.tile.draw();
+            } else {
+                if (this.vectorMode) {
+                    this.destroyFeatures();
+                    this.renderer.clear();
+                } else {
+                    this.clearMarkers();
+                }
+                this.removeTileMonitoringHooks(this.tile);
+                this.tile.destroy();
+
+                this.tile = null;
+                this.tile = new OpenLayers.Tile.WFS(this, pos, tileBounds,
+                                                     url, tileSize);
+                this.addTileMonitoringHooks(this.tile);
+                this.tile.draw();
+            }
+        }
+    },
+
+    /**
+     * Method: addTileMonitoringHooks
+     * This function takes a tile as input and adds the appropriate hooks to
+     *     the tile so that the layer can keep track of the loading tile
+     *     (making sure to check that the tile is always the layer's current
+     *     tile before taking any action).
+     *
+     * Parameters:
+     * tile - {<OpenLayers.Tile>}
+     */
+    addTileMonitoringHooks: function(tile) {
+        tile.onLoadStart = function() {
+            //if this is the the layer's current tile, then trigger
+            // a 'loadstart'
+            if (this == this.layer.tile) {
+                this.layer.events.triggerEvent("loadstart");
+            }
+        };
+        tile.events.register("loadstart", tile, tile.onLoadStart);
+
+        tile.onLoadEnd = function() {
+            //if this is the the layer's current tile, then trigger
+            // a 'tileloaded' and 'loadend'
+            if (this == this.layer.tile) {
+                this.layer.events.triggerEvent("tileloaded");
+                this.layer.events.triggerEvent("loadend");
+            }
+        };
+        tile.events.register("loadend", tile, tile.onLoadEnd);
+        tile.events.register("unload", tile, tile.onLoadEnd);
+    },
+
+    /**
+     * Method: removeTileMonitoringHooks
+     * This function takes a tile as input and removes the tile hooks
+     *     that were added in addTileMonitoringHooks()
+     *
+     * Parameters:
+     * tile - {<OpenLayers.Tile>}
+     */
+    removeTileMonitoringHooks: function(tile) {
+        tile.unload();
+        tile.events.un({
+            "loadstart": tile.onLoadStart,
+            "loadend": tile.onLoadEnd,
+            "unload": tile.onLoadEnd,
+            scope: tile
+        });
+    },
+
+    /**
+     * Method: onMapResize
+     * Call the onMapResize method of the appropriate parent class.
+     */
+    onMapResize: function() {
+        if(this.vectorMode) {
+            OpenLayers.Layer.Vector.prototype.onMapResize.apply(this,
+                                                                arguments);
+        } else {
+            OpenLayers.Layer.Markers.prototype.onMapResize.apply(this,
+                                                                 arguments);
+        }
+    },
+
+    /**
+     * Method: display
+     * Call the display method of the appropriate parent class.
+     */
+    display: function() {
+        if(this.vectorMode) {
+            OpenLayers.Layer.Vector.prototype.display.apply(this,
+                                                                arguments);
+        } else {
+            OpenLayers.Layer.Markers.prototype.display.apply(this,
+                                                                 arguments);
+        }
+    },
+
+    /**
+     * APIMethod: mergeNewParams
+     * Modify parameters for the layer and redraw.
+     *
+     * Parameters:
+     * newParams - {Object}
+     */
+    mergeNewParams:function(newParams) {
+        var upperParams = OpenLayers.Util.upperCaseObject(newParams);
+        var newArguments = [upperParams];
+        return OpenLayers.Layer.HTTPRequest.prototype.mergeNewParams.apply(this,
+                                                                 newArguments);
+    },
+
+    /**
+     * APIMethod: clone
+     *
+     * Parameters:
+     * obj - {Object}
+     *
+     * Returns:
+     * {<OpenLayers.Layer.WFS>} An exact clone of this OpenLayers.Layer.WFS
+     */
+    clone: function (obj) {
+
+        if (obj == null) {
+            obj = new OpenLayers.Layer.WFS(this.name,
+                                           this.url,
+                                           this.params,
+                                           this.getOptions());
+        }
+
+        //get all additions from superclasses
+        if (this.vectorMode) {
+            obj = OpenLayers.Layer.Vector.prototype.clone.apply(this, [obj]);
+        } else {
+            obj = OpenLayers.Layer.Markers.prototype.clone.apply(this, [obj]);
+        }
+
+        // copy/set any non-init, non-simple values here
+
+        return obj;
+    },
+
+    /**
+     * APIMethod: getFullRequestString
+     * combine the layer's url with its params and these newParams.
+     *
+     *    Add the SRS parameter from 'projection' -- this is probably
+     *     more eloquently done via a setProjection() method, but this
+     *     works for now and always.
+     *
+     * Parameters:
+     * newParams - {Object}
+     * altUrl - {String} Use this as the url instead of the layer's url
+     */
+    getFullRequestString:function(newParams, altUrl) {
+        var projectionCode = this.projection.getCode() || this.map.getProjection();
+        this.params.SRS = (projectionCode == "none") ? null : projectionCode;
+
+        return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(
+                                                    this, arguments);
+    },
+
+    /**
+     * APIMethod: commit
+     * Write out the data to a WFS server.
+     */
+    commit: function() {
+        if (!this.writer) {
+            var options = {};
+            if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
+                options.externalProjection = this.projection;
+                options.internalProjection = this.map.getProjectionObject();
+            }
+
+            this.writer = new OpenLayers.Format.WFS(options,this);
+        }
+
+        var data = this.writer.write(this.features);
+
+        OpenLayers.Request.POST({
+            url: this.url,
+            data: data,
+            success: this.commitSuccess,
+            failure: this.commitFailure,
+            scope: this
+        });
+    },
+
+    /**
+     * Method: commitSuccess
+     * Called when the Ajax request returns a response
+     *
+     * Parameters:
+     * response - {XmlNode} from server
+     */
+    commitSuccess: function(request) {
+        var response = request.responseText;
+        if (response.indexOf('SUCCESS') != -1) {
+            this.commitReport(OpenLayers.i18n("commitSuccess", {'response':response}));
+
+            for(var i = 0; i < this.features.length; i++) {
+                this.features[i].state = null;
+            }
+            // TBD redraw the layer or reset the state of features
+            // foreach features: set state to null
+        } else if (response.indexOf('FAILED') != -1 ||
+            response.indexOf('Exception') != -1) {
+            this.commitReport(OpenLayers.i18n("commitFailed", {'response':response}));
+        }
+    },
+
+    /**
+     * Method: commitFailure
+     * Called when the Ajax request fails
+     *
+     * Parameters:
+     * response - {XmlNode} from server
+     */
+    commitFailure: function(request) {},
+
+    /**
+     * APIMethod: commitReport
+     * Called with a 'success' message if the commit succeeded, otherwise
+     *     a failure message, and the full request text as a second parameter.
+     *     Override this function to provide custom transaction reporting.
+     *
+     * string - {String} reporting string
+     * response - {String} full XML response
+     */
+    commitReport: function(string, response) {
+        OpenLayers.Console.userError(string);
+    },
+
+
+    /**
+     * APIMethod: refresh
+     * Refreshes all the features of the layer
+     */
+    refresh: function() {
+        if (this.tile) {
+            if (this.vectorMode) {
+                this.renderer.clear();
+                this.features.length = 0;
+            } else {
+                this.clearMarkers();
+                this.markers.length = 0;
+            }
+            this.tile.draw();
+        }
+    },
+
+    /**
+     * APIMethod: getDataExtent
+     * Calculates the max extent which includes all of the layer data.
+     *
+     * Returns:
+     * {<OpenLayers.Bounds>}
+     */
+    getDataExtent: function () {
+        var extent;
+        //get all additions from superclasses
+        if (this.vectorMode) {
+            extent = OpenLayers.Layer.Vector.prototype.getDataExtent.apply(this);
+        } else {
+            extent = OpenLayers.Layer.Markers.prototype.getDataExtent.apply(this);
+        }
+
+        return extent;
+    },
+
+    /**
+     * APIMethod: setOpacity
+     * Call the setOpacity method of the appropriate parent class to set the
+     *     opacity.
+     *
+     * Parameters:
+     * opacity - {Float}
+     */
+    setOpacity: function (opacity) {
+        if (this.vectorMode) {
+            OpenLayers.Layer.Vector.prototype.setOpacity.apply(this, [opacity]);
+        } else {
+            OpenLayers.Layer.Markers.prototype.setOpacity.apply(this, [opacity]);
+        }
+    },
+
+    CLASS_NAME: "OpenLayers.Layer.WFS"
+});
+
+/**
+ * Class: OpenLayers.Layer.VirtualEarth
+ * *Deprecated*. Use <OpenLayers.Layer.Bing> instead.
+ *
+ * Instances of OpenLayers.Layer.VirtualEarth are used to display the data from
+ *     the Bing Maps AJAX Control (see e.g.
+ *     http://msdn.microsoft.com/library/bb429619.aspx). Create a VirtualEarth
+ *     layer with the <OpenLayers.Layer.VirtualEarth> constructor.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Layer.EventPane>
+ *  - <OpenLayers.Layer.FixedZoomLevels>
+ */
+OpenLayers.Layer.VirtualEarth = OpenLayers.Class(
+    OpenLayers.Layer.EventPane,
+    OpenLayers.Layer.FixedZoomLevels, {
+
+    /**
+     * Constant: MIN_ZOOM_LEVEL
+     * {Integer} 1
+     */
+    MIN_ZOOM_LEVEL: 1,
+
+    /**
+     * Constant: MAX_ZOOM_LEVEL
+     * {Integer} 19
+     */
+    MAX_ZOOM_LEVEL: 19,
+
+    /**
+     * Constant: RESOLUTIONS
+     * {Array(Float)} Hardcode these resolutions so that they are more closely
+     *                tied with the standard wms projection
+     */
+    RESOLUTIONS: [
+        1.40625,
+        0.703125,
+        0.3515625,
+        0.17578125,
+        0.087890625,
+        0.0439453125,
+        0.02197265625,
+        0.010986328125,
+        0.0054931640625,
+        0.00274658203125,
+        0.001373291015625,
+        0.0006866455078125,
+        0.00034332275390625,
+        0.000171661376953125,
+        0.0000858306884765625,
+        0.00004291534423828125,
+        0.00002145767211914062,
+        0.00001072883605957031,
+        0.00000536441802978515
+    ],
+
+    /**
+     * APIProperty: type
+     * {VEMapType}
+     */
+    type: null,
+
+    /**
+     * APIProperty: wrapDateLine
+     * {Boolean} Allow user to pan forever east/west.  Default is true.
+     *     Setting this to false only restricts panning if
+     *     <sphericalMercator> is true.
+     */
+    wrapDateLine: true,
+
+    /**
+     * APIProperty: sphericalMercator
+     * {Boolean} Should the map act as a mercator-projected map? This will
+     *     cause all interactions with the map to be in the actual map
+     *     projection, which allows support for vector drawing, overlaying
+     *     other maps, etc.
+     */
+    sphericalMercator: false,
+
+    /**
+     * APIProperty: animationEnabled
+     * {Boolean} If set to true, the transition between zoom levels will be
+     *     animated. Set to false to match the zooming experience of other
+     *     layer types. Default is true.
+     */
+    animationEnabled: true,
+
+    /**
+     * Constructor: OpenLayers.Layer.VirtualEarth
+     * Creates a new instance of a OpenLayers.Layer.VirtualEarth. If you use an
+     *     instance of OpenLayers.Layer.VirtualEarth in you map, you should set
+     *     the <OpenLayers.Map> option restrictedExtent to a meaningful value,
+     *     e.g.:
+     * (code)
+     * var map = new OpenLayers.Map( 'map', {
+     *     // other map options
+     *     restrictedExtent : OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
+     * } );
+     *
+     * var veLayer = new OpenLayers.Layer.VirtualEarth (
+     *     "Virtual Earth Layer"
+     * );
+     *
+     * map.addLayer( veLayer );
+     * (end)
+     *
+     * Parameters:
+     * name - {String}
+     * options - {Object}
+     */
+    initialize: function(name, options) {
+        OpenLayers.Layer.EventPane.prototype.initialize.apply(this, arguments);
+        OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this,
+                                                                    arguments);
+        if(this.sphericalMercator) {
+            OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator);
+            this.initMercatorParameters();
+        }
+    },
+
+    /**
+     * Method: loadMapObject
+     */
+    loadMapObject:function() {
+
+        // create div and set to same size as map
+        var veDiv = OpenLayers.Util.createDiv(this.name);
+        var sz = this.map.getSize();
+        veDiv.style.width = sz.w + "px";
+        veDiv.style.height = sz.h + "px";
+        this.div.appendChild(veDiv);
+
+        try { // crash prevention
+            this.mapObject = new VEMap(this.name);
+        } catch (e) { }
+
+        if (this.mapObject != null) {
+            try { // this is to catch a Mozilla bug without falling apart
+
+                // The fourth argument is whether the map is 'fixed' -- not
+                // draggable. See:
+                // http://blogs.msdn.com/virtualearth/archive/2007/09/28/locking-a-virtual-earth-map.aspx
+                //
+                this.mapObject.LoadMap(null, null, this.type, true);
+                this.mapObject.AttachEvent("onmousedown", OpenLayers.Function.True);
+
+            } catch (e) { }
+            this.mapObject.HideDashboard();
+            if(typeof this.mapObject.SetAnimationEnabled == "function") {
+                this.mapObject.SetAnimationEnabled(this.animationEnabled);
+            }
+        }
+
+        //can we do smooth panning? this is an unpublished method, so we need
+        // to be careful
+        if ( !this.mapObject ||
+             !this.mapObject.vemapcontrol ||
+             !this.mapObject.vemapcontrol.PanMap ||
+             (typeof this.mapObject.vemapcontrol.PanMap != "function")) {
+
+            this.dragPanMapObject = null;
+        }
+
+    },
+
+    /**
+     * Method: onMapResize
+     */
+    onMapResize: function() {
+        this.mapObject.Resize(this.map.size.w, this.map.size.h);
+    },
+
+    /**
+     * APIMethod: getWarningHTML
+     *
+     * Returns:
+     * {String} String with information on why layer is broken, how to get
+     *          it working.
+     */
+    getWarningHTML:function() {
+        return OpenLayers.i18n(
+            "getLayerWarning", {'layerType':'VE', 'layerLib':'VirtualEarth'}
+        );
+    },
+
+
+
+    /************************************
+     *                                  *
+     *   MapObject Interface Controls   *
+     *                                  *
+     ************************************/
+
+
+  // Get&Set Center, Zoom
+
+    /**
+     * APIMethod: setMapObjectCenter
+     * Set the mapObject to the specified center and zoom
+     *
+     * Parameters:
+     * center - {Object} MapObject LonLat format
+     * zoom - {int} MapObject zoom format
+     */
+    setMapObjectCenter: function(center, zoom) {
+        this.mapObject.SetCenterAndZoom(center, zoom);
+    },
+
+    /**
+     * APIMethod: getMapObjectCenter
+     *
+     * Returns:
+     * {Object} The mapObject's current center in Map Object format
+     */
+    getMapObjectCenter: function() {
+        return this.mapObject.GetCenter();
+    },
+
+    /**
+     * APIMethod: dragPanMapObject
+     *
+     * Parameters:
+     * dX - {Integer}
+     * dY - {Integer}
+     */
+    dragPanMapObject: function(dX, dY) {
+        this.mapObject.vemapcontrol.PanMap(dX, -dY);
+    },
+
+    /**
+     * APIMethod: getMapObjectZoom
+     *
+     * Returns:
+     * {Integer} The mapObject's current zoom, in Map Object format
+     */
+    getMapObjectZoom: function() {
+        return this.mapObject.GetZoomLevel();
+    },
+
+
+  // LonLat - Pixel Translation
+
+    /**
+     * APIMethod: getMapObjectLonLatFromMapObjectPixel
+     *
+     * Parameters:
+     * moPixel - {Object} MapObject Pixel format
+     *
+     * Returns:
+     * {Object} MapObject LonLat translated from MapObject Pixel
+     */
+    getMapObjectLonLatFromMapObjectPixel: function(moPixel) {
+        //the conditional here is to test if we are running the v6 of VE
+        return (typeof VEPixel != 'undefined')
+            ? this.mapObject.PixelToLatLong(moPixel)
+            : this.mapObject.PixelToLatLong(moPixel.x, moPixel.y);
+    },
+
+    /**
+     * APIMethod: getMapObjectPixelFromMapObjectLonLat
+     *
+     * Parameters:
+     * moLonLat - {Object} MapObject LonLat format
+     *
+     * Returns:
+     * {Object} MapObject Pixel transtlated from MapObject LonLat
+     */
+    getMapObjectPixelFromMapObjectLonLat: function(moLonLat) {
+        return this.mapObject.LatLongToPixel(moLonLat);
+    },
+
+
+    /************************************
+     *                                  *
+     *       MapObject Primitives       *
+     *                                  *
+     ************************************/
+
+
+  // LonLat
+
+    /**
+     * APIMethod: getLongitudeFromMapObjectLonLat
+     *
+     * Parameters:
+     * moLonLat - {Object} MapObject LonLat format
+     *
+     * Returns:
+     * {Float} Longitude of the given MapObject LonLat
+     */
+    getLongitudeFromMapObjectLonLat: function(moLonLat) {
+        return this.sphericalMercator ?
+            this.forwardMercator(moLonLat.Longitude, moLonLat.Latitude).lon :
+            moLonLat.Longitude;
+    },
+
+    /**
+     * APIMethod: getLatitudeFromMapObjectLonLat
+     *
+     * Parameters:
+     * moLonLat - {Object} MapObject LonLat format
+     *
+     * Returns:
+     * {Float} Latitude of the given MapObject LonLat
+     */
+    getLatitudeFromMapObjectLonLat: function(moLonLat) {
+        return this.sphericalMercator ?
+            this.forwardMercator(moLonLat.Longitude, moLonLat.Latitude).lat :
+            moLonLat.Latitude;
+    },
+
+    /**
+     * APIMethod: getMapObjectLonLatFromLonLat
+     *
+     * Parameters:
+     * lon - {Float}
+     * lat - {Float}
+     *
+     * Returns:
+     * {Object} MapObject LonLat built from lon and lat params
+     */
+    getMapObjectLonLatFromLonLat: function(lon, lat) {
+        var veLatLong;
+        if(this.sphericalMercator) {
+            var lonlat = this.inverseMercator(lon, lat);
+            veLatLong = new VELatLong(lonlat.lat, lonlat.lon);
+        } else {
+            veLatLong = new VELatLong(lat, lon);
+        }
+        return veLatLong;
+    },
+
+  // Pixel
+
+    /**
+     * APIMethod: getXFromMapObjectPixel
+     *
+     * Parameters:
+     * moPixel - {Object} MapObject Pixel format
+     *
+     * Returns:
+     * {Integer} X value of the MapObject Pixel
+     */
+    getXFromMapObjectPixel: function(moPixel) {
+        return moPixel.x;
+    },
+
+    /**
+     * APIMethod: getYFromMapObjectPixel
+     *
+     * Parameters:
+     * moPixel - {Object} MapObject Pixel format
+     *
+     * Returns:
+     * {Integer} Y value of the MapObject Pixel
+     */
+    getYFromMapObjectPixel: function(moPixel) {
+        return moPixel.y;
+    },
+
+    /**
+     * APIMethod: getMapObjectPixelFromXY
+     *
+     * Parameters:
+     * x - {Integer}
+     * y - {Integer}
+     *
+     * Returns:
+     * {Object} MapObject Pixel from x and y parameters
+     */
+    getMapObjectPixelFromXY: function(x, y) {
+        //the conditional here is to test if we are running the v6 of VE
+        return (typeof VEPixel != 'undefined') ? new VEPixel(x, y)
+                         : new Msn.VE.Pixel(x, y);
+    },
+
+    CLASS_NAME: "OpenLayers.Layer.VirtualEarth"
+});
+
+/*
+ * Copyright 2007, Google Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  1. Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *  2. 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.
+ *  3. Neither the name of Google Inc. nor the names of its contributors may be
+ *     used to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * Sets up google.gears.*, which is *the only* supported way to access Gears.
+ *
+ * Circumvent this file at your own risk!
+ *
+ * In the future, Gears may automatically define google.gears.* without this
+ * file. Gears may use these objects to transparently fix bugs and compatibility
+ * issues. Applications that use the code below will continue to work seamlessly
+ * when that happens.
+ */
+
+(function() {
+  // We are already defined. Hooray!
+  if (window.google && google.gears) {
+    return;
+  }
+
+  var factory = null;
+
+  // Firefox
+  if (typeof GearsFactory != 'undefined') {
+    factory = new GearsFactory();
+  } else {
+    // IE
+    try {
+      factory = new ActiveXObject('Gears.Factory');
+      // privateSetGlobalObject is only required and supported on WinCE.
+      if (factory.getBuildInfo().indexOf('ie_mobile') != -1) {
+        factory.privateSetGlobalObject(this);
+      }
+    } catch (e) {
+      // Safari
+      if ((typeof navigator.mimeTypes != 'undefined')
+           && navigator.mimeTypes["application/x-googlegears"]) {
+        factory = document.createElement("object");
+        factory.style.display = "none";
+        factory.width = 0;
+        factory.height = 0;
+        factory.type = "application/x-googlegears";
+        document.documentElement.appendChild(factory);
+      }
+    }
+  }
+
+  // *Do not* define any objects if Gears is not installed. This mimics the
+  // behavior of Gears defining the objects in the future.
+  if (!factory) {
+    return;
+  }
+
+  // Now set up the objects, being careful not to overwrite anything.
+  //
+  // Note: In Internet Explorer for Windows Mobile, you can't add properties to
+  // the window object. However, global objects are automatically added as
+  // properties of the window object in all browsers.
+  if (!window.google) {
+    google = {};
+  }
+
+  if (!google.gears) {
+    google.gears = {factory: factory};
+  }
+})();
+
+/**
+ * Class: OpenLayers.Protocol.SQL
+ * Abstract SQL protocol class.  Not to be instantiated directly.  Use
+ *     one of the SQL protocol subclasses instead.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Protocol>
+ */
+OpenLayers.Protocol.SQL = OpenLayers.Class(OpenLayers.Protocol, {
+
+    /**
+     * APIProperty: databaseName
+     * {String}
+     */
+    databaseName: 'ol',
+
+    /**
+     * APIProperty: tableName
+     * Name of the database table into which Features should be saved.
+     */
+    tableName: "ol_vector_features",
+
+    /**
+     * Property: postReadFiltering
+     * {Boolean} Whether the filter (if there's one) must be applied after
+     *      the features have been read from the database; for example the
+     *      BBOX strategy passes the read method a BBOX spatial filter, if
+     *      postReadFiltering is true every feature read from the database
+     *      will go through the BBOX spatial filter, which can be costly;
+     *      defaults to true.
+     */
+    postReadFiltering: true,
+
+    /**
+     * Constructor: OpenLayers.Protocol.SQL
+     */
+    initialize: function(options) {
+        OpenLayers.Protocol.prototype.initialize.apply(this, [options]);
+    },
+
+    /**
+     * APIMethod: destroy
+     * Clean up the protocol.
+     */
+    destroy: function() {
+        OpenLayers.Protocol.prototype.destroy.apply(this);
+    },
+
+    /**
+     * APIMethod: supported
+     * This should be overridden by specific subclasses
+     *
+     * Returns:
+     * {Boolean} Whether or not the browser supports the SQL backend
+     */
+    supported: function() {
+        return false;
+    },
+
+    /**
+     * Method: evaluateFilter
+     * If postReadFiltering is true evaluate the filter against the feature
+     * and return the result of the evaluation, otherwise return true.
+     *
+     * Parameters:
+     * {<OpenLayers.Feature.Vector>} The feature.
+     * {<OpenLayers.Filter>} The filter.
+     *
+     * Returns:
+     * {Boolean} true if postReadFiltering if false, the result of the
+     * filter evaluation otherwise.
+     */
+    evaluateFilter: function(feature, filter) {
+        return filter && this.postReadFiltering ?
+            filter.evaluate(feature) : true;
+    },
+
+    CLASS_NAME: "OpenLayers.Protocol.SQL"
+});
+
+/**
+ * Class: OpenLayers.Protocol.SQL.Gears
+ * This Protocol stores feature in the browser via the Gears Database module
+ * <http://code.google.com/apis/gears/api_database.html>.
+ *
+ * The main advantage is that all the read, create, update and delete operations
+ * can be done offline.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Protocol.SQL>
+ */
+OpenLayers.Protocol.SQL.Gears = OpenLayers.Class(OpenLayers.Protocol.SQL, {
+
+    /**
+     * Property: FID_PREFIX
+     * {String}
+     */
+    FID_PREFIX: '__gears_fid__',
+
+    /**
+     * Property: NULL_GEOMETRY
+     * {String}
+     */
+    NULL_GEOMETRY: '__gears_null_geometry__',
+
+    /**
+     * Property: NULL_FEATURE_STATE
+     * {String}
+     */
+    NULL_FEATURE_STATE: '__gears_null_feature_state__',
+
+    /**
+     * Property: jsonParser
+     * {<OpenLayers.Format.JSON>}
+     */
+    jsonParser: null,
+
+    /**
+     * Property: wktParser
+     * {<OpenLayers.Format.WKT>}
+     */
+    wktParser: null,
+
+    /**
+     * Property: fidRegExp
+     * {RegExp} Regular expression to know whether a feature was
+     *      created in offline mode.
+     */
+    fidRegExp: null,
+
+    /**
+     * Property: saveFeatureState
+     * {Boolean} Whether to save the feature state (<OpenLayers.State>)
+     *      into the database, defaults to true.
+     */
+    saveFeatureState: true,
+
+    /**
+     * Property: typeOfFid
+     * {String} The type of the feature identifier, either "number" or
+     *      "string", defaults to "string".
+     */
+    typeOfFid: "string",
+
+    /**
+     * Property: db
+     * {GearsDatabase}
+     */
+    db: null,
+
+    /**
+     * Constructor: OpenLayers.Protocol.SQL.Gears
+     */
+    initialize: function(options) {
+        if (!this.supported()) {
+            return;
+        }
+        OpenLayers.Protocol.SQL.prototype.initialize.apply(this, [options]);
+        this.jsonParser = new OpenLayers.Format.JSON();
+        this.wktParser = new OpenLayers.Format.WKT();
+
+        this.fidRegExp = new RegExp('^' + this.FID_PREFIX);
+        this.initializeDatabase();
+
+
+    },
+
+    /**
+     * Method: initializeDatabase
+     */
+    initializeDatabase: function() {
+        this.db = google.gears.factory.create('beta.database');
+        this.db.open(this.databaseName);
+        this.db.execute(
+            "CREATE TABLE IF NOT EXISTS " + this.tableName +
+            " (fid TEXT UNIQUE, geometry TEXT, properties TEXT," +
+            "  state TEXT)");
+   },
+
+    /**
+     * APIMethod: destroy
+     * Clean up the protocol.
+     */
+    destroy: function() {
+        this.db.close();
+        this.db = null;
+
+        this.jsonParser = null;
+        this.wktParser = null;
+
+        OpenLayers.Protocol.SQL.prototype.destroy.apply(this);
+    },
+
+    /**
+     * APIMethod: supported
+     * Determine whether a browser supports Gears
+     *
+     * Returns:
+     * {Boolean} The browser supports Gears
+     */
+    supported: function() {
+        return !!(window.google && google.gears);
+    },
+
+    /**
+     * APIMethod: read
+     * Read all features from the database and return a
+     * <OpenLayers.Protocol.Response> instance. If the options parameter
+     * contains a callback attribute, the function is called with the response
+     * as a parameter.
+     *
+     * Parameters:
+     * options - {Object} Optional object for configuring the request; it
+     *      can have the {Boolean} property "noFeatureStateReset" which
+     *      specifies if the state of features read from the Gears
+     *      database must be reset to null, if "noFeatureStateReset"
+     *      is undefined or false then each feature's state is reset
+     *      to null, if "noFeatureStateReset" is true the feature state
+     *      is preserved.
+     *
+     * Returns:
+     * {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
+     *      object.
+     */
+    read: function(options) {
+        OpenLayers.Protocol.prototype.read.apply(this, arguments);
+        options = OpenLayers.Util.applyDefaults(options, this.options);
+
+        var feature, features = [];
+        var rs = this.db.execute("SELECT * FROM " + this.tableName);
+        while (rs.isValidRow()) {
+            feature = this.unfreezeFeature(rs);
+            if (this.evaluateFilter(feature, options.filter)) {
+                if (!options.noFeatureStateReset) {
+                    feature.state = null;
+                }
+                features.push(feature);
+            }
+            rs.next();
+        }
+        rs.close();
+
+        var resp = new OpenLayers.Protocol.Response({
+            code: OpenLayers.Protocol.Response.SUCCESS,
+            requestType: "read",
+            features: features
+        });
+
+        if (options && options.callback) {
+            options.callback.call(options.scope, resp);
+        }
+
+        return resp;
+    },
+
+    /**
+     * Method: unfreezeFeature
+     *
+     * Parameters:
+     * row - {ResultSet}
+     *
+     * Returns:
+     * {<OpenLayers.Feature.Vector>}
+     */
+    unfreezeFeature: function(row) {
+        var feature;
+        var wkt = row.fieldByName('geometry');
+        if (wkt == this.NULL_GEOMETRY) {
+            feature = new OpenLayers.Feature.Vector();
+        } else {
+            feature = this.wktParser.read(wkt);
+        }
+
+        feature.attributes = this.jsonParser.read(
+            row.fieldByName('properties'));
+
+        feature.fid = this.extractFidFromField(row.fieldByName('fid'));
+
+        var state = row.fieldByName('state');
+        if (state == this.NULL_FEATURE_STATE) {
+            state = null;
+        }
+        feature.state = state;
+
+        return feature;
+    },
+
+    /**
+     * Method: extractFidFromField
+     *
+     * Parameters:
+     * field - {String}
+     *
+     * Returns
+     * {String} or {Number} The fid.
+     */
+    extractFidFromField: function(field) {
+        if (!field.match(this.fidRegExp) && this.typeOfFid == "number") {
+            field = parseFloat(field);
+        }
+        return field;
+    },
+
+    /**
+     * APIMethod: create
+     * Create new features into the database.
+     *
+     * Parameters:
+     * features - {Array({<OpenLayers.Feature.Vector>})} or
+     *            {<OpenLayers.Feature.Vector>} The features to create in
+     *            the database.
+     * options - {Object} Optional object for configuring the request.
+     *
+     * Returns:
+     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
+     *          object.
+     */
+    create: function(features, options) {
+        options = OpenLayers.Util.applyDefaults(options, this.options);
+
+        var resp = this.createOrUpdate(features);
+        resp.requestType = "create";
+
+        if (options && options.callback) {
+            options.callback.call(options.scope, resp);
+        }
+
+        return resp;
+    },
+
+    /**
+     * APIMethod: update
+     * Construct a request updating modified feature.
+     *
+     * Parameters:
+     * features - {Array({<OpenLayers.Feature.Vector>})} or
+     *            {<OpenLayers.Feature.Vector>} The features to update in
+     *            the database.
+     * options - {Object} Optional object for configuring the request.
+     *
+     * Returns:
+     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
+     *          object.
+     */
+    update: function(features, options) {
+        options = OpenLayers.Util.applyDefaults(options, this.options);
+
+        var resp = this.createOrUpdate(features);
+        resp.requestType = "update";
+
+        if (options && options.callback) {
+            options.callback.call(options.scope, resp);
+        }
+
+        return resp;
+    },
+
+    /**
+     * Method: createOrUpdate
+     * Construct a request for updating or creating features in the
+     * database.
+     *
+     * Parameters:
+     * features - {Array({<OpenLayers.Feature.Vector>})} or
+     *      {<OpenLayers.Feature.Vector>} The feature to create or update
+     *      in the database.
+     *
+     * Returns:
+     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
+     *          object.
+     */
+    createOrUpdate: function(features) {
+        if (!(OpenLayers.Util.isArray(features))) {
+            features = [features];
+        }
+
+        var i, len = features.length, feature;
+        var insertedFeatures = new Array(len);
+
+        for (i = 0; i < len; i++) {
+            feature = features[i];
+            var params = this.freezeFeature(feature);
+            this.db.execute(
+                "REPLACE INTO " + this.tableName +
+                " (fid, geometry, properties, state)" +
+                " VALUES (?, ?, ?, ?)",
+                params);
+
+            var clone = feature.clone();
+            clone.fid = this.extractFidFromField(params[0]);
+            insertedFeatures[i] = clone;
+        }
+
+        return new OpenLayers.Protocol.Response({
+            code: OpenLayers.Protocol.Response.SUCCESS,
+            features: insertedFeatures,
+            reqFeatures: features
+        });
+    },
+
+    /**
+     * Method: freezeFeature
+     *
+     * Parameters:
+     * feature - {<OpenLayers.Feature.Vector>}
+     * state - {String} The feature state to store in the database.
+     *
+     * Returns:
+     * {Array}
+     */
+    freezeFeature: function(feature) {
+        // 2 notes:
+        // - fid might not be a string
+        // - getFeatureStateForFreeze needs the feature fid to it's stored
+        //   in the feature here
+        feature.fid = feature.fid != null ?
+            "" + feature.fid : OpenLayers.Util.createUniqueID(this.FID_PREFIX);
+
+        var geometry = feature.geometry != null ?
+            feature.geometry.toString() : this.NULL_GEOMETRY;
+
+        var properties = this.jsonParser.write(feature.attributes);
+
+        var state = this.getFeatureStateForFreeze(feature);
+
+        return [feature.fid, geometry, properties, state];
+    },
+
+    /**
+     * Method: getFeatureStateForFreeze
+     * Get the state of the feature to store into the database.
+     *
+     * Parameters:
+     * feature - {<OpenLayers.Feature.Vector>} The feature.
+     *
+     * Returns
+     * {String} The state
+     */
+    getFeatureStateForFreeze: function(feature) {
+        var state;
+        if (!this.saveFeatureState) {
+            state = this.NULL_FEATURE_STATE;
+        } else if (this.createdOffline(feature)) {
+            // if the feature was created in offline mode, its
+            // state must remain INSERT
+            state = OpenLayers.State.INSERT;
+        } else {
+            state = feature.state;
+        }
+        return state;
+    },
+
+    /**
+     * APIMethod: delete
+     * Delete features from the database.
+     *
+     * Parameters:
+     * features - {Array({<OpenLayers.Feature.Vector>})} or
+     *            {<OpenLayers.Feature.Vector>}
+     * options - {Object} Optional object for configuring the request.
+     *       This object is modified and should not be reused.
+     *
+     * Returns:
+     *  {<OpenLayers.Protocol.Response>} An <OpenLayers.Protocol.Response>
+     *          object.
+     */
+    "delete": function(features, options) {
+        if (!(OpenLayers.Util.isArray(features))) {
+            features = [features];
+        }
+
+        options = OpenLayers.Util.applyDefaults(options, this.options);
+
+        var i, len, feature;
+        for (i = 0, len = features.length; i < len; i++) {
+            feature = features[i];
+
+            // if saveFeatureState is set to true and if the feature wasn't created
+            // in offline mode we don't delete it in the database but just update
+            // it state column
+            if (this.saveFeatureState && !this.createdOffline(feature)) {
+                var toDelete = feature.clone();
+                toDelete.fid = feature.fid;
+                if (toDelete.geometry) {
+                    toDelete.geometry.destroy();
+                    toDelete.geometry = null;
+                }
+                toDelete.state = feature.state;
+                this.createOrUpdate(toDelete);
+            } else {
+                this.db.execute(
+                    "DELETE FROM " + this.tableName +
+                    " WHERE fid = ?", [feature.fid]);
+            }
+        }
+
+        var resp = new OpenLayers.Protocol.Response({
+            code: OpenLayers.Protocol.Response.SUCCESS,
+            requestType: "delete",
+            reqFeatures: features
+        });
+
+        if (options && options.callback) {
+            options.callback.call(options.scope, resp);
+        }
+
+        return resp;
+    },
+
+    /**
+     * Method: createdOffline
+     * Returns true if the feature had a feature id when it was created in
+     *      the Gears database, false otherwise; this is determined by
+     *      checking the form of the feature's fid value.
+     *
+     * Parameters:
+     * feature - {<OpenLayers.Feature.Vector>}
+     *
+     * Returns:
+     * {Boolean}
+     */
+    createdOffline: function(feature) {
+        return (typeof feature.fid == "string" &&
+                !!(feature.fid.match(this.fidRegExp)));
+    },
+
+    /**
+     * APIMethod: commit
+     * Go over the features and for each take action
+     * based on the feature state. Possible actions are create,
+     * update and delete.
+     *
+     * Parameters:
+     * features - {Array({<OpenLayers.Feature.Vector>})}
+     * options - {Object} Object whose possible keys are "create", "update",
+     *      "delete", "callback" and "scope", the values referenced by the
+     *      first three are objects as passed to the "create", "update", and
+     *      "delete" methods, the value referenced by the "callback" key is
+     *      a function which is called when the commit operation is complete
+     *      using the scope referenced by the "scope" key.
+     *
+     * Returns:
+     * {Array({<OpenLayers.Protocol.Response>})} An array of
+     *       <OpenLayers.Protocol.Response> objects, one per request made
+     *       to the database.
+     */
+    commit: function(features, options) {
+        var opt, resp = [], nRequests = 0, nResponses = 0;
+
+        function callback(resp) {
+            if (++nResponses < nRequests) {
+                resp.last = false;
+            }
+            this.callUserCallback(options, resp);
+        }
+
+        var feature, toCreate = [], toUpdate = [], toDelete = [];
+        for (var i = features.length - 1; i >= 0; i--) {
+            feature = features[i];
+            switch (feature.state) {
+            case OpenLayers.State.INSERT:
+                toCreate.push(feature);
+                break;
+            case OpenLayers.State.UPDATE:
+                toUpdate.push(feature);
+                break;
+            case OpenLayers.State.DELETE:
+                toDelete.push(feature);
+                break;
+            }
+        }
+        if (toCreate.length > 0) {
+            nRequests++;
+            opt = OpenLayers.Util.applyDefaults(
+                {"callback": callback, "scope": this},
+                options.create
+            );
+            resp.push(this.create(toCreate, opt));
+        }
+        if (toUpdate.length > 0) {
+            nRequests++;
+            opt = OpenLayers.Util.applyDefaults(
+                {"callback": callback, "scope": this},
+                options.update
+            );
+            resp.push(this.update(toUpdate, opt));
+        }
+        if (toDelete.length > 0) {
+            nRequests++;
+            opt = OpenLayers.Util.applyDefaults(
+                {"callback": callback, "scope": this},
+                options["delete"]
+            );
+            resp.push(this["delete"](toDelete, opt));
+        }
+
+        return resp;
+    },
+
+    /**
+     * Method: clear
+     * Removes all rows of the table.
+     */
+    clear: function() {
+        this.db.execute("DELETE FROM " + this.tableName);
+    },
+
+    /**
+     * Method: callUserCallback
+     * This method is called from within commit each time a request is made
+     * to the database, it is responsible for calling the user-supplied
+     * callbacks.
+     *
+     * Parameters:
+     * options - {Object} The map of options passed to the commit call.
+     * resp - {<OpenLayers.Protocol.Response>}
+     */
+    callUserCallback: function(options, resp) {
+        var opt = options[resp.requestType];
+        if (opt && opt.callback) {
+            opt.callback.call(opt.scope, resp);
+        }
+        if (resp.last && options.callback) {
+            options.callback.call(options.scope);
+        }
+    },
+
+    CLASS_NAME: "OpenLayers.Protocol.SQL.Gears"
+});
+
+/**
+ * Class: OpenLayers.Layer.Yahoo
+ *
+ * Inherits from:
+ *  - <OpenLayers.Layer.EventPane>
+ *  - <OpenLayers.Layer.FixedZoomLevels>
+ */
+OpenLayers.Layer.Yahoo = OpenLayers.Class(
+  OpenLayers.Layer.EventPane, OpenLayers.Layer.FixedZoomLevels, {
+
+    /**
+     * Constant: MIN_ZOOM_LEVEL
+     * {Integer} 0
+     */
+    MIN_ZOOM_LEVEL: 0,
+
+    /**
+     * Constant: MAX_ZOOM_LEVEL
+     * {Integer} 17
+     */
+    MAX_ZOOM_LEVEL: 17,
+
+    /**
+     * Constant: RESOLUTIONS
+     * {Array(Float)} Hardcode these resolutions so that they are more closely
+     *                tied with the standard wms projection
+     */
+    RESOLUTIONS: [
+        1.40625,
+        0.703125,
+        0.3515625,
+        0.17578125,
+        0.087890625,
+        0.0439453125,
+        0.02197265625,
+        0.010986328125,
+        0.0054931640625,
+        0.00274658203125,
+        0.001373291015625,
+        0.0006866455078125,
+        0.00034332275390625,
+        0.000171661376953125,
+        0.0000858306884765625,
+        0.00004291534423828125,
+        0.00002145767211914062,
+        0.00001072883605957031
+    ],
+
+    /**
+     * APIProperty: type
+     * {YahooMapType}
+     */
+    type: null,
+
+    /**
+     * APIProperty: wrapDateLine
+     * {Boolean} Allow user to pan forever east/west.  Default is true.
+     *     Setting this to false only restricts panning if
+     *     <sphericalMercator> is true.
+     */
+    wrapDateLine: true,
+
+    /**
+     * APIProperty: sphericalMercator
+     * {Boolean} Should the map act as a mercator-projected map? This will
+     * cause all interactions with the map to be in the actual map projection,
+     * which allows support for vector drawing, overlaying other maps, etc.
+     */
+    sphericalMercator: false,
+
+    /**
+     * Constructor: OpenLayers.Layer.Yahoo
+     *
+     * Parameters:
+     * name - {String}
+     * options - {Object}
+     */
+    initialize: function(name, options) {
+        OpenLayers.Layer.EventPane.prototype.initialize.apply(this, arguments);
+        OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this,
+                                                                    arguments);
+        if(this.sphericalMercator) {
+            OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator);
+            this.initMercatorParameters();
+        }
+    },
+
+    /**
+     * Method: loadMapObject
+     */
+    loadMapObject:function() {
+        try { //do not crash!
+            var size = this.getMapObjectSizeFromOLSize(this.map.getSize());
+            this.mapObject = new YMap(this.div, this.type, size);
+            this.mapObject.disableKeyControls();
+            this.mapObject.disableDragMap();
+
+            //can we do smooth panning? (moveByXY is not an API function)
+            if ( !this.mapObject.moveByXY ||
+                 (typeof this.mapObject.moveByXY != "function" ) ) {
+
+                this.dragPanMapObject = null;
+            }
+        } catch(e) {}
+    },
+
+    /**
+     * Method: onMapResize
+     *
+     */
+    onMapResize: function() {
+        try {
+            var size = this.getMapObjectSizeFromOLSize(this.map.getSize());
+            this.mapObject.resizeTo(size);
+        } catch(e) {}
+    },
+
+
+    /**
+     * APIMethod: setMap
+     * Overridden from EventPane because we need to remove this yahoo event
+     *     pane which prohibits our drag and drop, and we can only do this
+     *     once the map has been loaded and centered.
+     *
+     * Parameters:
+     * map - {<OpenLayers.Map>}
+     */
+    setMap: function(map) {
+        OpenLayers.Layer.EventPane.prototype.setMap.apply(this, arguments);
+
+        this.map.events.register("moveend", this, this.fixYahooEventPane);
+    },
+
+    /**
+     * Method: fixYahooEventPane
+     * The map has been centered, so the mysterious yahoo eventpane has been
+     *     added. we remove it so that it doesnt mess with *our* event pane.
+     */
+    fixYahooEventPane: function() {
+        var yahooEventPane = OpenLayers.Util.getElement("ygddfdiv");
+        if (yahooEventPane != null) {
+            if (yahooEventPane.parentNode != null) {
+                yahooEventPane.parentNode.removeChild(yahooEventPane);
+            }
+            this.map.events.unregister("moveend", this,
+                                       this.fixYahooEventPane);
+        }
+    },
+
+    /**
+     * APIMethod: getWarningHTML
+     *
+     * Returns:
+     * {String} String with information on why layer is broken, how to get
+     *          it working.
+     */
+    getWarningHTML:function() {
+        return OpenLayers.i18n(
+            "getLayerWarning", {'layerType':'Yahoo', 'layerLib':'Yahoo'}
+        );
+    },
+
+  /********************************************************/
+  /*                                                      */
+  /*             Translation Functions                    */
+  /*                                                      */
+  /*    The following functions translate GMaps and OL    */
+  /*     formats for Pixel, LonLat, Bounds, and Zoom      */
+  /*                                                      */
+  /********************************************************/
+
+
+  //
+  // TRANSLATION: MapObject Zoom <-> OpenLayers Zoom
+  //
+
+    /**
+     * APIMethod: getOLZoomFromMapObjectZoom
+     *
+     * Parameters:
+     * gZoom - {Integer}
+     *
+     * Returns:
+     * {Integer} An OpenLayers Zoom level, translated from the passed in gZoom
+     *           Returns null if null value is passed in.
+     */
+    getOLZoomFromMapObjectZoom: function(moZoom) {
+        var zoom = null;
+        if (moZoom != null) {
+            zoom = OpenLayers.Layer.FixedZoomLevels.prototype.getOLZoomFromMapObjectZoom.apply(this, [moZoom]);
+            zoom = 18 - zoom;
+        }
+        return zoom;
+    },
+
+    /**
+     * APIMethod: getMapObjectZoomFromOLZoom
+     *
+     * Parameters:
+     * olZoom - {Integer}
+     *
+     * Returns:
+     * {Integer} A MapObject level, translated from the passed in olZoom
+     *           Returns null if null value is passed in
+     */
+    getMapObjectZoomFromOLZoom: function(olZoom) {
+        var zoom = null;
+        if (olZoom != null) {
+            zoom = OpenLayers.Layer.FixedZoomLevels.prototype.getMapObjectZoomFromOLZoom.apply(this, [olZoom]);
+            zoom = 18 - zoom;
+        }
+        return zoom;
+    },
+
+    /************************************
+     *                                  *
+     *   MapObject Interface Controls   *
+     *                                  *
+     ************************************/
+
+
+  // Get&Set Center, Zoom
+
+    /**
+     * APIMethod: setMapObjectCenter
+     * Set the mapObject to the specified center and zoom
+     *
+     * Parameters:
+     * center - {Object} MapObject LonLat format
+     * zoom - {int} MapObject zoom format
+     */
+    setMapObjectCenter: function(center, zoom) {
+        this.mapObject.drawZoomAndCenter(center, zoom);
+    },
+
+    /**
+     * APIMethod: getMapObjectCenter
+     *
+     * Returns:
+     * {Object} The mapObject's current center in Map Object format
+     */
+    getMapObjectCenter: function() {
+        return this.mapObject.getCenterLatLon();
+    },
+
+    /**
+     * APIMethod: dragPanMapObject
+     *
+     * Parameters:
+     * dX - {Integer}
+     * dY - {Integer}
+     */
+    dragPanMapObject: function(dX, dY) {
+        this.mapObject.moveByXY({
+            'x': -dX,
+            'y': dY
+        });
+    },
+
+    /**
+     * APIMethod: getMapObjectZoom
+     *
+     * Returns:
+     * {Integer} The mapObject's current zoom, in Map Object format
+     */
+    getMapObjectZoom: function() {
+        return this.mapObject.getZoomLevel();
+    },
+
+
+  // LonLat - Pixel Translation
+
+    /**
+     * APIMethod: getMapObjectLonLatFromMapObjectPixel
+     *
+     * Parameters:
+     * moPixel - {Object} MapObject Pixel format
+     *
+     * Returns:
+     * {Object} MapObject LonLat translated from MapObject Pixel
+     */
+    getMapObjectLonLatFromMapObjectPixel: function(moPixel) {
+        return this.mapObject.convertXYLatLon(moPixel);
+    },
+
+    /**
+     * APIMethod: getMapObjectPixelFromMapObjectLonLat
+     *
+     * Parameters:
+     * moLonLat - {Object} MapObject LonLat format
+     *
+     * Returns:
+     * {Object} MapObject Pixel transtlated from MapObject LonLat
+     */
+    getMapObjectPixelFromMapObjectLonLat: function(moLonLat) {
+        return this.mapObject.convertLatLonXY(moLonLat);
+    },
+
+
+    /************************************
+     *                                  *
+     *       MapObject Primitives       *
+     *                                  *
+     ************************************/
+
+
+  // LonLat
+
+    /**
+     * APIMethod: getLongitudeFromMapObjectLonLat
+     *
+     * Parameters:
+     * moLonLat - {Object} MapObject LonLat format
+     *
+     * Returns:
+     * {Float} Longitude of the given MapObject LonLat
+     */
+    getLongitudeFromMapObjectLonLat: function(moLonLat) {
+        return this.sphericalMercator ?
+            this.forwardMercator(moLonLat.Lon, moLonLat.Lat).lon :
+            moLonLat.Lon;
+    },
+
+    /**
+     * APIMethod: getLatitudeFromMapObjectLonLat
+     *
+     * Parameters:
+     * moLonLat - {Object} MapObject LonLat format
+     *
+     * Returns:
+     * {Float} Latitude of the given MapObject LonLat
+     */
+    getLatitudeFromMapObjectLonLat: function(moLonLat) {
+        return this.sphericalMercator ?
+            this.forwardMercator(moLonLat.Lon, moLonLat.Lat).lat :
+            moLonLat.Lat;
+    },
+
+    /**
+     * APIMethod: getMapObjectLonLatFromLonLat
+     *
+     * Parameters:
+     * lon - {Float}
+     * lat - {Float}
+     *
+     * Returns:
+     * {Object} MapObject LonLat built from lon and lat params
+     */
+    getMapObjectLonLatFromLonLat: function(lon, lat) {
+        var yLatLong;
+        if(this.sphericalMercator) {
+            var lonlat = this.inverseMercator(lon, lat);
+            yLatLong = new YGeoPoint(lonlat.lat, lonlat.lon);
+        } else {
+            yLatLong = new YGeoPoint(lat, lon);
+        }
+        return yLatLong;
+    },
+
+  // Pixel
+
+    /**
+     * APIMethod: getXFromMapObjectPixel
+     *
+     * Parameters:
+     * moPixel - {Object} MapObject Pixel format
+     *
+     * Returns:
+     * {Integer} X value of the MapObject Pixel
+     */
+    getXFromMapObjectPixel: function(moPixel) {
+        return moPixel.x;
+    },
+
+    /**
+     * APIMethod: getYFromMapObjectPixel
+     *
+     * Parameters:
+     * moPixel - {Object} MapObject Pixel format
+     *
+     * Returns:
+     * {Integer} Y value of the MapObject Pixel
+     */
+    getYFromMapObjectPixel: function(moPixel) {
+        return moPixel.y;
+    },
+
+    /**
+     * APIMethod: getMapObjectPixelFromXY
+     *
+     * Parameters:
+     * x - {Integer}
+     * y - {Integer}
+     *
+     * Returns:
+     * {Object} MapObject Pixel from x and y parameters
+     */
+    getMapObjectPixelFromXY: function(x, y) {
+        return new YCoordPoint(x, y);
+    },
+
+  // Size
+
+    /**
+     * APIMethod: getMapObjectSizeFromOLSize
+     *
+     * Parameters:
+     * olSize - {<OpenLayers.Size>}
+     *
+     * Returns:
+     * {Object} MapObject Size from olSize parameter
+     */
+    getMapObjectSizeFromOLSize: function(olSize) {
+        return new YSize(olSize.w, olSize.h);
+    },
+
+    CLASS_NAME: "OpenLayers.Layer.Yahoo"
+});
+
+/**
+ * Class: OpenLayers.Layer.GML
+ * Create a vector layer by parsing a GML file. The GML file is
+ *     passed in as a parameter.
+ * *Deprecated*.  To be removed in 3.0.  Instead use OpenLayers.Layer.Vector
+ *     with Protocol.HTTP and Strategy.Fixed. Provide the protocol with a
+ *     format parameter to get the parser you want for your data.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Layer.Vector>
+ */
+OpenLayers.Layer.GML = OpenLayers.Class(OpenLayers.Layer.Vector, {
+
+    /**
+      * Property: loaded
+      * {Boolean} Flag for whether the GML data has been loaded yet.
+      */
+    loaded: false,
+
+    /**
+      * APIProperty: format
+      * {<OpenLayers.Format>} The format you want the data to be parsed with.
+      */
+    format: null,
+
+    /**
+     * APIProperty: formatOptions
+     * {Object} Hash of options which should be passed to the format when it is
+     * created. Must be passed in the constructor.
+     */
+    formatOptions: null,
+
+    /**
+     * Constructor: OpenLayers.Layer.GML
+     * Load and parse a single file on the web, according to the format
+     * provided via the 'format' option, defaulting to GML.
+     *
+     * Parameters:
+     * name - {String}
+     * url - {String} URL of a GML file.
+     * options - {Object} Hashtable of extra options to tag onto the layer.
+     */
+     initialize: function(name, url, options) {
+        var newArguments = [];
+        newArguments.push(name, options);
+        OpenLayers.Layer.Vector.prototype.initialize.apply(this, newArguments);
+        this.url = url;
+    },
+
+    /**
+     * APIMethod: setVisibility
+     * Set the visibility flag for the layer and hide/show&redraw accordingly.
+     * Fire event unless otherwise specified
+     * GML will be loaded if the layer is being made visible for the first
+     * time.
+     *
+     * Parameters:
+     * visible - {Boolean} Whether or not to display the layer
+     *                          (if in range)
+     * noEvent - {Boolean}
+     */
+    setVisibility: function(visibility, noEvent) {
+        OpenLayers.Layer.Vector.prototype.setVisibility.apply(this, arguments);
+        if(this.visibility && !this.loaded){
+            // Load the GML
+            this.loadGML();
+        }
+    },
+
+    /**
+     * Method: moveTo
+     * If layer is visible and GML has not been loaded, load GML, then load GML
+     * and call OpenLayers.Layer.Vector.moveTo() to redraw at the new location.
+     *
+     * Parameters:
+     * bounds - {Object}
+     * zoomChanged - {Object}
+     * minor - {Object}
+     */
+    moveTo:function(bounds, zoomChanged, minor) {
+        OpenLayers.Layer.Vector.prototype.moveTo.apply(this, arguments);
+        // Wait until initialisation is complete before loading GML
+        // otherwise we can get a race condition where the root HTML DOM is
+        // loaded after the GML is paited.
+        // See http://trac.openlayers.org/ticket/404
+        if(this.visibility && !this.loaded){
+            this.loadGML();
+        }
+    },
+
+    /**
+     * Method: loadGML
+     */
+    loadGML: function() {
+        if (!this.loaded) {
+            this.events.triggerEvent("loadstart");
+            OpenLayers.Request.GET({
+                url: this.url,
+                success: this.requestSuccess,
+                failure: this.requestFailure,
+                scope: this
+            });
+            this.loaded = true;
+        }
+    },
+
+    /**
+     * Method: setUrl
+     * Change the URL and reload the GML
+     *
+     * Parameters:
+     * url - {String} URL of a GML file.
+     */
+    setUrl:function(url) {
+        this.url = url;
+        this.destroyFeatures();
+        this.loaded = false;
+        this.loadGML();
+    },
+
+    /**
+     * Method: requestSuccess
+     * Process GML after it has been loaded.
+     * Called by initialize() and loadUrl() after the GML has been loaded.
+     *
+     * Parameters:
+     * request - {String}
+     */
+    requestSuccess:function(request) {
+        var doc = request.responseXML;
+
+        if (!doc || !doc.documentElement) {
+            doc = request.responseText;
+        }
+
+        var options = {};
+
+        OpenLayers.Util.extend(options, this.formatOptions);
+        if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
+            options.externalProjection = this.projection;
+            options.internalProjection = this.map.getProjectionObject();
+        }
+
+        var gml = this.format ? new this.format(options) : new OpenLayers.Format.GML(options);
+        this.addFeatures(gml.read(doc));
+        this.events.triggerEvent("loadend");
+    },
+
+    /**
+     * Method: requestFailure
+     * Process a failed loading of GML.
+     * Called by initialize() and loadUrl() if there was a problem loading GML.
+     *
+     * Parameters:
+     * request - {String}
+     */
+    requestFailure: function(request) {
+        OpenLayers.Console.userError('Error in loading GML file ' +  this.url);
+        this.events.triggerEvent("loadend");
+    },
+
+    CLASS_NAME: "OpenLayers.Layer.GML"
+});
+
+/**
+ * Class: OpenLayers.Geometry.Rectangle
+ * This class is *not supported*, and probably isn't what you're looking for.
+ *     Instead, most users probably want something like:
+ *     (code)
+ *     var poly = new OpenLayers.Bounds(0,0,10,10).toGeometry();
+ *     (end)
+ *     This will create a rectangular Polygon geometry. 
+ * 
+ * Inherits:
+ *  - <OpenLayers.Geometry>
+ */
+
+OpenLayers.Geometry.Rectangle = OpenLayers.Class(OpenLayers.Geometry, {
+
+    /** 
+     * Property: x
+     * {Float}
+     */
+    x: null,
+
+    /** 
+     * Property: y
+     * {Float}
+     */
+    y: null,
+
+    /** 
+     * Property: width
+     * {Float}
+     */
+    width: null,
+
+    /** 
+     * Property: height
+     * {Float}
+     */
+    height: null,
+
+    /**
+     * Constructor: OpenLayers.Geometry.Rectangle
+     * 
+     * Parameters:
+     * points - {Array(<OpenLayers.Geometry.Point>)}
+     */
+    initialize: function(x, y, width, height) {
+        OpenLayers.Geometry.prototype.initialize.apply(this, arguments);
+        
+        this.x = x;
+        this.y = y;
+
+        this.width = width;
+        this.height = height;
+    },
+    
+    /**
+     * Method: calculateBounds
+     * Recalculate the bounds for the geometry.
+     */
+    calculateBounds: function() {
+        this.bounds = new OpenLayers.Bounds(this.x, this.y,
+                                            this.x + this.width, 
+                                            this.y + this.height);
+    },
+    
+    
+    /**
+     * APIMethod: getLength
+     * 
+     * Returns:
+     * {Float} The length of the geometry
+     */
+    getLength: function() {
+        var length = (2 * this.width) + (2 * this.height);
+        return length;
+    },
+
+    /**
+     * APIMethod: getArea
+     * 
+     * Returns:
+     * {Float} The area of the geometry
+     */
+    getArea: function() {
+        var area = this.width * this.height;
+        return area;
+    },    
+
+    CLASS_NAME: "OpenLayers.Geometry.Rectangle"
+});
+
+/**
+ * Class: OpenLayers.Renderer.NG
+ *
+ * Inherits from:
+ *  - <OpenLayers.Renderer.Elements>
+ */
+OpenLayers.Renderer.NG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
+
+    /**
+     * Constant: labelNodeType
+     * {String} The node type for text label containers. To be defined by
+     * subclasses.
+     */
+    labelNodeType: null,
+
+    /**
+     * Constructor: OpenLayers.Renderer.NG
+     *
+     * Parameters:
+     * containerID - {String}
+     * options - {Object} options for this renderer. Supported options are:
+     *     * yOrdering - {Boolean} Whether to use y-ordering
+     *     * zIndexing - {Boolean} Whether to use z-indexing. Will be ignored
+     *         if yOrdering is set to true.
+     */
+
+    /**
+     * Method: updateDimensions
+     * To be extended by subclasses - here we set positioning related styles
+     * on HTML elements, subclasses have to do the same for renderer specific
+     * elements (e.g. viewBox, width and height of the rendererRoot)
+     *
+     * Parameters:
+     * zoomChanged - {Boolean} Has the zoom changed? If so, subclasses may have
+     *     to update feature styles/dimensions.
+     */
+    updateDimensions: function(zoomChanged) {
+        var mapExtent = this.map.getExtent();
+        var renderExtent = mapExtent.scale(3);
+        this.setExtent(renderExtent, true);
+        var res = this.getResolution();
+        var div = this.rendererRoot.parentNode;
+        var layerLeft = parseFloat(div.parentNode.style.left);
+        var layerTop = parseFloat(div.parentNode.style.top);
+        div.style.left = ((renderExtent.left - mapExtent.left) / res - layerLeft) + "px";
+        div.style.top = ((mapExtent.top - renderExtent.top) / res - layerTop) + "px";
+    },
+
+    /**
+     * Method: resize
+     */
+    setSize: function() {
+        this.map.getExtent() && this.updateDimensions();
+    },
+
+    /**
+     * Method: drawFeature
+     * Draw the feature.  The optional style argument can be used
+     * to override the feature's own style.  This method should only
+     * be called from layer.drawFeature().
+     *
+     * Parameters:
+     * feature - {<OpenLayers.Feature.Vector>}
+     * style - {<Object>}
+     *
+     * Returns:
+     * {Boolean} true if the feature has been drawn completely, false if not,
+     *     undefined if the feature had no geometry
+     */
+    drawFeature: function(feature, style) {
+        if(style == null) {
+            style = feature.style;
+        }
+        if (feature.geometry) {
+            var rendered = this.drawGeometry(feature.geometry, style, feature.id);
+            if(rendered !== false && style.label) {
+                var location = feature.geometry.getCentroid();
+                this.drawText(feature.id, style, location);
+            } else {
+                this.removeText(feature.id);
+            }
+            return rendered;
+        }
+    },
+
+    /**
+     * Method: drawText
+     * Function for drawing text labels.
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * featureId - {String|DOMElement}
+     * style - {Object}
+     * location - {<OpenLayers.Geometry.Point>}, will be modified inline
+     *
+     * Returns:
+     * {DOMElement} container holding the text label (to be populated by
+     * subclasses)
+     */
+    drawText: function(featureId, style, location) {
+        var label;
+        if (typeof featureId !== "string") {
+            label = featureId;
+        } else {
+            label = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX, this.labelNodeType);
+            label._featureId = featureId;
+        }
+        label._style = style;
+        label._x = location.x;
+        label._y = location.y;
+        if(style.labelXOffset || 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);
+        }
+
+        if(label.parentNode !== this.textRoot) {
+            this.textRoot.appendChild(label);
+        }
+
+        return label;
+    },
+
+    CLASS_NAME: "OpenLayers.Renderer.NG"
+});
+
+// Monkey-patching Layer.Vector for Renderer.NG support
+(function() {
+    var moveTo = OpenLayers.Layer.Vector.prototype.moveTo;
+    OpenLayers.Layer.Vector.prototype.moveTo = function(bounds, zoomChanged, dragging) {
+        if (OpenLayers.Renderer.NG && this.renderer instanceof OpenLayers.Renderer.NG) {
+            OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
+            dragging || this.renderer.updateDimensions(zoomChanged);
+            if (!this.drawn) {
+                this.drawn = true;
+                var feature;
+                for(var i=0, len=this.features.length; i<len; i++) {
+                    this.renderer.locked = (i !== (len - 1));
+                    feature = this.features[i];
+                    this.drawFeature(feature);
+                }
+            }
+        } else {
+            moveTo.apply(this, arguments);
+        }
+    }
+    var redraw = OpenLayers.Layer.Vector.prototype.redraw;
+    OpenLayers.Layer.Vector.prototype.redraw = function() {
+        if (OpenLayers.Renderer.NG && this.renderer instanceof OpenLayers.Renderer.NG) {
+            this.drawn = false;
+        }
+        redraw.apply(this, arguments);
+    }
+})();
+
+/**
+ * Class: OpenLayers.Renderer.SVG2
+ *
+ * Inherits from:
+ *  - <OpenLayers.Renderer.NG>
+ */
+OpenLayers.Renderer.SVG2 = OpenLayers.Class(OpenLayers.Renderer.NG, {
+
+    /**
+     * Property: xmlns
+     * {String}
+     */
+    xmlns: "http://www.w3.org/2000/svg",
+
+    /**
+     * Property: xlinkns
+     * {String}
+     */
+    xlinkns: "http://www.w3.org/1999/xlink",
+
+    /**
+     * Property: symbolMetrics
+     * {Object} Cache for symbol metrics according to their svg coordinate
+     *     space. This is an object keyed by the symbol's id, and values are
+     *     an object with size, x and y properties.
+     */
+    symbolMetrics: null,
+
+    /**
+     * Constant: labelNodeType
+     * {String} The node type for text label containers.
+     */
+    labelNodeType: "g",
+
+    /**
+     * Constructor: OpenLayers.Renderer.SVG2
+     *
+     * Parameters:
+     * containerID - {String}
+     */
+    initialize: function(containerID) {
+        if (!this.supported()) {
+            return;
+        }
+        OpenLayers.Renderer.Elements.prototype.initialize.apply(this,
+                                                                arguments);
+
+        this.symbolMetrics = {};
+    },
+
+    /**
+     * APIMethod: supported
+     *
+     * Returns:
+     * {Boolean} Whether or not the browser supports the SVG renderer
+     */
+    supported: function() {
+        var svgFeature = "http://www.w3.org/TR/SVG11/feature#";
+        return (document.implementation &&
+           (document.implementation.hasFeature("org.w3c.svg", "1.0") ||
+            document.implementation.hasFeature(svgFeature + "SVG", "1.1") ||
+            document.implementation.hasFeature(svgFeature + "BasicStructure", "1.1") ));
+    },
+
+    /**
+     * Method: updateDimensions
+     *
+     * Parameters:
+     * zoomChanged - {Boolean}
+     */
+    updateDimensions: function(zoomChanged) {
+        OpenLayers.Renderer.NG.prototype.updateDimensions.apply(this, arguments);
+
+        var res = this.getResolution();
+
+        var width = this.extent.getWidth();
+        var height = this.extent.getHeight();
+
+        var extentString = [
+            this.extent.left,
+            -this.extent.top,
+            width,
+            height
+        ].join(" ");
+        this.rendererRoot.setAttributeNS(null, "viewBox", extentString);
+        this.rendererRoot.setAttributeNS(null, "width", width / res);
+        this.rendererRoot.setAttributeNS(null, "height", height / res);
+
+        if (zoomChanged === true) {
+            // update styles for the new resolution
+            var i, len;
+            var nodes = this.vectorRoot.childNodes;
+            for (i=0, len=nodes.length; i<len; ++i) {
+                this.setStyle(nodes[i]);
+            }
+            var textNodes = this.textRoot.childNodes;
+            var label;
+            for (i=0, len=textNodes.length; i<len; ++i) {
+                label = textNodes[i];
+                this.drawText(label, label._style,
+                    new OpenLayers.Geometry.Point(label._x, label._y)
+                );
+            }
+        }
+    },
+
+    /**
+     * Method: getNodeType
+     *
+     * Parameters:
+     * geometry - {<OpenLayers.Geometry>}
+     * style - {Object}
+     *
+     * Returns:
+     * {String} The corresponding node type for the specified geometry
+     */
+    getNodeType: function(geometry, style) {
+        var nodeType = null;
+        switch (geometry.CLASS_NAME) {
+            case "OpenLayers.Geometry.Point":
+                if (style.externalGraphic) {
+                    nodeType = "image";
+                } else if (this.isComplexSymbol(style.graphicName)) {
+                    nodeType = "svg";
+                } else {
+                    nodeType = "circle";
+                }
+                break;
+            case "OpenLayers.Geometry.Rectangle":
+                nodeType = "rect";
+                break;
+            case "OpenLayers.Geometry.LineString":
+                nodeType = "polyline";
+                break;
+            case "OpenLayers.Geometry.LinearRing":
+                nodeType = "polygon";
+                break;
+            case "OpenLayers.Geometry.Polygon":
+            case "OpenLayers.Geometry.Curve":
+                nodeType = "path";
+                break;
+            default:
+                break;
+        }
+        return nodeType;
+    },
+
+    /**
+     * Method: setStyle
+     * Use to set all the style attributes to a SVG node.
+     *
+     * Takes care to adjust stroke width and point radius to be
+     * resolution-relative
+     *
+     * Parameters:
+     * node - {SVGDomElement} An SVG element to decorate
+     * style - {Object}
+     * options - {Object} Currently supported options include
+     *                              'isFilled' {Boolean} and
+     *                              'isStroked' {Boolean}
+     */
+    setStyle: function(node, style, options) {
+        style = style  || node._style;
+        options = options || node._options;
+        var resolution = this.getResolution();
+        var r = node._radius;
+        var widthFactor = resolution;
+        if (node._geometryClass == "OpenLayers.Geometry.Point" && r) {
+            node.style.visibility = "";
+            if (style.graphic === false) {
+                node.style.visibility = "hidden";
+            } else if (style.externalGraphic) {
+
+                if (style.graphicTitle) {
+                    node.setAttributeNS(null, "title", style.graphicTitle);
+                    //Standards-conformant SVG
+                    // Prevent duplicate nodes. See issue https://github.com/openlayers/openlayers/issues/92
+                    var titleNode = node.getElementsByTagName("title");
+                    if (titleNode.length > 0) {
+                        titleNode[0].firstChild.textContent = style.graphicTitle;
+                    } else {
+                        var label = this.nodeFactory(null, "title");
+                        label.textContent = style.graphicTitle;
+                        node.appendChild(label);
+                    }
+                }
+                if (style.graphicWidth && style.graphicHeight) {
+                    node.setAttributeNS(null, "preserveAspectRatio", "none");
+                }
+                var width = style.graphicWidth || style.graphicHeight;
+                var height = style.graphicHeight || style.graphicWidth;
+                width = width ? width : style.pointRadius*2;
+                height = height ? height : style.pointRadius*2;
+                width *= resolution;
+                height *= resolution;
+
+                var xOffset = (style.graphicXOffset != undefined) ?
+                    style.graphicXOffset * resolution : -(0.5 * width);
+                var yOffset = (style.graphicYOffset != undefined) ?
+                    style.graphicYOffset * resolution : -(0.5 * height);
+
+                var opacity = style.graphicOpacity || style.fillOpacity;
+
+                node.setAttributeNS(null, "x", node._x + xOffset);
+                node.setAttributeNS(null, "y", node._y + yOffset);
+                node.setAttributeNS(null, "width", width);
+                node.setAttributeNS(null, "height", height);
+                node.setAttributeNS(this.xlinkns, "href", style.externalGraphic);
+                node.setAttributeNS(null, "style", "opacity: "+opacity);
+                node.onclick = OpenLayers.Renderer.SVG2.preventDefault;
+            } else if (this.isComplexSymbol(style.graphicName)) {
+                // the symbol viewBox is three times as large as the symbol
+                var offset = style.pointRadius * 3 * resolution;
+                var size = offset * 2;
+                var src = this.importSymbol(style.graphicName);
+                widthFactor = this.symbolMetrics[src.id].size * 3 / size * resolution;
+
+                // remove the node from the dom before we modify it. This
+                // prevents various rendering issues in Safari and FF
+                var parent = node.parentNode;
+                var nextSibling = node.nextSibling;
+                if(parent) {
+                    parent.removeChild(node);
+                }
+
+                // 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
+                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", node._x - offset);
+                node.setAttributeNS(null, "y", node._y - offset);
+
+                // now that the node has all its new properties, insert it
+                // back into the dom where it was
+                if(nextSibling) {
+                    parent.insertBefore(node, nextSibling);
+                } else if(parent) {
+                    parent.appendChild(node);
+                }
+            } else {
+                node.setAttributeNS(null, "r", style.pointRadius * resolution);
+            }
+
+            var rotation = style.rotation;
+            if (rotation !== undefined || node._rotation !== undefined) {
+                node._rotation = rotation;
+                rotation |= 0;
+                if (node.nodeName !== "svg") {
+                    node.setAttributeNS(null, "transform",
+                        ["rotate(", rotation, node._x, node._y, ")"].join(" ")
+                    );
+                } else {
+                    var metrics = this.symbolMetrics[src.id];
+                    node.firstChild.setAttributeNS(null, "transform",
+                        ["rotate(", rotation, metrics.x, metrics.y, ")"].join(" ")
+                    );
+                }
+            }
+        }
+
+        if (options.isFilled) {
+            node.setAttributeNS(null, "fill", style.fillColor);
+            node.setAttributeNS(null, "fill-opacity", style.fillOpacity);
+        } else {
+            node.setAttributeNS(null, "fill", "none");
+        }
+
+        if (options.isStroked) {
+            node.setAttributeNS(null, "stroke", style.strokeColor);
+            node.setAttributeNS(null, "stroke-opacity", style.strokeOpacity);
+            node.setAttributeNS(null, "stroke-width", style.strokeWidth * widthFactor);
+            node.setAttributeNS(null, "stroke-linecap", style.strokeLinecap || "round");
+            // Hard-coded linejoin for now, to make it look the same as in VML.
+            // There is no strokeLinejoin property yet for symbolizers.
+            node.setAttributeNS(null, "stroke-linejoin", "round");
+            style.strokeDashstyle && node.setAttributeNS(null,
+                "stroke-dasharray", this.dashStyle(style, widthFactor));
+        } else {
+            node.setAttributeNS(null, "stroke", "none");
+        }
+
+        if (style.pointerEvents) {
+            node.setAttributeNS(null, "pointer-events", style.pointerEvents);
+        }
+
+        if (style.cursor != null) {
+            node.setAttributeNS(null, "cursor", style.cursor);
+        }
+
+        return node;
+    },
+
+    /**
+     * Method: dashStyle
+     *
+     * Parameters:
+     * style - {Object}
+     * widthFactor - {Number}
+     *
+     * Returns:
+     * {String} A SVG compliant 'stroke-dasharray' value
+     */
+    dashStyle: function(style, widthFactor) {
+        var w = style.strokeWidth * widthFactor;
+        var str = style.strokeDashstyle;
+        switch (str) {
+            case 'solid':
+                return 'none';
+            case 'dot':
+                return [widthFactor, 4 * w].join();
+            case 'dash':
+                return [4 * w, 4 * w].join();
+            case 'dashdot':
+                return [4 * w, 4 * w, widthFactor, 4 * w].join();
+            case 'longdash':
+                return [8 * w, 4 * w].join();
+            case 'longdashdot':
+                return [8 * w, 4 * w, widthFactor, 4 * w].join();
+            default:
+                var parts = OpenLayers.String.trim(str).split(/\s+/g);
+                for (var i=0, ii=parts.length; i<ii; i++) {
+                    parts[i] = parts[i] * widthFactor;
+                }
+                return parts.join();
+        }
+    },
+
+    /**
+     * Method: createNode
+     *
+     * Parameters:
+     * type - {String} Kind of node to draw
+     * id - {String} Id for node
+     *
+     * Returns:
+     * {DOMElement} A new node of the given type and id
+     */
+    createNode: function(type, id) {
+        var node = document.createElementNS(this.xmlns, type);
+        if (id) {
+            node.setAttributeNS(null, "id", id);
+        }
+        return node;
+    },
+
+    /**
+     * Method: nodeTypeCompare
+     *
+     * Parameters:
+     * node - {SVGDomElement} An SVG element
+     * type - {String} Kind of node
+     *
+     * Returns:
+     * {Boolean} Whether or not the specified node is of the specified type
+     */
+    nodeTypeCompare: function(node, type) {
+        return (type == node.nodeName);
+    },
+
+    /**
+     * Method: createRenderRoot
+     *
+     * Returns:
+     * {DOMElement} The specific render engine's root element
+     */
+    createRenderRoot: function() {
+        return this.nodeFactory(this.container.id + "_svgRoot", "svg");
+    },
+
+    /**
+     * Method: createRoot
+     *
+     * Parameters:
+     * suffix - {String} suffix to append to the id
+     *
+     * Returns:
+     * {DOMElement}
+     */
+    createRoot: function(suffix) {
+        return this.nodeFactory(this.container.id + suffix, "g");
+    },
+
+    /**
+     * Method: createDefs
+     *
+     * Returns:
+     * {DOMElement} The element to which we'll add the symbol definitions
+     */
+    createDefs: function() {
+        var defs = this.nodeFactory(this.container.id + "_defs", "defs");
+        this.rendererRoot.appendChild(defs);
+        return defs;
+    },
+
+    /**************************************
+     *                                    *
+     *     GEOMETRY DRAWING FUNCTIONS     *
+     *                                    *
+     **************************************/
+
+    /**
+     * Method: drawPoint
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * node - {DOMElement}
+     * geometry - {<OpenLayers.Geometry>}
+     *
+     * Returns:
+     * {DOMElement} or false if the renderer could not draw the point
+     */
+    drawPoint: function(node, geometry) {
+        return this.drawCircle(node, geometry, 1);
+    },
+
+    /**
+     * Method: drawCircle
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * node - {DOMElement}
+     * geometry - {<OpenLayers.Geometry>}
+     * radius - {Float}
+     *
+     * Returns:
+     * {DOMElement} or false if the renderer could not draw the circle
+     */
+    drawCircle: function(node, geometry, radius) {
+        var x = geometry.x;
+        var y = -geometry.y;
+        node.setAttributeNS(null, "cx", x);
+        node.setAttributeNS(null, "cy", y);
+        node._x = x;
+        node._y = y;
+        node._radius = radius;
+        return node;
+    },
+
+    /**
+     * Method: drawLineString
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * node - {DOMElement}
+     * geometry - {<OpenLayers.Geometry>}
+     *
+     * Returns:
+     * {DOMElement} or null if the renderer could not draw all components of
+     *     the linestring, or false if nothing could be drawn
+     */
+    drawLineString: function(node, geometry) {
+        var path = this.getComponentsString(geometry.components);
+        node.setAttributeNS(null, "points", path);
+        return node;
+    },
+
+    /**
+     * Method: drawLinearRing
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * node - {DOMElement}
+     * geometry - {<OpenLayers.Geometry>}
+     *
+     * Returns:
+     * {DOMElement} or null if the renderer could not draw all components
+     *     of the linear ring, or false if nothing could be drawn
+     */
+    drawLinearRing: function(node, geometry) {
+        var path = this.getComponentsString(geometry.components);
+        node.setAttributeNS(null, "points", path);
+        return node;
+    },
+
+    /**
+     * Method: drawPolygon
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * node - {DOMElement}
+     * geometry - {<OpenLayers.Geometry>}
+     *
+     * Returns:
+     * {DOMElement} or null if the renderer could not draw all components
+     *     of the polygon, or false if nothing could be drawn
+     */
+    drawPolygon: function(node, geometry) {
+        var d = [];
+        var draw = true;
+        var complete = true;
+        var linearRingResult, path;
+        for (var j=0, len=geometry.components.length; j<len; j++) {
+            d.push("M");
+            path = this.getComponentsString(
+                geometry.components[j].components, " ");
+            d.push(path);
+        }
+        d.push("z");
+        node.setAttributeNS(null, "d", d.join(" "));
+        node.setAttributeNS(null, "fill-rule", "evenodd");
+        return node;
+    },
+
+    /**
+     * Method: drawRectangle
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * node - {DOMElement}
+     * geometry - {<OpenLayers.Geometry>}
+     *
+     * Returns:
+     * {DOMElement} or false if the renderer could not draw the rectangle
+     */
+    drawRectangle: function(node, geometry) {
+        node.setAttributeNS(null, "x", geometry.x);
+        node.setAttributeNS(null, "y", -geometry.y);
+        node.setAttributeNS(null, "width", geometry.width);
+        node.setAttributeNS(null, "height", geometry.height);
+        return node;
+    },
+
+    /**
+     * Method: drawText
+     * Function for drawing text labels.
+     * This method is only called by the renderer itself.
+     *
+     * Parameters:
+     * featureId - {String|DOMElement}
+     * style - {Object}
+     * location - {<OpenLayers.Geometry.Point>}, will be modified inline
+     *
+     * Returns:
+     * {DOMElement} container holding the text label
+     */
+    drawText: function(featureId, style, location) {
+        var g = OpenLayers.Renderer.NG.prototype.drawText.apply(this, arguments);
+        var text = g.firstChild ||
+            this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_text", "text");
+
+        var res = this.getResolution();
+        text.setAttributeNS(null, "x", location.x / res);
+        text.setAttributeNS(null, "y", - location.y / res);
+        g.setAttributeNS(null, "transform", "scale(" + res + ")");
+
+        if (style.fontColor) {
+            text.setAttributeNS(null, "fill", style.fontColor);
+        }
+        if (style.fontOpacity) {
+            text.setAttributeNS(null, "opacity", style.fontOpacity);
+        }
+        if (style.fontFamily) {
+            text.setAttributeNS(null, "font-family", style.fontFamily);
+        }
+        if (style.fontSize) {
+            text.setAttributeNS(null, "font-size", style.fontSize);
+        }
+        if (style.fontWeight) {
+            text.setAttributeNS(null, "font-weight", style.fontWeight);
+        }
+        if (style.fontStyle) {
+            text.setAttributeNS(null, "font-style", style.fontStyle);
+        }
+        if (style.labelSelect === true) {
+            text.setAttributeNS(null, "pointer-events", "visible");
+            text._featureId = featureId;
+        } else {
+            text.setAttributeNS(null, "pointer-events", "none");
+        }
+        var align = style.labelAlign || OpenLayers.Renderer.defaultSymbolizer.labelAlign;
+        text.setAttributeNS(null, "text-anchor",
+            OpenLayers.Renderer.SVG2.LABEL_ALIGN[align[0]] || "middle");
+
+        if (OpenLayers.IS_GECKO === true) {
+            text.setAttributeNS(null, "dominant-baseline",
+                OpenLayers.Renderer.SVG2.LABEL_ALIGN[align[1]] || "central");
+        }
+
+        var labelRows = style.label.split('\n');
+        var numRows = labelRows.length;
+        while (text.childNodes.length > numRows) {
+            text.removeChild(text.lastChild);
+        }
+        for (var i = 0; i < numRows; i++) {
+            var tspan = text.childNodes[i] ||
+                this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_tspan_" + i, "tspan");
+            if (style.labelSelect === true) {
+                tspan._featureId = featureId;
+            }
+            if (OpenLayers.IS_GECKO === false) {
+                tspan.setAttributeNS(null, "baseline-shift",
+                    OpenLayers.Renderer.SVG2.LABEL_VSHIFT[align[1]] || "-35%");
+            }
+            tspan.setAttribute("x", location.x / res);
+            if (i == 0) {
+                var vfactor = OpenLayers.Renderer.SVG2.LABEL_VFACTOR[align[1]];
+                if (vfactor == null) {
+                    vfactor = -.5;
+                }
+                tspan.setAttribute("dy", (vfactor*(numRows-1)) + "em");
+            } else {
+                tspan.setAttribute("dy", "1em");
+            }
+            tspan.textContent = (labelRows[i] === '') ? ' ' : labelRows[i];
+            if (!tspan.parentNode) {
+                text.appendChild(tspan);
+            }
+        }
+
+        if (!text.parentNode) {
+            g.appendChild(text);
+        }
+
+        return g;
+    },
+
+    /**
+     * Method: getComponentString
+     *
+     * Parameters:
+     * components - {Array(<OpenLayers.Geometry.Point>)} Array of points
+     * separator - {String} character between coordinate pairs. Defaults to ","
+     *
+     * Returns:
+     * {Object} hash with properties "path" (the string created from the
+     *     components and "complete" (false if the renderer was unable to
+     *     draw all components)
+     */
+    getComponentsString: function(components, separator) {
+        var len = components.length;
+        var strings = new Array(len);
+        for (var i=0; i<len; i++) {
+            strings[i] = this.getShortString(components[i]);
+        }
+
+        return strings.join(separator || ",");
+    },
+
+    /**
+     * Method: getShortString
+     *
+     * Parameters:
+     * point - {<OpenLayers.Geometry.Point>}
+     *
+     * Returns:
+     * {String} or false if point is outside the valid range
+     */
+    getShortString: function(point) {
+        return point.x + "," + (-point.y);
+    },
+
+    /**
+     * Method: importSymbol
+     * add a new symbol definition from the rendererer's symbol hash
+     *
+     * Parameters:
+     * graphicName - {String} name of the symbol to import
+     *
+     * Returns:
+     * {DOMElement} - the imported symbol
+     */
+    importSymbol: function (graphicName)  {
+        if (!this.defs) {
+            // create svg defs tag
+            this.defs = this.createDefs();
+        }
+        var id = this.container.id + "-" + graphicName;
+
+        // check if symbol already exists in the defs
+        var existing = document.getElementById(id);
+        if (existing != null) {
+            return existing;
+        }
+
+        var symbol = OpenLayers.Renderer.symbol[graphicName];
+        if (!symbol) {
+            throw new Error(graphicName + ' is not a valid symbol name');
+        }
+
+        var symbolNode = this.nodeFactory(id, "symbol");
+        var node = this.nodeFactory(null, "polygon");
+        symbolNode.appendChild(node);
+        var symbolExtent = new OpenLayers.Bounds(
+                                    Number.MAX_VALUE, Number.MAX_VALUE, 0, 0);
+
+        var points = [];
+        var x,y;
+        for (var i=0, len=symbol.length; i<len; i=i+2) {
+            x = symbol[i];
+            y = symbol[i+1];
+            symbolExtent.left = Math.min(symbolExtent.left, x);
+            symbolExtent.bottom = Math.min(symbolExtent.bottom, y);
+            symbolExtent.right = Math.max(symbolExtent.right, x);
+            symbolExtent.top = Math.max(symbolExtent.top, y);
+            points.push(x, ",", y);
+        }
+
+        node.setAttributeNS(null, "points", points.join(" "));
+
+        var width = symbolExtent.getWidth();
+        var height = symbolExtent.getHeight();
+        // create a viewBox three times as large as the symbol itself,
+        // to allow for strokeWidth being displayed correctly at the corners.
+        var viewBox = [symbolExtent.left - width,
+                        symbolExtent.bottom - height, width * 3, height * 3];
+        symbolNode.setAttributeNS(null, "viewBox", viewBox.join(" "));
+        this.symbolMetrics[id] = {
+            size: Math.max(width, height),
+            x: symbolExtent.getCenterLonLat().lon,
+            y: symbolExtent.getCenterLonLat().lat
+        };
+
+        this.defs.appendChild(symbolNode);
+        return symbolNode;
+    },
+
+    /**
+     * Method: getFeatureIdFromEvent
+     *
+     * Parameters:
+     * evt - {Object} An <OpenLayers.Event> object
+     *
+     * Returns:
+     * {String} A feature id or undefined.
+     */
+    getFeatureIdFromEvent: function(evt) {
+        var featureId = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments);
+        if(!featureId) {
+            var target = evt.target;
+            featureId = target.parentNode && target != this.rendererRoot ?
+                target.parentNode._featureId : undefined;
+        }
+        return featureId;
+    },
+
+    CLASS_NAME: "OpenLayers.Renderer.SVG2"
+});
+
+/**
+ * Constant: OpenLayers.Renderer.SVG2.LABEL_ALIGN
+ * {Object}
+ */
+OpenLayers.Renderer.SVG2.LABEL_ALIGN = {
+    "l": "start",
+    "r": "end",
+    "b": "bottom",
+    "t": "hanging"
+};
+
+/**
+ * Constant: OpenLayers.Renderer.SVG2.LABEL_VSHIFT
+ * {Object}
+ */
+OpenLayers.Renderer.SVG2.LABEL_VSHIFT = {
+    // according to
+    // http://www.w3.org/Graphics/SVG/Test/20061213/htmlObjectHarness/full-text-align-02-b.html
+    // a baseline-shift of -70% shifts the text exactly from the
+    // bottom to the top of the baseline, so -35% moves the text to
+    // the center of the baseline.
+    "t": "-70%",
+    "b": "0"
+};
+
+/**
+ * Constant: OpenLayers.Renderer.SVG2.LABEL_VFACTOR
+ * {Object}
+ */
+OpenLayers.Renderer.SVG2.LABEL_VFACTOR = {
+    "t": 0,
+    "b": -1
+};
+
+/**
+ * Function: OpenLayers.Renderer.SVG2.preventDefault
+ * Used to prevent default events (especially opening images in a new tab on
+ * ctrl-click) from being executed for externalGraphic and graphicName symbols
+ */
+OpenLayers.Renderer.SVG2.preventDefault = function(e) {
+    e.preventDefault && e.preventDefault();
+};
\ No newline at end of file
diff --git a/license.txt b/license.txt
index c02cd51..20a789c 100644
--- a/license.txt
+++ b/license.txt
@@ -1,8 +1,4 @@
-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 2005-2011 OpenLayers Contributors. All rights reserved. See
+Copyright 2005-2012 OpenLayers Contributors. All rights reserved. See
 authors.txt for full list.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -28,4 +24,4 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 The views and conclusions contained in the software and documentation are those
 of the authors and should not be interpreted as representing official policies,
-either expressed or implied, of OpenLayers Contributors.
\ No newline at end of file
+either expressed or implied, of OpenLayers Contributors.
diff --git a/doc/licenses/APACHE-2.0.txt b/licenses/APACHE-2.0.txt
similarity index 100%
rename from doc/licenses/APACHE-2.0.txt
rename to licenses/APACHE-2.0.txt
diff --git a/doc/licenses/BSD-LICENSE.txt b/licenses/BSD-LICENSE.txt
similarity index 100%
rename from doc/licenses/BSD-LICENSE.txt
rename to licenses/BSD-LICENSE.txt
diff --git a/doc/licenses/MIT-LICENSE.txt b/licenses/MIT-LICENSE.txt
similarity index 100%
rename from doc/licenses/MIT-LICENSE.txt
rename to licenses/MIT-LICENSE.txt
diff --git a/notes/2.12.md b/notes/2.12.md
new file mode 100644
index 0000000..1cb4aab
--- /dev/null
+++ b/notes/2.12.md
@@ -0,0 +1,378 @@
+# Major enhancements and additions
+
+## Zoom Control
+
+A simple control to add zoom in/out buttons on the map that can be entirely styled using CSS.
+See it live in this [example](http://openlayers.org/dev/examples/zoom.html).
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/291
+ * https://github.com/openlayers/openlayers/pull/292
+
+## Builds
+
+This version of OpenLayers ships with three builds:
+
+ * `OpenLayers.js`
+ * `OpenLayers.light.js`
+ * `OpenLayers.mobile.js`
+
+See the README.md file and the docs on docs.openlayers.org for more information.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/254
+ * https://github.com/openlayers/openlayers/pull/261
+
+## style.mobile.css
+
+The theme/default directory now includes a mobile-specific CSS file, namely
+style.mobile.css. The OpenLayers mobile examples use this file. To use it
+in your mobile pages use tags like this:
+
+<link rel="stylesheet" href="openlayers/theme/default/style.mobile.css" type="text/css">
+
+(This file used to be in the examples/ directory).
+
+## Sensible projection defaults
+
+The geographic and web mercator projections define default values for the maxExtent, and units. This simplifies the map and layer configuration.
+
+For example, a map that used to be created with this:
+
+    map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        units: "m",
+        maxExtent: new OpenLayers.Bounds(
+            -20037508.34, -20037508.34, 20037508.34, 20037508.34
+        )
+    });
+
+can now be created with this:
+
+    map = new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913"
+    });
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/219
+
+## Tile Offline Storage
+
+With the new `OpenLayers.Control.CacheRead` and `OpenLayers.Control.CacheWrite` controls, applications can cache tiles for offline use or for use with slow connections.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/301
+
+## Tile Animation
+
+The displaying of tiles can now be animated, using CSS3 transitions. Transitions operate on the `opacity` property. Here's the CSS rule defined in OpenLayers' default theme:
+
+    .olLayerGrid .olTileImage {
+        -webkit-transition: opacity 0.2s linear;
+        -moz-transition: opacity 0.2s linear;
+        -o-transition: opacity 0.2s linear;
+        transition: opacity 0.2s linear;
+    }
+
+People can override this rule to use other transition settings. To remove tile animation entirely use:
+
+    .olLayerGridTile .olTileImage {
+        -webkit-transition: none;
+        -moz-transition: none;
+        -o-transition: all 0 none;
+        transition: none;
+    }
+
+Note that by default tile animation is not enabled for single tile layers.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/127
+
+## Tile Queue
+
+The tiling code has been overhauled so tile loading in grid layers is now done in a queue.
+The tile queue gives more control on the tile requests sent to the server. Pending requests for tiles that are not needed any more (e.g. after zooming or panning) are avoided, which increases performance and reduces server load.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/179
+
+## Tile Canvas
+
+Image tiles expose a `getCanvasContext` function that can be used for various
+things, like changing the image pixels, save the image using the File API, etc.
+
+See the [osm-grayscale
+example](http://openlayers.org/dev/examples/osm-grayscale.html).
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/160
+
+## Tile Interaction Event Improvements
+
+The layer's `tileloaded` event now returns a reference to the loaded tile. The new `tileloaderror` event does the same, and is fired when a tile could not be loaded.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/283
+
+## Tile and Backbuffer Overhaul
+
+The whole image tile and backbuffer code (behind `transitionEffect:resize`) has been redesigned and
+rewritten. This overhaul yields better performance and code simplifications.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/16
+
+## Continuous Zooming
+
+Tile layers can now be displayed at resolutions not supported by their tiling
+services. This works by requesting tiles at higher resolutions and stretching
+the layer div as appropriate. With this change fractionalZoom:true will work
+for single tile layers as well as for tiled layers.
+
+See the [client zoom
+example](http://openlayers.org/dev/examples/clientzoom.html).
+
+Corresponding issues/pull requests:
+
+ * http://trac.osgeo.org/openlayers/ticket/3531
+ * https://github.com/openlayers/openlayers/pull/5
+
+# Behavior Changes from Past Releases
+
+## MultiMap Layer Removal
+
+The `OpenLayers.Layer.MultiMap` class has been removed entirely, as the MultiMap service was discontinued.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/328
+
+## GPX API change
+
+The `gpxns` API property has been removed. The GPX namespace is now defined in the `namespaces` property but is not intended to be overriden.
+
+GPX also now has a basic write function.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/221
+
+## Function return values
+
+Previously a few functions in the library displayed error messages and returned `undefined`, `null` or `false` if the parameters passed in were bad. In 2.12 these functions now just throw an error/exception. People relying on return values to know if a function call is successful may need to change their code. Here are the modified functions:
+
+ * `OpenLayers.Bounds.add` throws a `TypeError` exception if `x` or `y` is null
+ * `OpenLayers.LonLat.add` throws a `TypeError` exception if `lon` or `lat` is null
+ * `OpenLayers.Pixel.add` throws a `TypeError` exception if `x` or `y` is null
+ * `OpenLayers.Filter.Comparison.value2regex` throws an `Error` exception if `wildcard` equals to `"."`
+ * `OpenLayers.Layer.PointTrack.addNodes` throws a `TypeError` exception if `endPoint` isn't actually a point
+ * `OpenLayers.Layer.Vector.getFeatureFromEvent` throws an `Error` exception if the layer has no renderer
+
+Corresponding issues/pull requests:
+
+ * http://trac.osgeo.org/openlayers/ticket/3320
+
+## Changes in formats WMTSCapabilities and SOSCapabilities
+
+The structure of the object returned by `Format.WMTSCapabilities:read` and `Format.SOSCapabilities:read` has slightly changed.
+
+For `WMTSCapabilities` the GET href used to be made available at `operationsMetadata.GetCapabilities.dcp.http.get`, the latter is now an array of objects with two properties: `url` and `constrains`. People using `operationsMetadata.GetCapabilities.dcp.http.get` in their applications should certainly use `operationsMetadata.GetCapabilities.dcp.http.get[0].url`.
+
+Likewise for `SOSCapabilities`.
+
+Looking at the tests is a good way to understand what the requires changes are. See [SOSCapabilities/v1_0_0.html](https://github.com/openlayers/openlayers/blob/master/tests/Format/SOSCapabilities/v1_0_0.html) and [WMTSCapabilities/v1_0_0.html](https://github.com/openlayers/openlayers/blob/master/tests/Format/WMTSCapabilities/v1_0_0.html).
+
+Corresponding issues/pull requests:
+
+ * http://trac.osgeo.org/openlayers/ticket/3568
+ * https://github.com/openlayers/openlayers/pull/40
+
+
+## Rico deprecation
+
+We are deprecating the Rico classes/objects in OpenLayers. This has the following implications:
+
+`Popup.AnchoredBubble` is deprecated. Its constructor now displays a deprecation message on the console. If you want popups with rounded corners either use `Popup.FramedClould`, or use `Popup.Anchored` and round corners using the [border-radius](https://developer.mozilla.org/en/CSS/border-radius) CSS property.
+
+The `roundedCorner` option of `Control.LayerSwitcher` is deprecated, and it now defaults to `false`. Setting it to true results in deprecation messages being output on the console. If you still want to set `roundedCorner` to `true` (you should not!) you need to make sure that the Rico/Corner.js and Rico/Color.js scripts are loaded in the page. This can be ensured by adding Rico/Corner.js in the build profile. The controls.html example demonstrates how to use `border-radius` to round corn [...]
+
+
+    .olControlLayerSwitcher .layersDiv {
+        border-radius: 10px 0 0 10px;
+    }
+
+
+In future releases we intend to move the Rico and `AnchoredBubble` code into deprecated.js. You really should consider stop using Rico-based functionalities in your applications.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/99
+
+## Changes in Geometry
+
+The base `OpenLayers.Geometry` class no longer depends on `OpenLayers.Format.WKT` or `OpenLayers.Feature.Vector`.  If you want to make use of the `OpenLayers.Geometry.fromWKT` method, you must explicitly include the OpenLayers/Format/WKT.js file in your build.  
+
+Without the WKT format included (by default), the `OpenLayers.Geometry::toString` method now returns "[object Object]."  Previously, it returned the Well-Known Text representation of the geometry.  To maintain the previous behavior, include the OpenLayers/Format/WKT.js file in your build.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/101
+
+## Google v3 Layer
+
+This release fixes a problem with the clickable elements supplied by Google. `OpenLayers.Layer.Google.v3` is now compatible with the current frozen version of Google's API (3.7) and also with the current release and nightly versions (3.8 and 3.9), but be aware that Google may change these elements in their release and nightly versions at any time, and an interim fix OpenLayers release may be needed.
+
+It's recommended that production servers always load the frozen version of Google's API, but it would help find potential problems if development pages used the latest nightly version.
+
+See the class description in the API docs for `OpenLayers.Layer.Google.v3` for more details.
+
+Good ideas on how to improve this unsatisfactory situation welcome!
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/472
+
+## OSM and Bing Layers
+
+`Layer.OSM` is now defined in its own script file, namely `OpenLayers/Layer/OSM.js`. So people using `Layer.OSM` should now include `OpenLayers/Layer/OSM.js`, as opposed to `OpenLayers/Layer/XYZ.js`, in their OpenLayers builds.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/issues/138
+ * https://github.com/openlayers/openlayers/pull/144
+
+The `OpenLayers.Tile.Image` class now has a method to get a canvas context for processing tiles. Since both OSM and Bing set Access-Control-Allow-Origin headers for their tiles, it is possible to manipulate a canvas that these tiles were rendered to even if the tiles come from a remote origin. Especially when working with custom OSM tilesets from servers that do not send Access-Control-Allow-Origin headers, it is now necessary to configure the layer with
+
+    tileOptions: {crossOriginKeyword: null}
+
+Both `OpenLayers.Layer.OSM` and `OpenLayers.Layer.Bing` do not have defaults for `maxExtent`, `maxResolutions` and `units` any more. This may break maps that are configured with a `maxResolution` of `156543.0339`, which was used in examples before 2.11, but is incorrect. The correct value is `156543.03390625`, but it is no longer necessary to specify a maxResolution, maxExtent and units if the correct resolution is set. See "Projection and Spherical Mercator" below.
+
+## Projection & SphericalMercator
+
+When working with Web Mercator layers (e.g. Google, Bing, OSM), it was previously necessary to configure the map or the base layer with the correct `projection`, `maxExtent`, `maxResolutions` and `units`. Now OpenLayers has defaults for WGS84 and Web Mercator in `OpenLayers.Projection.defaults`, so it is enough to provide the `projection`.
+
+Old:
+
+    new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        maxResolution: 156543.03390625,
+        maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
+        units: "m",
+        layers: [
+            new OpenLayers.Layer.Google("Google Streets"),
+            new OpenLayers.Layer.OSM(null, null, {isBaseLayer: false, opacity: 0.7})
+        ],
+        zoom: 1
+    });
+
+New:
+
+    new OpenLayers.Map({
+        div: "map",
+        projection: "EPSG:900913",
+        layers: [
+            new OpenLayers.Layer.Google("Google Streets"),
+            new OpenLayers.Layer.OSM(null, null, {isBaseLayer: false, opacity: 0.7})
+        ],
+        zoom: 1
+    });
+
+In previous releases, coordinate transforms between EPSG:4326 and EPSG:900913 were defined in the SphericalMercator.js script.  In 2.12, these default transforms are included in the Projection.js script.  The Projection.js script is included as a dependency in builds with any layer types, so no special build configuration is necessary to get the web mercator transforms.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/219
+
+If you were previously using the `OpenLayers.Layer.SphericalMercator.forwardMercator` or `inverseMercator` methods, you may have to explicitly include the SphericalMercator.js script in your build.  The Google layer is the only layer that depends on the SphericalMercator mixin.  If you are not using the Google layer but want to use the SphericalMercator methods listed above, you have to explicitly include the SphericalMercator.js script in your build.
+
+Corresponding issues/pull requests:
+
+* https://github.com/openlayers/openlayers/pull/153
+
+## QueryStringFilter
+
+`OpenLayers.Protocol.HTTP` no longer requires `OpenLayers.Format.QueryStringFilter`. It you need this, make sure it is included in your build config file.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/issues/147
+ * https://github.com/openlayers/openlayers/pull/148
+
+## Changes in getURLasync
+
+The internal `OpenLayers.Layer.getURLasync` function now take a bound, a callback and a scope. The function no longer needs update the passed property but simply to return to url.
+
+## Changes when base layer configured with wrapDateLine: true
+
+Vector editing across the date line works reliably now. To make this work, OpenLayers won't zoom out to resolutions where more than one world is visible any more. For maps that have base layers with wrapDateLine set to false, no zoom restrictions apply.
+
+## OpenLayers.Util.onImageLoadError no longer exists
+
+To replace a tile that couldn't be loaded with a static image, create a css selector for the `.olImageLoadError` class (e.g. a `background-image`).
+
+For more complex tile loading error handling, register a listener to the layer's `tileerror` event.
+
+Corresponding issues/pull requests:
+
+ * https://github.com/openlayers/openlayers/pull/283
+
+## Deprecated Components
+
+A number of properties, methods, and constructors have been marked as deprecated for multiple releases in the 2.x series.  For the 2.12 release this deprecated functionality has been moved to a separate deprecated.js file.  If you use any of the constructors or methods below, you will have to explicitly include the deprecated.js file in your build (or add it in a separate `<script>` tag after OpenLayers.js).
+
+ * OpenLayers.Class.isPrototype
+ * OpenLayers.Class.create
+ * OpenLayers.Class.inherit
+ * OpenLayers.Util.clearArray
+ * OpenLayers.Util.setOpacity
+ * OpenLayers.Util.safeStopPropagation
+ * OpenLayers.Util.getArgs
+ * OpenLayers.nullHandler
+ * OpenLayers.loadURL
+ * OpenLayers.parseXMLString
+ * OpenLayers.Ajax.* (all methods)
+ * OpenLayers.Element.hide
+ * OpenLayers.Element.show
+ * OpenLayers.Element.getDimensions
+ * OpenLayers.Tile.prototype.getBoundsFromBaseLayer
+ * OpenLayers.Control.MouseDefaults
+ * OpenLayers.Control.MouseToolbar
+ * OpenLayers.Layer.Grid.prototype.getGridBounds
+ * OpenLayers.Format.XML.prototype.concatChildValues
+ * OpenLayers.Layer.WMS.Post
+ * OpenLayers.Layer.WMS.Untiled
+ * OpenLayers.Layer.MapServer.Untiled
+ * OpenLayers.Tile.WFS
+ * OpenLayers.Feature.WFS
+ * OpenLayers.Layer.WFS
+ * OpenLayers.Layer.VirtualEarth
+ * OpenLayers.Protocol.SQL
+ * OpenLayers.Protocol.SQL.Gears
+ * OpenLayers.Layer.Yahoo
+ * OpenLayers.Layer.GML
+ * OpenLayers.Geometry.Rectangle
+ * OpenLayers.Renderer.NG
+ * OpenLayers.Renderer.SVG2
+
+In addition, OpenLayers no longer modifies any native prototypes or objects by default.  If you rely on any of the following, you'll need to include deprecated.js explicitly to get the same behavior.
+
+ * String.prototype.startsWith
+ * String.prototype.contains
+ * String.prototype.trim
+ * String.prototype.camelize
+ * Function.prototype.bind
+ * Function.prototype.bindAsEventListener
+ * Event.stop
+
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..f41fcc8
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,79 @@
+# OpenLayers
+
+Copyright (c) 2005-2012 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.
+
+## Getting OpenLayers
+
+OpenLayers lives at http://www.openlayers.org/.  Find details on downloading stable releases or the development version the [development site](http://trac.osgeo.org/openlayers/wiki/HowToDownload).
+
+## Installing OpenLayers
+
+You can use OpenLayers as-is by copying build/OpenLayers.js and the
+entire theme/ and img/ directories up to your webserver and putting them 
+in the same directory. The files can be in subdirectories on your website, 
+or right in the root of the site, as in these examples. 
+To include the OpenLayers library in your web page from the root of the site, use:
+
+    <script type="text/javascript" src="/OpenLayers.js" />
+
+As an example, using bash (with the release files in ~/openlayers):
+
+    $ cd /var/www/html
+    $ cp ~/openlayers/OpenLayers.js ./
+    $ cp -R ~/openlayers/theme ./
+    $ cp -R ~/openlayers/img ./
+
+If you want to use the multiple-file version of OpenLayers (for, say,
+debugging or development purposes), copy the lib/ directory up to your
+webserver in the same directory you put the img/ folder. Then add
+the following to your web page instead:
+
+    <script type="text/javascript" src="/lib/OpenLayers.js" />
+
+As an example, using bash (with the release files in ~/openlayers):
+
+    $ cd /var/www/html
+    $ cp -R ~/openlayers/lib ./
+    $ cp -R ~/openlayers/theme ./
+    $ cp -R ~/openlayers/img ./
+
+## Alternate OpenLayers Versions in this Release
+
+The following versions of OpenLayers single file builds are included in this release 
+and can be used in place of OpenLayers.js in any of the above instructions:
+
+1. OpenLayers.js - full build --> Includes everything except the alternate language
+    translations and deprecated classes.
+2. OpenLayers.mobile.js - a mobile focused build --> Includes a subset of the OpenLayers 
+    library to serve common mobile web app use cases. This build provides access to 
+    OpenStreetMap, Bing, WMS, WFS and vector layers; touch optimized controls; geolocation;
+    vector editing and interaction tools. The examples tagged ``mobile`` can use this build.
+3. OpenLayers.light.js - a simple use case focused build --> Includes a subset of the
+    OpenLayers library to serve the basic use case of displaying points and polygons
+    on a map. This build provides access to OpenStreetMap, Bing, Google, WMS, and 
+    vector layers; basic map controls; and vector interaction tools. The examples
+    tagged ``light`` can use this build.
+    
+## Using OpenLayers in Your Own Website
+
+The [examples directory](http://openlayers.org/dev/examples/) is full of useful examples.
+
+Documentation is available at http://trac.osgeo.org/openlayers/wiki/Documentation.
+You can generate the API documentation with http://www.naturaldocs.org/
+As an example, using bash (with the release files in ~/openlayers):
+
+    $ cd ~/openlayers/
+    $ /path/to/NaturalDocs -i lib/ -o HTML doc/ -p doc_config/ -s Default OL
+
+Information on changes in the API is available in release notes found in the notes folder.
+
+## Contributing to OpenLayers
+
+Please join the email lists at http://openlayers.org/mailman/listinfo
+Patches are welcome!
+
diff --git a/readme.txt b/readme.txt
deleted file mode 100644
index caeb84f..0000000
--- a/readme.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-OpenLayers
--=-=-=-=-=-
-
-Copyright (c) 2005-2011 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.
-
-------------------
-Getting OpenLayers
-------------------
-
-OpenLayers lives at http://www.openlayers.org/.
-
-You can get OpenLayers from
-    http://trac.openlayers.org/wiki/HowToDownload.
-
----------------------
-Installing OpenLayers
----------------------
-
-You can use OpenLayers as-is by copying build/OpenLayers.js and the
-entire theme/ and img/ directories up to your webserver, putting them 
-in the same directory. The files can be in subdirectories on your website, 
-or right in the root of the site, as in these examples. 
-To include the OpenLayers library in your web page from the root of the site, use:
-
-  <script type="text/javascript" src="/OpenLayers.js" />
-
-As an example, using bash (with the release files in ~/openlayers ):
-$ cd /var/www/html
-$ cp ~/openlayers/OpenLayers.js ./
-$ cp -R ~/openlayers/theme ./
-$ cp -R ~/openlayers/img ./
-
-If you want to use the multiple-file version of OpenLayers (for, say,
-debugging or development purposes), copy the lib/ directory up to your
-webserver in the same directory you put the img/ folder. Then add
-the following to your web page instead:
-
-  <script type="text/javascript" src="/lib/OpenLayers.js" />
-
-As an example, using bash (with the release files in ~/openlayers ):
-$ cd /var/www/html
-$ cp -R ~/openlayers/lib ./
-$ cp -R ~/openlayers/theme ./
-$ cp -R ~/openlayers/img ./
-
-
-------------------------------------
-Using OpenLayers in Your Own Website
-------------------------------------
-
-The examples/ directory is full of useful examples.
-
-Documentation is available at http://trac.openlayers.org/wiki/Documentation.
-You can generate the API documentation with http://www.naturaldocs.org/:
-As an example, using bash (with the release files in ~/openlayers ):
-$ cd ~/openlayers/
-$ /path/to/NaturalDocs -i lib/ -o HTML doc/ -p doc_config/ -s Default OL
-
-Information on changes in the API is available in news.txt.
-
---------------------------
-Contributing to OpenLayers
---------------------------
-
-Please join the email lists at http://openlayers.org/mailman/listinfo
-Patches are welcome!
-
-= 30 =
diff --git a/release-license.txt b/release-license.txt
deleted file mode 100644
index be4bd95..0000000
--- a/release-license.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This license information is now available at:
- 
-http://svn.openlayers.org/trunk/openlayers/license.txt
diff --git a/repository-license.txt b/repository-license.txt
deleted file mode 100644
index 7c2f8bb..0000000
--- a/repository-license.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This license information is now available at:
-
-http://svn.openlayers.org/trunk/openlayers/license.txt
diff --git a/tests/Ajax.html b/tests/Ajax.html
deleted file mode 100644
index 53142a2..0000000
--- a/tests/Ajax.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<html>
-<head>
-  <script src="OLLoader.js"></script>
-  <script type="text/javascript">
-
-    function test_Ajax_loadUrl(t) {
-        t.plan(5);
-        var _get = OpenLayers.Request.GET;
-        var caller = {};
-        var onComplete = function() {};
-        var onFailure = function() {};
-        var params = {};
-        OpenLayers.Request.GET = function(config) {
-            t.eq(config.url, "http://example.com/?format=image+kml", "correct url")
-            t.eq(config.params, params, "correct params");
-            t.eq(config.scope, caller, "correct scope");
-            t.ok(config.success === onComplete, "correct success callback");
-            t.ok(config.failure === onFailure, "correct failure callback");
-        };
-        OpenLayers.loadURL("http://example.com/?format=image+kml", params, caller, onComplete, onFailure);
-        OpenLayers.Request.GET = _get;
-    }
-  </script>
-</head>
-<body>
-</body>
-</html>
diff --git a/tests/Animation.html b/tests/Animation.html
new file mode 100644
index 0000000..f113690
--- /dev/null
+++ b/tests/Animation.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Animation.js Tests</title>
+        <script>
+
+        // dependencies for tests
+        var OpenLayers = [
+            "OpenLayers/Animation.js"
+        ];
+
+        </script>
+        <script src="OLLoader.js"></script>
+
+        <script>
+                
+        function test_all(t) {
+            t.plan(8);
+            t.ok(OpenLayers.Animation.isNative !== undefined, "isNative is set.");
+            
+            function doIt(win) {
+                win.requestFrame(t);
+                win.start(t);
+                win.startDuration(t);
+                win.stop(t);
+            }
+            
+            // Test in an extra window in Firefox, and directly in other browsers.
+            // This is needed because requestAnimationFrame does not work
+            // correctly in Firefox in a hidden IFrame.
+            if (window.mozRequestAnimationFrame) {
+                t.open_window("Animation.html", doIt);
+            } else {
+                doIt(window);
+            }
+        }
+
+        function requestFrame(t) {
+
+            t.eq(typeof OpenLayers.Animation.requestFrame, "function", "requestFrame is a function");
+
+            var calls = 0;
+            OpenLayers.Animation.requestFrame(function() {
+                ++calls;
+            });
+            t.delay_call(0.1, function() {
+                t.ok(calls > 0, "callback called: " + calls);
+            });
+        }
+
+        function start(t) {
+
+            var calls = 0;
+            var id = OpenLayers.Animation.start(function() {
+                ++calls;
+            });
+            t.delay_call(0.1, function() {
+                t.ok(calls > 1, "looped: " + calls);
+                OpenLayers.Animation.stop(id);
+            });
+        }
+
+        function startDuration(t) {
+
+            var calls = 0;
+            var id = OpenLayers.Animation.start(function() {
+                ++calls;
+            }, 100);
+            var first;
+            t.delay_call(0.2, function() {
+                first = calls;
+                t.ok(calls > 1, "looped: " + calls);
+            });
+            t.delay_call(0.3, function() {
+                t.eq(calls, first, "not being called any more");
+            });
+        }
+
+        function stop(t) {
+
+            var calls = 0;
+            var id = OpenLayers.Animation.start(function() {
+                ++calls;
+            });
+            var first;
+            t.delay_call(0.2, function() {
+                first = calls;
+                t.ok(calls > 1, "looped: " + calls);
+                OpenLayers.Animation.stop(id);
+            });
+            t.delay_call(0.3, function() {
+                t.eq(calls, first, "not being called any more");
+            });
+        }
+        </script>
\ No newline at end of file
diff --git a/tests/BaseTypes/Bounds.html b/tests/BaseTypes/Bounds.html
index f5620af..a1497cf 100644
--- a/tests/BaseTypes/Bounds.html
+++ b/tests/BaseTypes/Bounds.html
@@ -4,7 +4,7 @@
   <script type="text/javascript">
     var bounds; 
     function test_Bounds_constructor (t) {
-        t.plan( 21 );
+        t.plan( 26 );
         
         bounds = new OpenLayers.Bounds();
         t.ok( bounds instanceof OpenLayers.Bounds, "new OpenLayers.Bounds returns Bounds object" );
@@ -44,6 +44,15 @@
         t.eq( bounds.bottom, -20037508.34, "bounds.bottom adjusted for floating precision");
         t.eq( bounds.right, 40075016.68, "bounds.right adjusted for floating precision");
         t.eq( bounds.top, 20037508.34, "bounds.top adjusted for floating precision");
+        
+        // allow construction from a single arg
+        bounds = new OpenLayers.Bounds([-180, -90, 180, 90]);
+        t.ok(bounds instanceof OpenLayers.Bounds, "(array) correct instance");
+        t.eq(bounds.left, -180, "(array) left");
+        t.eq(bounds.bottom, -90, "(array) bottom");
+        t.eq(bounds.right, 180, "(array) right");
+        t.eq(bounds.top, 90, "(array) top");
+        
     }
 
     function test_Bounds_constructorFromStrings(t) {
@@ -124,6 +133,43 @@
         t.eq( bounds.containsLonLat(ll), bounds.contains(ll.lon, ll.lat), "containsLonLat works");
 
     }
+    
+    function test_containsLonLat_wraped(t) {
+        
+        var worldBounds = new OpenLayers.Bounds(-180, -90, 180, 90);
+
+        var cases = [{
+            ll: [0, 0], bbox: [-10, -10, 10, 10], contained: true
+        }, {
+            ll: [20, 0], bbox: [-10, -10, 10, 10], contained: false
+        }, {
+            ll: [360, 0], bbox: [-10, -10, 10, 10], contained: true
+        }, {
+            ll: [380, 0], bbox: [-10, -10, 10, 10], contained: false
+        }, {
+            ll: [725, 5], bbox: [-10, -10, 10, 10], contained: true
+        }, {
+            ll: [-355, -5], bbox: [-10, -10, 10, 10], contained: true
+        }, {
+            ll: [-715, 5], bbox: [-10, -10, 10, 10], contained: true
+        }, {
+            ll: [-735, 5], bbox: [-10, -10, 10, 10], contained: false
+        }, {
+            ll: [-180 * 50, 5], bbox: [-10, -10, 10, 10], contained: true
+        }];
+        
+        var len = cases.length;
+        t.plan(len);
+        
+        var c, bounds, loc;
+        for (var i=0; i<len; ++i) {
+            c = cases[i];
+            loc = new OpenLayers.LonLat(c.ll[0], c.ll[1]);
+            bounds = new OpenLayers.Bounds.fromArray(c.bbox);
+            t.eq(bounds.containsLonLat(loc, {worldBounds: worldBounds}), c.contained, "case " + i);
+        }
+        
+    }
 
     function test_Bounds_fromString(t) {
        t.plan( 12 );
@@ -555,7 +601,8 @@
     //straddling right
         testBounds = simpleBounds.add(10,0);
         wrappedBounds = testBounds.wrapDateLine(maxExtent);
-        t.ok(wrappedBounds.equals(testBounds), "wrapping a bounds that straddles the right of maxextent does nothing");
+        desiredBounds = testBounds.add(-maxExtent.getWidth(), 0)
+        t.ok(wrappedBounds.equals(desiredBounds), "wrapping a bounds that straddles the right of maxextent moves extent to left side of the world");
     
     //right leftTolerance
         testBounds = simpleBounds.add(14,0);
@@ -583,7 +630,7 @@
 
     }
     function test_Bounds_transform(t) {
-        t.plan( 3 );
+        t.plan( 5 );
         bounds = new OpenLayers.Bounds(10, -10, 20, 10);
         bounds.transform(new OpenLayers.Projection("foo"), new OpenLayers.Projection("Bar")); 
         t.eq(bounds.toBBOX(), "10,-10,20,10", "null transform okay");
@@ -591,10 +638,18 @@
         t.eq(bounds.toBBOX(), "1113194.907778,-1118889.974702,2226389.815556,1118889.974702", "bounds for spherical mercator transform are correct");
         bounds.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); 
         t.eq(bounds.toBBOX(), "10,-10,20,10", "bounds for inverse spherical mercator transform are correct");
+
+        // transform with string
+        bounds = new OpenLayers.Bounds(10, -10, 20, 10);
+        bounds.transform("EPSG:4326", "EPSG:900913"); 
+        t.eq(bounds.toBBOX(), "1113194.907778,-1118889.974702,2226389.815556,1118889.974702", "(string) bounds for spherical mercator transform are correct");
+        bounds.transform("EPSG:900913", "EPSG:4326"); 
+        t.eq(bounds.toBBOX(), "10,-10,20,10", "(string) bounds for inverse spherical mercator transform are correct");
+        
     }
 
     function test_Bounds_add(t) {
-        t.plan( 8 );
+        t.plan( 6 );
 
         origBounds = new OpenLayers.Bounds(1,2,3,4);
         testBounds = origBounds.clone();
@@ -606,19 +661,19 @@
         t.ok( bounds.equals(b), "bounds is set correctly");
         
     //null values
-        OpenLayers.Lang.setCode('en');
-        var desiredMsg = "You must pass both x and y values to the add function.";
-        OpenLayers.Console.error = function(msg) {
-            t.eq(msg, desiredMsg, "error correctly reported");
+        try {
+            bounds = testBounds.add(null, 50);
+        } catch(e) {
+            t.ok("exception thrown when passing null value to add()");
         }
-    
-        bounds = testBounds.add(null, 50);
         t.ok( testBounds.equals(origBounds), "testBounds is not modified by erroneous add operation (null x)");
-        t.ok(bounds == null, "returns null on erroneous add operation (null x)");
  
-        bounds = testBounds.add(5, null);
+        try {
+            bounds = testBounds.add(5, null);
+        } catch(e) {
+            t.ok("exception thrown when passing null value to add()");
+        }            
         t.ok( testBounds.equals(origBounds), "testBounds is not modified by erroneous add operation (null y)");
-        t.ok(bounds == null, "returns null on erroneous add operation (null y)");
     }
 
     function test_Bounds_scale(t) {
diff --git a/tests/BaseTypes/Class.html b/tests/BaseTypes/Class.html
index 2079ce6..11d5826 100644
--- a/tests/BaseTypes/Class.html
+++ b/tests/BaseTypes/Class.html
@@ -2,8 +2,6 @@
 <head>
   <script src="../OLLoader.js"></script>
   <script type="text/javascript">
-    // remove this next line at 3.0
-    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
 
     function test_Class(t) {
         t.plan(1);
@@ -181,147 +179,19 @@
         t.eq(c.a, 'foobar', 'constructor at the root is called');
     }
     
-    // Remove this at 3.0
-    function test_Class_backwards(t) {
-        t.plan(4);
-        // test that a new style class supports old style inheritance
-        var NewClass = OpenLayers.Class({
-            newProp: "new",
-            initialize: function() {
-                t.ok(false, "the base class is never instantiated");
-            },
-            toString: function() {
-                return "new style";
-            }
-        });
-        
-        var OldClass = OpenLayers.Class.create();
-        OldClass.prototype = OpenLayers.Class.inherit(NewClass, {
-            oldProp: "old",
-            initialize: function() {
-                t.ok(true, "only the child class constructor is called");
-            }
-        });
-        
-        var oldObj = new OldClass();
-        t.eq(oldObj.oldProp, "old",
-             "old style classes can still be instantiated");
-        t.eq(oldObj.newProp, "new",
-             "old style inheritance of properties works with new style base");
-        t.eq(oldObj.toString(), "new style",
-             "toString inheritance works with backwards style");
-        
-    }
-
-    // Remove this at 3.0
-    function test_Class_create (t) {
-        t.plan( 3 );
-        var cls = OpenLayers.Class.create();
-        cls.prototype = {
-            initialize: function () {
-                if (isMozilla)
-                    t.ok(this instanceof cls,
-                                "initialize is called on the right class");
-                else
-                    t.ok(true, "initialize is called");
-            }
-        };
-        var obj = new cls();
-        t.eq(typeof obj, "object", "obj is an object");
-        if (isMozilla)
-            t.ok(obj instanceof cls,
-                        "object is of the right class");
-        else
-            t.ok(true, "this test doesn't work in IE");
-    }
-
-    // Remove this at 3.0
-    function test_Class_inherit (t) {
-        t.plan( 20 );
-        var A = OpenLayers.Class.create();
-        var initA = 0;
-        A.prototype = {
-            count: 0,
-            mixed: false,
-            initialize: function () {
-                initA++;
-                this.count++;
-            }
-        };
-
-        var B = OpenLayers.Class.create();
-        var initB = 0;
-        B.prototype = OpenLayers.Class.inherit( A, {
-            initialize: function () {
-                A.prototype.initialize.apply(this, arguments);
-                initB++;
-                this.count++;
-            }
-        });
-
-        var mixin = OpenLayers.Class.create()
-        mixin.prototype = {
-            mixed: true
-        };
-
-        t.eq( initA, 0, "class A not inited" );
-        t.eq( initB, 0, "class B not inited" );
-
-        var objA = new A();
-        t.eq( objA.count, 1, "object A init" );
-        t.eq( initA, 1, "class A init" );
-        if (isMozilla) 
-            t.ok( objA instanceof A, "obj A isa A" );
-        else
-            t.ok( true, "IE sucks" );
-
-        var objB = new B();
-        t.eq( initA, 2, "class A init" );
-        t.eq( initB, 1, "class B init" );
-        t.eq( objB.count, 2, "object B init twice" );
-        if (isMozilla) {
-            t.ok( objB instanceof A, "obj B isa A" );
-            t.ok( objB instanceof B, "obj B isa B" );
-        } else {
-            t.ok( true, "IE sucks" );
-            t.ok( true, "IE sucks" );
-        }
-
-        var C = OpenLayers.Class.create();
-        C.prototype = OpenLayers.Class.inherit( B, mixin, {count: 0} );
-        t.eq( initA, 2, "class A init unchanged" );
-        t.eq( initB, 1, "class B init unchanged" );
-        
-        var objC = new C();
-        t.eq( initA, 3, "class A init changed" );
-        t.eq( initB, 2, "class B init changed" );
-        t.eq( objC.count, 2, "object C init changed" );
-        if (isMozilla) {
-            t.ok( objC instanceof A, "obj C isa A" );
-            t.ok( objC instanceof B, "obj C isa B" );
-            t.ok( objC instanceof C, "obj C isa C" );
-            t.ok( !(objC instanceof mixin), "obj C isn'ta mixin" );
-        } else {
-            t.ok( true, "IE sucks" );
-            t.ok( true, "IE sucks" );
-            t.ok( true, "IE sucks" );
-            t.ok( true, "IE sucks" );
-        }
-        t.eq( objC.mixed, true, "class C has mixin properties" );
-    }
 
     function test_Class_isInstanceOf(t) {
         t.plan(7);
-        var wfs = new OpenLayers.Layer.WFS({});
+        var wms = new OpenLayers.Layer.WMS({});
         var drag = new OpenLayers.Control.DragFeature({});
-        t.ok(wfs instanceof OpenLayers.Layer.WFS, "isInstanceOf(WFS)");
-        t.ok(wfs instanceof OpenLayers.Layer, "isInstanceOf(Layer)");
-        t.ok(!(wfs instanceof OpenLayers.Format), "not isInstanceOf(Format)");
+        t.ok(wms instanceof OpenLayers.Layer.WMS, "isInstanceOf(WMS)");
+        t.ok(wms instanceof OpenLayers.Layer, "isInstanceOf(Layer)");
+        t.ok(!(wms instanceof OpenLayers.Format), "not isInstanceOf(Format)");
         t.ok(drag instanceof OpenLayers.Control, "drag is a control");
         t.ok(!(drag instanceof OpenLayers.Layer), "drag is not a layer");
 
         //test a class with multiple inheritance
-        var BadClass=OpenLayers.Class(OpenLayers.Layer.WFS, OpenLayers.Control.DragFeature);
+        var BadClass=OpenLayers.Class(OpenLayers.Layer.WMS, OpenLayers.Control.DragFeature);
         var bad = new BadClass({});
         t.ok(!(bad instanceof OpenLayers.Control), "bad is a control, but it is also a layer and we cannot have two superclasses");
         t.ok(bad instanceof OpenLayers.Layer, "bad is a layer, it inherits from the layer first");
diff --git a/tests/BaseTypes/Date.html b/tests/BaseTypes/Date.html
index 2597207..a433d84 100644
--- a/tests/BaseTypes/Date.html
+++ b/tests/BaseTypes/Date.html
@@ -35,7 +35,7 @@
     
     function test_Date_parse(t) {
         
-        t.plan(93);
+        t.plan(114);
         
         var cases = {
             "2000": {
@@ -127,6 +127,18 @@
                 minutes: 51,
                 seconds: 25,
                 milliseconds: 123
+            },
+            "2000Z": { // lenient (Chrome accepts this)
+                year: 2000
+            },
+            "2000-02Z": { // lenient (Chrome accepts this)
+                year: 2000,
+                month: 1
+            },
+            "2000-04-15Z": { // lenient (Chrome accepts this)
+                year: 2000,
+                month: 3,
+                date: 15
             }
         };
 
diff --git a/tests/BaseTypes/Element.html b/tests/BaseTypes/Element.html
index ca95d78..6e094cc 100644
--- a/tests/BaseTypes/Element.html
+++ b/tests/BaseTypes/Element.html
@@ -45,48 +45,6 @@
         t.eq(elem2.style.display, "none", "shown element toggled to hidden");
     }
     
-    function test_Element_hide(t) {
-        t.plan(2);
-
-        var elem1 = {
-            style: {
-                'display': "none"
-            }
-        };
-        
-        var elem2 = {
-            style: {
-                'display': ""
-            }
-        };
-
-        OpenLayers.Element.hide(elem1, elem2, "do-not-exists");
-        
-        t.eq(elem1.style.display, "none", "hidden element stays hidden");
-        t.eq(elem2.style.display, "none", "shown element hidden");
-    }
-    
-    function test_Element_show(t) {
-        t.plan(2);
-
-        var elem1 = {
-            style: {
-                'display': "none"
-            }
-        };
-        
-        var elem2 = {
-            style: {
-                'display': ""
-            }
-        };
-
-        OpenLayers.Element.show(elem1, "do-not-exists", elem2);
-        
-        t.eq(elem1.style.display, "", "hidden element shown");
-        t.eq(elem2.style.display, "", "shown element stays shown");
-    }
-    
     function test_Element_remove(t) {
         t.plan(1);
 
diff --git a/tests/BaseTypes/LonLat.html b/tests/BaseTypes/LonLat.html
index 009eafe..a1801f6 100644
--- a/tests/BaseTypes/LonLat.html
+++ b/tests/BaseTypes/LonLat.html
@@ -6,7 +6,7 @@
     var lonlat; 
 
     function test_LonLat_constructor (t) {
-        t.plan( 6 );
+        t.plan( 8 );
         lonlat = new OpenLayers.LonLat(6, 5);
         t.ok( lonlat instanceof OpenLayers.LonLat, "new OpenLayers.LonLat returns LonLat object" );
         t.eq( lonlat.CLASS_NAME, "OpenLayers.LonLat", "lonlat.CLASS_NAME is set correctly");
@@ -17,6 +17,12 @@
         lonlat = new OpenLayers.LonLat(20037508.33999999, -20037508.33999999);
         t.eq( lonlat.lon, 20037508.34, "lonlat.lon rounds correctly");
         t.eq( lonlat.lat, -20037508.34, "lonlat.lat rounds correctly");
+        
+        // allow construction from single arg
+        lonlat = new OpenLayers.LonLat([1, 2]);
+        t.eq(lonlat.lon, 1, "lon from array");
+        t.eq(lonlat.lat, 2, "lat from array");
+        
     }
     
     function test_LonLat_constructorFromStrings (t) {
@@ -52,7 +58,7 @@
     }
 
     function test_LonLat_add(t) {
-        t.plan(10);
+        t.plan(8);
 
         origLL = new OpenLayers.LonLat(10,100);
         lonlatA = origLL.clone();
@@ -64,19 +70,19 @@
         t.ok( addpx.equals(ll), "addpx is set correctly");
         
     //null values
-        OpenLayers.Lang.setCode('en');
-        var desiredMsg = "You must pass both lon and lat values to the add function.";
-        OpenLayers.Console.error = function(msg) {
-            t.eq(msg, desiredMsg, "error correctly reported");
+        try {
+            addpx = lonlatA.add(null, 50);
+        } catch(e) {
+            t.ok("exception thrown when passing null value to add()");
         }
-    
-        addpx = lonlatA.add(null, 50);
         t.ok( lonlatA.equals(origLL), "lonlatA is not modified by erroneous add operation (null lon)");
-        t.ok(addpx == null, "returns null on erroneous add operation (null lon)");
  
-        addpx = lonlatA.add(5, null);
+        try {
+            addpx = lonlatA.add(5, null);
+        } catch(e) {
+            t.ok("exception thrown when passing null value to add()");
+        }
         t.ok( lonlatA.equals(origLL), "lonlatA is not modified by erroneous add operation (null lat)");
-        t.ok(addpx == null, "returns null on erroneous add operation (null lat)");
 
         // string values
         addpx = origLL.clone().add("5", "50");
@@ -160,7 +166,7 @@
     }
 
     function test_LonLat_transform(t) {
-        t.plan( 6 );
+        t.plan(10);
         lonlat = new OpenLayers.LonLat(10, -10);
         lonlat.transform(new OpenLayers.Projection("foo"), new OpenLayers.Projection("Bar")); 
         t.eq(lonlat.lon, 10, "lon for null transform is the same")
@@ -171,6 +177,16 @@
         lonlat.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); 
         t.eq(lonlat.lon, 10, "lon for inverse spherical mercator transform is correct");
         t.eq(Math.round(lonlat.lat), -10, "lat for inverse spherical mercator correct")
+        
+        // transform with string
+        lonlat = new OpenLayers.LonLat(10, -10);
+        lonlat.transform("EPSG:4326", "EPSG:900913"); 
+        t.eq(Math.round(lonlat.lon), 1113195, "(string) lon for spherical mercator transform is correct");
+        t.eq(Math.round(lonlat.lat), -1118890, "(string) lat for spherical mercator correct")
+        lonlat.transform("EPSG:900913", "EPSG:4326"); 
+        t.eq(lonlat.lon, 10, "(string) lon for inverse spherical mercator transform is correct");
+        t.eq(Math.round(lonlat.lat), -10, "(string) lat for inverse spherical mercator correct")
+        
     }
     
     function test_LonLat_wrapDateLine(t) {
diff --git a/tests/BaseTypes/Pixel.html b/tests/BaseTypes/Pixel.html
index 1a8bf47..8f9f5c9 100644
--- a/tests/BaseTypes/Pixel.html
+++ b/tests/BaseTypes/Pixel.html
@@ -72,7 +72,7 @@
     }
 
     function test_Pixel_add(t) {
-        t.plan( 8 );
+        t.plan( 6 );
 
         var origPX = new OpenLayers.Pixel(5,6);
         var oldPixel = origPX.clone();
@@ -85,19 +85,19 @@
         t.ok( pixel.equals(px), "returned pixel is correct");
 
     //null values
-        OpenLayers.Lang.setCode('en');        
-        var desiredMsg = "You must pass both x and y values to the add function.";
-        OpenLayers.Console.error = function(msg) {
-            t.eq(msg, desiredMsg, "error correctly reported");
+        try {
+            pixel = oldPixel.add(null, 50);
+        } catch(e) {
+            t.ok("exception thrown when passing null value to add()");
         }
-    
-        pixel = oldPixel.add(null, 50);
         t.ok( oldPixel.equals(origPX), "oldPixel is not modified by erroneous add operation (null x)");
-        t.ok(pixel == null, "returns null on erroneous add operation (null x)");
  
-        addpx = oldPixel.add(5, null);
+        try {
+            addpx = oldPixel.add(5, null);
+        } catch(e) {
+            t.ok("exception thrown when passing null value to add()");
+        }            
         t.ok( oldPixel.equals(origPX), "oldPixel is not modified by erroneous add operation (null y)");
-        t.ok(pixel == null, "returns null on erroneous add operation (null y)");
     }
 
     function test_Pixel_offset(t) {
diff --git a/tests/Control/Attribution.html b/tests/Control/Attribution.html
index c1c1ef2..04b85cf 100644
--- a/tests/Control/Attribution.html
+++ b/tests/Control/Attribution.html
@@ -30,8 +30,9 @@
         map.addLayer(new OpenLayers.Layer("name", {'attribution':'My layer 2!'}));
         t.eq(control.div.innerHTML, 'My layer!, My layer 2!', "Attribution correct with two layers.");
         control.separator = '|';
+        control.template = "Map Copyright (c) 2012 by Foo Bar; ${layers}";
         map.addLayer(new OpenLayers.Layer("name",{'attribution':'My layer 3!'}));
-        t.eq(control.div.innerHTML, 'My layer!|My layer 2!|My layer 3!', "Attribution correct with three layers and diff seperator.");
+        t.eq(control.div.innerHTML, 'Map Copyright (c) 2012 by Foo Bar; My layer!|My layer 2!|My layer 3!', "Attribution correct with three layers and diff seperator.");
 
 
     }    
diff --git a/tests/Control/CacheRead.html b/tests/Control/CacheRead.html
new file mode 100644
index 0000000..ae0addf
--- /dev/null
+++ b/tests/Control/CacheRead.html
@@ -0,0 +1,108 @@
+<html>
+<head>
+    <script>
+    /**
+    * Because browsers that implement requestAnimationFrame may not execute
+    * animation functions while a window is not displayed (e.g. in a hidden
+    * iframe as in these tests), we mask the native implementations here.  The
+    * native requestAnimationFrame functionality is tested in Util.html and
+    * in PanZoom.html (where a popup is opened before panning).  The tests
+    * here will test the fallback setTimeout implementation for animation.
+    */
+    window.requestAnimationFrame = 
+        window.webkitRequestAnimationFrame =
+        window.mozRequestAnimationFrame =
+        window.oRequestAnimationFrame =
+        window.msRequestAnimationFrame = null;
+    </script>
+    <script src="../OLLoader.js"></script>
+    <script type="text/javascript">
+    function test_addLayer_removeLayer(t) {
+        t.plan(6);
+        var control = new OpenLayers.Control.CacheRead();
+        var map = new OpenLayers.Map({
+            div: "map",
+            controls: [control],
+            layers: [
+                new OpenLayers.Layer.WMS("One"),
+                new OpenLayers.Layer.WMS("Two")
+            ]
+        });
+        t.ok(map.layers[0].events.listeners.tileloadstart, "tileloadstart listener registered on layer One");
+        t.ok(map.layers[1].events.listeners.tileloadstart, "tileloadstart listener registered on layer Two");        
+        control.destroy();
+        t.ok(!map.layers[1].events.listeners.tileloadstart.length, "tileloadstart listener unregistered");        
+        
+        control = new OpenLayers.Control.CacheRead({
+            fetchEvent: "tileerror",
+            layers: [map.layers[0]]
+        });
+        map.addControl(control);
+        t.ok(map.layers[0].events.listeners.tileerror, "tileerror listener registered on layer One");
+        t.ok(!map.layers[1].events.listeners.tileerror, "tileerror listener not registered on layer Two");
+        control.destroy();        
+        t.ok(!map.layers[0].events.listeners.tileerror.length, "tileerror listener unregistered");
+        
+        map.destroy();
+    }
+    
+    function test_fetch(t) {
+
+        if (!window.localStorage) {
+            t.plan(1);
+            var scope = {active: true};
+            t.eq(OpenLayers.Control.CacheRead.prototype.fetch.call(scope), undefined, "no tiles fetched when localStorage is not supported.");
+            return;
+        }
+        
+        t.plan(5);
+        
+        var data = "data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==";
+        window.localStorage.setItem("olCache_foo/1/1/1", data);
+        window.localStorage.setItem("olCache_bar/1/1/1", data);
+
+        var layer1 = new OpenLayers.Layer.XYZ("One", "foo/${x}/${y}/${z}");
+        var layer2 = new OpenLayers.Layer.XYZ("Two", "bar/${x}/${y}/${z}", {isBaseLayer: false});
+        var control1 = new OpenLayers.Control.CacheRead({
+            layers: [layer1]
+        });
+        var control2 = new OpenLayers.Control.CacheRead({
+            layers: [layer2],
+            fetchEvent: "tileerror"
+        });
+
+        var map = new OpenLayers.Map({
+            div: "map",
+            projection: "EPSG:900913",
+            controls: [control1, control2],
+            layers: [layer1, layer2],
+            zoom: 1,
+            center: [0, 0]
+        });
+
+        OpenLayers.ProxyHost = "proxy?url=";
+        var tile = new OpenLayers.Tile.Image(layer1, new OpenLayers.LonLat(0, 0), new OpenLayers.Bounds(0, 0, 1, 1), "proxy?url=foo/1/1/1");
+        OpenLayers.Control.CacheWrite.urlMap[tile.url] = "foo/1/1/1";
+        
+        control1.fetch({tile: tile});
+        t.eq(tile.url, data, "proxied url replaced with data uri for original url");
+        delete OpenLayers.Control.CacheWrite.urlMap[tile.url];
+
+        t.delay_call(1, function() {
+            t.eq(layer1.grid[1][1].imgDiv.src, data, "[tileloadstart] tile content from cache");
+            t.ok(layer1.grid[0][0].imgDiv.src !== data, "[tileloadstart] tile content from remote resource");
+            t.eq(layer2.grid[1][1].imgDiv.src, data, "[tileerror] tile content from cache");
+            t.ok(layer2.grid[0][0].imgDiv.src !== data, "[tileerror] tile content from remote resource");
+
+            window.localStorage.removeItem("olCache_foo/1/1/1");
+            window.localStorage.removeItem("olCache_bar/1/1/1");
+            map.destroy();
+        });
+    }
+    
+    </script>
+</head>
+<body>
+    <div id="map" style="width: 400px; height: 250px;"/>
+</body>
+</html>
diff --git a/tests/Control/CacheWrite.html b/tests/Control/CacheWrite.html
new file mode 100644
index 0000000..fdb6cab
--- /dev/null
+++ b/tests/Control/CacheWrite.html
@@ -0,0 +1,87 @@
+<html>
+<head>
+    <script src="../OLLoader.js"></script>
+    <script type="text/javascript">
+    function test_addLayer_removeLayer(t) {
+        t.plan(6);
+        var control = new OpenLayers.Control.CacheWrite();
+        var map = new OpenLayers.Map({
+            div: "map",
+            controls: [control],
+            layers: [
+                new OpenLayers.Layer.WMS("One"),
+                new OpenLayers.Layer.WMS("Two")
+            ]
+        });
+        t.ok(map.layers[0].events.listeners.tileloaded, "tileloaded listener registered on layer One");
+        t.ok(map.layers[1].events.listeners.tileloaded, "tileloaded listener registered on layer Two");        
+        control.destroy();
+        t.ok(!map.layers[1].events.listeners.tileloaded.length, "tileloaded listener unregistered");        
+        
+        control = new OpenLayers.Control.CacheWrite({
+            layers: [map.layers[0]]
+        });
+        map.addControl(control);
+        t.ok(map.layers[0].events.listeners.tileloaded.length, "tileloaded listener registered on layer One");
+        t.ok(!map.layers[1].events.listeners.tileloaded.length, "tileloaded listener not registered on layer Two");
+        control.destroy();        
+        t.ok(!map.layers[0].events.listeners.tileloaded.length, "tileloaded listener unregistered");
+        
+        map.destroy();
+    }
+    
+    function test_cache_clearCache(t) {
+
+        if (!window.localStorage) {
+            t.plan(2);
+            var scope = {active: true};
+            t.eq(OpenLayers.Control.CacheWrite.prototype.cache.call(scope), undefined, "no tiles cached when localStorage is not supported.");
+            t.ok(!OpenLayers.Control.CacheWrite.clearCache(), "clearCache does nothing when localStorage is not supported.");
+            return;
+        }
+
+        t.plan(3);
+        OpenLayers.Control.CacheWrite.clearCache();
+        var length = window.localStorage.length;
+        
+        var tiles = 0;
+        var layer = new OpenLayers.Layer.XYZ("One", "../../img/blank.gif?${x},${y},${z}", {
+            eventListeners: {
+                tileloaded: function() {
+                    tiles++;
+                }
+            }
+        });
+        var control = new OpenLayers.Control.CacheWrite({autoActivate: true});
+        var map = new OpenLayers.Map({
+            div: "map",
+            projection: "EPSG:900913",
+            controls: [control],
+            layers: [layer],
+            zoom: 1,
+            center: [0, 0]
+        });
+        t.delay_call(1, function() {
+            var canvasContext = layer.grid[1][1].getCanvasContext();
+            t.eq(window.localStorage.length, length + (canvasContext ? tiles : 0), "cache filled with tiles");
+            var url = layer.grid[1][1].url;
+            // content will be null for browsers that have localStorage but no canvas support
+            var content = canvasContext ? canvasContext.canvas.toDataURL("image/png") : null;
+            t.eq(window.localStorage.getItem("olCache_"+url), content, "localStorage contains correct image data");
+            
+            var key = Math.random();
+            window.localStorage.setItem(key, "bar");
+            OpenLayers.Control.CacheWrite.clearCache();
+            t.eq(window.localStorage.length, length + 1, "cache cleared, but foreign entries left in localStorage");
+            window.localStorage.removeItem(key);
+            
+            map.destroy();
+        });
+    }
+    
+    </script>
+</head>
+<body>
+    <div id="map" style="width: 400px; height: 250px;"/>
+</body>
+</html>
diff --git a/tests/Control/DrawFeature.html b/tests/Control/DrawFeature.html
index 5656647..ef0be5a 100644
--- a/tests/Control/DrawFeature.html
+++ b/tests/Control/DrawFeature.html
@@ -4,12 +4,10 @@
     <script type="text/javascript">
 
     function test_initialize(t) {
-        t.plan(2);
+        t.plan(1);
         var control = new OpenLayers.Control.DrawFeature("foo", function() {});
         t.ok(control instanceof OpenLayers.Control.DrawFeature,
              "constructor returns an instance");
-        t.ok(OpenLayers.Util.indexOf(control.EVENT_TYPES, "featureadded") > -1,
-             "featureadded event in EVENT_TYPES");
     }
     
     function test_multi(t) {
@@ -39,6 +37,33 @@
         t.ok(!control.handler.multi, "handlerOptions.multi respected");
 
     }
+
+    function test_rendererOptions(t) {
+        t.plan(2);
+        
+        var map = new OpenLayers.Map("map");
+        var renderers = ["Canvas", "VML"];
+
+        var layer = new OpenLayers.Layer.Vector(null, {
+            renderers: renderers,
+            rendererOptions: {zIndexing: true},
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        
+        var control = new OpenLayers.Control.DrawFeature(
+            layer, OpenLayers.Handler.Polygon, {autoActivate: true}
+        );
+        map.addControl(control);
+
+        var sketchLayer = control.handler.layer;
+
+        t.eq(sketchLayer.renderers, renderers, "Preferred renderers");
+        t.eq(sketchLayer.rendererOptions.zIndexing, true, "renderer options");
+        
+        map.destroy();
+
+    }
     
     function test_drawFeature(t) {
         t.plan(3);
diff --git a/tests/Control/EditingToolbar.html b/tests/Control/EditingToolbar.html
index 031868d..570986d 100644
--- a/tests/Control/EditingToolbar.html
+++ b/tests/Control/EditingToolbar.html
@@ -3,12 +3,14 @@
   <script src="../OLLoader.js"></script>
   <script type="text/javascript">
     function test_ctor_draw(t) {
-        t.plan(4);
+        t.plan(5);
         var map = new OpenLayers.Map('map');
         var vLayer = new OpenLayers.Layer.Vector();
         map.addLayer(vLayer);
         
-        var editingToolbar = new OpenLayers.Control.EditingToolbar(vLayer);
+        var editingToolbar = new OpenLayers.Control.EditingToolbar(vLayer, {
+            citeCompliant: "foo"
+        });
         map.addControl(editingToolbar);
         
         t.ok(editingToolbar instanceof OpenLayers.Control.EditingToolbar,
@@ -19,6 +21,7 @@
                 "First control is active" );
         t.eq(editingToolbar.controls.length, 4,
                 "EditingToolbar contains 4 Controls" );
+        t.eq(editingToolbar.controls[1].handler.citeCompliant, "foo", "citeCompliant option passed to handler correctly")
         
         map.destroy();
     }
diff --git a/tests/Control/Graticule.html b/tests/Control/Graticule.html
index 96f0104..4aa867f 100644
--- a/tests/Control/Graticule.html
+++ b/tests/Control/Graticule.html
@@ -1,7 +1,7 @@
 <html>
 <head>
     <script src="../OLLoader.js"></script>
-    <script src="http://proj4js.org/lib/proj4js-compressed.js"></script>
+    <script src="http://svn.osgeo.org/metacrs/proj4js/trunk/lib/proj4js-compressed.js"></script>
     <script type="text/javascript">
 
     function test_initialize(t) {
diff --git a/tests/Control/KeyboardDefaults.html b/tests/Control/KeyboardDefaults.html
index 225699e..e190177 100644
--- a/tests/Control/KeyboardDefaults.html
+++ b/tests/Control/KeyboardDefaults.html
@@ -47,132 +47,121 @@
      *    http://unixpapa.com/js/key.html
      */
     function test_Control_KeyboardDefaults_KeyDownEvent (t) {
-        t.plan( 16 );
+        t.plan( 25 );
+
+        var evt = {which: 1}, pans = [], zoomIns = 0, zoomOuts = 0;
 
-        var evt = {which: 1};
         map = new OpenLayers.Map('map');
+
+        // mock "pan", "zoomIn" and "zoomOut"
+        map.pan = function(dx, dy) {
+            pans.push({dx: dx, dy: dy});
+        };
+        map.zoomIn = function() {
+            zoomIns++;
+        };
+        map.zoomOut = function() {
+            zoomOuts++;
+        };
+
         var layer = new OpenLayers.Layer.WMS("Test Layer", 
             "http://octo.metacarta.com/cgi-bin/mapserv?",
             {map: "/mapdata/vmap_wms.map", layers: "basic"});
         map.addLayer(layer);
-        control = new OpenLayers.Control.KeyboardDefaults();
+
+        var control = new OpenLayers.Control.KeyboardDefaults({
+            slideFactor: 100
+        });
         map.addControl(control);
         
-        var STARTING_ZOOM_LEVEL = 4;
-        var DELAY = 2;
-        
-        var centerLL = new OpenLayers.LonLat(0,0);
-        map.setCenter(centerLL, STARTING_ZOOM_LEVEL);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 4);
 
         // Start new test.
         evt.keyCode = OpenLayers.Event.KEY_LEFT;
         control.defaultKeyPress(evt);
-        t.delay_call( 
-            DELAY, function() {
-                t.ok( map.getCenter().lon < centerLL.lon, "key left works correctly" );
-                
-                // Start new test.
-                evt.keyCode = OpenLayers.Event.KEY_RIGHT;
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.eq( map.getCenter().lon, centerLL.lon, "key right works correctly" );
-                
-                // Start new test. 
-                evt.keyCode = OpenLayers.Event.KEY_UP;
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.ok( map.getCenter().lat > centerLL.lat, "key up works correctly" ); 
-                
-                // Start new test.
-                evt.keyCode = OpenLayers.Event.KEY_DOWN;
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.ok( map.getCenter().lat == centerLL.lat, "key down works correctly" ); 
-                
-                // Start new test.
-                evt.keyCode = 33; //page up
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.ok( map.getCenter().lat > centerLL.lat, "key page up works correctly" ); 
-                
-                // Start new test.
-                evt.keyCode = 34; //page down
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.ok( map.getCenter().lat == centerLL.lat, "key page down works correctly" ); 
-                
-                // Start new test.
-                evt.keyCode = 35; //end
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.ok( map.getCenter().lon > centerLL.lon, "key end works correctly" ); 
-                
-                // Start new test.
-                evt.keyCode = 36; //home
-                control.defaultKeyPress(evt);
-            },
-            DELAY, function() {
-                t.ok( map.getCenter().lon == centerLL.lon, "key home works correctly"); 
-                
-                // Start new test.
-                evt.keyCode = 43; //+
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 1, "key code 43 works correctly: +/= key (ASCII), keypad + (ASCII, Opera)" );
-                
-                // Start new test. 
-                evt.keyCode = 61;
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 2, "key code 61 works correctly: +/= key (Mozilla, Opera, some ASCII)"); 
-                
-                // Start new test.
-                evt.keyCode = 187;
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 3, "key code 187 works correctly: +/= key (IE)"); 
-                
-                // Start new test.
-                evt.keyCode = 107; 
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 4, "key code 107 works correctly: keypad + (IE, Mozilla)"); 
-                
-                // Start new test.
-                // set zoomanimation flag manually,
-                // reason: loadend event in layers.js will not achieved in unittests
-                map.zoomanimationActive = false;
-                evt.keyCode = 45; 
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 3, "key code 45 works correctly: -/_ key (ASCII, Opera), keypad - (ASCII, Opera)");
-                
-                // Start new test. 
-                // set zoomanimation flag manually,
-                // reason: loadend event in layers.js will not achieved in unittests
-                map.zoomanimationActive = false;
-                evt.keyCode = 109; 
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 2, "key code 109 works correctly: -/_ key (Mozilla), keypad - (Mozilla, IE)"); 
-                
-                // Start new test.
-                // set zoomanimation flag manually,
-                // reason: loadend event in layers.js will not achieved in unittests
-                map.zoomanimationActive = false;
-                evt.keyCode = 189; 
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL + 1, "key code 189 works correctly: -/_ key (IE)"); 
-                
-                // Start new test.
-                // set zoomanimation flag manually,
-                // reason: loadend event in layers.js will not achieved in unittests
-                map.zoomanimationActive = false;
-                evt.keyCode = 95;
-                control.defaultKeyPress(evt);
-                t.eq( map.getZoom(), STARTING_ZOOM_LEVEL, "key code 95 works correctly: -/_ key (some ASCII)"); 
-            }
-        );
+        t.eq(pans.length, 1, '[KEY_LEFT] pan called once');
+        t.eq(pans[0], {dx: -100, dy: 0},
+             '[KEY LEFT] pan called with expected args');
+
+        evt.keyCode = OpenLayers.Event.KEY_RIGHT;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 2, '[KEY_RIGHT] pan called once');
+        t.eq(pans[1], {dx: 100, dy: 0},
+             '[KEY RIGHT] pan called with expected args');
+
+        evt.keyCode = OpenLayers.Event.KEY_UP;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 3, '[KEY_UP] pan called once');
+        t.eq(pans[2], {dx: 0, dy: -100},
+             '[KEY UP] pan called with expected args');
+
+        evt.keyCode = OpenLayers.Event.KEY_DOWN;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 4, '[KEY_DOWN] pan called once');
+        t.eq(pans[3], {dx: 0, dy: 100},
+             '[KEY DOWN] pan called with expected args');
+
+        evt.keyCode = 33;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 5, '[33] pan called once');
+        t.eq(pans[4], {dx: 0, dy: -384},
+             '[33] pan called with expected args');
+
+        evt.keyCode = 34;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 6, '[34] pan called once');
+        t.eq(pans[5], {dx: 0, dy: 384},
+             '[34] pan called with expected args');
+
+        evt.keyCode = 35;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 7, '[35] pan called once');
+        t.eq(pans[6], {dx: 768, dy: 0},
+             '[35] pan called with expected args');
+
+        evt.keyCode = 36;
+        control.defaultKeyPress(evt);
+        t.eq(pans.length, 8, '[36] pan called once');
+        t.eq(pans[7], {dx: -768, dy: 0},
+             '[36] pan called with expected args');
+
+        evt.keyCode = 43;
+        control.defaultKeyPress(evt);
+        t.eq(zoomIns, 1, '[43] zoomIn called once');
+
+        evt.keyCode = 61;
+        control.defaultKeyPress(evt);
+        t.eq(zoomIns, 2, '[61] zoomIn called once');
+
+        evt.keyCode = 187;
+        control.defaultKeyPress(evt);
+        t.eq(zoomIns, 3, '[187] zoomIn called once');
+
+        evt.keyCode = 107;
+        control.defaultKeyPress(evt);
+        t.eq(zoomIns, 4, '[107] zoomIn called once');
+
+        evt.keyCode = 107;
+        control.defaultKeyPress(evt);
+        t.eq(zoomIns, 5, '[107] zoomIn called once');
+
+        evt.keyCode = 45;
+        control.defaultKeyPress(evt);
+        t.eq(zoomOuts, 1, '[45] zoomOut called once');
+
+        evt.keyCode = 109;
+        control.defaultKeyPress(evt);
+        t.eq(zoomOuts, 2, '[109] zoomOut called once');
+
+        evt.keyCode = 189;
+        control.defaultKeyPress(evt);
+        t.eq(zoomOuts, 3, '[189] zoomOut called once');
+
+        evt.keyCode = 95;
+        control.defaultKeyPress(evt);
+        t.eq(zoomOuts, 4, '[95] zoomOut called once');
+
+        map.destroy();
     }
 
 
diff --git a/tests/Control/LayerSwitcher.html b/tests/Control/LayerSwitcher.html
index 7b1e568..0094e77 100644
--- a/tests/Control/LayerSwitcher.html
+++ b/tests/Control/LayerSwitcher.html
@@ -25,15 +25,17 @@
         t.ok( div != null, "draw returns its div" );
     }
     function test_Control_LayerSwitcher_outsideViewport (t) {
-        t.plan( 2 );
+        t.plan( 4 );
 
         map = new OpenLayers.Map('map');
         control = new OpenLayers.Control.LayerSwitcher({'div':OpenLayers.Util.getElement('layerswitcher')});
         map.addControl(control);
-        t.eq(control.div.style.width, "250px", "Div is not minimized when added."); 
+        t.eq(control.div.style.width, "250px", "Div is not minimized when added.");
+        t.ok(control.events.element && control.events.listeners.buttonclick, "[outside] Events instance attached to div and has buttonclick event");
         control = new OpenLayers.Control.LayerSwitcher();
         map.addControl(control);
         t.eq(control.div.style.width, "0px", "Div is minimized when added.");
+        t.ok(!control.events.element && map.events.listeners.buttonclick, "[inside] Events instance not attached to div and buttonclick event registered on map");
     }
  
     function test_Control_LayerSwitcher_loadContents(t) {
@@ -141,7 +143,7 @@
         }    
 
     }
-    function test_Control_LayerSwitcher_ascendingw (t) {
+    function test_Control_LayerSwitcher_ascending (t) {
 
         t.plan( 4 );
 
@@ -158,10 +160,10 @@
         map.addControl(control);
         control2 = new OpenLayers.Control.LayerSwitcher({'ascending':false});
         map.addControl(control2);
-        t.ok(control.div.childNodes[1].childNodes[0].innerHTML.match("Base Layer"), "Base Layers first in LayerSwitcher with ascending true");
-        t.ok(control.div.childNodes[1].childNodes[2].innerHTML.match("Overlays"), "Overlays in LayerSwitcher with ascending true");
-        t.ok(control2.div.childNodes[1].childNodes[2].innerHTML.match("Base Layer"), "Base Layers last in LayerSwitcher with ascending false");
-        t.ok(control2.div.childNodes[1].childNodes[0].innerHTML.match("Overlays"), "Base Layers last in LayerSwitcher with ascending false");
+        t.ok(control.div.childNodes[0].childNodes[0].innerHTML.match("Base Layer"), "Base Layers first in LayerSwitcher with ascending true");
+        t.ok(control.div.childNodes[0].childNodes[2].innerHTML.match("Overlays"), "Overlays in LayerSwitcher with ascending true");
+        t.ok(control2.div.childNodes[0].childNodes[2].innerHTML.match("Base Layer"), "Base Layers last in LayerSwitcher with ascending false");
+        t.ok(control2.div.childNodes[0].childNodes[0].innerHTML.match("Overlays"), "Base Layers last in LayerSwitcher with ascending false");
     }
     
     function test_Control_LayerSwitcher_displayInLayerSwitcher (t) {
@@ -176,7 +178,7 @@
 
         control = new OpenLayers.Control.LayerSwitcher();
         map.addControl(control);
-        t.eq(control.div.childNodes[1].childNodes[0].style.display, "none" , "Base layer display off when no visble base layer");
+        t.eq(control.div.childNodes[0].childNodes[0].style.display, "none" , "Base layer display off when no visble base layer");
         
         map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS("WMS", 
@@ -186,7 +188,7 @@
 
         control = new OpenLayers.Control.LayerSwitcher();
         map.addControl(control);
-        t.eq(control.div.childNodes[1].childNodes[0].style.display, "" , "Base layer display on when visble base layer");
+        t.eq(control.div.childNodes[0].childNodes[0].style.display, "" , "Base layer display on when visble base layer");
     }
 
 
diff --git a/tests/Control/Measure.html b/tests/Control/Measure.html
index 045f807..ee6d192 100644
--- a/tests/Control/Measure.html
+++ b/tests/Control/Measure.html
@@ -3,7 +3,7 @@
   <script src="../OLLoader.js"></script>
   <script type="text/javascript">
 
-    function test_initialze(t) {
+    function test_initialize(t) {
         
         t.plan(1);
         
@@ -289,16 +289,16 @@
         // move 10 pixels
         trigger("mousemove", 0, 10);
 
-        t.eq(log.length, 0, "a) no event fired yet");
+        t.eq(log.length, 1, "a) has fired an event");
 
         t.delay_call(
             delay, function() {
                 // confirm measurepartial is fired
-                t.eq(log.length, 1, "a) event logged");
+                t.eq(log.length, 1, "a) one event logged");
                 t.ok(log[0] && 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.ok(log[0] && log[0].measure == 0, "a) correct measure");
+                t.eq(log[0]?log[0].measure:-1 , 10, "a) correct measure");
 
                 // b) move 10 pixels
                 trigger("mousemove", 0, 20);
diff --git a/tests/Control/ModifyFeature.html b/tests/Control/ModifyFeature.html
index 21682c6..51a10ac 100644
--- a/tests/Control/ModifyFeature.html
+++ b/tests/Control/ModifyFeature.html
@@ -412,7 +412,50 @@
 
         map.destroy();
     }
-        
+    function test_collectDragHandle(t) {
+        t.plan(4);
+        var map = new OpenLayers.Map("map", {
+            resolutions: [1]
+        });
+        var layer = new OpenLayers.Layer.Vector("foo", {
+            maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,1));
+        layer.addFeatures([feature]);
+        var control = new OpenLayers.Control.ModifyFeature(layer);
+        map.addControl(control);
+        control.activate();
+        control.feature = feature;
+        control.collectDragHandle();
+        t.ok(control.dragHandle != null, "Drag handle created");
+        t.ok(control.dragHandle._sketch == true, "Handle has _sketch true");
+        t.ok(control.dragHandle.renderIntent == control.vertexRenderIntent,"Render intent for handle set");
+        t.ok(control.layer.getFeatureById(control.dragHandle.id) != null, "Drag handle added to layer");
+    }
+    function test_collectRadiusHandle(t) {
+        t.plan(4);
+        var map = new OpenLayers.Map("map", {
+            resolutions: [1]
+        });
+        var layer = new OpenLayers.Layer.Vector("foo", {
+            maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,1));
+        layer.addFeatures([feature]);
+        var control = new OpenLayers.Control.ModifyFeature(layer);
+        map.addControl(control);
+        control.activate();
+        control.feature = feature;
+        control.collectRadiusHandle();
+        t.ok(control.radiusHandle != null, "Radius handle created");
+        t.ok(control.radiusHandle._sketch == true, "Radius has _sketch true");
+        t.ok(control.radiusHandle.renderIntent == control.vertexRenderIntent,"Render intent for handle set");
+        t.ok(control.layer.getFeatureById(control.radiusHandle.id) != null, "Drag radius added to layer");
+    }
     function test_onDrag(t) {
         t.plan(1);
         t.ok(true, "onDrag not tested yet.");
@@ -764,6 +807,25 @@
         t.eq(control._originalGeometry, undefined, "original geometry deleted once it is set on the modified property");
     }
 
+    function test_createVertices(t) {
+        t.plan(2);
+        var layer = new OpenLayers.Layer.Vector();
+        var control = new OpenLayers.Control.ModifyFeature(layer, {
+            createVertices: false
+        });
+        var line = new OpenLayers.Geometry.LineString([
+            new OpenLayers.Geometry.Point(5, 6),
+            new OpenLayers.Geometry.Point(7, 8),
+            new OpenLayers.Geometry.Point(9, 10)
+        ]);
+        control.feature = new OpenLayers.Feature.Vector(line);
+        control.resetVertices();
+
+        t.eq(control.vertices.length, 3, "Correct vertices length with createVertices is false");
+        t.eq(control.virtualVertices.length, 0, "Correct virtual vertices length with createVertices is false");
+        control.destroy();
+    }
+
     </script>
 </head>
 <body>
diff --git a/tests/Control/MouseToolbar.html b/tests/Control/MouseToolbar.html
deleted file mode 100644
index 97baa4a..0000000
--- a/tests/Control/MouseToolbar.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<html>
-<head>
-  <script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-    var map; 
-    function test_Control_MouseToolbar_constructor (t) {
-        t.plan( 1 );
-    
-        control = new OpenLayers.Control.MouseToolbar();
-        t.ok( control instanceof OpenLayers.Control.MouseToolbar, "new OpenLayers.Control.MouseToolbar returns object" );
-    }
-    function test_Control_MouseToolbar_addControl (t) {
-        t.plan( 8 );
-        map = new OpenLayers.Map('map');
-        control = new OpenLayers.Control.MouseToolbar();
-        t.ok( control instanceof OpenLayers.Control.MouseToolbar, "new OpenLayers.Control.MouseToolbar returns object" );
-        t.ok( map instanceof OpenLayers.Map, "new OpenLayers.Map creates map" );
-        map.addControl(control);
-        t.ok( control.map === map, "Control.map is set to the map object" );
-        t.ok( map.controls[4] === control, "map.controls contains control" );
-        t.eq( parseInt(control.div.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Control div zIndexed properly" );
-        t.eq( parseInt(map.viewPortDiv.lastChild.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Viewport div contains control div" );
-        t.eq( control.div.style.left, "6px", "Control div left located correctly by default");
-        t.eq( control.div.style.top, "300px", "Control div top located correctly by default");
-
-    }
-    function test_Control_MouseToolbar_control_events (t) {
-        t.plan( 1 );
-        if ((navigator.userAgent.indexOf("compatible") == -1)) { 
-            var evt = {which: 1}; // control expects left-click
-            map = new OpenLayers.Map('map');
-            var layer = new OpenLayers.Layer.WMS("Test Layer", 
-                "http://octo.metacarta.com/cgi-bin/mapserv?",
-                {map: "/mapdata/vmap_wms.map", layers: "basic"});
-            map.addLayer(layer);
-
-            control = new OpenLayers.Control.MouseToolbar();
-            map.addControl(control);
-
-            var centerLL = new OpenLayers.LonLat(0,0); 
-            map.setCenter(centerLL, 5);
-
-            evt.shiftKey = true;
-            evt.xy = new OpenLayers.Size(5,5);
-            control.defaultMouseDown(evt);
-            evt.xy = new OpenLayers.Size(15,15);
-            control.defaultMouseUp(evt);
-            t.eq(map.getZoom(), 6, "Map zoom set correctly after zoombox");
-        } else {
-            t.ok(true, "IE does not run this test.") 
-        }
-    }
-
-  </script>
-</head>
-<body>
-    <div id="map" style="width: 1024px; height: 512px;"/>
-</body>
-</html>
diff --git a/tests/Control/OverviewMap.html b/tests/Control/OverviewMap.html
index fce7a24..30cac5d 100644
--- a/tests/Control/OverviewMap.html
+++ b/tests/Control/OverviewMap.html
@@ -3,19 +3,23 @@
   <script src="../OLLoader.js"></script>
   <script type="text/javascript">
     var map, control;
+    
     function test_initialize(t) {
         t.plan( 2 );
     
         control = new OpenLayers.Control.OverviewMap();
-        t.ok( control instanceof OpenLayers.Control.OverviewMap, "new OpenLayers.Control.OverviewMap returns object" );
-        t.eq( control.displayClass,  "olControlOverviewMap", "displayClass is correct" );
+        t.ok( control instanceof OpenLayers.Control.OverviewMap, 
+            "new OpenLayers.Control.OverviewMap returns object" );
+        t.eq( control.displayClass,
+            "olControlOverviewMap", "displayClass is correct" );
     }
 
     function test_setMap(t) {
         t.plan(4);
 
         var setMapTest = function(map) {
-            t.ok(true, "Handler.setMap called for " + this.CLASS_NAME);
+            t.ok(true, 
+                "Handler.setMap called for " + this.CLASS_NAME);
             this.map = map;        
         };
         var drag_setMap = OpenLayers.Handler.Drag.prototype.setMap;
@@ -32,8 +36,10 @@
         map.addControl(control);
 
         map.zoomToMaxExtent();
-        t.eq(control.handlers.drag.map.id, control.ovmap.id, "drag.map is correct");
-        t.eq(control.handlers.click.map.id, control.ovmap.id, "click.map is correct");
+        t.eq(control.handlers.drag.map.id, control.ovmap.id,
+            "drag.map is correct");
+        t.eq(control.handlers.click.map.id, control.ovmap.id,
+            "click.map is correct");
 
         map.destroy();
         OpenLayers.Handler.Drag.prototype.setMap = drag_setMap;
@@ -66,85 +72,112 @@
 
         control.destroy();
         t.eq(log_drag.length, 2,
-             "destroy() destroys drag handler twice, expected");
+            "destroy() destroys drag handler twice, expected");
         if (log_drag.length == 2) {
             t.eq(log_drag[0].map, true,
-                 "destroy() destroys drag handler before ovmap is destroyed (0)");
+                "destroy() destroys drag handler before ovmap is destroyed (0)");
             t.eq(log_drag[1].map, false,
-                 "destroy() destroys drag handler after ovmap is destroyed (1)");
+                "destroy() destroys drag handler after ovmap is destroyed (1)");
         }
         t.eq(log_click.length, 2,
-             "destroy() destroys click handler twice, expected");
+            "destroy() destroys click handler twice, expected");
         if (log_click.length == 2) {
             t.eq(log_click[0].map, true,
-                 "destroy() destroys click handler before ovmap is destroyed (0)");
+                "destroy() destroys click handler before ovmap is destroyed (0)");
             t.eq(log_click[1].map, false,
-                 "destroy() destroys click handler after ovmap is destroyed (1)");
+                "destroy() destroys click handler after ovmap is destroyed (1)");
         }
 
         // tear down
         map.destroy();
     }
+    
     function test_addControl (t) {
         t.plan( 6 );
         map = new OpenLayers.Map('map');
         control = new OpenLayers.Control.OverviewMap();
-        t.ok( control instanceof OpenLayers.Control.OverviewMap, "new OpenLayers.Control.OverviewMap returns object" );
-        t.ok( map instanceof OpenLayers.Map, "new OpenLayers.Map creates map" );
+        t.ok( control instanceof OpenLayers.Control.OverviewMap, 
+            "new OpenLayers.Control.OverviewMap returns object" );
+        t.ok( map instanceof OpenLayers.Map, 
+            "new OpenLayers.Map creates map" );
         map.addControl(control);
-        t.ok( control.map === map, "Control.map is set to the map object" );
-        t.ok( map.controls[4] === control, "map.controls contains control" );
-        t.eq( parseInt(control.div.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Control div zIndexed properly" );
-        t.eq( parseInt(map.viewPortDiv.lastChild.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Viewport div contains control div" );
+        t.ok( control.map === map, 
+            "Control.map is set to the map object" );
+        t.ok( map.controls[4] === control, 
+            "map.controls contains control" );
+        t.eq( parseInt(control.div.style.zIndex), map.Z_INDEX_BASE['Control'] + 5,
+            "Control div zIndexed properly" );
+        t.eq( parseInt(map.viewPortDiv.lastChild.style.zIndex), map.Z_INDEX_BASE['Control'] + 5,
+            "Viewport div contains control div" );
 
         map.destroy();
     }
+    
     function test_control_events (t) {
         t.plan( 10 );
-        var evt = {which: 1}; // control expects left-click
-        map = new OpenLayers.Map('map');
-        var layer = new OpenLayers.Layer.WMS("Test Layer", 
-            "http://octo.metacarta.com/cgi-bin/mapserv?",
-            {map: "/mapdata/vmap_wms.map", layers: "basic"});
-        map.addLayer(layer);
+        
+        map = new OpenLayers.Map('map', {
+            // when we recenter, don't waste time animating the panning
+            // without this, the test fails in Firefox 10.0.1 on Linux
+            panMethod: null,
+            layers: [ new OpenLayers.Layer('Test Layer', {isBaseLayer: true}) ]
+        });
 
         control = new OpenLayers.Control.OverviewMap();
         map.addControl(control, new OpenLayers.Pixel(20,20));
 
         var centerLL = new OpenLayers.LonLat(-71,42); 
         map.setCenter(centerLL, 11);
-        t.delay_call(1, function() {
-        var overviewCenter = control.ovmap.getCenter();
-        var overviewZoom = control.ovmap.getZoom();
-        t.eq(overviewCenter.lon, -71, "Overviewmap center lon correct");
-        t.eq(overviewCenter.lat, 42, "Overviewmap center lat correct");
-        t.eq(overviewZoom, 8, "Overviewmap zoomcorrect");
-        
-        control.mapDivClick({'xy':new OpenLayers.Pixel(5,5)});
-        }, 2, function() {
-        var cent = map.getCenter();
-        t.eq(cent.lon, -71.3515625, "Clicking on the Overview Map has the correct effect on map lon");
-        t.eq(cent.lat, 42.17578125, "Clicking on the Overview Map has the correct effect on map lat");
-
-        control.handlers.drag = {
-            last: new OpenLayers.Pixel(5,5),
-            destroy: function() {}
-        };
-        control.rectDrag(new OpenLayers.Pixel(15, 15));
-        control.updateMapToRect();
-        }, 2, function() {
-        var cent = map.getCenter();
-        t.eq(cent.lon, -71.2734375, "Dragging on the Overview Map has the correct effect on map lon");
-        t.eq(cent.lat, 42.09765625, "Dragging on the Overview Map has the correct effect on map lat");
+
+        t.delay_call(
+            0.1, 
+            function() {
+                var overviewCenter = control.ovmap.getCenter();
+                var overviewZoom = control.ovmap.getZoom();
+                t.eq(overviewCenter.lon, -71, 
+                    "OverviewMap center lon correct");
+                t.eq(overviewCenter.lat, 42, 
+                    "OverviewMap center lat correct");
+                t.eq(overviewZoom, 8, 
+                    "OverviewMap zoom correct");
+                
+                control.mapDivClick({'xy':new OpenLayers.Pixel(5,5)});
+            },
+            0.1,
+            function() {
+                var cent = map.getCenter();
+                t.eq(cent.lon, -71.3515625, 
+                    "Clicking on OverviewMap has correct effect on map lon");
+                t.eq(cent.lat, 42.17578125,
+                    "Clicking on OverviewMap has correct effect on map lat");
         
-        map.setCenter(new OpenLayers.LonLat(0,0), 0);
-        var overviewCenter = control.ovmap.getCenter();
-        var overviewZoom = control.ovmap.getZoom();
-        t.eq(overviewCenter.lon, 0, "Overviewmap center lon correct -- second zoom");
-        t.eq(overviewCenter.lat, 0, "Overviewmap center lat correct -- second zoom");
-        t.eq(overviewZoom, 0, "Overviewmap zoomcorrect -- second zoom");
-        map.destroy();
-        });
+                control.handlers.drag = {
+                    last: new OpenLayers.Pixel(5,5),
+                    destroy: function() {}
+                };
+                control.rectDrag(new OpenLayers.Pixel(15, 15));
+                control.updateMapToRect();
+            },
+            0.1,
+            function() {
+                var cent = map.getCenter();
+                t.eq(cent.lon, -71.2734375, 
+                    "Dragging on OverviewMap has correct effect on map lon");
+                t.eq(cent.lat, 42.09765625, 
+                    "Dragging on OverviewMap has correct effect on map lat");
+                
+                map.setCenter(new OpenLayers.LonLat(0,0), 0);
+                var overviewCenter = control.ovmap.getCenter();
+                var overviewZoom = control.ovmap.getZoom();
+                t.eq(overviewCenter.lon, 0, 
+                    "OverviewMap center lon correct -- second zoom");
+                t.eq(overviewCenter.lat, 0,
+                    "OverviewMap center lat correct -- second zoom");
+                t.eq(overviewZoom, 0,
+                    "OverviewMap zoomcorrect -- second zoom");
+                map.destroy();
+            }
+        );
     }
 
     function test_initialize_maximized(t) {
@@ -156,8 +189,10 @@
             controls: [control]
         });
         
-        t.eq(control.maximized, false, "OverviewMap is not maximized by default");
-        t.eq(control.element.style.display, 'none', "OverviewMap.element is not visible");
+        t.eq(control.maximized, false, 
+            "OverviewMap is not maximized by default");
+        t.eq(control.element.style.display, 'none', 
+            "OverviewMap.element is not visible");
         map.destroy();
 
         control = new OpenLayers.Control.OverviewMap({
@@ -167,8 +202,10 @@
             layers  : [new OpenLayers.Layer("layer", {isBaseLayer: true})],
             controls: [control]
         });
-        t.eq(control.maximized, true, "OverviewMap.maximized is set");
-        t.eq(control.element.style.display, '', "OverviewMap.element is visible");
+        t.eq(control.maximized, true,
+            "OverviewMap.maximized is set");
+        t.eq(control.element.style.display, '', 
+            "OverviewMap.element is visible");
 
         map.destroy();
     }
@@ -176,6 +213,6 @@
   </script>
 </head>
 <body>
-    <div id="map" style="width: 1024px; height: 512px;"/>
+    <div id="map" style="width: 1024px; height: 512px;"></div>
 </body>
 </html>
diff --git a/tests/Control/PanZoom.html b/tests/Control/PanZoom.html
index 41eab09..4982fb0 100644
--- a/tests/Control/PanZoom.html
+++ b/tests/Control/PanZoom.html
@@ -43,8 +43,19 @@
 
     function test_Control_PanZoom_control_events (t) {
 
-        if ( !window.document.createEvent || OpenLayers.BROWSER_NAME == "opera" || !t.open_window) {
-            //ie can't simulate mouseclicks
+        // IE 9+ does support the standard document.createEvent,
+        // event.initMouseEvent, and elem.dispatchEvent calls, so it
+        // should be possible to simulate clicks in this browser.
+        // For example it looks like jQuery UI does simulate events
+        // using document.createElement in IE 9+. See
+        // https://github.com/jquery/jquery-ui/blob/master/tests/jquery.simulate.js.
+        // I haven't been able to make it work though.
+
+        if ( !window.document.createEvent ||
+             OpenLayers.BROWSER_NAME == "msie" ||
+             OpenLayers.BROWSER_NAME == "opera" ||
+             !t.open_window) {
+
             t.plan(0);
             t.debug_print("FIXME: This browser does not support the PanZoom test at this time.");
         } else {
@@ -159,7 +170,6 @@
         };
 
         var delta, dir;
-        var evt = {which: 1}; // a fake left click
         var buttons = control.buttons;
         map.pan = function(dx, dy){
             t.eq([dx,dy],delta,"Panning " + dir + " sets right delta with slideRatio");
@@ -168,22 +178,26 @@
         //up
         var delta = [0, -50];
         var dir = "up";
-        control.buttonDown.call(buttons[0], evt);
+        var evt = {buttonElement: buttons[0]};
+        control.onButtonClick.call(control, evt);
         
         //left
         var delta = [-125, 0];
         var dir = "left";
-        control.buttonDown.call(buttons[1], evt);
+        evt.buttonElement = buttons[1];
+        control.onButtonClick.call(control, evt);
         
         //right
         var delta = [125, 0];
         var dir = "right";
-        control.buttonDown.call(buttons[2], evt);
+        evt.buttonElement = buttons[2];
+        control.onButtonClick.call(control, evt);
         
         //down
         var delta = [0, 50];
         var dir = "down";
-        control.buttonDown.call(buttons[3], evt);
+        evt.buttonElement = buttons[3];
+        control.onButtonClick.call(control, evt);
         
         map.destroy();
     }
diff --git a/tests/Control/PanZoomBar.html b/tests/Control/PanZoomBar.html
index 891527e..852c00f 100644
--- a/tests/Control/PanZoomBar.html
+++ b/tests/Control/PanZoomBar.html
@@ -50,7 +50,7 @@
         t.eq(control.zoombarDiv, null, "zoombar div nullified.")
     }
 
-    function test_Control_PanZoomBar_divClick (t) {
+    function test_Control_PanZoomBar_onButtonClick (t) {
         t.plan(2);
         map = new OpenLayers.Map('map', {controls:[]});
         var layer = new OpenLayers.Layer.WMS("Test Layer",
@@ -59,16 +59,16 @@
         map.addLayer(layer);
         control = new OpenLayers.Control.PanZoomBar();
         map.addControl(control);
-        control.divClick({'xy': {'x': 0, 'y': 50}, which: 1});
+        control.onButtonClick({'buttonXY': {'x': 0, 'y': 50}, buttonElement: control.zoombarDiv});
         t.eq(map.zoom, 11, "zoom is correct on standard map");
 
         map.fractionalZoom = true;
-        control.divClick({'xy': {'x': 0, 'y': 49}, which: 1});
+        control.onButtonClick({'buttonXY': {'x': 0, 'y': 49}, buttonElement: control.zoombarDiv});
         t.eq(map.zoom.toFixed(3), '10.545', "zoom is correct on fractional zoom map");
 
     }
 
-    function test_Control_PanZoomBar_forceFixedZoomLevel_divClick(t){
+    function test_Control_PanZoomBar_forceFixedZoomLevel_onButtonClick(t){
         t.plan(1);
         map = new OpenLayers.Map('map', {
             controls: [],
@@ -84,12 +84,12 @@
         });
         map.addControl(control);
         
-        control.divClick({
-            'xy': {
+        control.onButtonClick({
+            'buttonXY': {
                 'x': 0,
                 'y': 49
             },
-            which: 1
+            buttonElement: control.zoombarDiv
         });
         t.eq(map.zoom, 11, "forceFixedZoomLevel makes sure that after a div click only fixed zoom levels are used even if the map has fractionalZoom");
     }     
diff --git a/tests/Control/Panel.html b/tests/Control/Panel.html
index ae07c97..f02e643 100644
--- a/tests/Control/Panel.html
+++ b/tests/Control/Panel.html
@@ -82,7 +82,7 @@
               "activated one tool control, the other one is inactive and the toggle & button controls also.");
 
         panel.activateControl(toggleControl);
-        t.eq(toggleControl.panel_div.className,"mbControlTestToggleItemActive",
+        t.eq(toggleControl.panel_div.className,"mbControlTestToggleItemActive olButton",
             "className of icon div for toggle control is active.");
         t.ok(toolControl.active && !anotherToolControl.active && toggleControl.active,
               "activated the toggle control, which has no influence on the tool & togggle controls.");
@@ -96,9 +96,9 @@
               "activated the button control, which has no influence on the tool & togggle controls.");
 
         panel.activateControl(anotherToolControl);
-        t.eq(anotherToolControl.panel_div.className,"mbControlTestToolItemActive",
+        t.eq(anotherToolControl.panel_div.className,"mbControlTestToolItemActive olButton",
             "className of icon div for anotherToolControl is active.");
-        t.eq(toolControl.panel_div.className,"olControlZoomBoxItemInactive",
+        t.eq(toolControl.panel_div.className,"olControlZoomBoxItemInactive olButton",
             "className of icon div for toolControl is inactive.");
         t.ok(!toolControl.active && anotherToolControl.active && toggleControl.active,
               "activated the other tool control, the first one is inactive and the toggle control still active.");
@@ -288,6 +288,92 @@
         // panel.deactivate();
         map.destroy();
     }
+
+    function test_iconOn_iconOff(t) {
+        t.plan(2);
+
+        var map = new OpenLayers.Map('map');
+
+        var panel = new OpenLayers.Control.Panel();
+        var ctrl = new OpenLayers.Control({displayClass: 'ctrl'});
+        panel.addControls([ctrl]);
+
+        map.addControl(panel);
+
+        // add arbitrary classes to the panel div - we want to test
+        // than iconOn and iconOff do their jobs even when the panel
+        // div has application-specific classes.
+
+        ctrl.panel_div.className =
+            'ctrlItemInactive fooItemActive fooItemInactive';
+
+        panel.iconOn.call(ctrl);
+        t.eq(ctrl.panel_div.className,
+             'ctrlItemActive fooItemActive fooItemInactive',
+             'iconOn behaves as expected');
+
+        ctrl.panel_div.className =
+            'ctrlItemActive fooItemActive fooItemInactive';
+
+        panel.iconOff.call(ctrl);
+        t.eq(ctrl.panel_div.className,
+             'ctrlItemInactive fooItemActive fooItemInactive',
+             'iconOff behaves as expected');
+
+        map.destroy();
+    }
+    
+    function test_buttonclick(t) {
+        t.plan(4);
+        var map = new OpenLayers.Map('map');
+        var panel1 = new OpenLayers.Control.Panel();
+        var div = document.createElement("div");
+        var panel2 = new OpenLayers.Control.Panel({div: div});
+        map.addControls([panel1, panel2]);
+        
+        t.ok(map.events.listeners.buttonclick, "buttonclick event registered on map's Events instance for panel inside map");
+        t.ok(!panel1.events.element, "Panel inside map has no element on its Events instance");
+        t.ok(panel2.events.listeners.buttonclick, "buttonclick event registered on panel's Events instance if outside map")
+        t.ok(panel2.events.element === div, "Panel outside map has the panel's div as element on its Events instance");
+        
+    }
+    
+    function test_iconOniconOff (t) {
+    	t.plan(6);
+    	var map = new OpenLayers.Map("map"),
+			navControl = new OpenLayers.Control.Navigation({autoActivate: true}),
+			zbControl = new OpenLayers.Control.ZoomBox(),
+    		panel = new OpenLayers.Control.Panel({defaultControl: navControl}),
+    		navActiveClass, navInactiveClass, zbActiveClass, zbInactiveClass;
+    	
+    	panel.addControls([navControl, zbControl]);
+    	map.addControl(panel);
+    	
+     	navControl.panel_div.className += " foo";
+    	zbControl.panel_div.className = "bar " + zbControl.panel_div.className;
+    	
+    	t.eq(navControl.panel_div.className, "olControlNavigationItemActive olButton foo",
+    		"defaultControl className is set to [displayClass]Active on panel instantiation");
+    	t.eq(zbControl.panel_div.className, "bar olControlZoomBoxItemInactive olButton",
+        	"non-defaultControl className is set to [displayClass]Inactive on panel instantiation");
+    	
+    	panel.activateControl(zbControl);
+    	
+    	t.eq(zbControl.panel_div.className, "bar olControlZoomBoxItemActive olButton",
+    		"active control class name with preceding secondary class name is set to [displayClass]Active");
+    	t.eq(navControl.panel_div.className, "olControlNavigationItemInactive olButton foo",
+    		"inactive control class name with trailing secondary class name is set to [displayClass]Inactive");
+    	
+    	panel.activateControl(navControl);
+    	
+    	t.eq(navControl.panel_div.className, "olControlNavigationItemActive olButton foo",
+        		"active control class name with trailing secondary class name is set to [displayClass]Active");
+    	t.eq(zbControl.panel_div.className, "bar olControlZoomBoxItemInactive olButton",
+        		"inactive control class name with preceding secondary class name is set to [displayClass]Inactive");
+    	
+    	map.destroy();
+    }
+    
   </script>
 </head>
 <body>
diff --git a/tests/Control/Permalink.html b/tests/Control/Permalink.html
index 4b07d3e..b398adf 100644
--- a/tests/Control/Permalink.html
+++ b/tests/Control/Permalink.html
@@ -11,6 +11,7 @@
         t.eq(control.displayClass, "olControlPermalink", "displayClass is correct");
         t.eq(control.base, document.location.href, "base is correct");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink('permalink', 'test.html');
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
@@ -18,6 +19,7 @@
         t.eq(control.base, 'test.html', "base is correct");
         t.ok(OpenLayers.Util.isElement(control.element), "element is a dom object");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink('permalink');
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
@@ -25,6 +27,7 @@
         t.eq(control.base, document.location.href, "base is correct");
         t.ok(OpenLayers.Util.isElement(control.element), "element is a dom object");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink(OpenLayers.Util.getElement('permalink'));
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
@@ -32,6 +35,7 @@
         t.eq(control.base, document.location.href, "base is correct");
         t.ok(OpenLayers.Util.isElement(control.element), "element is a dom object");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink({anchor: true});
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
@@ -39,18 +43,21 @@
         t.eq(control.base, document.location.href, "base is correct");
         t.ok(control.element == null, "element is null");
         t.ok(control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink({anchor: false});
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
         t.eq(control.displayClass, "olControlPermalink", "displayClass is correct");
         t.eq(control.base, document.location.href, "base is correct");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink({});
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
         t.eq(control.displayClass, "olControlPermalink", "displayClass is correct");
         t.eq(control.base, document.location.href, "base is correct");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink({element: 'permalink', base: 'test.html'});
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
@@ -58,6 +65,7 @@
         t.eq(control.base, 'test.html', "base is correct");
         t.ok(OpenLayers.Util.isElement(control.element), "element is a dom object");
         t.ok(!control.anchor, "anchor is correct");
+        control.destroy();
 
         control = new OpenLayers.Control.Permalink({element: 'permalink', base: 'test.html', anchor: true});
         t.ok(control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object");
@@ -65,6 +73,7 @@
         t.eq(control.base, 'test.html', "base is correct");
         t.ok(OpenLayers.Util.isElement(control.element), "element is a dom object");
         t.ok(control.anchor, "anchor is correct");
+        control.destroy();
     }
     function test_Control_Permalink_uncentered (t) {
         t.plan( 1 );
@@ -74,12 +83,14 @@
         map.addControl(control);
         map.events.triggerEvent("changelayer", {});
         t.ok(true, "permalink didn't bomb out.");
+        map.destroy();
     }   
     function test_Control_Permalink_initwithelem (t) {
         t.plan( 1 );
     
         control = new OpenLayers.Control.Permalink(OpenLayers.Util.getElement('permalink'));
         t.ok(true, "If the above line doesn't throw an error, we're safe."); 
+        control.destroy();
     }
     function test_Control_Permalink_updateLinks (t) {
         t.plan( 3 );
@@ -100,6 +111,7 @@
         map.layers[1].setVisibility(false);
         
         t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getElement('permalink').href, location+"?zoom=2&lat=0&lon=1.75781&layers=BF"), 'setVisibility sets permalink');
+        map.destroy();
     }
     function test_Control_Permalink_updateLinksBase (t) {
         t.plan( 2 );
@@ -114,6 +126,7 @@
         map.pan(5, 0, {animate:false});
         OpenLayers.Util.getElement('edit_permalink').href = './edit.html?zoom=2&lat=0&lon=1.75781&layers=B';
         t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base");
+        map.destroy();
   }
   function test_Control_Permalink_noElement (t) {
         t.plan( 2 );
@@ -122,6 +135,7 @@
         map = new OpenLayers.Map('map');
         map.addControl(control);
         t.eq(map.controls[4].div.firstChild.nodeName, "A", "Permalink control creates div with 'a' inside." );
+        map.destroy();
   }
   function test_Control_Permalink_base_with_query (t) {
       t.plan( 3 );
@@ -147,6 +161,7 @@
       map.pan(5, 0, {animate:false});
       map.pan(-5, 0, {animate:false});
       t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base and querystring ending with '?'");
+      map.destroy();
 
   }
 
@@ -163,6 +178,7 @@
         map.pan(5, 0, {animate:false});
         OpenLayers.Util.getElement('edit_permalink').href = './edit.html?zoom=2&lat=0&lon=1.75781&layers=B';
         t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with existing zoom in base");
+        map.destroy();
   }
   
     function test_Control_Permalink_customized(t) {
@@ -189,6 +205,7 @@
       
         t.eq(this.map.controls[this.map.controls.length-1].CLASS_NAME, "CustomArgParser", "Custom ArgParser added correctly.");
         t.eq(control.div.firstChild.getAttribute("href"), "./edit.html?zoom=2&lat=0&lon=1.75781&layers=B&customParam=foo", "Custom parameter encoded correctly.");
+        map.destroy();
     }
     
     function test_Control_Permalink_createParams(t) {
@@ -300,6 +317,7 @@
         
         map.layers[1].setVisibility(false);
         t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getParameterString(control.createParams()), "zoom=2&lat=0&lon=1.75781&layers=BF"), 'setVisibility sets permalink');
+        map.destroy();
     }
     
     function test_Control_Permalink_AnchorBaseElement (t) {
@@ -320,7 +338,80 @@
         
         map.layers[1].setVisibility(false);
         t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getElement('permalink').href, location+"#zoom=2&lat=0&lon=1.75781&layers=BF"), 'setVisibility sets permalink');
+        map.destroy();
     }
+    
+    function test_center_from_map(t) {
+        t.plan(7);
+
+        var previous = window.location.hash;
+        window.location.hash = "";
+
+        var err;
+        try {
+            var map = new OpenLayers.Map({
+                layers: [new OpenLayers.Layer(null, {isBaseLayer: true})],
+                controls: [
+                    new OpenLayers.Control.Permalink({anchor: true})
+                ],
+                center: [1, 2],
+                zoom: 3
+            });
+        } catch (e) {
+            err = e;
+        }
+        if (err) {
+            t.fail("Map construction failure: " + err.message);
+        } else {
+            t.ok(true, "Map construction works");
+        }
+        
+        // confirm that map center is correctly set
+        var center = map.getCenter();
+        t.eq(center.lon, 1, "map x");
+        t.eq(center.lat, 2, "map y")
+        t.eq(map.getZoom(), 3, "map z");
+
+        // confirm that location from map options has been added to url
+        var params = OpenLayers.Util.getParameters(window.location.hash.replace("#", "?"));
+        t.eq(params.lon, "1", "url x");
+        t.eq(params.lat, "2", "url y");
+        t.eq(params.zoom, "3", "url z");
+        
+        map.destroy();
+        window.location.hash = previous;
+    }
+    
+    function test_center_from_url(t) {
+        t.plan(6);
+
+        // In cases where the location is specified in the URL and given in
+        // the map options, we respect the location in the URL.
+        var previous = window.location.hash;
+        window.location.hash = "#zoom=6&lat=5&lon=4&layers=B"
+        
+        var map = new OpenLayers.Map({
+            layers: [new OpenLayers.Layer(null, {isBaseLayer: true})],
+            controls: [new OpenLayers.Control.Permalink({anchor: true})],
+            center: [0, 0],
+            zoom: 0
+        });
+        
+        // confirm that map center is correctly set
+        var center = map.getCenter();
+        t.eq(center.lon, 4, "map x");
+        t.eq(center.lat, 5, "map y")
+        t.eq(map.getZoom(), 6, "map z");        
+        
+        var params = OpenLayers.Util.getParameters(window.location.hash.replace("#", "?"));
+        t.eq(params.lon, "4", "x set");
+        t.eq(params.lat, "5", "y set");
+        t.eq(params.zoom, "6", "z set");
+        
+        map.destroy();
+        window.location.hash = previous;
+    }
+    
   </script>
 </head>
 <body>
diff --git a/tests/Control/PinchZoom.html b/tests/Control/PinchZoom.html
index 24e506a..2e2de47 100644
--- a/tests/Control/PinchZoom.html
+++ b/tests/Control/PinchZoom.html
@@ -49,7 +49,7 @@
             log.push(transform);
         }
         
-        control.containerOrigin = {
+        control.containerCenter = {
             x: 0, y: 0
         };
 
diff --git a/tests/Control/SelectFeature.html b/tests/Control/SelectFeature.html
index e5dcb39..68e3031 100644
--- a/tests/Control/SelectFeature.html
+++ b/tests/Control/SelectFeature.html
@@ -173,6 +173,47 @@
 
     }
 
+
+    function test_selectBox_events(t){
+        t.plan(8);
+        var map = new OpenLayers.Map("map");
+        var layer1 = new OpenLayers.Layer.Vector();
+        map.addLayer(layer1);
+        map.setBaseLayer(layer1);
+        var layer2 = new OpenLayers.Layer.Vector();
+        map.addLayer(layer2);
+        map.setCenter(new OpenLayers.LonLat(1,1));
+        var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,1));
+        layer1.addFeatures([feature]);
+        var control = new OpenLayers.Control.SelectFeature(layer1);
+        control.setMap(map);
+        map.getLonLatFromPixel = function(arg) {
+            return new OpenLayers.LonLat(arg.x, arg.y);
+        }
+        control.activate();
+        var firesBoxselectionstart = false;
+        var beforeSelectingNumberOfFeatures = -1;
+        var firesBoxselectionend = false;
+        var afterSelectingNumberOfFeatures = -1;
+        control.events.register("boxselectionstart",null, function(e){
+            firesBoxselectionstart=true;
+            t.eq(e.layers.length,1,"right number of layers in event boxselectionstart");
+            t.eq(layer1.id, e.layers[0].id,"correct layer in event boxselectionstart");
+            beforeSelectingNumberOfFeatures = e.layers[0].selectedFeatures.length;
+        });
+        control.events.register("boxselectionend",null, function(e){
+            firesBoxselectionend=true;
+            t.eq(e.layers.length,1,"right number of layers in event boxselectionend");
+            t.eq(layer1.id, e.layers[0].id,"correct layer in event boxselectionend");
+            afterSelectingNumberOfFeatures = e.layers[0].selectedFeatures.length;
+        });
+        var bounds = new OpenLayers.Bounds(-1, -1, 2, 2);
+        control.selectBox(bounds);
+        t.ok(firesBoxselectionstart,"selectBox fires boxselectionstart event");
+        t.eq(beforeSelectingNumberOfFeatures,0,"boxselectionstart fires before selection of feature");
+        t.ok(firesBoxselectionend,"selectBox fires boxselectionend event");
+        t.eq(afterSelectingNumberOfFeatures,1,"boxselectionend fires after feature selected");
+    }
     function test_Control_SelectFeature_activate(t) {
         t.plan(4);
         var map = new OpenLayers.Map("map");
@@ -480,7 +521,7 @@
         t.eq(feature.renderIntent, "default",
              "feature drawn with expected render intent after \"mouseout\"");
     }
-
+    
     function test_setLayer(t) {
         t.plan(5);
         var map = new OpenLayers.Map("map");
diff --git a/tests/Control/Snapping.html b/tests/Control/Snapping.html
index a0c55c2..f065f66 100644
--- a/tests/Control/Snapping.html
+++ b/tests/Control/Snapping.html
@@ -236,6 +236,56 @@
         map.destroy();
     
     }
+
+    function test_filter(t) {
+        t.plan(3);
+        var map = new OpenLayers.Map("map", {
+            resolutions: [1],
+            maxExtent: new OpenLayers.Bounds(0, 0, 100, 100)
+        });
+
+        var layer1 = new OpenLayers.Layer.Vector(null, {
+            isBaseLayer: true
+        });
+        var f1 = new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
+            "LINESTRING(0 0, 10 10, 20 20, 30 30)"
+        ), {foo: 'bar'});
+        f1.fid = "FID1";
+        var f2 = new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
+            "LINESTRING(11 10, 20 10, 30 10)"
+        ), {foo: 'bar'});
+        f2.fid = "FID2";
+        layer1.addFeatures([f1, f2]);
+        map.addLayers([layer1]);
+        map.zoomToMaxExtent();
+
+        var control = new OpenLayers.Control.Snapping({
+            layer: layer1,
+            targets: [layer1],
+            defaults: {tolerance: 4}
+        });
+        control.activate();
+
+        var result;
+        var loc = new OpenLayers.Geometry.Point(1, 1);
+
+        control.setTargets([{layer: layer1}]);
+        result = control.testTarget(control.targets[0], loc);
+        t.ok(result !== null, "target is eligible without a filter set");
+        var filter = new OpenLayers.Filter.Logical({
+            type: OpenLayers.Filter.Logical.NOT, 
+            filters: [
+                new OpenLayers.Filter.FeatureId({fids: ["FID1", "FID2"]})
+            ]
+        });
+        control.setTargets([{layer: layer1, filter: filter}]);
+        result = control.testTarget(control.targets[0], loc);
+        t.ok(result === null, "target is not eligible with a filter set which excludes the target's features");
+        filter = new OpenLayers.Filter.Comparison({type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO, value: 'bar', property: 'foo'});
+        control.setTargets([{layer: layer1, filter: filter}]);
+        result = control.testTarget(control.targets[0], loc);
+        t.ok(result === null, "target is not eligible with a filter set which excludes the target's features using a comparison filter");
+    }
     
     function test_snapping(t) {
         
diff --git a/tests/Control/Split.html b/tests/Control/Split.html
index a307bdd..86af76c 100644
--- a/tests/Control/Split.html
+++ b/tests/Control/Split.html
@@ -141,7 +141,7 @@
     
     function test_isEligible(t) {
         
-        t.plan(9);
+        t.plan(10);
         
         var control = new OpenLayers.Control.Split();
         var geometry = OpenLayers.Geometry.fromWKT("LINESTRING(0 1, 1 2)");
@@ -176,6 +176,9 @@
         control.targetFilter.value = "baz";
         t.eq(control.isEligible(feature), true, "feature is eligible if it matches filter");
         
+        delete feature.geometry;
+        t.eq(control.isEligible(feature), false, "feature with no geometry is not eligible");
+        
         control.destroy();
         
     }
diff --git a/tests/Control/TransformFeature.html b/tests/Control/TransformFeature.html
index 00fb0a9..3279867 100644
--- a/tests/Control/TransformFeature.html
+++ b/tests/Control/TransformFeature.html
@@ -82,6 +82,44 @@
         control.box.move(center);
         t.geom_eq(control.handles[0].geometry, control.box.geometry.components[0], "handle moved with box");
     }
+    
+    function test_handleMove(t) {
+        t.plan(16);
+        var map = new OpenLayers.Map("map", {allOverlays: true});
+        var layer = new OpenLayers.Layer.Vector();
+        var feature = new OpenLayers.Feature.Vector(
+            OpenLayers.Geometry.fromWKT("POLYGON((-1 -1, 1 -1, 1 1, -1 1))"));
+        layer.addFeatures([feature]);
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 18);
+        var control = new OpenLayers.Control.TransformFeature(layer);
+        map.addControl(control);
+        control.setFeature(feature);
+        
+        var bottomLeft = new OpenLayers.LonLat(-2, -2);
+        control.handles[0].move(bottomLeft);
+        t.geom_eq(control.handles[0].geometry, new OpenLayers.Geometry.Point(-2, -2), "bottom left handle at -2,-2");
+        t.geom_eq(control.handles[1].geometry, new OpenLayers.Geometry.Point(0, -2), "bottom handle at 0,-2");
+        t.geom_eq(control.handles[2].geometry, new OpenLayers.Geometry.Point(2, -2), "bottom right handle at 2,-2");
+        t.geom_eq(control.handles[3].geometry, new OpenLayers.Geometry.Point(2, 0), "right handle at 2,0");
+        t.geom_eq(control.handles[4].geometry, new OpenLayers.Geometry.Point(2, 2), "top right handle at 2,2");
+        t.geom_eq(control.handles[5].geometry, new OpenLayers.Geometry.Point(0, 2), "top handle at 0,2");
+        t.geom_eq(control.handles[6].geometry, new OpenLayers.Geometry.Point(-2, 2), "top left handle at -2,2");
+        t.geom_eq(control.handles[7].geometry, new OpenLayers.Geometry.Point(-2, 0), "left handle at -2,0");
+        
+        control.irregular = true;
+        
+        var bottomLeft = new OpenLayers.LonLat(-3, -3);
+        control.handles[0].move(bottomLeft);
+        t.geom_eq(control.handles[0].geometry, new OpenLayers.Geometry.Point(-3, -3), "bottom left handle at -3,-3");
+        t.geom_eq(control.handles[1].geometry, new OpenLayers.Geometry.Point(-0.5, -3), "bottom handle at 0,-3");
+        t.geom_eq(control.handles[2].geometry, new OpenLayers.Geometry.Point(2, -3), "bottom right handle at 2,-3");
+        t.geom_eq(control.handles[3].geometry, new OpenLayers.Geometry.Point(2, -0.5), "right handle at 2,0");
+        t.geom_eq(control.handles[4].geometry, new OpenLayers.Geometry.Point(2, 2), "top right handle at 2,2");
+        t.geom_eq(control.handles[5].geometry, new OpenLayers.Geometry.Point(-0.5, 2), "top handle at 0,2");
+        t.geom_eq(control.handles[6].geometry, new OpenLayers.Geometry.Point(-3, 2), "top left handle at -3,2");
+        t.geom_eq(control.handles[7].geometry, new OpenLayers.Geometry.Point(-3, -0.5), "left handle at -3,0");
+    }
 
     </script>
 </head>
diff --git a/tests/Control/UTFGrid.html b/tests/Control/UTFGrid.html
new file mode 100644
index 0000000..36d79bb
--- /dev/null
+++ b/tests/Control/UTFGrid.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <script>
+      /**
+      * Because browsers that implement requestAnimationFrame may not execute
+      * animation functions while a window is not displayed (e.g. in a hidden
+      * iframe as in these tests), we mask the native implementations here.  The
+      * native requestAnimationFrame functionality is tested in Util.html and
+      * in PanZoom.html (where a popup is opened before panning).  The panTo tests
+      * here will test the fallback setTimeout implementation for animation.
+      */
+      window.requestAnimationFrame = 
+          window.webkitRequestAnimationFrame =
+          window.mozRequestAnimationFrame =
+          window.oRequestAnimationFrame =
+          window.msRequestAnimationFrame = null;
+  </script>
+  <script src="../OLLoader.js"></script>
+  <script type="text/javascript">
+
+    var map, layer, control;
+    var log;
+    function setUp() {
+        layer = new OpenLayers.Layer.UTFGrid({
+            url: "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
+            isBaseLayer: true, 
+            utfgridResolution: 4
+        });
+        map = new OpenLayers.Map({
+            div: "map",
+            projection: "EPSG:900913",
+            layers: [layer],
+            center: [0, 0],
+            zoom: 1
+        });
+        log = [];
+        control = new OpenLayers.Control.UTFGrid({
+            callback: function(infoLookup, loc, pixel) {
+                log.push([infoLookup, loc, pixel]);
+            }
+        });
+        map.addControl(control);
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+        control = null;
+        log = [];
+    }
+
+    function test_constructor(t) {
+        t.plan(2);
+        
+        var control = new OpenLayers.Control.UTFGrid();
+        t.ok(control instanceof OpenLayers.Control.UTFGrid, "utfgrid instance");
+        t.eq(control.handlerMode, "click", "control mode");
+
+        control.destroy();
+
+    }
+    
+    function test_handleEvent(t) {
+        setUp();
+        
+        var cases = [{
+            evt: {xy: {x: 100, y: 70}},
+            lookup: {
+                "0": {
+                    id: "207",
+                    data: {
+                        NAME: "United States",
+                        POP2005: 299846449
+                    }
+                }
+            }
+        }, {
+            evt: {xy: {x: 350, y: 20}},
+            lookup: {
+                "0": {
+                    id: "245",
+                    data: {
+                        NAME: "Russia",
+                        POP2005: 143953092
+                    }
+                }
+            }
+        }];
+        
+        var len = cases.length;
+        t.plan(4*len);
+                
+        // wait for tile loading to finish
+        t.delay_call(0.5, function() {
+            var c, arg;
+            for (var i=0; i<len; ++i) {
+                c = cases[i];
+                t.eq(log.length, i, i + ": log length before");
+                control.handleEvent(c.evt);
+                t.eq(log.length, i+1, i + ": log length after");
+                t.eq(log[i][0], c.lookup, i + ": callback infoLookup");
+                t.eq(log[i][2], c.evt.xy, i + ": callback pixel");
+            }
+            
+            tearDown();
+        });
+        
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="height: 256px; width: 512px"></div>
+</body>
+</html>
+
diff --git a/tests/Control/WMSGetFeatureInfo.html b/tests/Control/WMSGetFeatureInfo.html
index 8d63f78..b5e6d5d 100644
--- a/tests/Control/WMSGetFeatureInfo.html
+++ b/tests/Control/WMSGetFeatureInfo.html
@@ -291,18 +291,18 @@
         t.plan(5);
         var map = new OpenLayers.Map("map", {
             getExtent: function() {return(new OpenLayers.Bounds(-180,-90,180,90));}
-            }
-        );
+        });
+        var geographic = new OpenLayers.Projection("EPSG:4326");
 
         var a = new OpenLayers.Layer.WMS("dummy","http://localhost/wms", {
             layers: "a,b,c,d",
             styles: "a,b,c,d"
-        });
+        }, {projection: geographic});
 
         var b = new OpenLayers.Layer.WMS("dummy","http://localhost/wms", {
             layers: ["a","b","c","d"],
             styles: ["a","b","c","d"]
-        });
+        }, {projection: geographic});
 
         var c = new OpenLayers.Layer.WMS("dummy","http://localhost/wms", {
             layers: ["a","b","c","d"]
@@ -310,13 +310,13 @@
 
         var d = new OpenLayers.Layer.WMS("dummy","http://localhost/wms", {
             layers: "a,b,c,d"
-        });
+        }, {projection: geographic});
 
         var click = new OpenLayers.Control.WMSGetFeatureInfo({
             featureType: 'type',
             featureNS: 'ns',
             layers: [a, b, c, d]
-        });
+        }, {projection: geographic});
 
         map.addControl(click);
 
@@ -348,7 +348,7 @@
         );
         t.eq(
             log.options && log.options.params.STYLES.join(","),
-            "a,b,c,d,a,b,c,d,,,,,,,,",
+            ",,,,,,,,a,b,c,d,a,b,c,d",
             "Styles merged correctly"
         );
 
@@ -399,6 +399,7 @@
         var c = new OpenLayers.Layer.WMS(
             null, ["http://c.mirror/wms", "http://d.mirror/wms"], {layers: "c"}
         );
+        map.addLayers([a, b, c]);
 
         var control = new OpenLayers.Control.WMSGetFeatureInfo({
             url: "http://host/wms",
@@ -424,7 +425,7 @@
         control.layerUrls = ["http://a.mirror/wms", "http://b.mirror/wms"];
         control.getInfoForClick({xy: {x: 50, y: 50}});
         t.eq(log.options && log.options.url, "http://host/wms", "some match, request issued");
-        t.eq(log.options && log.options.params["QUERY_LAYERS"].join(","), "a,b", "selected layers queried");
+        t.eq(log.options && log.options.params["QUERY_LAYERS"].join(","), "b,a", "selected layers queried");
 
         // show that a layer can be matched if it has a urls array itself (first needs to be matched)
         log = {};
@@ -474,6 +475,35 @@
         
     }
 
+    function test_exceptions(t) {
+        t.plan(1);
+        var map = new OpenLayers.Map("map", {
+            getExtent: function() {return(new OpenLayers.Bounds(-180,-90,180,90));}
+            }
+        );
+
+        var a = new OpenLayers.Layer.WMS("dummy","http://myhost/wms", {
+            layers: "x",
+            exceptions: "text/xml"
+        });
+
+        map.addLayer(a);
+
+        var click = new OpenLayers.Control.WMSGetFeatureInfo({
+        });
+
+        map.addControl(click);
+
+        var _request = OpenLayers.Request.GET;
+        OpenLayers.Request.GET = function(options) {
+            t.eq(options.params["EXCEPTIONS"], "text/xml", "Exceptions parameter taken from the WMS layer if provided");
+        };
+        click.activate();
+        click.getInfoForClick({xy: {x: 50, y: 50}});
+        OpenLayers.Request.GET = _request;
+        map.destroy();
+    }
+
     function test_drillDown(t) {
         t.plan(6);
         var map = new OpenLayers.Map("map", {
@@ -508,13 +538,13 @@
         var _request = OpenLayers.Request.GET;
         OpenLayers.Request.GET = function(options) {
             count++;
-            if (count == 1) {
+            if (count == 2) {
                 t.eq(options.params["INFO_FORMAT"], "application/vnd.ogc.gml", "Default info format of the control is used");
-                t.eq(options.params["QUERY_LAYERS"].join(","), "a,c", "Layers should be grouped by service url");
-                t.eq(options.url, "http://localhost/wms", "Correct url used for first request");
-            } else if (count == 2) {
+                t.eq(options.params["QUERY_LAYERS"].join(","), "c,a", "Layers should be grouped by service url");
+                t.eq(options.url, "http://localhost/wms", "Correct url used for second request");
+            } else if (count == 1) {
                 t.eq(options.params["INFO_FORMAT"], "text/xml", "Overridden info format is used instead of the control's infoFormat");
-                t.eq(options.url, "http://myhost/wms", "Correct url used for second request");
+                t.eq(options.url, "http://myhost/wms", "Correct url used for first request");
             }
         };
         click.activate();
diff --git a/tests/Control/Zoom.html b/tests/Control/Zoom.html
new file mode 100644
index 0000000..c27161d
--- /dev/null
+++ b/tests/Control/Zoom.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <script src="../OLLoader.js"></script>
+  <script type="text/javascript">
+
+    function test_constructor(t) {
+        t.plan(5);
+
+        var control = new OpenLayers.Control.Zoom();
+        t.ok(control instanceof OpenLayers.Control, "instance of Control");
+        t.ok(control instanceof OpenLayers.Control.Zoom, "instance of Zoom");
+        t.eq(control.displayClass, "olControlZoom", "displayClass");
+        control.destroy();
+        
+        control = new OpenLayers.Control.Zoom({
+            zoomInText: "zoom in!",
+            zoomOutText: "zoom out!"
+        });
+        t.eq(control.zoomInText, "zoom in!", "zoomInText");
+        t.eq(control.zoomOutText, "zoom out!", "zoomOutText");
+        control.destroy();        
+    }
+
+    function test_addControl(t) {
+        t.plan(3);
+        var map = new OpenLayers.Map("map");
+        var control = new OpenLayers.Control.Zoom();
+        map.addControl(control);
+        t.ok(control.map === map, "Control.map set");
+        t.ok(!!~OpenLayers.Util.indexOf(map.controls, control), "map.controls contains control");
+
+        control = new OpenLayers.Control.Zoom({zoomInId: "in", zoomOutId: "out"});
+        map.addControl(control);
+        var eventsEl = document.getElementById("out").parentNode;
+        t.ok(control.events.element === eventsEl, "Events instance listens to custom div's parentNode");
+
+        map.destroy();
+    }
+    
+    function test_zoomIn(t) {
+        t.plan(2);
+        
+        var map = new OpenLayers.Map({
+            div: "map",
+            layers: [new OpenLayers.Layer(null, {isBaseLayer: true})]
+        });
+        var control = new OpenLayers.Control.Zoom();
+        map.addControl(control);
+        map.setCenter([0, 0], 0);
+        
+        t.eq(map.getZoom(), 0, "initial center");
+        map.events.triggerEvent("buttonclick", {buttonElement: control.zoomInLink});
+        t.eq(map.getZoom(), 1, "after zoom in");
+        map.destroy();
+    }
+
+    function test_zoomOut(t) {
+        t.plan(2);
+        
+        var map = new OpenLayers.Map({
+            div: "map",
+            layers: [new OpenLayers.Layer(null, {isBaseLayer: true})]
+        });
+        var control = new OpenLayers.Control.Zoom();
+        map.addControl(control);
+        map.setCenter([0, 0], 1);
+        
+        t.eq(map.getZoom(), 1, "initial center");
+        map.events.triggerEvent("buttonclick", {buttonElement: control.zoomOutLink});
+        t.eq(map.getZoom(), 0, "after zoom out");
+        map.destroy();
+    }
+
+  </script>
+</head>
+<body>
+    <div id="map" style="width: 512px; height: 256px;"/>
+    <div id="in">in</div><div id="out">out</out>
+</body>
+</html>
diff --git a/tests/Events.html b/tests/Events.html
index 62b7ed3..eebda24 100644
--- a/tests/Events.html
+++ b/tests/Events.html
@@ -7,38 +7,22 @@
     var a;
     
     function test_Events_constructor (t) {
+        t.plan(4);
+
         var mapDiv = OpenLayers.Util.getElement('map');
         var obj = {result: 0};
-        var eventTypes = ["doThingA", "doThingB", "doThingC"];
-        var browserTypes = OpenLayers.Events.prototype.BROWSER_EVENTS;
-
-        var totalTests = 4 + 2*eventTypes.length + 2*browserTypes.length;
-
-        t.plan( totalTests );
-
-        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
 
+        events = new OpenLayers.Events(obj, mapDiv);
         t.ok( events instanceof OpenLayers.Events, "new OpenLayers.Control returns object" );
-
         t.ok(events.object ==obj, " 'object' property correctly set");
         t.ok(events.element == mapDiv, " 'element' property correctly set");
-
-
-        for (var i = 0; i < browserTypes.length; i++) {
-            var type = browserTypes[i];
-            t.ok( events.listeners[type] instanceof Array, "browser event: " + type + " correctly registered" );
-            t.ok( OpenLayers.Util.indexOf(events.eventTypes, type) != -1, "browser type " + type + "' correctly added to eventTypes array");
-        }
-        for (var i = 0; i < eventTypes.length; i++) {
-            var type = eventTypes[i];
-            t.ok( events.listeners[type] instanceof Array, "custom event: " + type + " correctly registered");
-            t.ok( OpenLayers.Util.indexOf(events.eventTypes, type) != -1, "eventType " + type + "' correctly added to eventTypes array");
-        }
+        events.destroy();
 
         // default/nulls
         events = new OpenLayers.Events(null, null, null);
         t.ok( events.listeners != null,
               "init of Events with null object/element/eventTypes still creates listeners array" );
+        events.destroy();
     }
 
     function test_Events_register(t){
@@ -46,6 +30,10 @@
 
         var ev = {
             'object': {},
+            'extensionCount': {
+                'listenerA': 0,
+                'listenerB': 0
+            },
             'listeners': {
                 'listenerA': { 
                     'push': function(options){
@@ -59,8 +47,7 @@
                                 gFuncB = options.func;
                             }
                 }
-            },
-            'eventTypes': ['listenerA', 'listenerB']
+            }
         };
 
         var type = null;
@@ -99,13 +86,12 @@
 
     function test_Events_register_unregister(t) {
  
-        t.plan( 18 );
+        t.plan(20);
  
         var mapDiv = OpenLayers.Util.getElement('map');
         var obj = {result: 0};
-        var eventTypes = ["doThingA", "doThingB", "doThingC"];
         
-        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
+        events = new OpenLayers.Events(obj, mapDiv);
         
         var func = function () { this.result++ }
         events.register( "doThingA", obj, func );
@@ -136,8 +122,11 @@
         var listenerList = events.listeners["doThingA"];
         t.eq( listenerList.length, 3, "register correctly does not append null callback to event.listeners[doThingA] even when obj passed in is null" );
 
-        events.register( "chicken", obj, func);
-        t.ok( events.listeners["chicken"] == null, "register() does nothing on attempt to register un-enabled event");
+        events.register("chicken", obj, func);
+        t.eq(events.listeners["chicken"].length, 1, "register() allows listeners for any named event");
+
+        events.unregister("chicken", obj, func);
+        t.eq(events.listeners["chicken"].length, 0, "unregistering an event that is not in eventTypes list works")
 
         events.unregister("doThingA", obj, null);
         var listenerList = events.listeners["doThingA"];
@@ -174,9 +163,15 @@
         events.unregister("doThingA", obj, null);
         t.ok( (listenerList.length == 1), "unregister does not bomb if you try to remove a null callback" );
 
-        events.unregister("chicken", null, func3);
-        t.ok( events.listeners["chicken"] == null, "unregistering an event that is not enabled does not wierdly enable it -- or cause a script error")
-
+        try {
+            events.unregister("asdf", obj, func);
+            t.ok("unregistering for an event with no registered listeners works");
+        } catch (err) {
+            t.fail("unregistering for an event with no registered listeners causes trouble: " + err);
+        }
+        
+        events.register("buttonclick", obj, func);
+        t.ok(events.extensions.buttonclick, "buttonclick extension registered");
 
     }
 
@@ -186,9 +181,8 @@
  
         var mapDiv = OpenLayers.Util.getElement('map');
         var obj = {result: 0};
-        var eventTypes = ["doThingA", "doThingB", "doThingC"];
         
-        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
+        events = new OpenLayers.Events(obj, mapDiv);
         
         var func = function () { this.result++ }
         var func2 = function () { this.result-- }
@@ -213,9 +207,8 @@
  
         var mapDiv = OpenLayers.Util.getElement('map');
         var obj = {result: 0};
-        var eventTypes = ["doThingA", "doThingB", "doThingC"];
         
-        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
+        events = new OpenLayers.Events(obj, mapDiv);
         
         
         var func = function () { this.result++ }
@@ -248,7 +241,7 @@
         //no specific t.ok for this one, but if it breaks, you will know it.
         events.triggerEvent("chicken");
 
-        events = new OpenLayers.Events(null, mapDiv, eventTypes);
+        events = new OpenLayers.Events(null, mapDiv);
         
         // a is global variable (context-irrelevant)
         a = 0;
@@ -259,8 +252,7 @@
         t.eq(a, 5, "if Events has no object set and an event is registered also with no object, triggerEvent() calls it without trying to set the context to null");
         
         // trigger events with additional arguments
-        eventTypes = ["something"];
-        events = new OpenLayers.Events(null, null, eventTypes);
+        events = new OpenLayers.Events();
         var instance = {id: Math.random()};
         var listener = function(obj) {
             t.eq(this.id, instance.id,
@@ -309,7 +301,7 @@
 
     function test_Events_handleBrowserEvent(t) {
         t.plan(2);
-        var events = new OpenLayers.Events({}, null, ['sometouchevent']);
+        var events = new OpenLayers.Events({}, null);
         events.on({'sometouchevent': function() {}});
 
         // this test verifies that when handling a touch event we correctly
@@ -321,6 +313,16 @@
         t.eq(evt.clientX, 1.5, "evt.clientX value is correct");
         t.eq(evt.clientY, 1.5, "evt.clientY value is correct");
     }
+    
+    function test_Events_attachToElement(t) {
+        t.plan(3);
+        var events = new OpenLayers.Events({}, null);
+        var element = document.createElement("div");
+        events.attachToElement(element);
+        t.ok(events.eventHandler, "eventHandler method bound");
+        t.ok(events.clearMouseListener, "clearMouseListener method bound");
+        t.ok(events.element === element, "element set");
+    }
 
     function test_Events_destroy (t) {
         t.plan(2);
@@ -424,43 +426,6 @@
         
     }
 
-    function test_Events_addEventType(t) {
-
-        t.plan( 8 );
- 
-        var mapDiv = OpenLayers.Util.getElement('map');
-        var obj = {result: 0};
-        var eventTypes = ["doThingA", "doThingB"];
-
-        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
-
-
-        t.eq( events.listeners["doThingA"].length, 0, "event type passed as passed as param to OpenLayers.Events constructor correctly set up" );
-        t.eq( events.listeners["doThingB"].length, 0, "event type passed as passed as param to OpenLayers.Events constructor correctly set up" );
-
-        var newEventType = "onFoo";
-        t.ok( events.listeners[newEventType] == null, "event type not yet registered has null entry in listeners array");
-        t.ok( OpenLayers.Util.indexOf(events.eventTypes, newEventType) == -1, "event type not yet registered not in eventTypes array");
-
-        events.addEventType(newEventType);
-        t.eq( events.listeners[newEventType].length, 0, "event type passed to addEventType correctly set up" );
-        t.ok( OpenLayers.Util.indexOf(events.eventTypes, newEventType) != -1, "event type passed to addEventType in eventTypes array");
-        
-        var func = function () {};
-        events.register( "doThingA", obj, func );
-        t.eq( events.listeners["doThingA"].length, 1, "listener correctly registered" );
-
-        events.addEventType("doThingsA");
-        t.eq( events.listeners["doThingA"].length, 1, "event type passed to addEventType correctly does nothing if clashes with already defined event type" );
-    }
-
-    /** HACK HACK HACK Deprecated This test should be removed in 3.0 **/
-    function test_Events_globalEventObject(t) {
-        t.plan(1);
-        t.ok(Event.stop, "a stop() function exists on the global JS Event object, if indeed it exists. This is legacy deprecated and will be gone in 3.0");
-    }
-   
-
   </script>
 </head>
 <body>
diff --git a/tests/Events/buttonclick.html b/tests/Events/buttonclick.html
new file mode 100644
index 0000000..35ebb81
--- /dev/null
+++ b/tests/Events/buttonclick.html
@@ -0,0 +1,180 @@
+<html>
+<head>
+  <script src="../OLLoader.js"></script>
+  <script type="text/javascript">
+
+    var log, buttonClick, events, element, button;
+    function init() {
+        element = document.getElementById("map");
+        button = document.getElementById("button");
+    }
+    function trigger(evt) {
+        OpenLayers.Util.applyDefaults(evt, {
+            button: 1,
+            target: button
+        });
+        events.handleBrowserEvent(evt);
+    }
+    function logEvent(evt) {
+        log.push(evt);
+    }
+   
+    function test_ButtonClick(t) {
+        t.plan(1);
+        events = new OpenLayers.Events({}, element);
+        buttonClick = new OpenLayers.Events.buttonclick(events);
+        t.ok(buttonClick.target === events, "target set from constructor arg");
+        buttonClick.destroy();
+        events.destroy();
+    }
+
+    function test_getPressedButton(t) {
+        t.plan(4);
+
+        // set up
+
+        events = new OpenLayers.Events({}, element);
+        buttonClick = new OpenLayers.Events.buttonclick(events);
+
+        var button = document.createElement('button'),
+            span1 = document.createElement('span'),
+            span2 = document.createElement('span'),
+            span3 = document.createElement('span');
+        button.className = 'olButton';
+        button.appendChild(span1);
+        span1.appendChild(span2);
+        span2.appendChild(span3);
+
+        t.ok(buttonClick.getPressedButton(button) === button,
+             'getPressedButton returns button when element is button');
+        t.ok(buttonClick.getPressedButton(span1) === button,
+             'getPressedButton returns button when element is button descendant level 1');
+        t.ok(buttonClick.getPressedButton(span2) === button,
+             'getPressedButton returns button when element is button descendant level 2');
+        t.eq(buttonClick.getPressedButton(span3), undefined,
+             'getPressedButton returns undefined when element is button descendant level 3');
+
+        // test
+
+
+        // tear down
+
+        buttonClick.destroy();
+        events.destroy();
+    }
+    
+    function test_ButtonClick_buttonClick(t) {
+        t.plan(27);
+        events = new OpenLayers.Events({}, element);
+        events.on({
+            "buttonclick": logEvent,
+            "mousedown": logEvent,
+            "mouseup": logEvent,
+            "click": logEvent,
+            "dblclick": logEvent,
+            "touchstart": logEvent,
+            "touchend": logEvent,
+            "keydown": logEvent
+        });
+        buttonClick = events.extensions["buttonclick"];
+        
+        // a complete click
+        log = [];
+        trigger({type: "mousedown"});
+        trigger({type: "mouseup"});
+        t.eq(log.length, 1, "one event fired for mousedown-mouseup");
+        t.eq(log[0].type, "buttonclick", "buttonclick event fired");
+        
+        // a complete tap
+        log = [];
+        trigger({type: "touchstart"});
+        trigger({type: "touchend"});
+        t.eq(log.length, 1, "one event fired for touchstart-touchend");
+        t.eq(log[0].type, "buttonclick", "buttonclick event fired");
+        
+        // mouse sequence started on button
+        log = [];
+        trigger({type: "mousedown"});
+        trigger({type: "mouseup", target: element});
+        t.eq(log.length, 1, "one event fired for mousedown-(leave)-mouseup");
+        t.eq(log[0].type, "mouseup", "mouseup event goes through when sequence not finished on button");
+
+        // touch sequence started on button
+        log = [];
+        trigger({type: "touchstart"});
+        trigger({type: "touchmove"});
+        trigger({type: "touchend"});
+        t.eq(log.length, 1, "one event fired for touchstart-(leave)-touchend");
+        t.eq(log[0].type, "touchend", "touchend event goes through when sequence not finished on button");
+
+        // mouse sequence finished on button
+        log = [];
+        trigger({type: "mousedown", target: element});
+        trigger({type: "mouseup"});
+        t.eq(log.length, 2, "two event fired for mousedown-(enter)-mouseup");
+        t.eq(log[0].type, "mousedown", "mousedown unrelated to button goes through");
+        t.eq(log[1].type, "mouseup", "mouseup goes through when sequence started outside button");
+
+        // touch sequence finished on button
+        log = [];
+        trigger({type: "touchstart", target: element});
+        trigger({type: "touchend"});
+        t.eq(log.length, 2, "two event fired for touchstart-(enter)-touchend");
+        t.eq(log[0].type, "touchstart", "touchstart unrelated to button goes through");
+        t.eq(log[1].type, "touchend", "touchend goes through when sequence started outside button");
+        
+        // dblclick
+        log = [];
+        trigger({type: "mousedown"});
+        trigger({type: "mouseup"});
+        trigger({type: "click"});
+        trigger({type: "mousedown"});
+        trigger({type: "mouseup"});
+        trigger({type: "click"});
+        trigger({type: "dblclick"});
+        t.eq(log.length, 2, "two events fired for doubleclick");
+        t.eq(log[0].type, "buttonclick", "buttonclick for 1st click");
+        t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click");
+        
+        // dblclick - IE
+        log = [];
+        trigger({type: "mousedown"});
+        trigger({type: "mouseup"});
+        trigger({type: "mouseup"});
+        trigger({type: "dblclick"});
+        t.eq(log.length, 2, "two events fired for dblclick in IE");
+        t.eq(log[0].type, "buttonclick", "buttonclick for 1st click in IE");
+        t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click IE");
+
+        // rightclick
+        log = [];
+        trigger({type: "mousedown", button: 2});
+        trigger({type: "mouseup", button: 2});
+        t.eq(log.length, 2, "two events fired for rightclick");
+        t.eq(log[0].type, "mousedown", "mousedown from rightclick goes through");
+        t.eq(log[1].type, "mouseup", "mouseup from rightclick goes through");
+
+        // keydown RETURN
+        log = [];
+        trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_RETURN});
+        trigger({type: "click"});
+        t.eq(log.length, 1, "one event fired for RETURN keydown");
+        t.eq(log[0].type, "buttonclick", "buttonclick for RETURN keydown");
+
+        // keydown SPACE
+        log = [];
+        trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_SPACE});
+        trigger({type: "click"});
+        t.eq(log.length, 1, "one event fired for SPACE keydown");
+        t.eq(log[0].type, "buttonclick", "buttonclick for SPACE keydown");
+    }
+  </script>
+</head>
+<body onload="init()">
+    <div id="map" style="width: 600px; height: 300px;">
+        <div id="button" class="olButton">
+            <img class="olAlphaImg">
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tests/Feature.html b/tests/Feature.html
index 688642f..4a50d51 100644
--- a/tests/Feature.html
+++ b/tests/Feature.html
@@ -44,7 +44,7 @@
         //Safari 3 separates style overflow into overflow-x and overflow-y
         var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq(popup.contentDiv.style[prop], "auto", 'overflow on popup is correct');
-        t.ok( popup instanceof OpenLayers.Popup.AnchoredBubble, "popup is an AnchoredBubble by defaults");
+        t.ok( popup instanceof OpenLayers.Popup.Anchored, "popup is a Popup.Anchored by default");
         feature.destroyPopup();
         
         feature.popupClass = OpenLayers.Popup.FramedCloud;
diff --git a/tests/Filter.html b/tests/Filter.html
index 25b0e94..01b8f47 100644
--- a/tests/Filter.html
+++ b/tests/Filter.html
@@ -13,6 +13,16 @@
         t.eq(filter.foo, "bar", "constructor sets options correctly"); 
         t.eq(typeof filter.evaluate, "function", "filter has an evaluate function"); 
     }
+    
+    function test_toString(t) {
+        t.plan(1);
+        var filter = new OpenLayers.Filter.Comparison({
+            property: "PERSONS",
+            value: 2000000,
+            type: OpenLayers.Filter.Comparison.LESS_THAN
+        });
+        t.eq(filter.toString(), "PERSONS < 2000000", "toString returns CQL representation");
+    }
 
     </script> 
 </head> 
diff --git a/tests/Format/CSWGetRecords/v2_0_2.html b/tests/Format/CSWGetRecords/v2_0_2.html
index 5fda134..07e1b96 100644
--- a/tests/Format/CSWGetRecords/v2_0_2.html
+++ b/tests/Format/CSWGetRecords/v2_0_2.html
@@ -41,7 +41,7 @@
     
     function test_read(t) {
         
-        t.plan(16);
+        t.plan(17);
         
         var obj = format.read(csw_response);
                 
@@ -65,6 +65,9 @@
         t.eq(testRecord.type, "BriefRecord", "check value for record.type");
         t.eq(testRecord.title, [{value:"Sample title"}], "check value for record.title");
 
+        // test empty subject
+        t.eq(testRecord.subject, [], "Empty subject tags are ignored");
+
         //test bbox
         t.eq(testRecord.BoundingBox.length, 2, "object contains 2 BoundingBoxes");
         var bbox = testRecord.BoundingBox[0];
diff --git a/tests/Format/CSWGetRecords/v2_0_2.js b/tests/Format/CSWGetRecords/v2_0_2.js
index a761671..4763aef 100644
--- a/tests/Format/CSWGetRecords/v2_0_2.js
+++ b/tests/Format/CSWGetRecords/v2_0_2.js
@@ -1,5 +1,5 @@
 var csw_request = 
-'<csw:GetRecords xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" service="CSW" version="2.0.2" resultType="results" startPosition="10" maxRecords="20">' +
+'<csw:GetRecords xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" service="CSW" version="2.0.2" resultType="results" startPosition="10" maxRecords="20" xmlns:gmd="http://www.isotc211.org/2005/gmd">' +
   '<csw:Query typeNames="csw:Record">' +
     '<csw:ElementSetName>brief</csw:ElementSetName>' +
     '<csw:Constraint version="1.1.0">' +
@@ -21,6 +21,8 @@ var csw_response =
     '<csw:BriefRecord xmlns:geonet="http://www.fao.org/geonetwork" xmlns:ows="http://www.opengis.net/ows" xmlns:dc="http://purl.org/dc/elements/1.1/">' +
       '<dc:identifier>895ac38b-7aef-4a21-b593-b35a6fc7bba9</dc:identifier>' +
       '<dc:title>Sample title</dc:title>' +
+      '<dc:subject />' +
+      '<dc:subject />' +
       '<ows:BoundingBox crs="::Lambert Azimuthal Projection">' +
         '<ows:LowerCorner>156 -3</ows:LowerCorner>' +
         '<ows:UpperCorner>37 83</ows:UpperCorner>' +
diff --git a/tests/Format/GPX.html b/tests/Format/GPX.html
index 0bf897d..ee08de9 100644
--- a/tests/Format/GPX.html
+++ b/tests/Format/GPX.html
@@ -19,13 +19,48 @@
              "default external projection is EPSG:4326"); 
     }
     function test_Format_GPX_read(t) {
-        t.plan(4);
+        t.plan(7);
+        var expected,
+            P = OpenLayers.Geometry.Point,
+            LS = OpenLayers.Geometry.LineString;
         var f = new OpenLayers.Format.GPX();
         var features = f.read(gpx_data);
         t.eq(features.length, 3, "Number of features read is correct");
-        t.eq(features[2].geometry.toString(), "POINT(-0.1853562259 51.3697845627)", "waypoint feature correctly created");
-        t.eq(features[0].geometry.toString(), "LINESTRING(-0.1721292044 51.3768216433,-0.1649230916 51.370833767,-0.1736741378 51.3644368725,-0.166259525 51.3576354272)", "track feature correctly created");
-        t.eq(features[1].geometry.toString(), "LINESTRING(-0.1829991904 51.3761803674,-0.1758887005 51.3697894659,-0.1833202965 51.3639790884,-0.1751119509 51.3567607069)", "route feature correctly created");
+        expected = new P(-0.1853562259, 51.3697845627);
+        t.geom_eq(features[2].geometry, expected, "waypoint feature correctly created");
+        expected = new LS([
+                new P(-0.1721292044, 51.3768216433),
+                new P(-0.1649230916, 51.370833767),
+                new P(-0.1736741378, 51.3644368725),
+                new P(-0.166259525, 51.3576354272)
+        ]);
+        t.geom_eq(features[0].geometry, expected, "track feature correctly created");
+        expected = new LS([
+                new P(-0.1829991904, 51.3761803674),
+                new P(-0.1758887005, 51.3697894659),
+                new P(-0.1833202965, 51.3639790884),
+                new P(-0.1751119509, 51.3567607069)
+        ]);
+        t.geom_eq(features[1].geometry, expected, "route feature correctly created");
+
+        f.internalProjection = new OpenLayers.Projection("EPSG:3857");
+        features = f.read(gpx_data);
+        expected = new P(-20633.760679678744, 6686966.841929403);
+        t.geom_eq(features[2].geometry, expected, "transformed waypoint feature correctly created");
+        expected = new LS([
+                new P(-19161.33538179203, 6688221.743275255),
+                new P(-18359.1545744088, 6687153.931130851),
+                new P(-19333.316581165607, 6686013.33343931),
+                new P(-18507.925659955214, 6684800.777090962)
+        ]);
+        t.geom_eq(features[0].geometry, expected, "transformed track feature correctly created");
+        expected = new LS([
+                new P(-20371.3766880736, 6688107.378491073),
+                new P(-19579.84057322507, 6686967.716235109),
+                new P(-20407.12205561124, 6685931.714395953),
+                new P(-19493.373203291227, 6684644.845706556)
+        ]);
+        t.geom_eq(features[1].geometry, expected, "transformed route feature correctly created");
     }
     function test_format_GPX_read_attributes(t) {
         t.plan(2);
@@ -34,6 +69,103 @@
         t.eq(features[2].attributes['name'], "Mark", "Text attribute node read correctly.");
         t.eq(features[2].attributes['sym'], "Flag", "CDATA attribute node read correctly.");
     }
+    function test_Format_GPX_serialize_points(t) { 
+        t.plan(2);
+
+        var parser = new OpenLayers.Format.GPX();
+
+        var point = new OpenLayers.Geometry.Point(-111.04, 45.68);  
+        var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68); 
+        var features = [
+            new OpenLayers.Feature.Vector(point, {name: 'foo', description: 'bar'}),
+            new OpenLayers.Feature.Vector(point2, {name: 'foo', description: 'bar'})
+        ];
+        var data = parser.write(features);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wpt lon="-111.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt><wpt lon="-112.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt></gpx>', 'GPX serializes points correctly');
+
+        parser.internalProjection = new OpenLayers.Projection("EPSG:3857");
+        point = new OpenLayers.Geometry.Point(-12367595.42541111, 5621521.485409545);  
+        point2 = new OpenLayers.Geometry.Point(-12472235.746742222, 5621521.485409545); 
+        features = [
+            new OpenLayers.Feature.Vector(point, {name: 'foo', description: 'bar'}),
+            new OpenLayers.Feature.Vector(point2, {name: 'foo', description: 'bar'})
+        ];
+        data = parser.write(features);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wpt lon="-111.1" lat="45"><name>foo</name><desc>bar</desc></wpt><wpt lon="-112.04" lat="45"><name>foo</name><desc>bar</desc></wpt></gpx>', 'GPX serializes transformed points correctly');
+    }
+    function test_Format_GPX_serialize_line(t) { 
+        t.plan(2);
+
+        var parser = new OpenLayers.Format.GPX();
+
+        var point = new OpenLayers.Geometry.Point(-111.04, 45.68);  
+        var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68); 
+        var line = new OpenLayers.Geometry.LineString([point, point2]);
+        var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
+        var data = parser.write(f);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes line correctly');
+
+        parser.internalProjection = new OpenLayers.Projection("EPSG:3857");
+        point = new OpenLayers.Geometry.Point(-12367595.42541111, 5621521.485409545);  
+        point2 = new OpenLayers.Geometry.Point(-12472235.746742222, 5621521.485409545); 
+        line = new OpenLayers.Geometry.LineString([point, point2]);
+        f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
+        data = parser.write(f);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.1" lat="45"/><trkpt lon="-112.04" lat="45"/></trkseg></trk></gpx>', 'GPX serializes transformed line correctly');
+    }
+    function test_Format_GPX_serialize_lines(t) { 
+        t.plan(1);
+
+        var parser = new OpenLayers.Format.GPX();
+
+        var point = new OpenLayers.Geometry.Point(-111.04, 45.68);  
+        var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68); 
+        var line = new OpenLayers.Geometry.LineString([point, point2]);
+        var point3 = new OpenLayers.Geometry.Point(1, 2);  
+        var point4 = new OpenLayers.Geometry.Point(3, 4); 
+        var line2 = new OpenLayers.Geometry.LineString([point3, point4]);
+        var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
+        var f2 = new OpenLayers.Feature.Vector(line2, {name: 'dude', description: 'truite'});
+        var data = parser.write([f, f2]);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk><trk><name>dude</name><desc>truite</desc><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg>< [...]
+    }
+    function test_Format_GPX_serialize_multiline(t) { 
+        t.plan(1);
+
+        var parser = new OpenLayers.Format.GPX();
+
+        var point = new OpenLayers.Geometry.Point(-111.04, 45.68);  
+        var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68); 
+        var line = new OpenLayers.Geometry.LineString([point, point2]);
+        var point3 = new OpenLayers.Geometry.Point(1, 2);  
+        var point4 = new OpenLayers.Geometry.Point(3, 4); 
+        var line2 = new OpenLayers.Geometry.LineString([point3, point4]);
+        var multiline = new OpenLayers.Geometry.MultiLineString([line, line2]);
+        var f = new OpenLayers.Feature.Vector(multiline, {name: 'foo', description: 'bar'});
+        var data = parser.write([f]);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes multiline correctly');
+    }
+    function test_Format_GPX_serialize_polygon(t) { 
+        t.plan(1);
+
+        var parser = new OpenLayers.Format.GPX();
+
+        var point = new OpenLayers.Geometry.Point(-111.04, 45.68);  
+        var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68); 
+        var linearRing = new OpenLayers.Geometry.LinearRing([point, point2, point.clone()]);
+        var polygon = new OpenLayers.Geometry.Polygon([linearRing]);
+        var f = new OpenLayers.Feature.Vector(polygon, {name: 'foo', description: 'bar'});
+        var data = parser.write([f]);
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/><trkpt lon="-111.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes polygon correctly');
+    }
+    function test_Format_GPX_serialize_metadata(t) { 
+        t.plan(1);
+
+        var parser = new OpenLayers.Format.GPX();
+
+        var data = parser.write([], {name: 'foo', desc: 'bar'});
+        t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><metadata><name>foo</name><desc>bar</desc></metadata></gpx>', 'GPX serializes metadata correctly');
+    }
     </script> 
 </head> 
 <body> 
diff --git a/tests/Format/KML.html b/tests/Format/KML.html
index 42b6fe6..a7dfd97 100644
--- a/tests/Format/KML.html
+++ b/tests/Format/KML.html
@@ -198,21 +198,35 @@
         t.ok(style.t, "getStyle returns copy of style rather than reference");
     }
     function test_Format_KML_extendedData(t) {
-        t.plan(2);
+        t.plan(6);
         var f = new OpenLayers.Format.KML();
         var features = f.read(OpenLayers.Util.getElement("kml_extendeddata").value);
-        t.eq(features[0].attributes.all_bridges.value, "3030", "read value from extendeddata correctly.");
-        t.eq(features[0].attributes.all_bridges.displayName, "all bridges", "read displayName from extendeddata correctly.");
+        t.eq(features[0].attributes.holeYardage.value, "234", "read value from extendeddata correctly.");
+        t.eq(features[0].attributes.holeYardage.displayName, "<b><i>The yardage is </i></b>", "read displayName from extendeddata correctly.");
+        t.eq(f.read(f.write(features[0]))[0].attributes.holeYardage.value, features[0].attributes.holeYardage.value, "attribute value written correctly");
+        t.eq(f.read(f.write(features[0]))[0].attributes.holeYardage.displayName, features[0].attributes.holeYardage.displayName, "attribute displayName written correctly");
+        f.kvpAttributes = true;
+        features = f.read(OpenLayers.Util.getElement("kml_extendeddata").value);
+        t.eq(features[0].attributes.holeYardage, "234", "read kvp value from extendeddata correctly.");
+        t.eq(f.read(f.write(features[0]))[0].attributes.holeYardage, features[0].attributes.holeYardage, "kvp attribute value written correctly");
     }
 
     function test_Format_KML_extendedData_SchemaData(t) {
-        t.plan(4);
+        t.plan(10);
         var f = new OpenLayers.Format.KML();
         var features = f.read(OpenLayers.Util.getElement("kml_extendeddata2").value);
         t.eq(features[0].attributes.TrailHeadName.value, "Pi in the sky", "read value from extendeddata (schema data) correctly.");
         t.eq(features[0].attributes.TrailHeadName.displayName, "TrailHeadName", "read displayName from extendeddata correctly");
         t.eq(features[0].attributes.ElevationGain.value, "10", "read value from extendeddata (schema data) correctly.");
         t.eq(features[0].attributes.ElevationGain.displayName, "ElevationGain", "read displayName from extendeddata correctly");
+        t.eq(f.read(f.write(features[0]))[0].attributes.TrailHeadName.value, features[0].attributes.TrailHeadName.value, "attribute value from extendeddata (schema data) written correctly");
+        t.eq(f.read(f.write(features[0]))[0].attributes.ElevationGain.value, features[0].attributes.ElevationGain.value, "attribute value from extendeddata (schema data) written correctly");
+        f.kvpAttributes = true;
+        features = f.read(OpenLayers.Util.getElement("kml_extendeddata2").value);
+        t.eq(features[0].attributes.TrailHeadName, "Pi in the sky", "read kvp value from extendeddata (schema data) correctly.");
+        t.eq(features[0].attributes.ElevationGain, "10", "read kvp value from extendeddata (schema data) correctly.");
+        t.eq(f.read(f.write(features[0]))[0].attributes.TrailHeadName, features[0].attributes.TrailHeadName, "kvp attribute value from extendeddata (schema data) written correctly");
+        t.eq(f.read(f.write(features[0]))[0].attributes.ElevationGain, features[0].attributes.ElevationGain, "kvp attribute value from extendeddata (schema data) written correctly");
     }
 
     function test_Format_KML_placemarkName(t) {
@@ -287,49 +301,61 @@
 </head> 
 <body> 
     <textarea id="kml_extendeddata" style="display:none">
-<kml xmlns="http://earth.google.com/kml/2.2">
-<Document>
-        <Placemark>
-            <styleUrl>#default</styleUrl>
-
-
-
-
-            <ExtendedData>
-                                    <Data name='all_bridges'>
-                        <displayName><![CDATA[all bridges]]></displayName>
-                        <value><![CDATA[3030]]></value>
-                    </Data>
-                                    <Data name='latitude'>
-                        <displayName><![CDATA[latitude]]></displayName>
-                        <value><![CDATA[43]]></value>
-                    </Data>
-                                    <Data name='longitude'>
-                        <displayName><![CDATA[longitude]]></displayName>
-                        <value><![CDATA[-107.55]]></value>
-                    </Data>
-                                    <Data name='functionally_obsolete__percent'>
-                        <displayName><![CDATA[functionally obsolete, percent]]></displayName>
-                        <value><![CDATA[8]]></value>
-                    </Data>
-                                    <Data name='structurally_deficient__percent'>
-                        <displayName><![CDATA[structurally deficient, percent]]></displayName>
-                        <value><![CDATA[13]]></value>
-                    </Data>
-                                    <Data name='state'>
-                        <displayName><![CDATA[state]]></displayName>
-                        <value><![CDATA[Wyoming]]></value>
-                    </Data>
-                            </ExtendedData>
-
-
-              <Point>
-<coordinates>-107.55,43.0</coordinates>
-</Point>
-
-
-        </Placemark>
-</Document>
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2">
+  <Document>
+    <name>Entity-Replacement</name>
+    <Placemark>
+      <name>Club house</name>
+      <ExtendedData>
+        <Data name="holeNumber">
+          <displayName><![CDATA[
+            <b>This is hole </b>
+          ]]></displayName>
+          <value>1</value>
+        </Data>
+        <Data name="holePar">
+          <displayName><![CDATA[
+            <i>The par for this hole is </i>
+          ]]></displayName>
+          <value>4</value>
+        </Data>
+        <Data name="holeYardage">
+          <displayName><![CDATA[<b><i>The yardage is </i></b>]]></displayName>
+          <value>234</value>
+        </Data>
+      </ExtendedData>
+      <Point>
+        <coordinates>-111.956,33.5043</coordinates>
+      </Point>
+    </Placemark>
+    <Placemark>
+      <name>By the lake</name>
+      <ExtendedData>
+        <Data name="holeNumber">
+          <displayName><![CDATA[
+            <b>This is hole </b>
+          ]]></displayName>
+          <value>5</value>
+        </Data>
+        <Data name="holePar">
+          <displayName><![CDATA[
+            <i>The par for this hole is </i>
+          ]]></displayName>
+          <value>5</value>
+        </Data>
+        <Data name="holeYardage">
+          <displayName><![CDATA[
+            <b><i>The yardage is </i></b>
+          ]]></displayName>
+          <value>523</value>
+        </Data>
+      </ExtendedData>
+      <Point>
+        <coordinates>-111.95,33.5024</coordinates>
+      </Point>
+    </Placemark>
+  </Document>
 </kml>
 </textarea>
     <textarea id="kml_extendeddata2" style="display:none">
diff --git a/tests/Format/OWSCommon/v1_1_0.html b/tests/Format/OWSCommon/v1_1_0.html
index e899ea8..1cdf7ee 100644
--- a/tests/Format/OWSCommon/v1_1_0.html
+++ b/tests/Format/OWSCommon/v1_1_0.html
@@ -6,7 +6,7 @@
     function test_read_exception(t) {
         t.plan(6);
         var text = '<?xml version="1.0" encoding="UTF-8"?>' +
-'<ows:ExceptionReport xml:lang="en" version="1.0.0"' +
+'<ows:ExceptionReport xml:lang="en" version="1.1.0"' +
 '    xsi:schemaLocation="http://www.opengis.net/ows http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"' +
 '    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows/1.1">' +
 '    <ows:Exception locator="foo" exceptionCode="InvalidParameterValue">' +
@@ -18,7 +18,7 @@
         var format = new OpenLayers.Format.OWSCommon();
         var result = format.read(text);
         var report = result.exceptionReport;
-        t.eq(report.version, "1.0.0", "Version parsed correctly");
+        t.eq(report.version, "1.1.0", "Version parsed correctly");
         t.eq(report.language, "en", "Language parsed correctly");
         var exception = report.exceptions[0];
         t.eq(exception.code, "InvalidParameterValue", "exceptionCode properly parsed");
diff --git a/tests/Format/SLD/v1_0_0.html b/tests/Format/SLD/v1_0_0.html
index 8e2c0a2..a295a74 100644
--- a/tests/Format/SLD/v1_0_0.html
+++ b/tests/Format/SLD/v1_0_0.html
@@ -39,7 +39,7 @@
                             '</PolygonSymbolizer>' + 
                             '<TextSymbolizer>' + 
                                 '<Label>' + 
-                                    '<ogc:PropertyName>FOO</ogc:PropertyName>' +
+                                    'A <ogc:PropertyName>FOO</ogc:PropertyName> label' +
                                 '</Label>' +
                                 '<Font>' +
                                     '<CssParameter name="font-family">Arial</CssParameter>' + 
@@ -47,6 +47,19 @@
                                     '<CssParameter name="font-weight">bold</CssParameter>' + 
                                     '<CssParameter name="font-style">normal</CssParameter>' + 
                                 '</Font>' +
+                                '<LabelPlacement>' +
+                                    '<PointPlacement>' +
+                                        '<AnchorPoint>' +
+                                            '<AnchorPointX>0.5</AnchorPointX>' +
+                                            '<AnchorPointY>0.5</AnchorPointY>' +
+                                        '</AnchorPoint>' +
+                                        '<Displacement>' +
+                                            '<DisplacementX>5</DisplacementX>' +
+                                            '<DisplacementY>5</DisplacementY>' +
+                                        '</Displacement>' +
+                                        '<Rotation>45</Rotation>' +
+                                    '</PointPlacement>' +
+                                '</LabelPlacement>' + 
                                 '<Halo>' +
                                     '<Radius>3</Radius>' +
                                     '<Fill>' +
@@ -121,6 +134,7 @@
                                             '<CssParameter name="stroke-width">2</CssParameter>' +
                                         '</Stroke>' + 
                                     '</Mark>' + 
+                                    '<Size><ogc:PropertyName>SIZE</ogc:PropertyName></Size>' +
                                 '</Graphic>' +
                             '</PointSymbolizer>' +
                         '</Rule>' + 
@@ -130,7 +144,7 @@
         '</StyledLayerDescriptor>';
 
     function test_read(t) {
-        t.plan(22);
+        t.plan(23);
         
         var xml = new OpenLayers.Format.XML();
         var sldxml = xml.read(sld);
@@ -173,10 +187,10 @@
         t.eq(poly.fillColor, "#ffffff", "(AAA161) first rule has proper fill");
         t.eq(poly.strokeColor, "#000000", "(AAA161) first rule has proper stroke");
         var text = symbolizer["Text"];
-        t.eq(text.label, "${FOO}", "(AAA161) first rule has proper text label");
+        t.eq(text.label, "A ${FOO} label", "(AAA161) first rule has proper text label");
         t.eq(layer.userStyles[0].propertyStyles["label"], true, "label added to propertyStyles");
         t.eq(text.fontFamily, "Arial", "(AAA161) first rule has proper font family");
-        t.eq(text.fillColor, "#000000", "(AAA161) first rule has proper text fill");
+        t.eq(text.fontColor, "#000000", "(AAA161) first rule has proper text fill");
         t.eq(text.haloRadius, "3", "(AAA161) first rule has proper halo radius");
         t.eq(text.haloColor, "#ffffff", "(AAA161) first rule has proper halo color");
         
@@ -203,6 +217,12 @@
         t.ok(typeof rule.maxScaleDenominator == "number", "MaxScaleDenominator is a number");
         t.eq(rule.evaluate(feature), true, "numeric filter comparison evaluates correctly");
         
+        // check for PropertyName size
+        layer = obj.namedLayers["Second Layer"];
+        style = layer.userStyles[0];
+        rule = style.rules[0];
+        t.eq(rule.symbolizer["Point"].graphicWidth, "${SIZE}", "dynamic size correctly set on graphicWidth");
+        
         // etc.  I'm convinced read works, really wanted to test write (since examples don't test that)
         // I'll add more tests here later.        
 
@@ -211,7 +231,7 @@
     function test_write(t) {
         t.plan(3);
 
-        // read first - testing that write produces the SLD aboce
+        // read first - testing that write produces the SLD above
         var parser = new OpenLayers.Format.SLD.v1_0_0();
         var xml = new OpenLayers.Format.XML();
         var sldxml = xml.read(sld);
@@ -340,7 +360,7 @@
                 "label": "This is the ${city} in ${state}.",
                 "fontFamily": "Arial",
                 "fontSize": 10,
-                "fillColor": "blue",
+                "fontColor": "blue",
                 "fontWeight": "bold",
                 "fontStyle": "normal",
                 "haloRadius": 2,
@@ -502,7 +522,57 @@
         t.xml_eq(got, exp, "duplicated rules to write zIndex as FeatureTypeStyle elements");
         
     }
-    
+
+    function test_label_LinePlacement(t) {
+        t.plan(1);
+        var format = new OpenLayers.Format.SLD.v1_0_0({
+            multipleSymbolizers: true
+        });
+        // labelPerpendicularOffset takes precedence over labelAlign
+        var style = new OpenLayers.Style2({
+            rules: [
+                new OpenLayers.Rule({
+                    symbolizers: [
+                        new OpenLayers.Symbolizer.Line({
+                            strokeColor: "red",
+                            strokeWidth: 3
+                        }),
+                        new OpenLayers.Symbolizer.Text({
+                            label: "${FOO}",
+                            labelPerpendicularOffset: 10,
+                            labelAlign: "rb"
+                        })
+                    ]
+                })
+            ]
+        });
+        var got = format.writeNode("sld:UserStyle", style);
+        var exp = readXML("label_lineplacement_test.sld").documentElement;
+        t.xml_eq(got, exp, "LinePlacement written out correctly");
+    }
+
+    function test_labelAlignToAnchorPosition(t) {
+        t.plan(1);
+        var format = new OpenLayers.Format.SLD.v1_0_0({
+            multipleSymbolizers: true
+        });
+        var style = new OpenLayers.Style2({
+            rules: [
+                new OpenLayers.Rule({
+                    symbolizers: [
+                        new OpenLayers.Symbolizer.Text({
+                            label: "${FOO}",
+                            labelAlign: "rb"
+                        })
+                    ]
+                })
+            ]
+        });
+        var got = format.writeNode("sld:UserStyle", style);
+        var exp = readXML("label_pointplacement_test.sld").documentElement;
+        t.xml_eq(got, exp, "PointPlacement with labelAlign written out correctly");
+    }
+
     function test_read_FeatureTypeStyles(t) {
         
         t.plan(13);
@@ -578,7 +648,6 @@
         doc = readXML("polygon_labelhalo.sld");
         out = format.write(format.read(doc));
         t.xml_eq(out, doc.documentElement, "round-tripped polygon_labelhalo.sld");
-
     }
 
     </script> 
@@ -860,5 +929,46 @@
     </sld:FeatureTypeStyle>
 </sld:UserStyle>
 --></div>
+<div id="label_lineplacement_test.sld"><!--
+<sld:UserStyle xmlns:sld="http://www.opengis.net/sld">
+    <sld:FeatureTypeStyle>
+        <sld:Rule>
+            <sld:LineSymbolizer>
+                <sld:Stroke>
+                    <sld:CssParameter name="stroke">red</sld:CssParameter>
+                    <sld:CssParameter name="stroke-width">3</sld:CssParameter>
+                </sld:Stroke>
+            </sld:LineSymbolizer>
+            <sld:TextSymbolizer>
+                <sld:Label><ogc:PropertyName xmlns:ogc="http://www.opengis.net/ogc">FOO</ogc:PropertyName></sld:Label>
+                <sld:LabelPlacement>
+                    <sld:LinePlacement>
+                        <sld:PerpendicularOffset>10</sld:PerpendicularOffset>
+                    </sld:LinePlacement>
+                </sld:LabelPlacement>
+            </sld:TextSymbolizer>
+        </sld:Rule>
+    </sld:FeatureTypeStyle>
+</sld:UserStyle>
+--></div>
+<div id="label_pointplacement_test.sld"><!--
+<sld:UserStyle xmlns:sld="http://www.opengis.net/sld">
+    <sld:FeatureTypeStyle>
+        <sld:Rule>
+            <sld:TextSymbolizer>
+                <sld:Label><ogc:PropertyName xmlns:ogc="http://www.opengis.net/ogc">FOO</ogc:PropertyName></sld:Label>
+                <sld:LabelPlacement>
+                    <sld:PointPlacement>
+                        <sld:AnchorPoint>
+                            <sld:AnchorPointX>1</sld:AnchorPointX>
+                            <sld:AnchorPointY>0</sld:AnchorPointY>
+                        </sld:AnchorPoint>
+                    </sld:PointPlacement>
+                </sld:LabelPlacement>
+            </sld:TextSymbolizer>
+        </sld:Rule>
+    </sld:FeatureTypeStyle>
+</sld:UserStyle>
+--></div>
 </body> 
 </html> 
diff --git a/tests/Format/SLD/v1_0_0_GeoServer.html b/tests/Format/SLD/v1_0_0_GeoServer.html
new file mode 100644
index 0000000..8793d59
--- /dev/null
+++ b/tests/Format/SLD/v1_0_0_GeoServer.html
@@ -0,0 +1,178 @@
+<html> 
+<head> 
+    <script src="../../OLLoader.js"></script>
+    <script type="text/javascript">
+
+    var xml = new OpenLayers.Format.XML(); 
+    function readXML(id) {
+        return xml.read(document.getElementById(id).firstChild.nodeValue);
+    }
+
+    function test_VendorExtensions(t) {
+
+        var cases = [
+            "poly_label.sld"
+        ];
+        var len = cases.length;
+        t.plan(len+1);
+
+        var format = new OpenLayers.Format.SLD({
+            profile: "GeoServer",
+            multipleSymbolizers: true,
+            namedLayersAsArray: true,
+            schemaLocation: "http://www.opengis.net/sld StyledLayerDescriptor.xsd"
+        });
+            
+        var c, doc, data, out;
+        for (var i=0; i<len; ++i) {
+            c = cases[i];
+            doc = readXML(c);
+            data = format.read(doc);
+            out = format.write(data);
+            t.xml_eq(out, doc.documentElement, "round-tripped " + c);
+        }
+        doc = readXML("poly_label.sld");
+        data = format.read(doc);
+        data.namedLayers[0].userStyles[0].rules[0].symbolizers[1].graphic = false;
+        out = format.write(data);
+        t.xml_eq(out, readXML("poly_label_nographic.sld").documentElement, "If graphic is false no Graphic is outputted");
+    }
+    
+    </script> 
+</head> 
+<body>
+<div id="poly_label.sld"><!--
+<StyledLayerDescriptor version="1.0.0"
+    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
+    xmlns="http://www.opengis.net/sld"
+    xmlns:ogc="http://www.opengis.net/ogc"
+    xmlns:xlink="http://www.w3.org/1999/xlink"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <NamedLayer>
+    <Name>Polygon with styled label</Name>
+    <UserStyle>
+      <Title>SLD Cook Book: Polygon with styled label</Title>
+      <FeatureTypeStyle>
+        <Rule>
+          <PolygonSymbolizer>
+            <Fill>
+              <CssParameter name="fill">#40FF40</CssParameter>
+            </Fill>
+            <Stroke>
+              <CssParameter name="stroke">#FFFFFF</CssParameter>
+              <CssParameter name="stroke-width">2</CssParameter>
+            </Stroke>
+          </PolygonSymbolizer>        
+          <TextSymbolizer>
+            <Label>
+              <ogc:PropertyName>name</ogc:PropertyName>
+            </Label>
+            <Font>
+              <CssParameter name="font-family">Arial</CssParameter>
+              <CssParameter name="font-size">11</CssParameter>
+              <CssParameter name="font-weight">bold</CssParameter>
+              <CssParameter name="font-style">normal</CssParameter>
+            </Font>
+            <Fill>
+              <CssParameter name="fill">#000000</CssParameter>
+              <CssParameter name="fill-opacity">0.5</CssParameter>
+            </Fill>
+            <Graphic>
+              <Mark>
+                <WellKnownName>square</WellKnownName>
+                  <Fill>
+                    <CssParameter name="fill">#59BF34</CssParameter>
+                    <CssParameter name="fill-opacity">0.8</CssParameter>
+                  </Fill>
+                  <Stroke>
+                    <CssParameter name="stroke">#2D6917</CssParameter>
+                  </Stroke>
+              </Mark>
+              <Size>24</Size>
+            </Graphic>
+            <Priority>
+                <ogc:PropertyName>population</ogc:PropertyName>
+            </Priority>
+            <VendorOption name="autoWrap">60</VendorOption>
+            <VendorOption name="followLine">true</VendorOption> 
+            <VendorOption name="repeat">300</VendorOption>
+            <VendorOption name="maxDisplacement">150</VendorOption>
+            <VendorOption name="forceLeftToRight">false</VendorOption>
+            <VendorOption name="graphic-margin">3</VendorOption>
+            <VendorOption name="graphic-resize">stretch</VendorOption>
+            <VendorOption name="group">yes</VendorOption>
+            <VendorOption name="spaceAround">10</VendorOption>
+            <VendorOption name="labelAllGroup">true</VendorOption>
+            <VendorOption name="maxAngleDelta">15</VendorOption>
+            <VendorOption name="conflictResolution">false</VendorOption>
+            <VendorOption name="goodnessOfFit">0.3</VendorOption>
+            <VendorOption name="polygonAlign">mbr</VendorOption>
+          </TextSymbolizer>
+        </Rule>
+      </FeatureTypeStyle>
+    </UserStyle>
+  </NamedLayer>
+</StyledLayerDescriptor>
+--></div>
+<div id="poly_label_nographic.sld"><!--
+<StyledLayerDescriptor version="1.0.0"
+    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
+    xmlns="http://www.opengis.net/sld"
+    xmlns:ogc="http://www.opengis.net/ogc"
+    xmlns:xlink="http://www.w3.org/1999/xlink"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <NamedLayer>
+    <Name>Polygon with styled label</Name>
+    <UserStyle>
+      <Title>SLD Cook Book: Polygon with styled label</Title>
+      <FeatureTypeStyle>
+        <Rule>
+          <PolygonSymbolizer>
+            <Fill>
+              <CssParameter name="fill">#40FF40</CssParameter>
+            </Fill>
+            <Stroke>
+              <CssParameter name="stroke">#FFFFFF</CssParameter>
+              <CssParameter name="stroke-width">2</CssParameter>
+            </Stroke>
+          </PolygonSymbolizer>        
+          <TextSymbolizer>
+            <Label>
+              <ogc:PropertyName>name</ogc:PropertyName>
+            </Label>
+            <Font>
+              <CssParameter name="font-family">Arial</CssParameter>
+              <CssParameter name="font-size">11</CssParameter>
+              <CssParameter name="font-weight">bold</CssParameter>
+              <CssParameter name="font-style">normal</CssParameter>
+            </Font>
+            <Fill>
+              <CssParameter name="fill">#000000</CssParameter>
+              <CssParameter name="fill-opacity">0.5</CssParameter>
+            </Fill>
+            <Priority>
+                <ogc:PropertyName>population</ogc:PropertyName>
+            </Priority>
+            <VendorOption name="autoWrap">60</VendorOption>
+            <VendorOption name="followLine">true</VendorOption> 
+            <VendorOption name="repeat">300</VendorOption>
+            <VendorOption name="maxDisplacement">150</VendorOption>
+            <VendorOption name="forceLeftToRight">false</VendorOption>
+            <VendorOption name="graphic-margin">3</VendorOption>
+            <VendorOption name="graphic-resize">stretch</VendorOption>
+            <VendorOption name="group">yes</VendorOption>
+            <VendorOption name="spaceAround">10</VendorOption>
+            <VendorOption name="labelAllGroup">true</VendorOption>
+            <VendorOption name="maxAngleDelta">15</VendorOption>
+            <VendorOption name="conflictResolution">false</VendorOption>
+            <VendorOption name="goodnessOfFit">0.3</VendorOption>
+            <VendorOption name="polygonAlign">mbr</VendorOption>
+          </TextSymbolizer>
+        </Rule>
+      </FeatureTypeStyle>
+    </UserStyle>
+  </NamedLayer>
+</StyledLayerDescriptor>
+--></div>
+</body> 
+</html> 
diff --git a/tests/Format/SOSCapabilities/v1_0_0.html b/tests/Format/SOSCapabilities/v1_0_0.html
index ed7f25e..6713685 100644
--- a/tests/Format/SOSCapabilities/v1_0_0.html
+++ b/tests/Format/SOSCapabilities/v1_0_0.html
@@ -40,7 +40,7 @@
         t.eq(obj.serviceProvider.serviceContact.contactInfo.phone.voice, "+49-251-83-30088", "Voice phone correctly parsed");
 
         // operationsMetadata (from OWSCommon)
-        t.eq(obj.operationsMetadata.DescribeSensor.dcp.http.post, "http://v-swe.uni-muenster.de:8080/WeatherSOS/sos", "POST url for DescribeSensor correctly parsed");
+        t.eq(obj.operationsMetadata.DescribeSensor.dcp.http.post[0].url, "http://v-swe.uni-muenster.de:8080/WeatherSOS/sos", "POST url for DescribeSensor correctly parsed");
         var counter = 0;
         for (var key in obj.operationsMetadata.DescribeSensor.parameters.procedure.allowedValues) {
             if (counter == 0) {
diff --git a/tests/Format/WFSCapabilities/v1.html b/tests/Format/WFSCapabilities/v1.html
index d713270..ebd371d 100644
--- a/tests/Format/WFSCapabilities/v1.html
+++ b/tests/Format/WFSCapabilities/v1.html
@@ -21,13 +21,15 @@
     }
     
     function test_read(t) {
-        t.plan(33);
+        t.plan(35);
        
         var parser = new OpenLayers.Format.WFSCapabilities();
 
         // GeoServer, v1.1.0
         var text = '<?xml version="1.0" encoding="UTF-8"?><wfs:WFS_Capabilities version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wfs" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ows="http://www.opengis.net/ows" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://localhost:80/geoserver/schemas/wfs/1.1.0/wfs.xsd" xmln [...]
         var res = parser.read(text);
+        t.eq(res.operationsMetadata["GetFeature"].dcp.http.get[0].url, "http://localhost:80/geoserver/wfs?", "GetFeature GET endpoint correctly parsed");
+        t.eq(res.operationsMetadata["GetFeature"].dcp.http.post[0].url, "http://localhost:80/geoserver/wfs?", "GetFeature POST endpoint correctly parsed");
         var ft = res.featureTypeList.featureTypes;
         t.eq(ft.length, 14, "number of feature types correct");
         t.eq(ft[0]["abstract"], "Manhattan landmarks, identifies water, lakes, parks, interesting buildilngs", "abstract of first feature type correct");
diff --git a/tests/Format/WFST/v1.html b/tests/Format/WFST/v1.html
index 04142b6..6cfb1ca 100644
--- a/tests/Format/WFST/v1.html
+++ b/tests/Format/WFST/v1.html
@@ -133,6 +133,28 @@
             t.xml_eq(got, expected, snippet + " request without geometry created correctly");
         }
     }
+    
+    function test_setFilterProperty(t) {
+        t.plan(2);
+        var format = new OpenLayers.Format.WFST({
+            geometryName: "foo"
+        });
+        var filter = new OpenLayers.Filter.Logical({
+            type: OpenLayers.Filter.Logical.AND,
+            filters: [new OpenLayers.Filter.Spatial({
+                type: OpenLayers.Filter.Spatial.BBOX,
+                value: new OpenLayers.Bounds(1,2,3,4)
+            }), new OpenLayers.Filter.Spatial({
+                type: OpenLayers.Filter.Spatial.DWITHIN,
+                property: "bar",
+                value: new OpenLayers.Geometry.Point(1,2),
+                distance: 10
+            })]
+        });
+        format.setFilterProperty(filter);
+        t.eq(filter.filters[0].property, "foo", "property set if not set on filter");
+        t.eq(filter.filters[1].property, "bar", "property not set if set on filter");
+    }
 
     function test_update_null_geometry(t) {
         var format = new OpenLayers.Format.WFST({
diff --git a/tests/Format/WKT.html b/tests/Format/WKT.html
index 15d2b2c..bdfc233 100644
--- a/tests/Format/WKT.html
+++ b/tests/Format/WKT.html
@@ -254,21 +254,40 @@
         t.plan(1);
 
         var projections = {
-            src:  new OpenLayers.Projection("EPSG:4326"),
-            dest: new OpenLayers.Projection("EPSG:900913")
-        };
-
-        var points = {
-            src:  new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(-87.9, 41.9)),
-            dest: new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(-9784983.2393667, 5146011.6785665))
-        };
-
-        var format = new OpenLayers.Format.WKT({
-            externalProjection: projections["src"],
-            internalProjection: projections["dest"]
-        });
-        var feature = format.read("GEOMETRYCOLLECTION(POINT(" + points["src"].geometry.x + " " + points["src"].geometry.y + "))")[0];
-        t.eq(feature.geometry.toString(), points["dest"].geometry.toString(), 
+                src:  new OpenLayers.Projection("EPSG:4326"),
+                dest: new OpenLayers.Projection("EPSG:900913")
+            },
+            points = {
+                src:  new OpenLayers.Feature.Vector(
+                    new OpenLayers.Geometry.Point(-87.9, 41.9)
+                ),
+                dest: new OpenLayers.Feature.Vector(
+                    new OpenLayers.Geometry.Point(-9784983.2393667, 5146011.6785665)
+                )
+            },
+            format = new OpenLayers.Format.WKT({
+                externalProjection: projections["src"],
+                internalProjection: projections["dest"]
+            }),
+            gc_wkt_parts = [
+                "GEOMETRYCOLLECTION(",
+                "POINT(",
+                points["src"].geometry.x,
+                " ",
+                points["src"].geometry.y, 
+                ")",
+                ")"
+            ],
+            feature = format.read( gc_wkt_parts.join("") )[0],
+            gotGeom = feature.geometry,
+            expectGeom = points["dest"].geometry,
+            // we don't use geometry::toString because we might run into 
+            // precision issues
+            precision = 7,
+            got = gotGeom.x.toFixed(precision) + ' ' + gotGeom.y.toFixed(precision),
+            expected = expectGeom.x.toFixed(precision) + ' ' + expectGeom.y.toFixed(precision);
+        
+        t.eq(got, expected, 
             "Geometry collections aren't transformed twice when reprojection.");
     }
     </script> 
diff --git a/tests/Format/WMSCapabilities/v1_1_1.html b/tests/Format/WMSCapabilities/v1_1_1.html
index cc0c784..8309bd7 100644
--- a/tests/Format/WMSCapabilities/v1_1_1.html
+++ b/tests/Format/WMSCapabilities/v1_1_1.html
@@ -14,7 +14,7 @@
     
     function test_read(t) {
         
-        t.plan(23);
+        t.plan(24);
 
         var xml = document.getElementById("gssample").firstChild.nodeValue;
         var doc = new OpenLayers.Format.XML().read(xml);
@@ -80,6 +80,7 @@
         t.eq(capability.layers.length, 22, "correct number of layers parsed");
         
         var layer = capability.layers[2];
+        t.eq(layer.infoFormats, ["text/plain", "text/html", "application/vnd.ogc.gml"], "infoFormats set on layer");
         t.eq(layer.name, "tiger:tiger_roads", "[2] correct layer name");
         t.eq(layer.prefix, "tiger", "[2] correct layer prefix");
         t.eq(layer.title, "Manhattan (NY) roads", "[2] correct layer title");
diff --git a/tests/Format/WMSCapabilities/v1_3_0.html b/tests/Format/WMSCapabilities/v1_3_0.html
index 9d7eecd..7120b8c 100644
--- a/tests/Format/WMSCapabilities/v1_3_0.html
+++ b/tests/Format/WMSCapabilities/v1_3_0.html
@@ -14,7 +14,7 @@
 
     function test_layers(t) {
 
-        t.plan(24);
+        t.plan(25);
 
         var xml = document.getElementById("ogcsample").firstChild.nodeValue;
         var doc = new OpenLayers.Format.XML().read(xml);
@@ -40,7 +40,7 @@
         t.eq(layers["Temperature"].srs,
              {"CRS:84": true},
              "Inheritance of SRS handled correctly when redeclaring an inherited SRS");
-
+        t.eq(layers["Temperature"].infoFormats, ["text/xml", "text/plain", "text/html"], "infoFormats set correctly on layer");
         var bbox = layers["ROADS_RIVERS"].bbox["EPSG:26986"];
         t.eq(bbox.bbox,
              [189000, 834000, 285000, 962000],
diff --git a/tests/Format/WMTSCapabilities/v1_0_0.html b/tests/Format/WMTSCapabilities/v1_0_0.html
index af01d7c..f8b5a37 100644
--- a/tests/Format/WMTSCapabilities/v1_0_0.html
+++ b/tests/Format/WMTSCapabilities/v1_0_0.html
@@ -4,7 +4,7 @@
     <script type="text/javascript">
 
         function test_ows(t) {
-            t.plan(17);
+            t.plan(20);
             var xml = document.getElementById("ogcsample").firstChild.nodeValue;
             var doc = new OpenLayers.Format.XML().read(xml);
             var obj = new OpenLayers.Format.WMTSCapabilities().read(doc);
@@ -30,13 +30,22 @@
 
             // ows:OperationsMetadata
             var operationsMetadata = obj.operationsMetadata;
-            t.eq(operationsMetadata.GetCapabilities.dcp.http.get, "http://www.miramon.uab.es/cgi-bin/MiraMon5_0.cgi?", "ows:OperationsMetadata GetCapabilities url is correct");
-            t.eq(operationsMetadata.GetFeatureInfo.dcp.http.get, "http://www.miramon.uab.es/cgi-bin/MiraMon5_0.cgi?", "ows:OperationsMetadata GetFeatureInfo url is correct");
-            t.eq(operationsMetadata.GetTile.dcp.http.get, "http://www.miramon.uab.es/cgi-bin/MiraMon5_0.cgi?", "ows:OperationsMetadata GetTile url is correct");
+            t.eq(operationsMetadata.GetCapabilities.dcp.http.get[0].url, "http://www.miramon.uab.es/cgi-bin/MiraMon5_0.cgi?", "ows:OperationsMetadata GetCapabilities url is correct");
+            t.eq(operationsMetadata.GetCapabilities.dcp.http.get[0].constraints.GetEncoding.allowedValues,
+                 {'KVP': true},
+                 "ows:OperationsMetadata GetCapabilities Constraints Get is correct");
+            t.eq(operationsMetadata.GetFeatureInfo.dcp.http.get[0].url, "http://www.miramon.uab.es/cgi-bin/MiraMon5_0.cgi?", "ows:OperationsMetadata GetFeatureInfo url is correct");
+            t.eq(operationsMetadata.GetFeatureInfo.dcp.http.get[0].constraints,
+                 undefined,
+                 "ows:OperationsMetadata GetFeatureInfo Constraints Get is correct");
+            t.eq(operationsMetadata.GetTile.dcp.http.get[0].url, "http://www.miramon.uab.es/cgi-bin/MiraMon5_0.cgi?", "ows:OperationsMetadata GetTile url is correct");
+            t.eq(operationsMetadata.GetTile.dcp.http.get[0].constraints,
+                 undefined,
+                 "ows:OperationsMetadata GetTile Constraints Get is correct");
         }
     
         function test_layers(t) {
-            t.plan(25);
+            t.plan(37);
             var xml = document.getElementById("ogcsample").firstChild.nodeValue;
             var doc = new OpenLayers.Format.XML().read(xml);
     
@@ -47,7 +56,7 @@
             t.eq(numOfLayers, 1, "correct count of layers");
 
             var layer = contents.layers[0];
-            t.eq(layer.abstract, "Coastline/shorelines (BA010)", "layer abstract is correct");
+            t.eq(layer['abstract'], "Coastline/shorelines (BA010)", "layer abstract is correct");
             t.eq(layer.identifier, "coastlines", "layer identifier is correct");
             t.eq(layer.title, "Coastlines", "layer title is correct");
 
@@ -61,9 +70,12 @@
             t.eq(layer.styles[0].identifier, "DarkBlue", "style 0 identifier is correct");
             t.eq(layer.styles[0].isDefault, true, "style 0 isDefault is correct");
             t.eq(layer.styles[0].title, "Dark Blue", "style 0 title is correct");
+            t.eq(layer.styles[0].legend.href, "http://www.miramon.uab.es/wmts/Coastlines/coastlines_darkBlue.png", "style 0 legend href is correct");
+            t.eq(layer.styles[0].legend.format, "image/png", "style 0 legend format is correct");
             t.eq(layer.styles[1].identifier, "thickAndRed", "style 1 identifier is correct");
             t.ok(!layer.styles[1].isDefault, "style 1 isDefault is correct");
             t.eq(layer.styles[1].title, "Thick And Red", "style 1 title is correct");
+            t.eq(layer.styles[1].legend, undefined, "style 1 legend is not set");
             //t.eq(layer.styles[1].abstract, "Specify this style if you want your maps to have thick red coastlines. ", "style 1 abstract is correct");
 
             t.eq(layer.tileMatrixSetLinks.length, 1, "correct count of tileMatrixSetLinks");
@@ -83,6 +95,17 @@
             t.eq(layer.resourceUrl.FeatureInfo.format, "application/gml+xml; version=3.1", "resourceUrl.FeatureInfo.format is correct");
             t.eq(layer.resourceUrl.FeatureInfo.template, "http://www.example.com/wmts/coastlines/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{J}/{I}.xml", 
                  "resourceUrl.FeatureInfo.template is correct");
+
+            var dimensions = layer.dimensions;
+            t.eq(dimensions.length, 1, "correct count of dimensions");
+            t.eq(dimensions[0].title, "Time", "first dimension title is correct");
+            t.eq(dimensions[0]['abstract'], "Monthly datasets", "first dimension abstract is correct");
+            t.eq(dimensions[0].identifier, "TIME", "first dimension identifier is correct");
+            t.eq(dimensions[0]['default'], "default", "first dimension default is correct");
+            t.eq(dimensions[0].values.length, 3, "first dimension has correct count of values");
+            t.eq(dimensions[0].values[0], "2007-05", "first value is correct");
+            t.eq(dimensions[0].values[1], "2007-06", "second value is correct");
+            t.eq(dimensions[0].values[2], "2007-07", "third value is correct");
         }
 
         function test_tileMatrixSets(t) {
@@ -271,6 +294,7 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
                 <Value>2007-05</Value>
                 <Value>2007-06</Value>
                 <Value>2007-07</Value>
+                <Default>default</Default>
             </Dimension>
             <TileMatrixSetLink>
                 <TileMatrixSet>BigWorld</TileMatrixSet>
diff --git a/tests/Format/WPSExecute.html b/tests/Format/WPSExecute.html
index 124bd97..112a66b 100644
--- a/tests/Format/WPSExecute.html
+++ b/tests/Format/WPSExecute.html
@@ -413,6 +413,13 @@
     '				<wps:ComplexData><![CDATA[<html><head></head><body></body></head>]]></wps:ComplexData>' +
     '			</wps:Data>' +
     '		</wps:Input>' +
+    '           <wps:Input>' +
+    '                   <ows:Identifier>GMLPoint</ows:Identifier>' +
+    '                   <ows:Title>Point as GML</ows:Title>' +
+    '                   <wps:Data>' +
+    '                           <wps:ComplexData><feature:geometry xmlns:feature="http://www.opengis.net/gml"><feature:Point><feature:pos>10 10</feature:pos></feature:Point></feature:geometry></wps:ComplexData>' +
+    '                   </wps:Data>' +
+    '           </wps:Input>' +
     '	</wps:DataInputs>' +
     '	<wps:ResponseForm>' +
     '		<wps:ResponseDocument storeExecuteResponse="true">' +
@@ -442,6 +449,14 @@
                             value: "<html><head></head><body></body></head>"
                         }
                     }                    
+                }, {
+                    identifier: "GMLPoint",
+                    title: "Point as GML",
+                    data: {
+                        complexData: {
+                            value: OpenLayers.Format.GML.v3.prototype.writers.feature["_geometry"].apply(new OpenLayers.Format.GML.v3({curve: true, surface: true}), [new OpenLayers.Geometry.Point(10, 10)])
+                        }
+                    }
                 }],
                 responseForm: {
                     responseDocument: {
@@ -458,6 +473,65 @@
             t.xml_eq(result, expected, "WPS Execute written out correctly");
         }
 
+        function test_write_WPSExecuteFID(t) {
+            t.plan(1);
+          
+            var result,
+            expected,
+            format = ({geometryName: 'the_geom'});                    
+          
+            expected = '<?xml version="1.0" encoding="UTF-8"?>' +
+                '<wps:Execute xmlns:wps="http://www.opengis.net/wps/1.0.0" version="1.0.0" service="WPS" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
+                '  <ows:Identifier xmlns:ows="http://www.opengis.net/ows/1.1">gs:Bounds</ows:Identifier>' +
+                '  <wps:DataInputs>' +
+                '    <wps:Input>' +
+                '      <ows:Identifier xmlns:ows="http://www.opengis.net/ows/1.1">features</ows:Identifier>' +
+                '      <wps:Reference mimeType="text/xml" xlink:href="http://geoserver/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" method="POST">' +
+                '        <wps:Body>' +
+                '          <wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.0.0">' +
+                '            <wfs:Query typeName="foo:bar">' +
+                '              <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
+                '                <ogc:FeatureId fid="123"/>' +
+                '              </ogc:Filter>' +
+                '            </wfs:Query>' +
+                '          </wfs:GetFeature>' +
+                '        </wps:Body>' +
+                '      </wps:Reference>' +
+                '    </wps:Input>' +
+                '  </wps:DataInputs>' +
+                '  <wps:ResponseForm>' +
+                '    <wps:RawDataOutput>' +
+                '      <ows:Identifier xmlns:ows="http://www.opengis.net/ows/1.1">bounds</ows:Identifier>' +
+                '    </wps:RawDataOutput>' +
+                '  </wps:ResponseForm>' +
+                '</wps:Execute>';
+
+            result = new OpenLayers.Format.WPSExecute().write({
+                identifier: 'gs:Bounds',
+                dataInputs: [{
+                    identifier: 'features',
+                    reference: {
+                        mimeType: 'text/xml',
+                        href: 'http://geoserver/wfs',
+                        method: 'POST',
+                        body: {
+                            wfs: {
+                                featureType: 'foo:bar',
+                                version: '1.0.0',                            
+                                filter: new OpenLayers.Filter.FeatureId({fids: [123]})
+                            }
+                        }
+                    }
+                }],
+                responseForm: {
+                    rawDataOutput: {
+                        identifier: 'bounds'
+                    }
+                }
+            });
+            t.xml_eq(result, expected, 'WPS Execute written out correctly with a FID filter');
+        }
+
     </script>
 </head>
 <body>
diff --git a/tests/Format/XML.html b/tests/Format/XML.html
index 8da8fbf..ff663c3 100644
--- a/tests/Format/XML.html
+++ b/tests/Format/XML.html
@@ -147,7 +147,7 @@
         var uri = "http://foo.com";
         var prefix = "foo";
         var localName = "bar";
-        var qualifiedName = prefix + ":" + name;
+        var qualifiedName = prefix + ":" + localName;
         var node = format.createElementNS(uri, qualifiedName);
         t.eq(node.nodeType, 1,
              "node has correct type");
diff --git a/tests/Geometry.html b/tests/Geometry.html
index f2d801d..e61326d 100644
--- a/tests/Geometry.html
+++ b/tests/Geometry.html
@@ -334,6 +334,19 @@
             t.geom_eq(wkt(cases[i].wkt), cases[i].geom, "case " + i);
         }
     }
+    
+    function test_fromWKT_undefined(t) {
+        t.plan(1);
+        
+        var WKT = OpenLayers.Format.WKT;
+        OpenLayers.Format.WKT = null;
+        delete OpenLayers.Geometry.fromWKT.format;
+        
+        var geom = OpenLayers.Geometry.fromWKT("POINT(1 1)");
+        t.eq(geom, undefined, "undefined when OpenLayers.Format.WKT is not available");
+        
+        OpenLayers.Format.WKT = WKT;
+    }
 
 
   </script>
diff --git a/tests/Geometry/LinearRing.html b/tests/Geometry/LinearRing.html
index 5cacd89..cbbba2a 100644
--- a/tests/Geometry/LinearRing.html
+++ b/tests/Geometry/LinearRing.html
@@ -250,6 +250,110 @@
              "resize correctly adjusts y of component 4");
     }
 
+    function test_containsPoint(t) {
+
+        /**
+         *  The ring:
+         *                      edge 3
+         *          (5, 10)  __________ (15, 10)
+         *                 /         /
+         *        edge 4 /         / edge 2
+         *             /         /
+         *    (0, 0) /_________/ (10, 0)
+         *             edge 1
+         */
+        var components = [
+            new OpenLayers.Geometry.Point(0, 0),
+            new OpenLayers.Geometry.Point(10, 0),
+            new OpenLayers.Geometry.Point(15, 10),
+            new OpenLayers.Geometry.Point(5, 10)
+        ];
+
+        var ring = new OpenLayers.Geometry.LinearRing(components);
+        
+        function p(x, y) {
+            return new OpenLayers.Geometry.Point(x, y);
+        }
+        
+        // contains: 1 (touches), true (within), false (outside)
+        var cases = [{
+            point: p(5, 5), contains: true
+        }, {
+            point: p(20, 20), contains: false
+        }, {
+            point: p(15, 15), contains: false
+        }, {
+            point: p(0, 0), contains: 1 // lower left corner
+        }, {
+            point: p(10, 0), contains: 1 // lower right corner
+        }, {
+            point: p(15, 10), contains: 1 // upper right corner
+        }, {
+            point: p(5, 10), contains: 1 // upper left corner
+        }, {
+            point: p(5, 0), contains: 1 // on edge 1
+        }, {
+            point: p(5, -0.1), contains: false // below edge 1
+        }, {
+            point: p(5, 0.1), contains: true // above edge 1
+        }, {
+            point: p(12.5, 5), contains: 1 // on edge 2
+        }, {
+            point: p(12.4, 5), contains: true // left of edge 2
+        }, {
+            point: p(12.6, 5), contains: false // right of edge 2
+        }, {
+            point: p(10, 10), contains: 1 // on edge 3
+        }, {
+            point: p(10, 9.9), contains: true // below edge 3
+        }, {
+            point: p(10, 10.1), contains: false // above edge 3
+        }, {
+            point: p(2.5, 5), contains: 1 // on edge 4
+        }, {
+            point: p(2.4, 5), contains: false // left of edge 4
+        }, {
+            point: p(2.6, 5), contains: true // right of edge 4
+        }];
+        
+        var len = cases.length;
+        t.plan(len);
+        var c;
+        for (var i=0; i<len; ++i) {
+            c = cases[i];
+            t.eq(ring.containsPoint(c.point), c.contains, "case " + i + ": " + c.point);
+        }
+    }
+    
+    function test_containsPoint_precision(t) {
+
+        /**
+         * The test for linear ring containment was sensitive to failure when
+         * looking for ray crossings on nearly vertical edges.  With a loss
+         * of precision in calculating the x-coordinate for the crossing,
+         * the method would erronously determine that the x-coordinate was
+         * not within the (very narrow) x-range of the nearly vertical edge.
+         * 
+         * The test below creates a polygon whose first vertical edge is 
+         * nearly horizontal.  The test point lies "far" outside the polygon
+         * and we expect the containsPoint method to return false.
+         */
+        
+        t.plan(1);
+
+        var components = [
+            new OpenLayers.Geometry.Point(10000020.000001, 1000000),
+            new OpenLayers.Geometry.Point(10000020.000002, 1000010), // nearly vertical
+            new OpenLayers.Geometry.Point(10000030, 1000010),
+            new OpenLayers.Geometry.Point(10000030, 1000000)
+        ];
+
+        var ring = new OpenLayers.Geometry.LinearRing(components);
+        var point = new OpenLayers.Geometry.Point(10000000, 1000001);
+
+        t.eq(ring.containsPoint(point), false, "false for point outside polygon with nearly vertical edge");
+
+    }
 
   </script>
 </head>
diff --git a/tests/Geometry/Point.html b/tests/Geometry/Point.html
index 9baaf5c..e688250 100644
--- a/tests/Geometry/Point.html
+++ b/tests/Geometry/Point.html
@@ -50,6 +50,21 @@
                         new OpenLayers.Projection("EPSG:900913"));
         t.eq(point.bounds, null, "Point bounds cleared after transform");
     }
+
+    function test_Point_transform_string(t) {
+        t.plan(4);
+
+        var x = 10;
+        var y = 20;
+        point = new OpenLayers.Geometry.Point(x, y);
+        point.calculateBounds();
+        t.ok( point.bounds != null, "bounds calculated by calcBounds" );
+        point.transform("EPSG:4326", "EPSG:900913");
+        t.eq(point.bounds, null, "Point bounds cleared after transform");
+        t.eq(point.x.toFixed(2), "1113194.91", "transformed x");
+        t.eq(point.y.toFixed(2), "2273030.93", "transformed y");
+        
+    }
     
     function test_Point_distanceTo(t) {
         t.plan(7);
@@ -86,6 +101,21 @@
              "toString() returns WKT" );
         
     }
+
+    function test_Point_toString_no_wkt(t) {
+        t.plan(1);
+        
+        var WKT = OpenLayers.Format.WKT;
+        OpenLayers.Format.WKT = null;
+
+        var x = 10;
+        var y = 20;
+        point = new OpenLayers.Geometry.Point(x, y);
+        t.eq(point.toString(), "[object Object]", "default string representation");
+        
+        OpenLayers.Format.WKT = WKT;
+        
+    }
     
     function test_Point_move(t) {
         t.plan(3);
diff --git a/tests/Geometry/Polygon.html b/tests/Geometry/Polygon.html
index 598b688..9f5cd95 100644
--- a/tests/Geometry/Polygon.html
+++ b/tests/Geometry/Polygon.html
@@ -46,6 +46,19 @@
         t.eq(polygon.getBounds().toBBOX(), "556597.453889,334111.171355,1113194.907778,1574216.547942", "Bounds are correct")
     }
 
+    function test_Polygon_transform_string (t) {
+        t.plan(3);
+
+        var components = [new OpenLayers.Geometry.Point(10,14), new OpenLayers.Geometry.Point(5,3)];
+        var linearRing = new OpenLayers.Geometry.LinearRing(components);
+        polygon = new OpenLayers.Geometry.Polygon([linearRing.clone()]);
+        polygon.calculateBounds();
+        t.ok( polygon.bounds != null, "bounds calculated by calcBounds" );
+        polygon.transform("EPSG:4326", "EPSG:900913");
+        t.eq(polygon.bounds, null, "Point bounds cleared after transform");
+        t.eq(polygon.getBounds().toBBOX(), "556597.453889,334111.171355,1113194.907778,1574216.547942", "Bounds are correct")
+    }
+
     function test_Polygon_getArea(t) {
         t.plan( 5 );
 
diff --git a/tests/Geometry/Rectangle.html b/tests/Geometry/Rectangle.html
deleted file mode 100644
index 41dc95a..0000000
--- a/tests/Geometry/Rectangle.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<html>
-<head>
-  <script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    function test_Rectangle_constructor (t) {
-        t.plan( 8 );
-
-      //empty
-        var rect = new OpenLayers.Geometry.Rectangle();
-        t.ok( rect instanceof OpenLayers.Geometry.Rectangle, "new OpenLayers.Geometry.Rectangle returns Rectangle object" );
-        t.eq( rect.CLASS_NAME, "OpenLayers.Geometry.Rectangle", "Rectangle.CLASS_NAME is set correctly");
-        t.ok( rect.id != null, "rect.id is set");
-        t.ok( ! (rect.x || rect.y || rect.width || rect.height), "empty construct leaves properties empty");
-        
-      //good
-        var x = {};
-        var y = {};
-        var w = {};
-        var h = {};
-        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
-        t.eq( rect.x, x, "good init correctly sets x property"); 
-        t.eq( rect.y, y, "good init correctly sets y property"); 
-        t.eq( rect.width, w, "good init correctly sets width property"); 
-        t.eq( rect.height, h, "good init correctly sets height property"); 
-    }
-
-    function test_Rectangle_calculateBounds(t) {
-        t.plan(1);
-        
-        var x = 1;
-        var y = 2;
-        var w = 10;
-        var h = 20;
-        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
-        rect.calculateBounds();
-
-        var testBounds = new OpenLayers.Bounds(x, y, x + w, y + h)
-        
-        t.ok( rect.bounds.equals(testBounds), "calculateBounds works correctly"); 
-    }
-
-    function test_Rectangle_getLength(t) {
-        t.plan(1);
-
-        var x = 1;
-        var y = 2;
-        var w = 10;
-        var h = 20;
-        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
-
-        var testLength = (2 * w) + (2 * h);
-
-        t.eq(rect.getLength(), testLength, "getLength() works");
-    }
-
-    function test_Rectangle_getArea(t) {
-        t.plan(1);
-
-        var x = 1;
-        var y = 2;
-        var w = 10;
-        var h = 20;
-        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
-
-        var testArea = w * h;
-        t.eq(rect.getArea(), testArea, "testArea() works");
-    }
-
-
-
-  </script>
-</head>
-<body>
-</body>
-</html>
diff --git a/tests/Geometry/Surface.html b/tests/Geometry/Surface.html
deleted file mode 100644
index 5efc5c2..0000000
--- a/tests/Geometry/Surface.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<html>
-<head>
-  <script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    function test_Surface_constructor (t) {
-        t.plan( 2 );
-        
-        var g = new OpenLayers.Geometry.Surface();
-        
-        t.eq(g.CLASS_NAME, "OpenLayers.Geometry.Surface", "correct CLASS_NAME")
-        t.ok(OpenLayers.String.startsWith(g.id, "OpenLayers.Geometry.Surface_"),
-             "id correctly set");
-    }
-
-
-
-  </script>
-</head>
-<body>
-</body>
-</html>
diff --git a/tests/Handler/Drag.html b/tests/Handler/Drag.html
index 533e1bb..4be1df9 100644
--- a/tests/Handler/Drag.html
+++ b/tests/Handler/Drag.html
@@ -252,7 +252,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.eventsDiv.id,
+            t.eq(element.id, map.viewPortDiv.id,
                  "mouseout calls Util.mouseLeft with the correct element");
             return true;
         }
diff --git a/tests/Handler/Keyboard.html b/tests/Handler/Keyboard.html
index 947cd99..4a72c92 100644
--- a/tests/Handler/Keyboard.html
+++ b/tests/Handler/Keyboard.html
@@ -42,59 +42,103 @@
     }
 
     function test_Handler_Keyboard_activate(t) {
-        t.plan(8);
+        t.plan(15);
+
+        var log;
         var map = new OpenLayers.Map('map');
         var control = new OpenLayers.Control();
         map.addControl(control);
         var handler = new OpenLayers.Handler.Keyboard(control);
-        handler.active = true;
-        var activated = handler.activate();
-        t.ok(!activated,
-             "activate returns false if the handler was already active");
-        handler.active = false;
-        handler.dragging = true;
+
+        // mock OpenLayers.Event.observe
         var old = OpenLayers.Event.stopObserving;
-        var types = ["keydown", "keyup"];
         OpenLayers.Event.observe = function(obj, type, method) {
-            t.ok(obj == document,
-                 "activate calls observing with correct object");
-            var validType = (OpenLayers.Util.indexOf(types, type) != -1);
+            log[type] = obj;
+            var validType = OpenLayers.Util.indexOf(["keydown", "keyup"], type) != -1;
             t.ok(validType, "activate calls observe for " + type);
             t.ok(method == handler.eventListener,
                  "activate calls observing with correct method");
         };
+
+        handler.active = true;
+        var activated = handler.activate();
+        t.ok(!activated,
+             "activate returns false if the handler was already active");
+
+        log = {};
+        handler.active = false;
+        handler.observeElement = map.div;
+        activated = handler.activate();
+        t.ok(log['keydown'] == map.div,
+             "activate calls observing for keydown with correct object");
+        t.ok(log['keyup'] == map.div,
+             "activate calls observing for keyup with correct object");
+        t.ok(activated,
+             "activate returns true if the handler was not already active");
+
+        log = {};
+        handler.active = false;
+        handler.observeElement = null;
         activated = handler.activate();
+        t.ok(log['keydown'] == document,
+             "activate calls observing for keydown with correct object");
+        t.ok(log['keyup'] == document,
+             "activate calls observing for keyup with correct object");
         t.ok(activated,
              "activate returns true if the handler was not already active");
+
         OpenLayers.Event.observe = old;
-        
+        map.destroy();
     }
 
-    function test_Handler_Drag_deactivate(t) {
-        t.plan(8);
+    function test_Handler_Keyboard_deactivate(t) {
+        t.plan(15);
+
+        var log;
         var map = new OpenLayers.Map('map');
         var control = new OpenLayers.Control();
         map.addControl(control);
         var handler = new OpenLayers.Handler.Keyboard(control);
-        handler.active = false;
-        var deactivated = handler.deactivate();
-        t.ok(!deactivated,
-             "deactivate returns false if the handler was not already active");
-        handler.active = true;
+
+        // mock OpenLayers.Event.stopObserving
         var old = OpenLayers.Event.stopObserving;
-        var types = ["keydown", "keyup"];
         OpenLayers.Event.stopObserving = function(obj, type, method) {
-            t.ok(obj == document,
-                 "deactivate calls stopObserving with correct object");
-            var validType = (OpenLayers.Util.indexOf(types, type) != -1);
+            log[type] = obj;
+            var validType = OpenLayers.Util.indexOf(["keydown", "keyup"], type) != -1;
             t.ok(validType, "deactivate calls stopObserving for " + type);
             t.ok(method == handler.eventListener,
                  "deactivate calls stopObserving with correct method");
         };
+
+        handler.active = false;
+        var deactivated = handler.deactivate();
+        t.ok(!deactivated,
+             "deactivate returns false if the handler was not already active");
+
+        log = {};
+        handler.active = true;
+        handler.observeElement = map.div;
+        deactivated = handler.deactivate();
+        t.ok(log['keydown'] == map.div,
+             "deactivate calls stopObserving for keydown with correct object");
+        t.ok(log['keyup'] == map.div,
+             "deactivate calls stopObserving for keyup with correct object");
+        t.ok(deactivated,
+             "deactivate returns true if the handler was active already");
+
+        log = {};
+        handler.active = true;
+        handler.observeElement = document;
         deactivated = handler.deactivate();
+        t.ok(log['keydown'] == document,
+             "deactivate calls stopObserving for keydown with correct object");
+        t.ok(log['keyup'] == document,
+             "deactivate calls stopObserving for keyup with correct object");
         t.ok(deactivated,
              "deactivate returns true if the handler was active already");
+
         OpenLayers.Event.stopObserving = old;
+        map.destroy();
     }
 
 
diff --git a/tests/Handler/Path.html b/tests/Handler/Path.html
index 3f3ea03..66548d6 100644
--- a/tests/Handler/Path.html
+++ b/tests/Handler/Path.html
@@ -534,6 +534,43 @@
         map.destroy();
     }
 
+    function test_freehand_maxVertices(t) {
+        t.plan(1);
+        var map = new OpenLayers.Map("map", {
+            resolutions: [1]
+        });
+        var layer = new OpenLayers.Layer.Vector("foo", {
+            maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        var control = new OpenLayers.Control({});
+        var log = {};
+        var MAX_VERTICES = 2;
+        var doneCallback = function(geo) {
+            t.eq(geo.components.length, MAX_VERTICES,
+                'When maxVertices is reached, the geometry is finalized automatically');
+        };
+        var handler = new OpenLayers.Handler.Path(control, 
+            {'done': doneCallback}, 
+            {freehand: true, 
+             maxVertices: MAX_VERTICES});
+        control.handler = handler;
+        map.addControl(control);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 0);
+
+        // mock up feature freehand drawing
+        handler.activate();
+        var evt = {xy: new OpenLayers.Pixel(0, 0)};
+        handler.mousemove(evt);
+        handler.mousedown(evt);
+        evt = {xy: new OpenLayers.Pixel(20, 20)};
+        handler.mousemove(evt);
+        evt = {xy: new OpenLayers.Pixel(40, 40)};
+        handler.mousemove(evt);
+        map.destroy();
+    }
+    
     /**
      * Helper functions for editing method tests
      */ 
@@ -1301,6 +1338,107 @@
         
         map.destroy();
     }
+
+    function test_set_freehand(t) {
+        t.plan(5);
+        var map = new OpenLayers.Map("map", {
+            resolutions: [1]
+        });
+        var layer = new OpenLayers.Layer.Vector("foo", {
+            maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        var control = new OpenLayers.Control({});
+
+        var geo, pointsCount;        
+        var handler = new OpenLayers.Handler.Path(control, {
+                done: function(g) {
+                    geo = g;
+                },
+                point: function() {
+                    pointsCount++;
+                }
+            },
+            {freehand: true}
+        );
+        control.handler = handler;
+        map.addControl(control);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 0);
+
+        handler.activate();
+
+        geo = null;
+        pointsCount = 0;
+        // Using mouse events
+        handler.mousemove(
+                {type: "mousemove", xy: new OpenLayers.Pixel(0, 0)});
+        handler.mousedown(
+                {type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
+        handler.mousemove(
+                {type: "mousemove", xy: new OpenLayers.Pixel(1, 1)});
+        handler.mousemove(
+                {type: "mousemove", xy: new OpenLayers.Pixel(2, 2)});
+        handler.mouseup(
+                {type: "mouseup", xy: new OpenLayers.Pixel(2, 2)});
+        t.ok(geo != null, "feature drawn when mouseup");
+        t.eq(pointsCount, 2, "two points have been added");
+
+        handler.deactivate();
+        var geoMouse = geo;
+        
+        handler.activate();
+        
+        geo = null;
+        pointsCount = 0;
+        // Using touch events
+        handler.touchstart(
+                {type: "touchstart", xy: new OpenLayers.Pixel(0, 0)});
+        try {
+            handler.touchmove(
+                    {type: "touchmove", xy: new OpenLayers.Pixel(1, 1)});
+            handler.touchmove(
+                    {type: "touchmove", xy: new OpenLayers.Pixel(2, 2)});
+            handler.touchend(
+                    {type: "touchend"});
+        } catch(err) {
+            t.fail("occurred errors using touch events");
+        }
+        t.ok(geo != null, "feature drawn when touchend");
+        t.eq(pointsCount, 2, "two points have been added");
+        
+        t.geom_eq(geo, geoMouse, 
+            "geometry obtained using the mouse and touch events are the same");
+
+        map.destroy();
+    }
+
+    function test_citeComplaint(t) {
+        t.plan(2);
+        var map = new OpenLayers.Map('map');
+        map.addLayer(new OpenLayers.Layer.OSM());
+        var layer = new OpenLayers.Layer.Vector();
+        map.addLayer(layer);
+        var control = new OpenLayers.Control({});
+        var handler = new OpenLayers.Handler.Path(control, {});
+        control.handler = handler;
+        map.addControl(control);
+        map.zoomToExtent(new OpenLayers.Bounds(-24225034.496992, -11368938.517442, -14206280.326992, -1350184.3474418));
+        handler.activate();
+        handler.createFeature(new OpenLayers.Pixel(100, 50));
+        t.ok(handler.point.geometry.x < 0, "Geometry started correctly when wrapping the dateline using citeCompliant false");
+        control.deactivate();
+
+        handler = new OpenLayers.Handler.Path(control, {}, {citeCompliant: true});
+        control.handler = handler;
+        control.activate();
+        handler.createFeature(new OpenLayers.Pixel(100, 50));
+        t.ok(handler.point.geometry.x > 0, "Geometry started correctly when wrapping the dateline using citeCompliant true");
+        
+        map.destroy();
+    }
+
+
   </script>
 </head>
 <body>
diff --git a/tests/Handler/Polygon.html b/tests/Handler/Polygon.html
index 94e8feb..8fad5dd 100644
--- a/tests/Handler/Polygon.html
+++ b/tests/Handler/Polygon.html
@@ -1128,6 +1128,31 @@
         map.destroy();
     }
 
+    function test_citeComplaint(t) {
+        t.plan(2);
+        var map = new OpenLayers.Map('map');
+        map.addLayer(new OpenLayers.Layer.OSM());
+        var layer = new OpenLayers.Layer.Vector();
+        map.addLayer(layer);
+        var control = new OpenLayers.Control({});
+        var handler = new OpenLayers.Handler.Polygon(control, {});
+        control.handler = handler;
+        map.addControl(control);
+        map.zoomToExtent(new OpenLayers.Bounds(-24225034.496992, -11368938.517442, -14206280.326992, -1350184.3474418));        
+        control.activate();
+        handler.createFeature(new OpenLayers.Pixel(100, 50));
+        t.ok(handler.point.geometry.x < 0, "Geometry started correctly when wrapping the dateline using citeCompliant false");
+        control.deactivate();
+
+        var handler = new OpenLayers.Handler.Polygon(control, {}, {citeCompliant: true});
+        control.handler = handler;
+        control.activate();
+        handler.createFeature(new OpenLayers.Pixel(100, 50));
+        t.ok(handler.point.geometry.x > 0, "Geometry started correctly when wrapping the dateline using citeCompliant true");
+
+        map.destroy();
+    }
+
   </script>
 </head>
 <body>
diff --git a/tests/Handler/RegularPolygon.html b/tests/Handler/RegularPolygon.html
index 3ce9e78..ee43dc7 100644
--- a/tests/Handler/RegularPolygon.html
+++ b/tests/Handler/RegularPolygon.html
@@ -149,9 +149,6 @@
     function test_Handler_RegularPolygon_irregular(t) {
         t.plan(4);
         var map = {
-            getLonLatFromPixel: function(px) {
-                return {lon: px.x, lat: px.y};
-            },
             getResolution: function() {
                 return 1;
             }
@@ -164,6 +161,9 @@
                 t.eq(ring.components[0].y, 10, "correct bottom");
                 t.eq(ring.components[2].x, 10, "correct left");
                 t.eq(ring.components[2].y, 15, "correct top");
+            },
+            getLonLatFromViewPortPx: function(px) {
+                return {lon: px.x, lat: px.y};
             }
         };
         var control = {};
@@ -190,11 +190,7 @@
         t.plan(1);
 
         // setup
-        var map = new OpenLayers.Map("map", {
-            getLonLatFromPixel: function(px) {
-                return {lon: px.x, lat: px.y};
-            }
-        });
+        var map = new OpenLayers.Map("map");
 
         var control = {"map": map};
 
@@ -211,6 +207,17 @@
 
         var isLeftClick = OpenLayers.Event.isLeftClick;
         OpenLayers.Event.isLeftClick = function() { return true; };
+        handler.layer = {
+            renderer: {
+                clear: OpenLayers.Function.Void
+            },
+            addFeatures: OpenLayers.Function.Void,
+            drawFeature: OpenLayers.Function.Void,
+            destroyFeatures: OpenLayers.Function.Void,
+            getLonLatFromViewPortPx: function() {
+                return xy;
+            }
+        };
 
         // test
         map.events.triggerEvent("mousedown", {"xy": xy});
diff --git a/tests/Kinetic.html b/tests/Kinetic.html
index 6ef01ce..ba50b53 100644
--- a/tests/Kinetic.html
+++ b/tests/Kinetic.html
@@ -16,9 +16,11 @@
 
         var originalGetTime = Date.prototype.getTime;
         Date.prototype.getTime = function() { return 0 };
+        
+        var interval = 10; // arbitrary value for tests 
 
-        var originalSetInterval = window.setInterval;
-        window.setInterval = function(callback, interval) {
+        var originalLoopAnimation = OpenLayers.Animation.start;
+        OpenLayers.Animation.start = function(callback) {
             while (!finish) {
                 var time = new Date().getTime();
                 Date.prototype.getTime = function() { return time+interval };
@@ -49,7 +51,7 @@
         });
         
         Date.prototype.getTime = originalGetTime;
-        window.setInterval = originalSetInterval;
+        OpenLayers.Animation.start = originalLoopAnimation;
     }
 
     function test_Angle (t) {
diff --git a/tests/Layer.html b/tests/Layer.html
index 92976c6..b732de9 100644
--- a/tests/Layer.html
+++ b/tests/Layer.html
@@ -197,6 +197,39 @@
         t.eq(layer.numZoomLevels, numZoomLevels, "numZoomLevels set correctly");
     }
     
+    function test_maxExtent(t) {
+        t.plan(5);
+        
+        var layer = new OpenLayers.Layer(
+            null, {maxExtent: [-180, 0, 0, 90]}
+        );
+        
+        t.ok(layer.maxExtent instanceof OpenLayers.Bounds, "(array) bounds instance");
+        t.eq(layer.maxExtent.left, -180, "(array) bounds left");
+        t.eq(layer.maxExtent.bottom, 0, "(array) bounds left");
+        t.eq(layer.maxExtent.right, 0, "(array) bounds right");
+        t.eq(layer.maxExtent.top, 90, "(array) bounds top");
+        
+        layer.destroy();
+    }
+
+    function test_minExtent(t) {
+        t.plan(5);
+        
+        var layer = new OpenLayers.Layer(
+            null, {minExtent: [-180, 0, 0, 90]}
+        );
+        
+        t.ok(layer.minExtent instanceof OpenLayers.Bounds, "(array) bounds instance");
+        t.eq(layer.minExtent.left, -180, "(array) bounds left");
+        t.eq(layer.minExtent.bottom, 0, "(array) bounds left");
+        t.eq(layer.minExtent.right, 0, "(array) bounds right");
+        t.eq(layer.minExtent.top, 90, "(array) bounds top");
+        
+        layer.destroy();
+    }
+
+
     function test_eventListeners(t) {
         t.plan(1);
         
@@ -235,10 +268,10 @@
         map.destroy();
 
         map = new OpenLayers.Map("map");
-        layer = new OpenLayers.Layer("test", {projection: "EPSG:4326"});
+        layer = new OpenLayers.Layer("test", {projection: "unknown"});
         map.addLayer(layer);
         t.eq(layer.alwaysInRange, true,
-             "alwaysInRange true if only get projection.");
+             "alwaysInRange true if unknown projection is set.");
         map.destroy();
 
         map = new OpenLayers.Map("map");
@@ -365,6 +398,9 @@
             "1.20",  null, {maxScale: 100000, numZoomLevels: 3, units: "m"},
             [141.11103491115225, 70.55551745557612, 35.27775872778806], 35.27775872778806, 141.11103491115225
         ], [
+            "1.21", null, {numZoomLevels: 2},  // maxResolution calculated based on the projection's maxExtent here
+           [1.40625, 0.703125], 0.703125, 1.40625
+        ], [
 
         /*
          * Batch 2: custom map options map and sensible layer options
@@ -508,8 +544,8 @@
         /*
          * Batch 2.8: numZoomLevels set in the layer options
          */
-            "2.8.0",  {maxResolution: 80}, {numZoomLevels: 4},
-            [80, 40, 20, 10], 10, 80
+            "2.8.0",  {maxResolution: 80}, {numZoomLevels: 4},  // maxResolution calculated based on the projection's maxExtent here
+            [1.40625, 0.703125, 0.3515625, 0.17578125], 0.17578125, 1.40625
         ], [
             "2.8.1", {maxResolution: 80, numZoomLevels: 4}, {numZoomLevels: null},
             [80, 40, 20, 10], 10, 80
@@ -668,7 +704,7 @@
     }
       
     function test_layer_setTileSize(t) {
-        t.plan(6);
+        t.plan(4);
 
         layer = new OpenLayers.Layer();
         
@@ -688,7 +724,6 @@
         var size = new OpenLayers.Size(2,2);
         layer.setTileSize(size);
         t.ok(layer.tileSize.equals(size), "size paramater set correctly to layer's tile size");
-        t.ok(layer.imageOffset == null, "imageOffset and imageSize null when no gutters")
       
       //set on layer
         layer.tileSize = layerTileSize;
@@ -707,10 +742,8 @@
         size = new OpenLayers.Size(10,100);
         layer.setTileSize(size);
 
-        var desiredImageOffset = new OpenLayers.Pixel(-15, -15); 
         var desiredImageSize = new OpenLayers.Size(40, 130); 
 
-        t.ok(layer.imageOffset.equals(desiredImageOffset), "image offset correctly calculated");
         t.ok(layer.imageSize.equals(desiredImageSize), "image size correctly calculated");
     }
     
diff --git a/tests/Layer/ArcGIS93Rest.html b/tests/Layer/ArcGIS93Rest.html
index a8ff410..0e11ad7 100644
--- a/tests/Layer/ArcGIS93Rest.html
+++ b/tests/Layer/ArcGIS93Rest.html
@@ -4,6 +4,9 @@
     <script type="text/javascript">window.alert = oldAlert;</script>
 <script src="../OLLoader.js"></script>
   <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+    
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var layer; 
 
@@ -72,20 +75,15 @@
         tParams = OpenLayers.Util.extend(tParams, {
             FORMAT: "png", BBOX: "1,2,3,4", SIZE: "256,256", F: "image", BBOXSR: "4326", IMAGESR: "4326"
         });
-        t.eq( img.src,
+        t.eq( tile.url,
              url + "?" + OpenLayers.Util.getParameterString(tParams),
              "image src is created correctly via addtile" );
-        t.eq( tile.frame.style.top, "6px", "image top is set correctly via addtile" );
-        t.eq( tile.frame.style.left, "5px", "image top is set correctly via addtile" );
-
-        var firstChild = layer.div.firstChild.firstChild;
-        if (!isMozilla)
-            t.ok( true, "skipping element test outside of Mozilla");
-        else
-            t.ok( firstChild instanceof HTMLElement, "div first child is an image object" );
-        t.eq( firstChild.src,
-             url + "?" + OpenLayers.Util.getParameterString(tParams),
-             "div first child is correct image object" );
+        t.eq( tile.getTile().style.top, "6%", "image top is set correctly via addtile" );
+        t.eq( tile.getTile().style.left, "5%", "image top is set correctly via addtile" );
+
+        var firstChild = layer.div.firstChild;
+        t.eq( firstChild.nodeName.toLowerCase(), "img", "div first child is an image object" );
+        t.ok( firstChild == img, "div first child is correct image object" );
         t.eq( tile.position.toString(), "x=5,y=6", "Position of tile is set correctly." );
         map.destroy();
     }
@@ -195,31 +193,6 @@
  
     }
 
-    function test_Layer_AGS93_setOpacity (t) {
-        var params = {layers: "show:0,2"};
-        t.plan( 5 );
-
-        var map = new OpenLayers.Map('map');
-        map.projection = "xx";
-        tParams = { layers: 'show:0,2', 
-                   format: 'png'};
-        tOptions = { 'opacity': '0.5' };           
-        var tLayer = new OpenLayers.Layer.ArcGIS93Rest(name, url, tParams, tOptions);
-        map.addLayer(tLayer);
-        map.zoomToMaxExtent();
-        t.eq(tLayer.opacity, "0.5", "Opacity is set correctly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.5, "Opacity on tile is correct");
-        tLayer.setOpacity("0.6");
-        t.eq(tLayer.opacity, "0.6", "setOpacity works properly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.6, "Opacity on tile is changed correctly");
-        var pixel = new OpenLayers.Pixel(5,6);
-        var tile = tLayer.addTile(new OpenLayers.Bounds(1,2,3,4), pixel);
-        tile.draw();
-        t.eq(parseFloat(tile.imgDiv.style.opacity), 0.6, "Tile opacity is set correctly");
-
-        map.destroy();
-    }    
-    
     function test_Layer_AGS93_noGutters (t) { 
         t.plan(2);
         var map = new OpenLayers.Map('map');
@@ -302,55 +275,46 @@
         var encodingHack = document.createElement("img");
         
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src no filter" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src no filter" );
         
         layer.setLayerFilter('1', "MR_TOAD = 'FLYING'");
         tParams["LAYERDEFS"] = "1:MR_TOAD = 'FLYING';";
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src one filter" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src one filter" );
 
         layer.setLayerFilter('1', "MR_TOAD = 'NOT FLYING'");
         tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';";
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src change one filter" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src change one filter" );
 
         layer.setLayerFilter('2', "true = false");
         tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';2:true = false;";
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src two filters" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src two filters" );
 
         layer.setLayerFilter('99', "some_col > 5");
         tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';2:true = false;99:some_col > 5;";
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src three filters" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src three filters" );
         
         layer.clearLayerFilter('2');
         tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';99:some_col > 5;";
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src removed middle filter" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src removed middle filter" );
         
         layer.clearLayerFilter('2');
         tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';99:some_col > 5;";
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src removed missing filter (no change)" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src removed missing filter (no change)" );
         
         layer.clearLayerFilter();
         delete tParams["LAYERDEFS"];
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src removed all filters" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src removed all filters" );
         
         layer.clearLayerFilter();
         tile.draw();
-        encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
-        t.eq( tile.imgDiv.src, encodingHack.src, "image src removed all (no) filters" );
+        t.eq( tile.url, url + "?" + OpenLayers.Util.getParameterString(tParams), "image src removed all (no) filters" );
     }
     
     
diff --git a/tests/Layer/ArcGISCache.html b/tests/Layer/ArcGISCache.html
index d1ae00e..0b54464 100644
--- a/tests/Layer/ArcGISCache.html
+++ b/tests/Layer/ArcGISCache.html
@@ -53,7 +53,8 @@
         //initialize the layer using the JSON object from an arcgis server
         //SEE: ArcGISCache.json
         var layer = new OpenLayers.Layer.ArcGISCache(name, url, {
-            layerInfo: layerInfo
+            layerInfo: layerInfo,
+            params: {foo: "bar"}
         });
         var map = new OpenLayers.Map('map', { 
             maxExtent: layer.maxExtent,
@@ -98,14 +99,14 @@
             }
         ];
         
-        t.plan( urlSets.length );        
+        t.plan( urlSets.length );
         for(var i=0;i<urlSets.length;i++) 
         {
             var o = urlSets[i];            
             map.zoomToExtent(o.bounds, true);
             
             var resultUrl = layer.getURL(o.bounds);            
-            t.ok( resultUrl == o.url, "correct tile returned for " + o.bounds);        
+            t.ok( resultUrl == o.url + "?foo=bar", "correct tile returned for " + o.bounds);        
         }
     }    
     
diff --git a/tests/Layer/Bing.html b/tests/Layer/Bing.html
index 5e616f5..a55d2eb 100644
--- a/tests/Layer/Bing.html
+++ b/tests/Layer/Bing.html
@@ -41,7 +41,7 @@
         var origProcessMetadata = OpenLayers.Layer.Bing.processMetadata;
         OpenLayers.Layer.Bing.processMetadata = function(metadata) {
             meta.push(metadata);
-        }
+        };
         map = new OpenLayers.Map("map");
         layer = new OpenLayers.Layer.Bing(options);
         var extent;
@@ -99,6 +99,41 @@
         });
     }
 
+    function test_attribution_notempty(t) {
+        t.plan(1);
+        
+        var log = [];
+        var map = new OpenLayers.Map("map");
+        layer = new OpenLayers.Layer.Bing(OpenLayers.Util.applyDefaults({type: 'Road'}, options));
+        map.addLayer(layer);
+        var format = OpenLayers.String.format;
+        OpenLayers.String.format = function(tpl, options) {
+            log.push(options.copyrights);
+        }
+        map.zoomToExtent(new OpenLayers.Bounds(-14768652, 4492113, -12263964, 5744457));
+        t.delay_call(2, function() {
+            t.ok(log.join("") !== "", "Copyright not empty");
+            OpenLayers.String.format = format;
+            map.destroy();
+        });
+    }
+    
+    function test_getXYZ(t) {
+        t.plan(1);
+        
+        var map = new OpenLayers.Map("map", {allOverlays: true});
+        var osm = new OpenLayers.Layer.OSM();
+        map.addLayer(osm);
+        map.zoomToExtent(new OpenLayers.Bounds(11373579,-2445208,13628777,680760));
+        layer = new OpenLayers.Layer.Bing(options);
+        map.addLayer(layer);
+        
+        t.delay_call(2, function() {
+            var xyz = layer.getXYZ(layer.getTileBounds(new OpenLayers.Pixel(1,1)));
+            t.eq(xyz.z, OpenLayers.Util.indexOf(layer.serverResolutions, map.getResolution()), "zoom level correct");
+        });
+    }
+
     function test_clone(t) {
         t.plan(1);
         
diff --git a/tests/Layer/EventPane.html b/tests/Layer/EventPane.html
index f846614..8d8e180 100644
--- a/tests/Layer/EventPane.html
+++ b/tests/Layer/EventPane.html
@@ -94,9 +94,9 @@
         if (document.createEvent) { // Mozilla
             var evObj = document.createEvent('MouseEvents');
             evObj.initEvent('mousemove', true, false);
-            map.eventsDiv.dispatchEvent(evObj);
+            map.viewPortDiv.dispatchEvent(evObj);
         } else if(document.createEventObject) { // IE
-            map.eventsDiv.fireEvent('onmousemove');
+            map.viewPortDiv.fireEvent('onmousemove');
         }
         
         t.eq(log.length, 1, "got one event");
diff --git a/tests/Layer/GML.html b/tests/Layer/GML.html
deleted file mode 100644
index 3a4b2d9..0000000
--- a/tests/Layer/GML.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<html>
-<head>
-<script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    var name = "GML Layer";
-    
-    var gml = "./owls.xml";
-    var gml2 = "./mice.xml";
-
-    // if this test is running online, different rules apply
-    var isMSIE = (navigator.userAgent.indexOf("MSIE") > -1);
-    if (isMSIE) {
-        gml = "." + gml;
-        gml2 = "." + gml2;
-    }
-    
-    function test_Layer_GML_constructor(t) {
-        t.plan(3);
-
-        var layer = new OpenLayers.Layer.GML(name);
-        t.ok(layer instanceof OpenLayers.Layer.GML, "new OpenLayers.Layer.GML returns correct object" );
-        t.eq(layer.name, name, "layer name is correctly set");
-        t.ok(layer.renderer.CLASS_NAME, "layer has a renderer");
-
-    }
-    function test_Layer_GML_events(t) {
-        t.plan(3);
-
-        var layer = new OpenLayers.Layer.GML(name, gml, {isBaseLayer: true});
-        layer.events.register("loadstart", layer, function() { 
-            t.ok(true, "loadstart called.")
-        });
-        layer.events.register("loadend", layer, function() { 
-            t.ok(true, "loadend called.")
-        });
-        var map = new OpenLayers.Map("map");
-        map.addLayer(layer);
-        map.zoomToMaxExtent();
-        t.delay_call(3, function() { 
-            t.ok(true, "waited for 3s"); 
-        });
-
-    }
-    function test_GML_setUrl(t) {
-        t.plan(2);
-        var layer = new OpenLayers.Layer.GML(name, gml);
-        var map = new OpenLayers.Map("map");
-        map.addLayer(layer);
-        t.eq(layer.url, gml, "layer has correct original url");
-        layer.setUrl(gml2);
-        t.eq(layer.url, gml2, "layer has correctly changed url");
-    }
-  </script>
-</head>
-<body>
-<div id="map" style="width:500px;height:550px"></div>
-</body>
-</html>
-
diff --git a/tests/Layer/Google.html b/tests/Layer/Google.html
index c826ef4..3b9b2cb 100644
--- a/tests/Layer/Google.html
+++ b/tests/Layer/Google.html
@@ -196,9 +196,9 @@
             { controls: [] , 'numZoomLevels':20});
     
             var satellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_SATELLITE_MAP, 'maxZoomLevel':18} );
-            var layer = new OpenLayers.Layer.WMS.Untiled( "OpenLayers WMS", 
+            var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
                     "http://labs.metacarta.com/wms/vmap0", {layers: 'basic', 'transparent':true}, 
-                      {isBaseLayer: false} );
+                      {isBaseLayer: false, singleTile: true} );
     
             map.addLayers([satellite, layer]);
             map.setCenter(new OpenLayers.LonLat(10.205188,48.857593), 5);
diff --git a/tests/Layer/Google/v3.html b/tests/Layer/Google/v3.html
index f2dcbe3..a90f8f4 100644
--- a/tests/Layer/Google/v3.html
+++ b/tests/Layer/Google/v3.html
@@ -1,6 +1,6 @@
 <html>
 <head>
-    <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
+    <script src="http://maps.google.com/maps/api/js?sensor=false&v=3.6"></script>
     <script src="../../OLLoader.js"></script>
     <script type="text/javascript">
 
@@ -65,11 +65,7 @@
     //  works correctly both ways.
        var gLatLng = new google.maps.LatLng(50,100);
        // v3 uses sphericalMercator by default
-       var correspondingOLLonLat = new OpenLayers.LonLat(100,50).transform(
-           new OpenLayers.Projection("EPSG:4326"),
-           map.getProjectionObject()
-       );
-    
+       var correspondingOLLonLat = layer.forwardMercator(100, 50);
     
        olLonLat = layer.getOLLonLatFromMapObjectLonLat(gLatLng);
        t.ok(olLonLat.equals(correspondingOLLonLat), "Translation from GLatLng to OpenLayers.LonLat works");
@@ -146,9 +142,9 @@
         { controls: [] , 'numZoomLevels':20});
     
         var satellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: google.maps.MapTypeId.SATELLITE, 'maxZoomLevel':18} );
-        var layer = new OpenLayers.Layer.WMS.Untiled( "OpenLayers WMS", 
+        var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
                 "http://labs.metacarta.com/wms/vmap0", {layers: 'basic', 'transparent':true}, 
-                  {isBaseLayer: false} );
+                  {isBaseLayer: false, singleTile: true, displayOutsideMaxExtent: true} );
     
         map.addLayers([satellite, layer]);
         map.setCenter(new OpenLayers.LonLat(10.205188,48.857593), 5);
diff --git a/tests/Layer/Grid.html b/tests/Layer/Grid.html
index a4dbcee..981ccb4 100644
--- a/tests/Layer/Grid.html
+++ b/tests/Layer/Grid.html
@@ -2,14 +2,16 @@
 <head>
   <script src="../OLLoader.js"></script>
   <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    var origQueueTileDraw = OpenLayers.Layer.Grid.prototype.queueTileDraw;
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var layer; 
 
     var name = 'Test Layer';
-    var url = "http://octo.metacarta.com/cgi-bin/mapserv";
-    var params = { map: '/mapdata/vmap_wms.map', 
-                   layers: 'basic', 
-                   format: 'image/png'};
+    var url = "http://vmap0.tiles.osgeo.org/wms/vmap0";
+    var params = {layers: 'basic', format: 'image/png'};
 
     /**
      *  NOTE TO READER:
@@ -22,7 +24,7 @@
      */
 
 
-    function test_Layer_Grid_constructor (t) {
+    function test_constructor (t) {
         t.plan( 8 );
                        
         layer = new OpenLayers.Layer.Grid(name, url, params, null);
@@ -30,11 +32,9 @@
         t.eq( layer.buffer, 0, "buffer default is 0");
         t.eq( layer.ratio, 1.5, "ratio default is 1.5");
         t.eq( layer.numLoadingTiles, 0, "numLoadingTiles starts at 0");
-        t.ok( layer.events.listeners["tileloaded"] != null, "'tileloaded' event added to layer's event types");
-        t.ok( OpenLayers.Util.indexOf(layer.events.eventTypes, 'tileloaded') != -1 ,"'tileloaded' event added to layer's event types");
-
-        //regression testing for #1502
-        t.ok( layer.events.listeners['tileloaded'].length == 0, "no listeners for tileloaded preregister");        
+        t.ok( layer.tileClass === OpenLayers.Tile.Image, "tileClass default is OpenLayers.Tile.Image");
+        t.eq( layer.className, 'olLayerGrid', "className default is olLayerGrid");
+        t.eq( layer.removeBackBufferDelay, 2500, "removeBackBufferDelay default is 2500");
 
         var obj = {};
         var func = function() {};
@@ -43,6 +43,32 @@
         t.ok( layer.events.listeners['tileloaded'].length == 1, "one listener for tileloaded after register");        
     }
 
+    function test_constructor_singleTile(t) {
+        t.plan(2);
+        layer = new OpenLayers.Layer.Grid(name, url, params, {singleTile: true});
+        t.eq( layer.className, 'olLayerGridSingleTile', "className default is olLayerGridSingleTile");
+        t.eq( layer.removeBackBufferDelay, 0, "removeBackBufferDelay default is 0");
+    }
+
+    function test_setMap(t) {
+        t.plan(1);
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.Grid(name, url, params, null);
+        map.addLayer(layer);
+        t.ok(OpenLayers.Element.hasClass(layer.div, "olLayerGrid"),
+             "olLayerGrid class assigned to layer div");
+        map.destroy();
+    }
+
+    function test_setMap_singleTile(t) {
+        t.plan(1);
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.Grid(name, url, params, {singleTile: true});
+        map.addLayer(layer);
+        t.ok(OpenLayers.Element.hasClass(layer.div, "olLayerGridSingleTile"),
+             "olLayerGridSingleTile class assigned to layer div");
+        map.destroy();
+    }
 
     function test_Layer_Grid_inittiles (t) {
         t.plan( 2 );
@@ -55,8 +81,47 @@
         
     }
 
-    function test_Layer_Grid_clearTiles (t) {
+    function test_Layer_Grid_tileClass(t) {
+        t.plan(2);
+
+        var myTileClass = OpenLayers.Class(OpenLayers.Tile, {});
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.WMS(name, url, params, {
+            tileClass: myTileClass
+        });
+        map.addLayer(layer);
+
+        t.ok(layer.tileClass === myTileClass, "tileClass is set");
+        var instance = layer.addTile(new OpenLayers.Bounds(-10, 10, 50, 100),
+                                     new OpenLayers.Pixel(10, 12));
+
+        t.ok(instance instanceof myTileClass, "addTile returns type is correct");
+
+        map.destroy();
+    }
+    
+    function test_queueTileDraw(t) {
         t.plan(3);
+        OpenLayers.Layer.Grid.prototype.queueTileDraw = origQueueTileDraw;
+
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.WMS(name, url, params);
+        map.addLayer(layer);
+        map.setCenter([0, 0], 3);
+        var queued = layer.tileQueue.length;
+        t.ok(layer.tileQueue.length, "Tiles queued for drawing");
+        map.zoomIn();
+        t.eq(layer.tileQueue.length, queued, "Tile queue has same length after immediate zoom change");
+        t.delay_call(1, function() {
+            t.eq(layer.tileQueue.length, 0, "Tiles from queue processed");
+        });
+        
+        map.destroy();
+        delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+    }
+
+    function test_Layer_Grid_clearTiles (t) {
+        t.plan(4);
 
         var map = new OpenLayers.Map('map');
         layer = new OpenLayers.Layer.WMS(name, url, params);
@@ -92,6 +157,7 @@
         t.ok( layer.grid != null, "layer.grid does not get nullified" );
         t.eq(tilesDeleted, numTiles, "all tiles destroy()ed properly");
         t.ok(allTilesUnhooked, "all tiles unhooked before being destroyed");
+        t.eq(layer.gridResolution, null, "gridResolution set to null");
 
         OpenLayers.Tile.Image.prototype.destroy =
             OpenLayers.Tile.Image.prototype._destroy;
@@ -100,14 +166,14 @@
 
 
     function test_Layer_Grid_getTilesBounds(t) {
-        t.plan( 4 );
+        t.plan(4);
 
         layer = new OpenLayers.Layer.WMS(name, url, params);
 
 
     //normal grid
-        var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
-        var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
+        var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
+        var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
         layer.grid = [ [6, tr], 
                        [bl, 7]];
 
@@ -116,10 +182,6 @@
         
         t.ok( bounds.equals(testBounds), "getTilesBounds() returns correct bounds");
         
-        var bounds = layer.getGridBounds();
-        
-        t.ok( bounds.equals(testBounds), "getGridBounds() wrapper works the same as getTilesBounds.");
-
     //no tiles
         layer.grid = [];
         bounds = layer.getTilesBounds();
@@ -133,6 +195,16 @@
         bounds = layer.getTilesBounds();
         
         t.ok( bounds.equals(testBounds), "getTilesBounds() returns correct bounds");
+    
+    //world wrapped around the dateline
+        var bl = { bounds: new OpenLayers.Bounds(0,-90,180,90)};
+        var tr = { bounds: new OpenLayers.Bounds(-180,-90,0,90)};
+        layer.grid = [[bl, tr]];
+
+        var bounds = layer.getTilesBounds();
+        var testBounds = new OpenLayers.Bounds(0,-90,360,90);
+    
+        t.ok( bounds.equals(testBounds), "getTilesBounds() returns correct bounds");
         
     }
 
@@ -169,12 +241,36 @@
     
     function test_Layer_Grid_moveTo(t) {
 
-    t.plan(14);
+        t.plan(17);
+
+        var origIsNative = OpenLayers.Animation.isNative;
+        OpenLayers.Animation.isNative = false;
 
         var map = new OpenLayers.Map('map');
         layer = new OpenLayers.Layer.WMS(name, url, params);
         layer.destroy = function() {}; //we're going to do funky things with the grid
+        layer.applyBackBuffer = function() {}; // backbuffering isn't under test here
         map.addLayer(layer);
+        map.setCenter([-10, 0], 5);
+        
+        var log = [];
+        var origDeferMoveGriddedTiles = layer.deferMoveGriddedTiles;
+        layer.deferMoveGriddedTiles = function() {
+            log.push("deferMoveGriddedTiles");
+            origDeferMoveGriddedTiles.apply(this, arguments);
+        };
+        layer.moveGriddedTiles = function() {
+            log.push("moveGriddedTiles");
+            OpenLayers.Layer.WMS.prototype.moveGriddedTiles.apply(this, arguments);
+        };
+        map.moveTo([5, 0]);
+        t.eq(log[0], "moveGriddedTiles", "deferred after moveTo");
+        map.moveTo([0, 0]);
+        t.eq(log[1], "moveGriddedTiles", "deferred again after another moveTo");
+        t.eq(log.length, 2, "no tiles loaded yet");
+        t.delay_call(1, function() {
+            t.eq(log[2], "deferMoveGriddedTiles", "tiles moved after tileLoadingDelay");
+        });
 
     //make sure null bounds doesnt cause script error. 
     // no test necessary, just action
@@ -183,7 +279,6 @@
         layer.moveTo(); //checks to make sure null bounds doesnt break us
   
 
-
       //observing globals
         layer.initSingleTile = function(bounds) {
             g_WhichFunc = "InitSingle";
@@ -193,10 +288,13 @@
             g_WhichFunc = "InitGridded";
             g_Bounds = bounds;
         };
-        layer._moveGriddedTiles = function() {
+        layer.moveGriddedTiles = function() {
             g_WhichFunc = "MoveGridded";
             g_Bounds = layer.map.getExtent();
         };
+        layer.deferMoveGriddedTiles = function() {
+            g_WhichFunc = "DeferMoveGridded";
+        }
         var clearTestBounds = function() {
             g_WhichFunc = null;
             g_Bounds = null;
@@ -286,26 +384,25 @@
 
   
    //gridded
-        layer.grid = [ [ {} ] ];
+        layer.grid = [ [ {position: new OpenLayers.Pixel(0,0)} ] ];
         layer.singleTile = false;
         
+        //regular move 
+        clearTestBounds();
+        tilesBounds = new OpenLayers.Bounds(10,10,120,120);
+        g_WhichFunc = null;
+        layer.moveTo(null, zoomChanged);
+        t.eq(g_WhichFunc, "MoveGridded", "if tiles not drastically out of bounds, we call moveGriddedTile()");
+        t.ok(g_Bounds.equals(b), "if tiles not drastically out of bounds, we call moveGriddedTile() with correct bounds");
+
         // drastic pan
         clearTestBounds();
         tilesBounds = new OpenLayers.Bounds(-150,-150,-120,-120);
         layer.moveTo(null, zoomChanged);
         t.ok(g_WhichFunc == "InitGridded", "if tiles drastically out of bounds, we call initGriddedTile()");
         t.ok(g_Bounds.equals(b), "if tiles drastically out of bounds, we call initGriddedTile() with correct bounds");
-       
-        //regular move 
-        clearTestBounds();
-        tilesBounds = new OpenLayers.Bounds(10,10,120,120);
-        g_WhichFunc = null;
-        layer.moveTo(null, zoomChanged);
-        t.eq(g_WhichFunc, null, "moveGriddedTiles is delayed - not called yet");
-        t.delay_call(0.2, function() {
-            t.ok(g_WhichFunc == "MoveGridded", "if tiles not drastically out of bounds, we call moveGriddedTile()");
-            t.ok(g_Bounds.equals(b), "if tiles not drastically out of bounds, we call moveGriddedTile() with correct bounds");
-        });
+
+        OpenLayers.Animation.isNative = origIsNative;
     }
 
     /** THIS WOULD BE WHERE THE TESTS WOULD GO FOR 
@@ -324,7 +421,7 @@
      */
 
     function test_Layer_Grid_clone(t) {
-        t.plan(5);
+        t.plan(7);
         
         var options = {tileSize: new OpenLayers.Size(500,50)};
         var map = new OpenLayers.Map('map', options);
@@ -338,6 +435,9 @@
 
         t.ok( clone.grid != layer.grid, "clone does not copy grid");
         t.ok( clone.grid.length == 0, "clone creates a new array instead");
+        
+        t.ok(clone.tileQueue !== layer.tileQueue, "new tileQueue for clone");
+        t.eq(clone.backBuffer, null, "no backbuffer from original");
 
         t.ok( clone.tileSize.equals(layer.tileSize), "tileSize correctly cloned");
 
@@ -395,8 +495,10 @@
         translatedPX = {};
         layer.map = {
             getLayerPxFromLonLat: function(ul) {
-                t.ok(ul.equals(desiredUL), "correct ul passed to translation");
+                t.ok(ul.lon === desiredUL.lon && ul.lat === desiredUL.lat, "correct ul passed to translation");
                 return translatedPX;        
+            },
+            getResolution: function() {
             }
         }
 
@@ -435,12 +537,12 @@
     }  
      
     function test_Layer_Grid_addTileMonitoringHooks(t) {
-        t.plan(14);
+        t.plan(18);
         
         layer = new OpenLayers.Layer.Grid();
         layer.events = {
-            'triggerEvent': function(str) {
-                g_events.push(str); 
+            'triggerEvent': function(str, evt) {
+                g_events.push([str, evt]);
             }
         }
                 
@@ -448,6 +550,13 @@
             events: {
                 register: function(name, obj, func) {
                     g_registered[name] = [obj, func];
+                },
+                on: function(obj) {
+                    for (var o in obj) {
+                        if (obj.hasOwnProperty(o)) {
+                            tile.events.register(o, obj.scope, obj[o]);
+                        }
+                    }
                 }
             }
         }
@@ -466,12 +575,13 @@
         g_events = [];
         tile.onLoadStart.apply(layer);
 
-        t.eq(g_events[0], "loadstart", "loadstart event triggered when numLoadingTiles is 0");
+        t.eq(g_events[0][0], "loadstart", "loadstart event triggered when numLoadingTiles is 0");
         t.eq(layer.numLoadingTiles, 1, "numLoadingTiles incremented");
+        t.eq(g_events[1][0], "tileloadstart", "tileloadstart event triggered");
 
         g_events = [];
         tile.onLoadStart.apply(layer);
-        t.eq(g_events.length, 0, "loadstart event not triggered when numLoadingTiles is not 0");
+        t.eq(g_events.length, 1, "tileloadstart, but not loadstart triggered when numLoadingTiles is not 0");
         t.eq(layer.numLoadingTiles, 2, "numLoadingTiles incremented");
 
 
@@ -480,18 +590,25 @@
         entry = g_registered["loadend"];
         t.ok( entry && entry[0] == layer && entry[1] == tile.onLoadEnd, "loadend correctly registered");
         
+        g_events = [];
+        tile.onLoadError.apply(layer);
+        t.eq(g_events[0][0], "tileerror", "tileerror triggered");
+        t.ok(g_events[0][1].tile === tile, "tile passed as tile property to event object");
+        
         layer.numLoadingTiles = 2; 
         g_events = [];
         tile.onLoadEnd.apply(layer);
-        t.eq(g_events[0], "tileloaded", "tileloaded triggered when numLoadingTiles is > 0");
+        t.eq(g_events[0][0], "tileloaded", "tileloaded triggered when numLoadingTiles is > 0");
+        t.ok(g_events[0][1].tile === tile, "tile passed as tile property to event object");
         t.eq(g_events.length, 1, "loadend event not triggered when numLoadingTiles is > 0");
         t.eq(layer.numLoadingTiles, 1, "numLoadingTiles decremented");
 
 
         g_events = [];
+        layer.grid = [[{}]]; // to prevent error in updateBackBuffer
         tile.onLoadEnd.apply(layer);
-        t.eq(g_events[0], "tileloaded", "tileloaded triggered when numLoadingTiles is 0");
-        t.eq(g_events[1], "loadend", "loadend event triggered when numLoadingTiles is 0");
+        t.eq(g_events[0][0], "tileloaded", "tileloaded triggered when numLoadingTiles is 0");
+        t.eq(g_events[1][0], "loadend", "loadend event triggered when numLoadingTiles is 0");
         t.eq(layer.numLoadingTiles, 0, "numLoadingTiles decremented");
     }
     
@@ -593,7 +710,7 @@
 
     function test_Layer_Grid_destroy (t) {
 
-        t.plan( 8 );
+        t.plan( 9 );
 
         var map = new OpenLayers.Map('map');
         layer = new OpenLayers.Layer.Grid(name, url, params);
@@ -610,16 +727,20 @@
         map.setCenter(new OpenLayers.LonLat(0,0), 10);
         map.setCenter(new OpenLayers.LonLat(1,1));
 
-         
         //grab a reference to one of the tiles
         var tile = layer.grid[1][1];        
         t.eq( tile.imgDiv.className, "olTileImage", "Tile has an image" ); 
 
+        var removeBackBufferCalled = false;
+        layer.removeBackBuffer = function() {
+            removeBackBufferCalled = true;
+        };
+
         layer.destroy();
         t.eq( tile.imgDiv, null, "Tile destroyed" ); 
         t.eq( layer.timerId, null, "Tile loading timeout cleared");
-        
         t.ok( layer.grid == null, "tiles appropriately destroyed")
+        t.ok( removeBackBufferCalled, "destroy calls removeBackBuffer");
 
         // destroy after remove from map
         layer = new OpenLayers.Layer.WMS(name, url, params);
@@ -630,13 +751,849 @@
         t.eq( layer.grid, null, "layer.grid is null after destroy" );
         t.eq( layer.tileSize, null, "layer.tileSize is null after destroy" );
     }
+
+    function test_setOpacity(t) {
+
+        t.plan(5);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true,
+            opacity: '0.6'
+        });
+        map.addLayer(layer);
+        // setCenter adds tiles to the layer's grid
+        map.setCenter(new OpenLayers.LonLat(0, 0), 5);
+
+        var tile = layer.grid[0][0], tileImg = tile.imgDiv;
+
+        tile.onImageLoad(); // simulate an image load event
+        t.eq(layer.opacity, '0.6', 'layer opacity value is correct');
+        t.eq(parseFloat(tileImg.style.opacity), 0.6, 'tile opacity is correct');
+
+        layer.setOpacity('0.2');
+        t.eq(layer.opacity, '0.2', 'layer opacity value is correct');
+        t.eq(parseFloat(tileImg.style.opacity), 0.2, 'tile opacity is correct');
+
+        tile = layer.addTile(new OpenLayers.Bounds(1, 2, 3, 4),
+                             new OpenLayers.Pixel(5, 6));
+        tile.draw(); // add tile to the grid
+        tile.onImageLoad(); // simulate an image load event
+        t.eq(parseFloat(tile.imgDiv.style.opacity), 0.2, "tile opacity is correc");
+
+        map.destroy();
+    }
     
+    function test_getServerResolution(t) {
+
+        t.plan(4);
+
+        var layer = new OpenLayers.Layer.Grid('', '', {}, {});
+        var res;
+
+        res = layer.getServerResolution(1);
+        t.eq(res, 1, '[1] getServerResolution return value is correct');
+
+        layer.serverResolutions = [2, 1];
+        res = layer.getServerResolution(1);
+        t.eq(res, 1, '[2] getServerResolution return value is correct');
+
+        layer.serverResolutions = [2];
+        res = layer.getServerResolution(1);
+        t.eq(res, 2, '[3] getServerResolution return value is correct');
+
+        var exc;
+        layer.serverResolutions = [0.5];
+        try {
+            res = layer.getServerResolution(1);
+        } catch(e) {
+            exc = e;
+        }
+        t.ok(exc != undefined, '[4] getServerResolution generates exception');
+    }
+
+    function test_getServerZoom(t) {
+
+        t.plan(5);
+
+        var resolution, zoom;
+        var map = new OpenLayers.Map('map', {
+            resolutions: [8, 4, 2, 1, 0.5],
+            getResolution: function() {
+                return resolution;
+            }
+        });
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {isBaseLayer: true});
+        map.addLayer(layer);
+
+        resolution = 8;
+        zoom = layer.getServerZoom();
+        t.eq(zoom, 0, '[1] getServerZoom return value is correct');
+
+        resolution = 4;
+        zoom = layer.getServerZoom();
+        t.eq(zoom, 1, '[2] getServerZoom return value is correct');
+
+        layer.serverResolutions = [2, 1];
+        resolution = 1;
+        zoom = layer.getServerZoom();
+        t.eq(zoom, 1, '[3] getServerZoom return value is correct');
+
+        layer.serverResolutions = [2];
+        resolution = 0.5;
+        zoom = layer.getServerZoom();
+        t.eq(zoom, 0, '[4] getServerZoom return value is correct');
+
+        var exc;
+        layer.serverResolutions = [0.5];
+        resolution = 1;
+        try {
+            zoom = layer.getServerZoom();
+        } catch(e) {
+            exc = e;
+        }
+        t.ok(exc != undefined, '[4] getServerZoom generates exception');
+
+        map.destroy();
+    }
+
+    function test_moveTo_scale(t) {
+
+        t.plan(11);
+
+        var map = new OpenLayers.Map('map', {
+            resolutions: [32, 16, 8, 4, 2, 1]
+        });
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true,
+            serverResolutions: [32, 16, 8]
+        });
+        map.addLayer(layer);
+
+        // initial resolution is 8
+        map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+
+        // test initial conditions
+        t.eq(layer.div.style.width, '100%', 'layer div scale is 1');
+
+        // change from resolution 8 to 4
+        map.zoomTo(3);
+        t.eq(layer.div.style.width, '200%', '[8->4] layer div scale is 2');
+
+        // change from resolution 8 to 2
+        map.zoomTo(2); map.zoomTo(4);
+        t.eq(layer.div.style.width, '400%', '[8->2] layer div scale is 4');
+
+        // change from resolution 8 to 1
+        map.zoomTo(2); map.zoomTo(5);
+        t.eq(layer.div.style.width, '800%', '[8->1] layer div scale is 8');
+
+        // change from resolution 4 to 2
+        map.zoomTo(3); map.zoomTo(4);
+        t.eq(layer.div.style.width, '400%', '[4->2] layer div scale is 4');
+
+        // change from resolution 4 to 1
+        map.zoomTo(3); map.zoomTo(5);
+        t.eq(layer.div.style.width, '800%', '[4->1] layer div scale is 8');
+
+        // change from resolution 2 to 1
+        map.zoomTo(4); map.zoomTo(5);
+        t.eq(layer.div.style.width, '800%', '[2->1] layer div scale is 8');
 
+        // change from resolution 1 to 2
+        map.zoomTo(5); map.zoomTo(4);
+        t.eq(layer.div.style.width, '400%', '[1->2] layer div scale is 4');
+
+        // change from resolution 1 to 4
+        map.zoomTo(5); map.zoomTo(3);
+        t.eq(layer.div.style.width, '200%', '[1->4] layer div scale is 2');
+
+        // change from resolution 1 to 8
+        map.zoomTo(5); map.zoomTo(2);
+        t.eq(layer.div.style.width, '100%', '[1->8] layer div scale is 1');
+
+        // change from resolution 1 to 16
+        map.zoomTo(5); map.zoomTo(1);
+        t.eq(layer.div.style.width, '100%', '[1->16] layer div scale is 1');
+
+        map.destroy();
+    }
+
+    function test_moveTo_backbuffer_singletile(t) {
+        t.plan(4);
+
+        var map = new OpenLayers.Map('map', {
+            resolutions: [1, 0.5, 0.025]
+        });
+        var resolution;
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            singleTile: true,
+            isBaseLayer: true,
+            transitionEffect: 'resize',
+            applyBackBuffer: function(res) {
+                resolution = res;
+            }
+        });
+        map.addLayer(layer);
+
+        // initial resolution is 0.025
+        resolution = undefined;
+        map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+        t.eq(resolution, 0.025,
+             'applyBackBuffer not called on first moveTo');
+
+        // move to (-90, 45)
+        resolution = undefined;
+        map.setCenter(new OpenLayers.LonLat(-90, 45));
+        t.eq(resolution, 0.025,
+             'applyBackBuffer called when map is moved');
+
+        // change to resolution 1
+        resolution = undefined;
+        map.zoomTo(0);
+        t.eq(resolution, 1,
+             'applyBackBuffer called when map is zoomed out');
+
+        // change to resolution 0.5
+        resolution = undefined;
+        map.zoomTo(1);
+        t.eq(resolution, 0.5,
+             'applyBackBuffer called when map is zoomed out');
+
+        map.destroy();
+    }
+
+    function test_moveTo_backbuffer(t) {
+        t.plan(4);
+
+        var map = new OpenLayers.Map('map', {
+            resolutions: [1, 0.5, 0.025]
+        });
+        var resolution;
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true,
+            transitionEffect: 'resize',
+            applyBackBuffer: function(res) {
+                resolution = res;
+            }
+        });
+        map.addLayer(layer);
+
+        // initial resolution is 0.025
+        resolution = undefined;
+        map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+        t.eq(resolution, 0.025,
+             'applyBackBuffer not called on first moveTo');
+
+        // move to (-90, 45)
+        resolution = undefined;
+        map.setCenter(new OpenLayers.LonLat(-90, 45));
+        t.eq(resolution, undefined,
+             'applyBackBuffer not called when map is moved');
+
+        // change to resolution 1
+        resolution = undefined;
+        map.zoomTo(0);
+        t.eq(resolution, 1,
+             'applyBackBuffer called when map is zoomed out');
+
+        // change to resolution 0.5
+        map.zoomTo(1);
+        t.eq(resolution, 0.5,
+             'applyBackBuffer called when map is zoomed out');
+
+        map.destroy();
+    }
+
+    function test_transformDiv(t) {
+
+        t.plan(8);
+
+        var map = new OpenLayers.Map('map4');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+
+        // the layer container's dimensions are 100px width 100px height
+        // the position of the viewport center is 384, 256
+
+        layer.transformDiv(2);
+
+        t.eq(layer.div.style.width, '200%', '[1] layer div has correct width');
+        t.eq(layer.div.style.height, '200%', '[1] layer div has correct height');
+
+        t.eq(layer.div.style.left, '-384%', '[1] layer div has correct left');
+        t.eq(layer.div.style.top, '-256%', '[1] layer div has correct top');
+
+        // now move the layer container and test again
+
+        map.layerContainerDiv.style.left = '-1024px';
+        map.layerContainerDiv.style.top = '768px';
+
+        layer.transformDiv(2);
+
+        t.eq(layer.div.style.width, '200%', '[2] layer div has correct width');
+        t.eq(layer.div.style.height, '200%', '[2] layer div has correct height');
+
+        t.eq(layer.div.style.left, '-1408%', '[2] layer div has correct left');
+        t.eq(layer.div.style.top, '512%', '[2] layer div has correct top');
+
+        map.destroy();
+    }
+
+    function test_getResolutionScale(t) {
+        t.plan(1);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+
+        layer.transformDiv(2);
+        var scale = layer.getResolutionScale();
+        t.eq(scale, 2, 'getResolutionScale returns correct value');
+
+        map.destroy();
+    }
+
+    function test_applyBackBuffer(t) {
+        t.plan(16);
+
+        var map = new OpenLayers.Map('map2');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+
+        var backBuffer;
+
+        // test #1
+        layer.createBackBuffer = function() {
+            return;
+        };
+        layer.applyBackBuffer(2);
+        t.eq(layer.backBuffer, undefined,
+             'back buffer not created if createBackBuffer returns undefined');
+
+        // test #2
+        layer.createBackBuffer = function() {
+            backBuffer = document.createElement('div');
+            return backBuffer;
+        };
+        layer.gridResolution = 32;
+        layer.grid[0][0].bounds = new OpenLayers.Bounds(0, 1, 1, 0);
+        layer.applyBackBuffer(2);
+        t.ok(layer.backBuffer === backBuffer,
+             'back buffer set in layer');
+        t.ok(layer.div.firstChild === backBuffer,
+             'back buffer inserted as first child');
+        t.eq(layer.backBuffer.style.width, '1600%',
+             'back buffer has correct width');
+        t.eq(layer.backBuffer.style.height, '1600%',
+             'back buffer has correct height');
+        t.eq(layer.backBuffer.style.left, '250%',
+             'back buffer has correct left');
+        t.eq(layer.backBuffer.style.top, '275%',
+             'back buffer has correct top');
+
+        // test #3
+        layer.createBackBuffer = function() {
+            backBuffer = document.createElement('div');
+            return backBuffer;
+        };
+        layer.gridResolution = 32;
+        layer.grid[0][0].bounds = new OpenLayers.Bounds(0, 1, 1, 0);
+        map.layerContainerDiv.style.left = '20px';
+        map.layerContainerDiv.style.top = '-20px';
+        layer.applyBackBuffer(2);
+        t.ok(layer.backBuffer === backBuffer,
+             'back buffer set in layer');
+        t.ok(layer.div.firstChild === backBuffer,
+             'back buffer inserted as first child');
+        t.eq(layer.backBuffer.style.width, '1600%',
+             'back buffer has correct width');
+        t.eq(layer.backBuffer.style.height, '1600%',
+             'back buffer has correct height');
+        t.eq(layer.backBuffer.style.left, '230%',
+             'back buffer has correct left');
+        t.eq(layer.backBuffer.style.top, '295%',
+             'back buffer has correct top');
+
+        // test #4
+        // and a back buffer in the layer and do as if back buffer removal
+        // has been scheduled, and test that applyBackBuffer removes the
+        // back buffer and clears the timer
+        layer.createBackBuffer = function() {
+            return;
+        };
+        backBuffer = document.createElement('div');
+        layer.div.insertBefore(backBuffer, layer.div.firstChild);
+        layer.backBuffer = backBuffer;
+        layer.backBufferTimerId = 'fake';
+        layer.applyBackBuffer(2);
+        t.ok(backBuffer.parentNode !== layer.div,
+             'back buffer is not child node of layer div');
+        t.eq(layer.backBuffer, null,
+             'back buffer not set in layer');
+        t.eq(layer.backBufferTimerId, null,
+             'back buffer timer cleared');
+        map.destroy();
+    }
+
+    function test_createBackBuffer(t) {
+        t.plan(7);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+
+        var createBackBuffer = OpenLayers.Tile.Image.prototype.createBackBuffer;
+
+        var backBuffer;
+
+        OpenLayers.Tile.Image.prototype.createBackBuffer = function() {
+            return;
+        };
+        backBuffer = layer.createBackBuffer();
+        t.ok(backBuffer != undefined,
+             'createBackBuffer returns a back buffer');
+        t.eq(backBuffer.childNodes.length, 0,
+             'returned back buffer has no child nodes');
+
+        OpenLayers.Tile.Image.prototype.createBackBuffer = function() {
+            return document.createElement('div');
+        };
+        backBuffer = layer.createBackBuffer();
+        t.ok(backBuffer != undefined,
+             'createBackBuffer returns a back buffer');
+        t.eq(backBuffer.childNodes[0].style.left, '0%',
+             'first tile has correct left');
+        t.eq(backBuffer.childNodes[0].style.top, '0%',
+             'first tile has correct top');
+        t.eq(backBuffer.childNodes[1].style.left, '256%',
+             'second tile has correct left');
+        t.eq(backBuffer.childNodes[1].style.top, '0%',
+             'second tile has correct top');
+
+        map.destroy();
+        OpenLayers.Tile.Image.prototype.createBackBuffer = createBackBuffer;
+    }
+
+    function test_removeBackBuffer(t) {
+        t.plan(4);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {isBaseLayer: true});
+        map.addLayer(layer);
+
+        // add a fake back buffer
+        var backBuffer = document.createElement('div');
+        layer.backBuffer = backBuffer;
+        layer.div.appendChild(backBuffer);
+        layer.backBufferResolution = 32;
+
+        // add a fake back buffer removal timer
+        layer.backBufferTimerId = 'fake';
+
+        layer.removeBackBuffer();
+        t.eq(layer.backBuffer, null, 'backBuffer set to null in layer');
+        t.eq(layer.backBufferResolution, null,
+             'backBufferResolution set to null in layer');
+        t.ok(backBuffer.parentNode !== layer.div,
+             'back buffer removed from layer');
+        t.eq(layer.backBufferTimerId, null,
+             'backBufferTimerId set to null in layer');
+
+        map.destroy();
+    }
+
+    function test_singleTile_move_and_zoom(t) {
+
+        //
+        // In single tile mode with no transition effect, we insert a non-scaled
+        // backbuffer when the layer is moved. But if a zoom occurs right after
+        // a move, i.e. before the new image is received, we need to remove the
+        // backbuffer, or an ill-positioned image will be visible during the
+        // zoom transition.
+        //
+
+        t.plan(4);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true,
+            singleTile: true,
+            ratio: 1.1
+        });
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 0);
+
+        // move
+        map.setCenter(new OpenLayers.LonLat(50, 50));
+        t.ok(layer.backBuffer && layer.backBuffer.parentNode === layer.div,
+                'backbuffer inserted after map move');
+        t.eq(layer.backBuffer.style.left, '-25%');
+        t.eq(layer.backBuffer.style.top, '-28%');
+        // zoom
+        map.zoomTo(1);
+        t.eq(layer.backBuffer, null,
+             'back buffer removed when zooming');
+
+        map.destroy();
+    }
+
+    function test_backbuffer_scaled_layer(t) {
+        t.plan(12);
+
+        //
+        // set up
+        //
+
+        var map = new OpenLayers.Map('map', {
+            resolutions: [32, 16, 8, 4, 2, 1]
+        });
+        var layer = new OpenLayers.Layer.WMS(
+            "WMS",
+            window.location.href + "#",
+            null,
+            {transitionEffect: "resize"}
+        );
+        
+        layer.serverResolutions = [32, 16, 8];
+
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+
+        layer.createBackBuffer = function() {
+            return document.createElement('div');
+        };
+
+        // we want to control when the back buffer is removed
+        var removeBackBuffer = OpenLayers.Function.bind(
+                layer.removeBackBuffer, layer);
+        layer.removeBackBuffer = function() {};
+
+        //
+        // test
+        //
+
+        // change resolution from 8 to 4
+        map.zoomTo(3);
+        t.eq(layer.backBuffer.style.width, '100%',
+            '[8->4] back buffer not scaled');
+        removeBackBuffer();
+
+        // change resolution from 8 to 2
+        map.zoomTo(2); removeBackBuffer(); map.zoomTo(4);
+        t.eq(layer.backBuffer.style.width, '100%',
+            '[8->2] back buffer not scaled');
+        removeBackBuffer();
+
+        // change resolution from 16 to 4
+        map.zoomTo(1); removeBackBuffer(); map.zoomTo(3);
+        t.eq(layer.backBuffer.style.width, '200%',
+             '[16->4] back buffer width is as expected');
+        t.eq(layer.backBuffer.style.width, '200%',
+             '[16->4] back buffer height is as expected');
+        removeBackBuffer();
+
+        // change resolution from 32 to 1
+        map.zoomTo(0); removeBackBuffer(); map.zoomTo(5);
+        t.eq(layer.backBuffer.style.width, '400%',
+             '[32->1] back buffer width is as expected');
+        t.eq(layer.backBuffer.style.width, '400%',
+             '[32->1] back buffer height is as expected');
+        removeBackBuffer();
+
+        // change resolution from 4 to 2
+        map.zoomTo(3); removeBackBuffer(); map.zoomTo(4);
+        t.eq(layer.backBuffer.style.width, '100%',
+            '[4->2] back buffer not scaled');
+        removeBackBuffer();
+
+        // change resolution from 4 to 1
+        map.zoomTo(3); removeBackBuffer(); map.zoomTo(5);
+        t.eq(layer.backBuffer.style.width, '100%',
+            '[4->1] back buffer not scaled');
+        removeBackBuffer();
+
+        // change resolution from 1 to 4
+        map.zoomTo(5); removeBackBuffer(); map.zoomTo(3);
+        t.eq(layer.backBuffer.style.width, '100%',
+            '[1->4] back buffer not scaled');
+        removeBackBuffer();
+
+        // change resolution from 4 to 8
+        map.zoomTo(3); removeBackBuffer(); map.zoomTo(2);
+        t.eq(layer.backBuffer.style.width, '100%',
+            '[4->8] back buffer not scaled');
+        removeBackBuffer();
+
+        // change resolution from 4 to 16
+        map.zoomTo(3); removeBackBuffer(); map.zoomTo(1);
+        t.eq(layer.backBuffer.style.width, '50%',
+             '[4->16] back buffer width is as expected');
+        t.eq(layer.backBuffer.style.width, '50%',
+             '[4->16] back buffer height is as expected');
+        removeBackBuffer();
+
+        //
+        // tear down
+        //
+
+        map.destroy();
+    }
+
+    function test_delayed_back_buffer_removal(t) {
+
+        //
+        // Test that the delaying of the back buffer removal behaves
+        // as expected.
+        //
+
+        t.plan(5);
+
+        // set up
+
+        var map = new OpenLayers.Map('map', {
+            resolutions: [32, 16, 8, 4, 2, 1]
+        });
+        var layer = new OpenLayers.Layer.WMS('', '', {}, {
+            isBaseLayer: true,
+            transitionEffect: 'resize'
+        });
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0, 0), 0);
+
+        map.zoomTo(1);
+
+        t.delay_call(1, function() {
+
+            t.ok(layer.backBuffer.parentNode === layer.div,
+                 '[a] back buffer is a child of layer div');
+            t.ok(layer.backBufferTimerId !== null,
+                 '[a] back buffer scheduled for removal');
+
+            var backBuffer = layer.backBuffer;
+
+            map.zoomTo(2);
+
+            t.ok(layer.backBuffer !== backBuffer,
+                 '[b] a new back buffer was created');
+            t.ok(layer.backBuffer.parentNode === layer.div,
+                 '[b] back buffer is a child of layer div');
+            t.ok(layer.backBufferTimerId === null,
+                 '[b] back buffer no longer scheduled for removal');
+
+            // tear down
+
+            map.destroy();
+        });
+    }
+    
+    function test_getGridData(t) {
+        t.plan(12);
+        
+        var layer = new OpenLayers.Layer.Grid(null, null, null, {
+            isBaseLayer: true, getURL: function() {
+                return "/bogus/path/to/tile";
+            }
+        });
+        var map = new OpenLayers.Map({
+            div: "map",
+            layers: [layer],
+            controls: [],
+            center: [0, 0],
+            zoom: 1
+        });
+        
+        // get tile data for [0, 0]
+        var data = layer.getTileData({lon: 0, lat: 0});
+        t.ok(data && data.tile, "[0, 0]: got tile data");
+        t.eq(data.i, 0, "[0, 0]: i");
+        t.eq(data.j, 128, "[0, 0]: j");
+        t.ok(
+            data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
+            "[0, 0]: tile bounds " + data.tile.bounds.toString()
+        );
+        
+        // get tile data for [-110, 45]
+        data = layer.getTileData({lon: -110, lat: 45});
+        t.ok(data && data.tile, "[-110, 45]: got tile data");
+        t.eq(data.i, 99, "[-110, 45]: i");
+        t.eq(data.j, 64, "[-110, 45]: j");
+        t.ok(
+            data.tile.bounds.equals({left: -180, bottom: -90, right: 0, top: 90}),
+            "[-110, 45]: tile bounds " + data.tile.bounds.toString()
+        );
+        
+        // get tile data for [0, 300] (north of grid)
+        data = layer.getTileData({lon: 0, lat: 300})
+        t.eq(data, null, "[0, 300]: north of grid");
+
+        // get tile data for [400, 0] (east of grid)
+        data = layer.getTileData({lon: 400, lat: 0})
+        t.eq(data, null, "[400, 0]: east of grid");
+
+        // get tile data for [0, -500] (south of grid)
+        data = layer.getTileData({lon: 0, lat: -500})
+        t.eq(data, null, "[0, -500]: south of grid");
+
+        // get tile data for [-200, 0] (west of grid)
+        data = layer.getTileData({lon: -200, lat: 0})
+        t.eq(data, null, "[-200, 0]: west of grid");
+        
+        map.destroy();
+        
+    }
+
+    function test_getGridData_wrapped(t) {
+        t.plan(18);
+        
+        var layer = new OpenLayers.Layer.Grid(null, null, null, {
+            isBaseLayer: true, getURL: function() {
+                return "/bogus/path/to/tile";
+            },
+            wrapDateLine: true
+        });
+        var map = new OpenLayers.Map({
+            div: "map",
+            layers: [layer],
+            controls: [],
+            center: [-50, 0],
+            zoom: 1
+        });
+        
+        // get tile data for [0, 0]
+        var data = layer.getTileData({lon: 0, lat: 0});
+        t.ok(data && data.tile, "[0, 0]: got tile data");
+        t.eq(data.i, 0, "[0, 0]: i");
+        t.eq(data.j, 128, "[0, 0]: j");
+        t.ok(
+            data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
+            "[0, 0]: tile bounds " + data.tile.bounds.toString()
+        );
+        
+        // get tile data for [-110, 45]
+        data = layer.getTileData({lon: -110, lat: 45});
+        t.ok(data && data.tile, "[-110, 45]: got tile data");
+        t.eq(data.i, 99, "[-110, 45]: i");
+        t.eq(data.j, 64, "[-110, 45]: j");
+        t.ok(
+            data.tile.bounds.equals({left: -180, bottom: -90, right: 0, top: 90}),
+            "[-110, 45]: tile bounds " + data.tile.bounds.toString()
+        );
+        
+        // get tile data for [0, 300] (north of grid)
+        data = layer.getTileData({lon: 0, lat: 300})
+        t.eq(data, null, "[0, 300]: north of grid");
+
+        // get tile data for [400, 0] (equivalent to [40, 0] and visible on map)
+        data = layer.getTileData({lon: 400, lat: 0})
+        t.ok(data && data.tile, "[400, 0]: got tile data");
+        t.eq(data.i, 56, "[400, 0]: i");
+        t.eq(data.j, 128, "[400, 0]: j");
+        t.ok(
+            data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
+            "[400, 0]: tile bounds " + data.tile.bounds.toString()
+        );
+
+        // get tile data for [0, -500] (south of grid)
+        data = layer.getTileData({lon: 0, lat: -500})
+        t.eq(data, null, "[0, -500]: south of grid");
+
+        // get tile data for [-200, 0] (equivalent to [160, 0] and wrapped to west side map)
+        data = layer.getTileData({lon: -200, lat: 0})
+        t.ok(data && data.tile, "[-200, 0]: got tile data");
+        t.eq(data.i, 227, "[-200, 0]: i");
+        t.eq(data.j, 128, "[-200, 0]: j");
+        t.ok(
+            data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
+            "[-200, 0]: tile bounds " + data.tile.bounds.toString()
+        );
+        
+        map.destroy();
+        
+    }
+
+    function test_removeExcessTiles(t) {
+        t.plan(15);
+
+        /*
+         * Set up
+         */
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.Grid('name', '/url',
+                                              {}, {isBaseLayer: true});
+        map.addLayer(layer);
+
+        function newTile(id) {
+            var t = new OpenLayers.Tile(layer,
+                        new OpenLayers.Pixel(1, 1),
+                        new OpenLayers.Bounds(1, 1, 1, 1));
+            t._id = id;
+            return t;
+        }
+
+        layer.grid = [
+            [newTile(1), newTile(2), newTile(3)],
+            [newTile(4), newTile(5)],
+            [newTile(6), newTile(7), newTile(8)]
+        ];
+
+        // create a clone to be able to test whether
+        // tiles have been destroyed or not
+        var grid = [
+            layer.grid[0].slice(),
+            layer.grid[1].slice(),
+            layer.grid[2].slice()
+        ];
+
+        /*
+         * Test
+         */
+
+        layer.removeExcessTiles(2, 2);
+
+        t.eq(layer.grid.length, 2, 'grid has two rows');
+        t.eq(layer.grid[0].length, 2, 'row #1 has two columns');
+        t.eq(layer.grid[0][0]._id, 1, 'row #1 col #1 includes expected tile');
+        t.eq(layer.grid[0][1]._id, 2, 'row #1 col #2 includes expected tile');
+        t.eq(layer.grid[1].length, 2, 'row #2 has two columns');
+        t.eq(layer.grid[1][0]._id, 4, 'row #2 col #1 includes expected tile');
+        t.eq(layer.grid[1][1]._id, 5, 'row #2 col #2 includes expected tile');
+
+        t.ok(grid[0][0].events != null, 'tile 0,0 not destroyed');
+        t.ok(grid[0][1].events != null, 'tile 0,1 not destroyed');
+        t.ok(grid[0][2].events == null, 'tile 0,2 destroyed');
+        t.ok(grid[1][0].events != null, 'tile 1,0 not destroyed');
+        t.ok(grid[1][1].events != null, 'tile 1,1 not destroyed');
+        t.ok(grid[2][0].events == null, 'tile 2,0 destroyed');
+        t.ok(grid[2][1].events == null, 'tile 2,1 destroyed');
+        t.ok(grid[2][2].events == null, 'tile 2,2 destroyed');
+
+        /*
+         * Tear down
+         */
+
+        map.destroy();
+    }
+    
   </script>
 </head>
 <body>
 <div id="map" style="width:499px;height:549px;display:none"></div>
 <div id="map2" style="width:500px;height:550px;display:none"></div>
 <div id="map3" style="width:594px;height:464px;display:none"></div>
+<div id="map4" style="width:768px;height:512px;display:none"></div>
 </body>
 </html>
diff --git a/tests/Layer/HTTPRequest.html b/tests/Layer/HTTPRequest.html
index 0231156..dcb6e23 100644
--- a/tests/Layer/HTTPRequest.html
+++ b/tests/Layer/HTTPRequest.html
@@ -12,7 +12,7 @@
     var options = { chicken: 151, foo: "bar" };
 
     function test_Layer_HTTPRequest_constructor (t) {
-        t.plan( 5 );
+        t.plan( 6 );
 
         layer = new OpenLayers.Layer.HTTPRequest(name, url, params, options);
         
@@ -27,8 +27,11 @@
         t.ok( ((layer.params["map"] == '/mapdata/vmap_wms.map') && 
                (layer.params["layers"] == "basic") &&
                (layer.params["format"] == "image/png")), "layer.params correctly set" );
-
-
+        
+        layer = new OpenLayers.Layer.HTTPRequest(name, url, null, {params: params});
+        t.ok( ((layer.params["map"] == '/mapdata/vmap_wms.map') && 
+               (layer.params["layers"] == "basic") &&
+               (layer.params["format"] == "image/png")), "layer.params correctly set from options" );
     }
 
     function test_Layer_HTTPRequest_clone (t) {
diff --git a/tests/Layer/Image.html b/tests/Layer/Image.html
index f0a3484..05ab5c3 100644
--- a/tests/Layer/Image.html
+++ b/tests/Layer/Image.html
@@ -77,11 +77,11 @@
 
         t.eq(layer.tile.position.x,-42, "Tile x positioned correctly at maxextent");
         t.eq(layer.tile.position.y,106, "Tile y positioned correctly at maxextent");
-        t.eq(layer.tile.imgDiv.src, "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", "URL is correct");
+        t.eq(layer.tile.url, "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", "URL is correct");
         map.zoomIn();
-        t.eq(layer.tile.imgDiv.src, "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", "URL is correct");
+        t.eq(layer.tile.url, "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", "URL is correct");
         layer.setUrl('http://labs.metacarta.com/wms/vmap0?LAYERS=basic&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fjpeg&SRS=EPSG%3A4326&BBOX=-180,-90,0,90&WIDTH=256&HEIGHT=256');
-        t.eq(layer.tile.imgDiv.src, "http://labs.metacarta.com/wms/vmap0?LAYERS=basic&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fjpeg&SRS=EPSG%3A4326&BBOX=-180,-90,0,90&WIDTH=256&HEIGHT=256", "URL is correct after setURL");
+        t.eq(layer.tile.url, "http://labs.metacarta.com/wms/vmap0?LAYERS=basic&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fjpeg&SRS=EPSG%3A4326&BBOX=-180,-90,0,90&WIDTH=256&HEIGHT=256", "URL is correct after setURL");
     }
 /******
  * 
@@ -128,7 +128,7 @@
     function test_loadEvents(t) {
         t.plan(3);
 
-        var map = new OpenLayers.Map('map');    
+        var map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.Image(
             'Test', '../../img/blank.gif',
             new OpenLayers.Bounds(-180, -88.759, 180, 88.759),
diff --git a/tests/Layer/KaMap.html b/tests/Layer/KaMap.html
index af2003a..b22917f 100644
--- a/tests/Layer/KaMap.html
+++ b/tests/Layer/KaMap.html
@@ -94,8 +94,8 @@
 
         layer = new OpenLayers.Layer.KaMap(name, url, params, units);
 
-        var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
-        var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
+        var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
+        var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
         layer.grid = [ [6, tr], 
                        [bl, 7]];
 
diff --git a/tests/Layer/MapServer.html b/tests/Layer/MapServer.html
index 1e4e52d..8efcce0 100644
--- a/tests/Layer/MapServer.html
+++ b/tests/Layer/MapServer.html
@@ -1,12 +1,14 @@
 <html>
 <head>
     <script type="text/javascript">var oldAlert = window.alert, gMess; window.alert = function(message) {gMess = message; return true;};</script>
-    <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
     <script type="text/javascript">window.alert = oldAlert;</script>
     
 
 <script src="../OLLoader.js"></script>
   <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+    
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var layer; 
 
@@ -53,20 +55,15 @@
                  imgy:128,
                  imgxy:[256,256]
         });
-        t.eq( img.src,
+        t.eq( tile.url,
              url + "?" + OpenLayers.Util.getParameterString(tParams).replace(/,/g, "+"),
              "image src is created correctly via addtile" );
-        t.eq( tile.frame.style.top, "6px", "image top is set correctly via addtile" );
-        t.eq( tile.frame.style.left, "5px", "image top is set correctly via addtile" );
-
-        var firstChild = layer.div.firstChild.firstChild;
-        if (!isMozilla)
-            t.ok( true, "skipping element test outside of Mozilla");
-        else
-            t.ok( firstChild instanceof HTMLElement, "div first child is an image object" );
-        t.eq( firstChild.src,
-             url + "?" + OpenLayers.Util.getParameterString(tParams).replace(/,/g, "+"),
-             "div first child is correct image object" );
+        t.eq( tile.getTile().style.top, "6%", "image top is set correctly via addtile" );
+        t.eq( tile.getTile().style.left, "5%", "image top is set correctly via addtile" );
+
+        var firstChild = layer.div.firstChild;
+        t.eq( firstChild.nodeName.toLowerCase(), "img", "div first child is an image object" );
+        t.ok( firstChild == img, "div first child is correct image object" );
         t.eq( tile.position.toString(), "x=5,y=6", "Position of tile is set correctly." );
         map.destroy();
     }
@@ -196,69 +193,6 @@
 
     }
 
-    function test_Layer_MapServer_setOpacity (t) {
-        t.plan( 5 );
-
-        var map = new OpenLayers.Map('map');
-        map.projection = "xx";
-        tUrl = "http://labs.metacarta.com/cgi-bin/mapserv";
-        tParams = { layers: 'basic', 
-                   format: 'image/png'};
-        tOptions = { 'opacity': '0.5' };           
-        var tLayer = new OpenLayers.Layer.MapServer(name, tUrl, tParams, tOptions);
-        map.addLayer(tLayer);
-        map.zoomToMaxExtent();
-        t.eq(tLayer.opacity, "0.5", "Opacity is set correctly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.5, "Opacity on tile is correct");
-        tLayer.setOpacity("0.6");
-        t.eq(tLayer.opacity, "0.6", "setOpacity works properly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.6, "Opacity on tile is changed correctly");
-        var pixel = new OpenLayers.Pixel(5,6);
-        var tile = tLayer.addTile(new OpenLayers.Bounds(1,2,3,4), pixel);
-        tile.draw();
-        t.eq(parseFloat(tile.imgDiv.style.opacity), 0.6, "Tile opacity is set correctly");
-        map.destroy();
-
-    }    
-    
-    function test_Layer_MapServer_Reproject (t) { 
-        var validkey = (window.location.protocol == "file:") ||
-                       (window.location.host == "localhost") ||
-                       (window.location.host == "openlayers.org");
-        
-        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) {
-            t.plan(5);
-            var map = new OpenLayers.Map('map');
-            var layer = new OpenLayers.Layer.Google("Google");
-            map.addLayer(layer);
-            layer = new OpenLayers.Layer.MapServer(name, url, params, {isBaseLayer: false, reproject: true, buffer: 2});
-            layer.isBaseLayer=false;
-            map.addLayer(layer);
-            map.setCenter(new OpenLayers.LonLat(0,0), 5);
-            var tile = layer.grid[0][0];
-            t.eq( tile.bounds.left, -22.5, "left side matches" ); 
-            t.eq( tile.bounds.right, -11.25, "top side matches" ); 
-            t.eq( tile.bounds.bottom.toFixed(6), '11.178402', "bottom side matches" ); 
-            t.eq( tile.bounds.top.toFixed(6), '21.943046', "top side matches" );
-            map.destroy();
-        } else {
-            t.plan(1);
-            t.debug_print("can't test google layer from " +
-                          window.location.host);
-        }
-        
-        var map = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.MapServer(name, url, params, {buffer:2});
-        map.addLayer(layer);
-        map.setCenter(new OpenLayers.LonLat(0,0), 5);
-        var tile = layer.grid[0][0];
-        t.ok( tile.bounds.equals(new OpenLayers.Bounds(-33.75, 33.75, -22.5, 45)), "okay");
-        map.destroy();
-    }
-    
     function test_Layer_MapServer_singleTile (t) {
         t.plan( 5 );
         var map = new OpenLayers.Map('map');
@@ -295,174 +229,6 @@
         t.ok( layer.grid == null, "grid set to null");
         map.destroy();
     }
-   
-    // Untiled tests 
-   
-    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
-    var layer; 
-
-    var name = 'Test Layer';
-    var url = "http://labs.metacarta.com/cgi-bin/mapserv";
-    var params = { map: '/mapdata/vmap_wms.map', 
-                   layers: 'basic'};
-    
-    function test_Layer_MapServer_Untiled_constructor (t) {
-        t.plan( 4 );
-
-        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
-        t.ok( layer instanceof OpenLayers.Layer.MapServer.Untiled, "new OpenLayers.Layer.MapServer returns object" );
-        t.eq( layer.url, "http://labs.metacarta.com/cgi-bin/mapserv", "layer.url is correct (HTTPRequest inited)" );
-
-        t.eq( layer.params.mode, "map", "default mode param correctly copied");
-        t.eq( layer.params.map_imagetype, "png", "default imagetype correctly copied");
-
-
-    }
-    
-    function test_Layer_MapServer_Untiled_clone (t) {
-        t.plan(3);
-        
-        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
-        var map = new OpenLayers.Map('map', {});
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
-        map.addLayer(layer);
-
-        var clone = layer.clone();
-        layer.tile = [[1,2],[3,4]];
-        
-        t.ok( clone.tile != layer.tile, "clone does not copy tile");
-
-        layer.ratio += 1;
-
-        t.eq( clone.ratio, 1.5, "changing layer.ratio does not change clone.ratio -- a fresh copy was made, not just copied reference");
-
-        t.eq( clone.alpha, layer.alpha, "alpha copied correctly");
-
-        layer.tile = null;
-        map.destroy();
-    }
-
-    function test_Layer_MapServer_Untiled_isBaseLayer(t) {
-        t.plan(3);
-        
-        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
-        t.ok( layer.isBaseLayer, "baselayer is true by default");
-
-        var newParams = OpenLayers.Util.extend({}, params);
-        newParams.transparent = "true";
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, newParams);
-        t.ok( !layer.isBaseLayer, "baselayer is false when transparent is set to true");
-
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params, {isBaseLayer: false});
-        t.ok( !layer.isBaseLayer, "baselayer is false when option is set to false" );
-    }
-
-    function test_Layer_MapServer_Untiled_mergeNewParams (t) {
-        t.plan( 5 );
-
-        var map = new OpenLayers.Map("map");
-        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
-        
-        var newParams = { layers: 'sooper', 
-                          chickpeas: 'image/png'};
-
-        map.addLayer(layer);
-        map.zoomToMaxExtent();
-        t.ok( !layer.grid[0][0].url.match("chickpeas"), "chickpeas is not in URL of first tile in grid" );
-
-        layer.mergeNewParams(newParams);
-        
-        t.eq( layer.params.layers, "sooper", "mergeNewParams() overwrites well");
-        t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() adds well");
-        t.ok( layer.grid[0][0].url.match("chickpeas"), "chickpeas is in URL of first tile in grid" );
-
-        newParams.chickpeas = 151;
-
-        t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable");
-        map.destroy();
-    }
-
-    function test_Layer_MapServer_Untiled_getFullRequestString (t) {
-
-        
-        t.plan( 1 );
-        var map = new OpenLayers.Map('map');
-        tUrl = "http://labs.metacarta.com/cgi-bin/mapserv";
-        tParams = { layers: 'basic', 
-                    format: 'png'};
-        var tLayer = new OpenLayers.Layer.MapServer.Untiled(name, tUrl, tParams);
-        map.addLayer(tLayer);
-        str = tLayer.getFullRequestString();
-        var tParams = {
-             layers: 'basic', 
-             format: 'png',
-             mode: 'map',
-             map_imagetype: 'png'
-        };
-
-        var sStr = tUrl + "?" + OpenLayers.Util.getParameterString(tParams);
-        sStr = sStr.replace(/,/g, "+");
-        
-        t.eq(str, sStr , "getFullRequestString() works");
-        map.destroy();
-
-    }
-
-    function test_Layer_MapServer_Untiled_setOpacity (t) {
-        t.plan( 4 );
-
-        var map = new OpenLayers.Map('map');
-        map.projection = "xx";
-        tUrl = "http://labs.metacarta.com/cgi-bin/mapserv";
-        tParams = { layers: 'basic', 
-                   format: 'image/png'};
-        tOptions = { 'opacity': '0.5' };           
-        var tLayer = new OpenLayers.Layer.MapServer.Untiled(name, tUrl, tParams, tOptions);
-        map.addLayer(tLayer);
-        map.zoomToMaxExtent();
-        t.eq(tLayer.opacity, "0.5", "Opacity is set correctly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.5, "Opacity on tile is correct");
-        tLayer.setOpacity("0.6");
-        t.eq(tLayer.opacity, "0.6", "setOpacity works properly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.6, "Opacity on tile is changed correctly");
-        map.destroy();
-
-    }    
-
-    // DEPRECATED -- REMOVE IN 3.0
-    function test_Layer_Untiled_MapServer(t) { 
-        t.plan(1);
-        
-        var layer = new OpenLayers.Layer.MapServer.Untiled();
-        
-        var clone = layer.clone();
-        
-        t.ok(clone.singleTile, "regression test: clone works. this is for #1013");
-    }
-    
-    function test_Layer_MapServer_Untiled_destroy (t) {
-
-        t.plan( 1 );
-
-        var map = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
-        map.addLayer(layer);
-
-        map.setCenter(new OpenLayers.LonLat(0,0), 5);
-
-        //grab a reference to one of the tiles
-        var tile = layer.tile;        
-
-        layer.destroy();
-        
-    // checks to make sure superclass (grid) destroy() was called    
-        
-        t.ok( layer.tile == null, "tile set to null");
-        map.destroy();
-    }
     
   </script>
 </head>
diff --git a/tests/Layer/MultiMap.html b/tests/Layer/MultiMap.html
deleted file mode 100644
index 8ae07d2..0000000
--- a/tests/Layer/MultiMap.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<html>
-<head>
-  <!-- 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="../OLLoader.js"></script>
-  <script type="text/javascript">
-    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;
-        }
-
-        if (!doTest) { t.plan(0); return; }
-        t.plan( 4 );
-        
-        var map = new OpenLayers.Map('map');
-        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, "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('MultiMap 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('MultiMap Layer');
-        map.addLayer(layer);
-
-     // these two lines specify an appropriate translation. 
-     //  the code afterwards works by itself to test that translation
-     //  works correctly both ways.
-        var gLatLng = new MMLatLon(50,100);
-        var correspondingOLLonLat = new OpenLayers.LonLat(100,50);
-
-
-        olLonLat = layer.getOLLonLatFromMapObjectLonLat(gLatLng);
-        t.ok(olLonLat.equals(correspondingOLLonLat), "Translation from GLatLng to OpenLayers.LonLat works");
-
-        var transGLatLng = layer.getMapObjectLonLatFromOLLonLat(olLonLat);
-        t.ok( (transGLatLng.lat == gLatLng.lat) && (transGLatLng.lon == transGLatLng.lon), "Translation from OpenLayers.LonLat to GLatLng works");
-
-        t.ok( layer.getMapObjectLonLatFromOLLonLat(null) == null, "getGLatLngFromOLLonLat(null) returns null");
-        t.ok( layer.getOLLonLatFromMapObjectLonLat(null) == null, "getOLLonLatFromGLatLng(null) returns null");
-    }
-
-    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('MultiMap Layer');
-        map.addLayer(layer);
-
-     // these two lines specify an appropriate translation. 
-     //  the code afterwards works by itself to test that translation
-     //  works correctly both ways.
-        var gPoint = new MMPoint(50,100);
-        var correspondingOLPixel = new OpenLayers.Pixel(50, 100);
-
-
-        olPixel = layer.getOLPixelFromMapObjectPixel(gPoint);
-        t.ok( olPixel.equals(correspondingOLPixel), "Translation from GPoint to OpenLayers.Pixel works");
-
-        var transGPoint = layer.getMapObjectPixelFromOLPixel(olPixel);
-        t.ok( ((transGPoint.x == transGPoint.x) && (transGPoint.y == transGPoint.y)), "Translation from OpenLayers.Pixel to GPoint works");
-
-        t.ok( layer.getMapObjectPixelFromOLPixel(null) == null, "getGPointFromOLPixel(null) returns null");
-        t.ok( layer.getOLPixelFromMapObjectPixel(null) == null, "getOLPixelFromGPoint(null) returns null");
-    }
-
-
-    function test_Layer_destroy (t) {
-        if (!doTest) { t.plan(0); return; }
-        t.plan( 5 );    
-
-        var map = new OpenLayers.Map('map');
-        
-        layer = new OpenLayers.Layer.MultiMap('Test Layer');
-        map.addLayer(layer);
-
-        layer.destroy();
-
-        t.eq( layer.name, null, "layer.name is null after destroy" );
-        t.eq( layer.div, null, "layer.div is null after destroy" );
-        t.eq( layer.map, null, "layer.map is null after destroy" );
-        t.eq( layer.options, null, "layer.options is null after destroy" );
-        t.eq( layer.multimap, null, "layer.gmap is null after destroy" );
-    }
-
-  </script>
-</head>
-<body>
-  <div id="map"></div>
-</body>
-</html>
diff --git a/tests/Layer/OSM.html b/tests/Layer/OSM.html
new file mode 100644
index 0000000..fac471c
--- /dev/null
+++ b/tests/Layer/OSM.html
@@ -0,0 +1,16 @@
+<html>
+<head>
+  <script src="../OLLoader.js"></script>
+  <script type="text/javascript">
+    function test_clone(t) {
+        t.plan(1);
+        var layer = new OpenLayers.Layer.OSM();
+        var clone = layer.clone();
+        t.ok(clone instanceof OpenLayers.Layer.OSM, "clone is a Layer.OSM instance");
+    }
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/Layer/PointTrack.html b/tests/Layer/PointTrack.html
index d889db2..95b8ced 100644
--- a/tests/Layer/PointTrack.html
+++ b/tests/Layer/PointTrack.html
@@ -66,7 +66,7 @@
         t.eq(layer.map.layers.length, 1, "layer added to the map successfully");
         layer.destroy();
         t.eq(layer.map, null, "layer.map is null after destroy");
-        t.eq(layer.getFeatureFromEvent({'target':'map'}), null, "getFeatureIdFromEvent doesn't cause an error when called on layer which has been destroyed.");
+        t.ok(!layer.renderer, "layer.renderer is falsey after destroy");
     }
 
 
diff --git a/tests/Layer/SphericalMercator.html b/tests/Layer/SphericalMercator.html
index c2bbdfc..463ffe1 100644
--- a/tests/Layer/SphericalMercator.html
+++ b/tests/Layer/SphericalMercator.html
@@ -38,8 +38,8 @@
         t.eq(sw.lon, -180, "Southwest lon correct");
         t.eq(ne.lon, 180, "Northeast lon correct");
         
-        t.eq(sw.lat, -85.051128779807, "Southwest lat correct");
-        t.eq(ne.lat, 85.051128779807, "Northeast lat correct");
+        t.eq(sw.lat.toFixed(10), "-85.0511287798", "Southwest lat correct");
+        t.eq(ne.lat.toFixed(10), "85.0511287798", "Northeast lat correct");
     }
 
     function strToFixed(str, dig) { 
@@ -51,22 +51,11 @@
         }); 
     } 
  
-    function test_SphericalMercator_projectForward(t) { 
-        t.plan(1);
-        var point = new OpenLayers.Geometry.Point(10, 20); 
-        OpenLayers.Layer.SphericalMercator.projectForward(point); 
-
-        t.eq(strToFixed(point.toString()), 
-             strToFixed("POINT(1113194.9077777779 2273030.9266712805)"), 
-             "point transforms from EPSG:4326 to Spherical Mercator"); 
-    } 
-         
     function test_SphericalMercator_to4326(t) { 
         t.plan(1);
-        var point = new OpenLayers.Geometry.Point(1113195, 2273031); 
+        var point = new OpenLayers.Geometry.Point(1113195, 2273031);
+        point.transform("EPSG:900913", "EPSG:4326");
 
-        OpenLayers.Layer.SphericalMercator.projectInverse(point); 
-         
         t.eq(strToFixed(point.toString()), 
              strToFixed("POINT(10.000000828446318 20.000000618997227)"), 
              "point transforms from Spherical Mercator to EPSG:4326"); 
@@ -82,9 +71,9 @@
         var smerc = OpenLayers.Projection.transforms["EPSG:900913"];
         t.ok(smerc instanceof Object, "EPSG:900913 exists in table");
         
-        t.ok(wgs84["EPSG:900913"] === OpenLayers.Layer.SphericalMercator.projectForward,
+        t.ok(typeof(wgs84["EPSG:900913"]) === "function",
              "from EPSG:4326 to EPSG:900913 correctly defined");
-        t.ok(smerc["EPSG:4326"] === OpenLayers.Layer.SphericalMercator.projectInverse,
+        t.ok(typeof(smerc["EPSG:4326"]) === "function",
              "from EPSG:900913 to EPSG:4326 correctly defined");
     }
     
diff --git a/tests/Layer/TMS.html b/tests/Layer/TMS.html
index c55d02b..4ac629f 100644
--- a/tests/Layer/TMS.html
+++ b/tests/Layer/TMS.html
@@ -42,8 +42,8 @@
 
         layer = new OpenLayers.Layer.TMS(name, url, options);
 
-        var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
-        var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
+        var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
+        var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
         layer.grid = [ [6, tr], 
                        [bl, 7]];
 
@@ -175,10 +175,9 @@
         // test offset of 2
         offset = 2;
         zoom = 3;
-        
+
         var map = new OpenLayers.Map({
-            div: "map",
-            maxResolution: OpenLayers.Map.prototype.maxResolution / Math.pow(2, offset)
+            div: "map"
         });
         var layer = new OpenLayers.Layer.TMS("TMS", "", {
             layername: "basic",
@@ -189,7 +188,6 @@
         map.setCenter(new OpenLayers.LonLat(0, 0), zoom);
 
         var tileurl = layer.getURL(new OpenLayers.Bounds(3.515625,45,4.21875,45.703125));
-        level = parseInt(tileurl.split("/")[2]);
         t.eq(parseInt(tileurl.split("/")[2]), zoom + offset, "correct level for offset 2");
 
         map.destroy();
@@ -199,8 +197,7 @@
         zoom = 3;
         
         var map = new OpenLayers.Map({
-            div: "map",
-            maxResolution: OpenLayers.Map.prototype.maxResolution / Math.pow(2, offset)
+            div: "map"
         });
         var layer = new OpenLayers.Layer.TMS("TMS", "", {
             layername: "basic",
@@ -211,12 +208,9 @@
         map.setCenter(new OpenLayers.LonLat(0, 0), zoom);
 
         var tileurl = layer.getURL(new OpenLayers.Bounds(3.515625,45,4.21875,45.703125));
-        level = parseInt(tileurl.split("/")[2]);
         t.eq(parseInt(tileurl.split("/")[2]), zoom + offset, "correct level for offset -1");
 
         map.destroy();
-
-
     }
 
     function test_Layer_TMS_setMap(t) {
diff --git a/tests/Layer/Text.html b/tests/Layer/Text.html
index 0cf6dcf..3bffe4c 100644
--- a/tests/Layer/Text.html
+++ b/tests/Layer/Text.html
@@ -173,7 +173,7 @@
         var event = {};
         t.delay_call( 1, function() {  
           t.ok(layer.markers[0].events, "First marker has an events object");
-          t.eq(layer.markers[0].events.listeners['click'].length, 0, "Marker events has one object");
+          t.eq(layer.markers[0].events.listeners['click'], undefined, "Marker events has no object");
           layer.markers[0].events.triggerEvent('click', event);
           t.eq(map.popups.length, 0, "no popup on first marker");
           layer.markers[1].events.triggerEvent('click', event);
diff --git a/tests/Layer/TileCache.html b/tests/Layer/TileCache.html
index 6ae2bc1..2bb88f5 100644
--- a/tests/Layer/TileCache.html
+++ b/tests/Layer/TileCache.html
@@ -66,12 +66,12 @@
         var options = {'type':'png'}; 
         var layer = new OpenLayers.Layer.TileCache(name, url, layername, options);
 
-        var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
-        var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
+        var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
+        var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
         layer.grid = [ [6, tr], 
                        [bl, 7]];
 
-        var bounds = layer.getGridBounds();
+        var bounds = layer.getTilesBounds();
     
         var testBounds = new OpenLayers.Bounds(1,2,3,4);
         
diff --git a/tests/Layer/UTFGrid.html b/tests/Layer/UTFGrid.html
new file mode 100644
index 0000000..16cb852
--- /dev/null
+++ b/tests/Layer/UTFGrid.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <script>
+      /**
+      * Because browsers that implement requestAnimationFrame may not execute
+      * animation functions while a window is not displayed (e.g. in a hidden
+      * iframe as in these tests), we mask the native implementations here.  The
+      * native requestAnimationFrame functionality is tested in Util.html and
+      * in PanZoom.html (where a popup is opened before panning).  The panTo tests
+      * here will test the fallback setTimeout implementation for animation.
+      */
+      window.requestAnimationFrame = 
+          window.webkitRequestAnimationFrame =
+          window.mozRequestAnimationFrame =
+          window.oRequestAnimationFrame =
+          window.msRequestAnimationFrame = null;
+  </script>
+  <script src="../OLLoader.js"></script>
+  <script type="text/javascript">
+
+    var map, layer;
+    function setUp() {
+        layer = new OpenLayers.Layer.UTFGrid({
+            url: "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
+            isBaseLayer: true, 
+            utfgridResolution: 4
+        });
+        map = new OpenLayers.Map({
+            div: "map",
+            projection: "EPSG:900913",
+            layers: [layer],
+            center: [0, 0],
+            zoom: 1
+        });
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+    }
+
+    function test_constructor(t) {
+        t.plan(4);
+        
+        var layer = new OpenLayers.Layer.UTFGrid({
+            name: "foo",
+            url: "path/to/tiles/${z}/${x}/${y}",
+            utfgridResolution: 8
+        });
+        t.ok(layer instanceof OpenLayers.Layer.UTFGrid, "utfgrid instance");
+        t.eq(layer.name, "foo", "layer name");
+        t.eq(layer.url, "path/to/tiles/${z}/${x}/${y}", "layer url");
+        t.eq(layer.utfgridResolution, 8, "layer utfgridResolution");
+
+        layer.destroy();
+
+    }
+    
+    function test_clone(t) {
+        t.plan(3);
+        setUp();
+        
+        var clone = layer.clone();
+        t.ok(layer instanceof OpenLayers.Layer.UTFGrid, "utfgrid instance");
+        t.eq(layer.url, "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json", "layer url");
+        t.eq(layer.utfgridResolution, 4, "layer utfgridResolution");
+        clone.destroy();
+        
+        tearDown();
+    }
+    
+    function test_getFeatureInfo(t) {
+        t.plan(2);
+        setUp();
+                
+        // wait for tile loading to finish
+        t.delay_call(0.5, function() {
+            var loc = new OpenLayers.LonLat(-110, 45).transform("EPSG:4326", "EPSG:900913");
+            var info = layer.getFeatureInfo(loc);
+            
+            t.eq(info.id, "207", "feature id");
+            t.eq(info.data, {POP2005: 299846449, NAME: "United States"}, "feature data");
+            
+            tearDown();
+        });
+        
+    }
+
+    function test_getFeatureId(t) {
+        t.plan(2);
+        setUp();
+
+        // wait for tile loading to finish
+        t.delay_call(0.5, function() {
+            var ca = new OpenLayers.LonLat(-110, 55).transform("EPSG:4326", "EPSG:900913");
+            var ru = new OpenLayers.LonLat(90, 75).transform("EPSG:4326", "EPSG:900913");
+            
+            t.eq(layer.getFeatureId(ca), "24", "feature id for ca");
+            t.eq(layer.getFeatureId(ru), "245", "feature id for ru");
+            
+            tearDown();
+        });
+        
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="height: 256px; width: 512px"></div>
+</body>
+</html>
+
diff --git a/tests/Layer/Vector.html b/tests/Layer/Vector.html
index cc8c3fc..aa3e2f8 100644
--- a/tests/Layer/Vector.html
+++ b/tests/Layer/Vector.html
@@ -575,7 +575,7 @@
     }
 
     function test_Layer_Vector_destroy (t) {
-        t.plan(5);    
+        t.plan(6);    
 
         var options = {protocol: new OpenLayers.Protocol(), 
                        strategies: [new OpenLayers.Strategy(), new OpenLayers.Strategy()]}
@@ -584,8 +584,14 @@
         map.addLayer(layer);
         layer.destroy();
         t.eq(layer.map, null, "layer.map is null after destroy");
-        t.eq(layer.getFeatureFromEvent({'target':'map'}), null, 
-            "getFeatureIdFromEvent doesn't cause an error when called on layer which has been destroyed.");
+        t.ok(!layer.renderer, "layer.renderer is falsey");
+        var err;
+        try {
+            layer.getFeatureFromEvent({target: "map"});
+        } catch (ex) {
+            err = ex;
+        }
+        t.ok(err, "Error thrown when calling getFeatureFromEvent on destroyed layer");
 
         t.eq(layer.protocol, null, "layer.protocol is null after destroy");
         t.eq(layer.strategies, null, "layer.strategies is null after destroy");
@@ -717,54 +723,6 @@
                         (-y + customStyle6.graphicYOffset).toFixed().toString(),
                         "graphicYOffset correctly set");
         }
-        if (layer.renderer.CLASS_NAME == 'OpenLayers.Renderer.SVG2') {
-                feature.style = customStyle1;
-                layer.drawFeature(feature);
-                var resolution = map.getResolution();
-                t.eq(root.firstChild.getAttributeNS(null, 'width'),
-                             (2*customStyle1.pointRadius*resolution).toString(),
-                             "given a pointRadius, width equals 2*pointRadius");
-                t.eq(root.firstChild.getAttributeNS(null, 'height'),
-                             (2*customStyle1.pointRadius*resolution).toString(),
-                             "given a pointRadius, height equals 2*pointRadius");
-                feature.style = customStyle2;
-                layer.drawFeature(feature);
-                t.eq(root.firstChild.getAttributeNS(null, 'width'),
-                             root.firstChild.getAttributeNS(null, 'height'),
-                             "given a graphicWidth, width equals height");
-                t.eq(root.firstChild.getAttributeNS(null, 'width'),
-                             (customStyle2.graphicWidth*resolution).toString(),
-                             "width is set correctly");
-                feature.style = customStyle3;
-                layer.drawFeature(feature);
-                t.eq(root.firstChild.getAttributeNS(null, 'height'),
-                             root.firstChild.getAttributeNS(null, 'width'),
-                             "given a graphicHeight, height equals width");
-                t.eq(root.firstChild.getAttributeNS(null, 'height'),
-                             (customStyle3.graphicHeight*resolution).toString(),
-                             "height is set correctly");
-                feature.style = customStyle4;
-                layer.drawFeature(feature);
-                t.eq(root.firstChild.getAttributeNS(null, 'height'),
-                             (customStyle4.graphicHeight*resolution).toString(),
-                             "given graphicHeight and graphicWidth, both are set: height");
-                t.eq(root.firstChild.getAttributeNS(null, 'width'),
-                             (customStyle4.graphicWidth*resolution).toString(),
-                             "given graphicHeight and graphicWidth, both are set: width");
-                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") ? "" : ';'),
-                             "graphicOpacity correctly set");
-                feature.style = customStyle6;
-                layer.drawFeature(feature);
-                t.eq(root.firstChild.getAttributeNS(null, 'x'),
-                        (geometryX + customStyle6.graphicXOffset*resolution).toString(),
-                        "graphicXOffset correctly set");
-                t.eq(root.firstChild.getAttributeNS(null, 'y'),
-                        (-geometryY + customStyle6.graphicYOffset*resolution).toString(),
-                        "graphicYOffset correctly set");
-        }
         if (layer.renderer.CLASS_NAME == 'OpenLayers.Renderer.VML') {
                 feature.style = customStyle1;
                 layer.drawFeature(feature);
diff --git a/tests/Layer/WFS.html b/tests/Layer/WFS.html
deleted file mode 100644
index 42b566a..0000000
--- a/tests/Layer/WFS.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<html>
-<head>
-<script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    var name = "Vector Layer";
-    
-    function test_Layer_WFS_constructor(t) {
-        t.plan(3);
-
-        var layer = new OpenLayers.Layer.WFS(name, "url", {});
-        t.ok(layer instanceof OpenLayers.Layer.WFS, "new OpenLayers.Layer.Vector returns correct object" );
-        t.eq(layer.name, name, "layer name is correctly set");
-        t.ok(layer.renderer.CLASS_NAME, "layer has a renderer");
-
-    }
-    
-    function test_Layer_WFS_getDataExtent(t) {
-        t.plan(1);
-
-        var layer = new OpenLayers.Layer.WFS(name, "url", {});
-        layer.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0, 0)));
-        layer.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0, 1)));
-        t.eq(layer.getDataExtent().toBBOX(), "0,0,0,1", "bbox is correctly pulled from vectors.");
-
-    }
-    
-    function test_Layer_WFS_setOpacity(t) {
-        t.plan(3);
-
-        var layer = new OpenLayers.Layer.WFS(name, "url", {});
-        layer.setOpacity(.5);
-        t.eq(layer.opacity, 0.5, "vector setOpacity didn't fail");
-        var layer = new OpenLayers.Layer.WFS(name, "url", {}, {'featureClass': OpenLayers.Feature.WFS});
-        var marker = new OpenLayers.Marker(new OpenLayers.LonLat(0,0));
-        marker.setOpacity = function() {
-            t.ok(true, "Marker setOpacity was called");
-        }    
-        layer.addMarker(marker);
-        layer.setOpacity(.6);
-        t.eq(layer.opacity, 0.6, "setOpacity didn't fail on markers");
-    }
-    
-    function test_Layer_WFS_destroy(t) {
-        t.plan(13);
-        
-        var tVectorDestroy = OpenLayers.Layer.Vector.prototype.destroy;
-        OpenLayers.Layer.Vector.prototype.destroy = function() {
-            g_VectorDestroyed = true;
-        }
-
-        var tMarkersDestroy = OpenLayers.Layer.Markers.prototype.destroy;
-        OpenLayers.Layer.Markers.prototype.destroy = function() {
-            g_MarkersDestroyed = true;
-        }
-
-        var layer = {
-            'vectorMode': true,
-            'tile': {
-                'destroy': function() {
-                    t.ok(true, "wfs layer's tile is destroyed");
-                }
-            },
-            'ratio': {},
-            'featureClass': {},
-            'format': {},
-            'formatObject': {
-                'destroy': function() {
-                    t.ok(true, "wfs layer's format object is destroyed");
-                }
-            },
-            'formatOptions': {},
-            'encodeBBOX': {},
-            'extractAttributes': {}
-        };
-        
-        //this call should set off two tests (destroys for tile and format object)
-        g_VectorDestroyed = null;
-        g_MarkersDestroyed = null;        
-        OpenLayers.Layer.WFS.prototype.destroy.apply(layer, []);        
-
-        t.ok(g_VectorDestroyed && !g_MarkersDestroyed, "when vector mode is set to true, the default vector layer's destroy() method is called");
-        t.eq(layer.vectorMode, null, "'vectorMode' property nullified");
-        t.eq(layer.tile, null, "'tile' property nullified");
-        t.eq(layer.ratio, null, "'ratio' property nullified");
-        t.eq(layer.featureClass, null, "'featureClass' property nullified");
-        t.eq(layer.format, null, "'format' property nullified");
-        t.eq(layer.formatObject, null, "'formatObject' property nullified");
-        t.eq(layer.formatOptions, null, "'formatOptions' property nullified");
-        t.eq(layer.encodeBBOX, null, "'encodeBBOX' property nullified");
-        t.eq(layer.extractAttributes, null, "'extractAttributes' property nullified");
-
-        layer.vectorMode = false;
-
-        //this call will *not* set off two tests (tile and format object are null)
-        g_VectorDestroyed = null;
-        g_MarkersDestroyed = null;        
-        OpenLayers.Layer.WFS.prototype.destroy.apply(layer, []);        
-        t.ok(!g_VectorDestroyed && g_MarkersDestroyed, "when vector mode is set to false, the default markers layer's destroy() method is called");
-        
-        OpenLayers.Layer.Vector.prototype.destroy = tVectorDestroy;
-        OpenLayers.Layer.Markers.prototype.destroy = tMarkersDestroy;
-    }
-    
-    function test_Layer_WFS_mapresizevector(t) {
-        t.plan(2);
-
-        var map = new OpenLayers.Map("map");
-        map.addLayer(new OpenLayers.Layer.WMS("WMS", "url", {}));
-        var layer = new OpenLayers.Layer.WFS(name, "url", {});
-        t.ok(layer.renderer.CLASS_NAME, "layer has a renderer");
-        map.addLayer(layer);
-        setSize = false;
-        layer.renderer.setSize = function() { setSize = true; }
-        layer.onMapResize();
-        t.eq(setSize, true, "Renderer resize called on map size change.");
-        map.destroy();     
-
-    }
-    function test_Layer_WFS_drawmap(t) {
-        t.plan(2);
-        var map = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
-        map.addLayer(layer);
-
-        layer = new OpenLayers.Layer.WFS( "Owl Survey",
-            "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?",
-            {typename: "OWLS", maxfeatures: 10},
-            { featureClass: OpenLayers.Feature.WFS});
-        map.addLayer(layer);
-        map.addControl(new OpenLayers.Control.LayerSwitcher());
-        try { 
-            map.setCenter(new OpenLayers.LonLat(-100, 60), 3);
-        } catch (Exception) {
-        }    
-        t.eq(layer.tile.url, "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?TYPENAME=OWLS&MAXFEATURES=10&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&SRS=EPSG%3A4326&BBOX=-187.890625,-36.6796875,-12.109375,156.6796875", "Tile URL is set correctly when not encoded");
-        map.destroy();     
-        var map = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'}
-            );
-        map.addLayer(layer);
-
-        layer = new OpenLayers.Layer.WFS( "Owl Survey",
-            "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?",
-            {typename: "OWLS", maxfeatures: 10},
-            { featureClass: OpenLayers.Feature.WFS, 'encodeBBOX': true});
-        map.addLayer(layer);
-        map.addControl(new OpenLayers.Control.LayerSwitcher());
-        try { 
-            map.setCenter(new OpenLayers.LonLat(-100, 60), 3);
-        } catch (Exception) {
-        }  
-        t.eq(layer.tile.url, "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?TYPENAME=OWLS&MAXFEATURES=10&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&SRS=EPSG%3A4326&BBOX=-187.890625%2C-36.679687%2C-12.109375%2C156.679688", "Tile URL is set correctly when not encoded");
-        map.destroy();     
-    }
-    function test_projection_srs(t) {
-        t.plan(1);
-        var map = new OpenLayers.Map('map');
-        map.addLayer(new OpenLayers.Layer("",{isBaseLayer: true} ));
-        // we use an empty moveTo function because we don't want to request tiles
-        var layer = new OpenLayers.Layer.WFS("","/wfs",{},{'projection': new OpenLayers.Projection("EPSG:900913"),
-            moveTo: function() {}});
-        map.addLayer(layer);
-        map.zoomToMaxExtent();
-        var params = OpenLayers.Util.getParameters(layer.getFullRequestString());
-        t.eq(params.SRS, "EPSG:900913", "SRS represents projection of WFS layer, instead of map (#1537)");   
-    }
-
-
-  </script>
-</head>
-<body>
-<div id="map" style="width:500px;height:550px"></div>
-</body>
-</html>
diff --git a/tests/Layer/WMS.html b/tests/Layer/WMS.html
index 05b2adb..c83103f 100644
--- a/tests/Layer/WMS.html
+++ b/tests/Layer/WMS.html
@@ -5,6 +5,9 @@
     <script type="text/javascript">window.alert = oldAlert;</script>
 <script src="../OLLoader.js"></script>
   <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var layer;
 
@@ -83,20 +86,15 @@
             BBOX: [1,2,3,4],
             WIDTH: "256", HEIGHT: "256"
         });
-        t.eq( img.src,
+        t.eq( tile.url,
              layer.getFullRequestString(tParams),
              "image src is created correctly via addtile" );
-        t.eq( tile.frame.style.top, "6px", "image top is set correctly via addtile" );
-        t.eq( tile.frame.style.left, "5px", "image top is set correctly via addtile" );
-
-        var firstChild = layer.div.firstChild.firstChild;
-        if (!isMozilla)
-            t.ok( true, "skipping element test outside of Mozilla");
-        else
-            t.ok( firstChild instanceof HTMLElement, "div first child is an image object" );
-        t.eq( firstChild.src,
-             layer.getFullRequestString(tParams),
-             "div first child is correct image object" );
+        t.eq( tile.getTile().style.top, "6%", "image top is set correctly via addtile" );
+        t.eq( tile.getTile().style.left, "5%", "image top is set correctly via addtile" );
+
+        var firstChild = layer.div.firstChild;
+        t.eq( firstChild.nodeName.toLowerCase(), "img", "div first child is an image object" );
+        t.ok( firstChild == img, "div first child is correct image object" );
         t.eq( tile.position.toString(), "x=5,y=6", "Position of tile is set correctly." );
         map.destroy();
     }
@@ -119,20 +117,15 @@
             BBOX: "1,2,3,4",
             WIDTH: "256", HEIGHT: "256"
         });
-        t.eq( img.src,
+        t.eq( tile.url,
              layer.getFullRequestString(tParams),
              "image src is created correctly via addtile" );
-        t.eq( tile.frame.style.top, "6px", "image top is set correctly via addtile" );
-        t.eq( tile.frame.style.left, "5px", "image top is set correctly via addtile" );
-
-        var firstChild = layer.div.firstChild.firstChild;
-        if (!isMozilla)
-            t.ok( true, "skipping element test outside of Mozilla");
-        else
-            t.ok( firstChild instanceof HTMLElement, "div first child is an image object" );
-        t.eq( firstChild.src,
-             layer.getFullRequestString(tParams),
-             "div first child is correct image object" );
+        t.eq( tile.getTile().style.top, "6%", "image top is set correctly via addtile" );
+        t.eq( tile.getTile().style.left, "5%", "image top is set correctly via addtile" );
+
+        var firstChild = layer.div.firstChild;
+        t.eq( firstChild.nodeName.toLowerCase(), "img", "div first child is an image object" );
+        t.ok( firstChild, img, "div first child is correct image object" );
         t.eq( tile.position.toString(), "x=5,y=6", "Position of tile is set correctly." );
         map.destroy();
     }
@@ -281,71 +274,25 @@
 
     }
 
-    function test_Layer_WMS_setOpacity (t) {
-        t.plan( 5 );
+    function test_setOpacity(t) {
+        t.plan(1);
 
-        var map = new OpenLayers.Map('map');
-        map.projection = "xx";
-        tUrl = "http://octo.metacarta.com/cgi-bin/mapserv";
-        tParams = { layers: 'basic',
-                   format: 'image/png'};
-        tOptions = { 'opacity': '0.5' };
-        var tLayer = new OpenLayers.Layer.WMS(name, tUrl, tParams, tOptions);
-        map.addLayer(tLayer);
+        var layer = new OpenLayers.Layer.WMS(
+            null, "/bogus/wms", {layers: "mylayer"}
+        );
+        var map = new OpenLayers.Map("map");
+        map.addLayer(layer);
+        
         map.zoomToMaxExtent();
-        t.eq(tLayer.opacity, "0.5", "Opacity is set correctly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.5, "Opacity on tile is correct");
-        tLayer.setOpacity("0.6");
-        t.eq(tLayer.opacity, "0.6", "setOpacity works properly");
-        t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.6, "Opacity on tile is changed correctly");
-        var pixel = new OpenLayers.Pixel(5,6);
-        var tile = tLayer.addTile(new OpenLayers.Bounds(1,2,3,4), pixel);
-        tile.draw();
-        t.eq(parseFloat(tile.imgDiv.style.opacity), 0.6, "Tile opacity is set correctly");
-
-        map.destroy();
-    }
-
-    function test_Layer_WMS_Reproject (t) {
-        var validkey = (window.location.protocol == "file:") ||
-                       (window.location.host == "localhost") ||
-                       (window.location.host == "openlayers.org");
-        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) {
-            t.plan(5);
-
-            var map = new OpenLayers.Map('map');
-            var layer = new OpenLayers.Layer.Google("Google");
-            map.addLayer(layer);
-            var wmslayer = new OpenLayers.Layer.WMS(name, url, params,
-                                                    {isBaseLayer: false, reproject:true, buffer: 2});
-            wmslayer.isBaseLayer=false;
-            map.addLayer(wmslayer);
-            map.setCenter(new OpenLayers.LonLat(0,0), 5);
-            var tile = wmslayer.grid[0][0];
-            t.eq( tile.bounds.left, -22.5, "left side matches" );
-            t.eq( tile.bounds.right, -11.25, "right side matches" );
-            t.eq( tile.bounds.bottom.toFixed(6), '11.178402', "bottom side matches" );
-            t.eq( tile.bounds.top.toFixed(6), '21.943046', "top side matches" );
+        
+        layer.setOpacity(0.5);
+        t.delay_call(1, function() {
+            t.eq(parseFloat(layer.div.firstChild.style.opacity), 0.5, "opacity set");
             map.destroy();
-        } else {
-            t.plan(1);
-            t.debug_print("can't test google layer from " +
-                          window.location.host);
-        }
-
-        var map = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS(name, url, params, {buffer: 2});
-        map.addLayer(layer);
-        map.setCenter(new OpenLayers.LonLat(0,0), 5);
-        var tile = layer.grid[0][0];
-        t.ok( tile.bounds.equals(new OpenLayers.Bounds(-33.75, 33.75, -22.5, 45)), "okay");
-
-        map.destroy();
+        });
     }
 
+
     function test_Layer_WMS_noGutters (t) {
         t.plan(2);
         var map = new OpenLayers.Map('map');
@@ -388,6 +335,42 @@
 
     }
 
+    function test_maxExtent(t) {
+        t.plan(5);
+        
+        var layer = new OpenLayers.Layer.WMS(
+            null, "http://example.com/wms", 
+            {layers: "foo"}, 
+            {maxExtent: [-180, 0, 0, 90]}
+        );
+        
+        t.ok(layer.maxExtent instanceof OpenLayers.Bounds, "(array) bounds instance");
+        t.eq(layer.maxExtent.left, -180, "(array) bounds left");
+        t.eq(layer.maxExtent.bottom, 0, "(array) bounds left");
+        t.eq(layer.maxExtent.right, 0, "(array) bounds right");
+        t.eq(layer.maxExtent.top, 90, "(array) bounds top");
+        
+        layer.destroy();
+    }
+
+    function test_minExtent(t) {
+        t.plan(5);
+        
+        var layer = new OpenLayers.Layer.WMS(
+            null, "http://example.com/wms", 
+            {layers: "foo"}, 
+            {minExtent: [-180, 0, 0, 90]}
+        );
+        
+        t.ok(layer.minExtent instanceof OpenLayers.Bounds, "(array) bounds instance");
+        t.eq(layer.minExtent.left, -180, "(array) bounds left");
+        t.eq(layer.minExtent.bottom, 0, "(array) bounds left");
+        t.eq(layer.minExtent.right, 0, "(array) bounds right");
+        t.eq(layer.minExtent.top, 90, "(array) bounds top");
+        
+        layer.destroy();
+    }
+
     function test_tileOrigin(t) {
         t.plan(4);
         
@@ -405,6 +388,7 @@
         var map = new OpenLayers.Map({
             div: "map",
             maxExtent: new OpenLayers.Bounds(-185, -95, 185, 95),
+            maxResolution: 1.40625,
             layers: [dummy, unconstrained, constrained],
             center: new OpenLayers.LonLat(0, 0),
             zoom: 1
@@ -419,19 +403,6 @@
         
     }
 
-
-
-    // DEPRECATED -- REMOVE IN 3.0
-    function test_Layer_Untiled_WMS(t) {
-        t.plan(1);
-
-        var layer = new OpenLayers.Layer.WMS.Untiled();
-
-        var clone = layer.clone();
-
-        t.ok(clone.singleTile, "regression test: clone works. this is for #1013");
-    }
-
     function test_Layer_WMS_destroy (t) {
 
         t.plan( 1 );
diff --git a/tests/Layer/WMS/Post.html b/tests/Layer/WMS/Post.html
deleted file mode 100644
index 90ff0b8..0000000
--- a/tests/Layer/WMS/Post.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<html>
-<head>
-    <script src="../../OLLoader.js"></script>
-    <script type="text/javascript">
-    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
-    var isOpera   = (navigator.userAgent.indexOf("Opera") != -1);
-    var layer;
-
-    var name = 'Test Layer';
-    var url = "http://octo.metacarta.com/cgi-bin/mapserv";
-    var params = { map: '/mapdata/vmap_wms.map', 
-                   layers: 'basic', 
-                   format: 'image/jpeg'};
-
-    function test_Layer_WMS_Post_constructor (t) {
-        t.plan( 2 );
-
-        var url = "http://octo.metacarta.com/cgi-bin/mapserv";
-        var options = {unsupportedBrowsers: []};
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
-
-        t.eq(
-            layer.usePost, true,
-            "Supported browsers use IFrame tiles.");
-
-        layer.destroy();
-
-        var options = { unsupportedBrowsers: [OpenLayers.BROWSER_NAME]};
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
-        t.eq(
-            layer.usePost, false,
-            "unsupported browsers use Image tiles.");
-        layer.destroy();
-    }
-
-    function test_Layer_WMS_Post_addtile (t) {
-        t.plan( 3 );
-    
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params);
-        var map = new OpenLayers.Map('map');
-        map.addLayer(layer);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var pixel  = new OpenLayers.Pixel(5,6);
-        var tile   = layer.addTile(bounds, pixel);
-        
-        if(isMozilla || isOpera) {
-            t.ok(
-                tile instanceof OpenLayers.Tile.Image,
-                "tile is an instance of OpenLayers.Tile.Image");
-        }
-        else {
-            t.ok(
-                tile.useIFrame !== undefined,
-                "tile is created with the OpenLayers.Tile.Image.IFrame mixin");
-        }
-        map.destroy();
-
-        // test the unsupported browser
-        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);
-        t.ok(
-            tile instanceof OpenLayers.Tile.Image,
-            "unsupported browser: tile is an instance of Tile.Image");
-        layer.destroy();
-
-        // test a supported browser
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params, {
-            unsupportedBrowsers: []
-        });
-        map.addLayer(layer);
-        var tile2 = layer.addTile(bounds, pixel);
-        t.ok(
-            tile2.createIFrame,
-            "supported browser: tile is created with the Tile.Image.IFrame mixin");
-        map.destroy();
-    }
-
-  </script>
-</head>
-<body>
-<div id="map" style="width:500px;height:550px"></div>
-</body>
-</html>
diff --git a/tests/Layer/WMTS.html b/tests/Layer/WMTS.html
index aa1bed4..e8d7a23 100644
--- a/tests/Layer/WMTS.html
+++ b/tests/Layer/WMTS.html
@@ -119,8 +119,8 @@
                     tileSize: new OpenLayers.Size(512, 512),            
                     requestEncoding: "REST"            
                 });
-                var bl = {bounds: new OpenLayers.Bounds(1,2,0,0)};
-                var tr = {bounds: new OpenLayers.Bounds(0,0,3,4)};
+                var bl = {bounds: new OpenLayers.Bounds(1,2,2,3)};
+                var tr = {bounds: new OpenLayers.Bounds(2,3,3,4)};
                 layer1.grid = [[6, tr],[bl, 7]];
                 var bounds = layer1.getTilesBounds();            
                 var testBounds = new OpenLayers.Bounds(1,2,3,4);                
@@ -136,7 +136,8 @@
                     layer: "world",
                     style: "blue_marble",
                     matrixSet: "arcgis_online",
-                    tileSize: new OpenLayers.Size(512, 512),            
+                    tileSize: new OpenLayers.Size(512, 512),  
+                    maxResolution: 1.40625,          
                     requestEncoding: "REST"            
                 });
                 map.addLayer(layer1);
@@ -156,7 +157,8 @@
                     layer: "world",
                     style: "blue_marble",
                     matrixSet: "arcgis_online",
-                    tileSize: new OpenLayers.Size(512, 512),            
+                    tileSize: new OpenLayers.Size(512, 512),       
+                    maxResolution: 1.40625,     
                     requestEncoding: "REST"            
                 });                                
                 map.addLayer(layer1);
@@ -220,6 +222,39 @@
                 t.eq(tileurl1, "http://example.com/wmts/1.0.0/world/blue_marble/arcgis_online/1/0/0.jpg", "layer1 getURL returns correct url");                                        
                 map.destroy();
             }
+
+            function test_getURL_resourceUrl(t) {
+                t.plan(2);
+            
+                var xml = document.getElementById("capabilities").firstChild.nodeValue;
+                var doc = new OpenLayers.Format.XML().read(xml);
+                var obj = new OpenLayers.Format.WMTSCapabilities().read(doc);
+
+                var template = "http://www.example.com/{style}/{Time}/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png";
+                var layer = new OpenLayers.Layer.WMTS({
+                    requestEncoding: "REST",
+                    url: template,
+                    layer: "GeoWebCache_USA_WMTS",
+                    style: "foo",
+                    matrixSet: "arcgis-online",
+                    params: {Time: "2011"},
+                    dimensions: ["Time"]
+                });   
+
+                var map = new OpenLayers.Map("map", {
+                    layers: [layer],
+                    projection: "EPSG:4326",                                    
+                    maxResolution: 0.3515625,
+                    maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90)
+                });
+                map.setCenter(new OpenLayers.LonLat(-97.0, 38.0), 1);
+                t.eq(layer.getURL(new OpenLayers.Bounds(-135.0, 0.0, -90.0, 45.0)), 
+                     "http://www.example.com/foo/2011/foo/arcgis-online/1/1/1.png", "getURL returns correct url");
+                map.zoomIn();
+                t.eq(layer.getURL(new OpenLayers.Bounds(-180.0, 0.0, -90.0, 90.0)), 
+                     "http://www.example.com/foo/2011/foo/arcgis-online/2/2/2.png", "getURL returns correct url");
+                map.destroy();
+            }
             
             function test_destroy (t) {
                 t.plan(3);
@@ -258,6 +293,37 @@
                 t.ok( layer2.grid == null, "tiles appropriately destroyed");
                 map.destroy();
             }    
+
+            function test_getIdentifier(t) {
+                t.plan(2);
+
+                var map = new OpenLayers.Map('map');
+                var layer, identifier;
+
+                layer = new OpenLayers.Layer.WMTS({
+                    name: "Blue Marble WMTS",
+                    url: "http://example.com/wmts/",
+                    layer: "world",
+                    style: "blue_marble",
+                    matrixSet: "arcgis_online",
+                    tileSize: new OpenLayers.Size(512, 512),
+                    requestEncoding: "REST"
+                });
+                map.addLayer(layer);
+                map.setCenter(new OpenLayers.LonLat(0,0), 5);
+
+                layer.zoomOffset = 2;
+                identifier = layer.getIdentifier();
+                t.eq(identifier, 7, '[zoomOffset] getIdentifier return value is correct');
+
+                layer.serverResolutions = ['offset', 1.40625, 0.703125, 0.3515625, 0.17578125,
+                                           0.087890625, 0.0439453125];
+                identifier = layer.getIdentifier();
+                t.eq(identifier, 6, '[serverResolutions] getIdentifier return value is correct');
+
+                map.destroy();
+            }
+
         </script>
     </head>
     <body>
diff --git a/tests/Layer/WrapDateLine.html b/tests/Layer/WrapDateLine.html
index 2f3430e..700abf3 100644
--- a/tests/Layer/WrapDateLine.html
+++ b/tests/Layer/WrapDateLine.html
@@ -2,6 +2,9 @@
 <head>
 <script src="../OLLoader.js"></script>
   <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var layer; 
 
@@ -127,36 +130,38 @@
     
     }
     function test_Layer_WrapDateLine_WMS (t) {
-        t.plan( 3 );
+        t.plan( 4 );
 
         var url = "http://octo.metacarta.com/cgi-bin/mapserv";
         layer = new OpenLayers.Layer.WMS(name, url, params, {'wrapDateLine':true,encodeBBOX:true, buffer: 2});
-        var m = new OpenLayers.Map('map');
+        var m = new OpenLayers.Map('map', {adjustZoom: function(z) {return z;}});
         m.addLayer(layer);
         m.zoomToMaxExtent();
         t.eq(layer.grid[3][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "cell [3][0] is wrapped around the world.");
-        t.eq(layer.grid[0][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C450%2C180%2C630&WIDTH=256&HEIGHT=256", "cell [0][0] is wrapped around the world lon, but not lat");
-        t.eq(layer.grid[0][3].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=-180%2C450%2C0%2C630&WIDTH=256&HEIGHT=256", "cell [3][0] is not wrapped at all.");
+        t.eq(layer.grid[3][1].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=-180%2C-90%2C0%2C90&WIDTH=256&HEIGHT=256", "cell [3][1] is wrapped around the world.");
+        t.eq(layer.grid[3][2].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "cell [3][2] is not wrapped at all.");
+        t.ok(layer.grid[0][2].url == null, "no latitudinal wrapping - tile not loaded if outside maxExtent");
         m.destroy();
 
     }
     function test_Layer_WrapDateLine_KaMap (t) {
-        t.plan( 3 );
+        t.plan( 4 );
 
         var layer = new OpenLayers.Layer.KaMap( "Blue Marble NG",
              "http://www.openlayers.org/world/index.php",
              {g: "satellite", map: "world"},
              {wrapDateLine: true, buffer: 2} ); 
-        var m = new OpenLayers.Map('map');
+        var m = new OpenLayers.Map('map', {adjustZoom: function(z) {return z;}});
         m.addLayer(layer);
         m.zoomToMaxExtent();
-        t.eq(layer.grid[0][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=0&s=221471921.25", "grid[0][0] kamap is okay");
-        t.eq(layer.grid[0][3].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=-256&s=221471921.25", "grid[0][3] kamap is okay");
-        t.eq(layer.grid[3][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-512&l=0&s=221471921.25", "grid[3][0] is okay");
+        t.eq(layer.grid[5][7].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=0&l=-256&s=221471921.25", "grid[5][7] kamap is okay");
+        t.eq(layer.grid[5][6].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=0&l=0&s=221471921.25", "grid[5][6] kamap is okay");
+        t.eq(layer.grid[5][5].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=0&l=-256&s=221471921.25", "grid[5][5] is okay");
+        t.ok(layer.grid[7][6].url == null, "no latitudinal wrapping - tile not loaded if outside maxExtent");
         m.destroy();
     }
     function test_Layer_WrapDateLine_WMS_Overlay (t) {
-        t.plan( 3 );
+        t.plan( 4 );
         var url = "http://octo.metacarta.com/cgi-bin/mapserv";
         baselayer = new OpenLayers.Layer.WMS(name, url, params, {'wrapDateLine':true, buffer: 2});
         var layer = new OpenLayers.Layer.WMS( "DM Solutions Demo",
@@ -164,13 +169,14 @@
             {layers: "bathymetry,land_fn,park,drain_fn,drainage," +
                      "prov_bound,fedlimit,rail,road,popplace",
              transparent: "true", format: "image/png"},
-            {wrapDateLine: true, reproject: false,encodeBBOX:true, buffer:2});
-        var m = new OpenLayers.Map('map');
+            {wrapDateLine: true, encodeBBOX:true, buffer:2});
+        var m = new OpenLayers.Map('map', {adjustZoom: function(z) {return z;}});
         m.addLayers([baselayer,layer]);
         m.zoomToMaxExtent();
-        t.eq(layer.grid[0][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C450%2C180%2C630&WIDTH=256&HEIGHT=256", "grid[0][0] wms overlay is okay");
-        t.eq(layer.grid[0][3].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=-180%2C450%2C0%2C630&WIDTH=256&HEIGHT=256", "grid[0][3] wms overlay is okay");
-        t.eq(layer.grid[3][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "grid[3][0] wms overlay okay");
+        t.eq(layer.grid[3][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "grid[0][0] wms overlay is okay");
+        t.eq(layer.grid[3][1].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=-180%2C-90%2C0%2C90&WIDTH=256&HEIGHT=256", "grid[0][3] wms overlay is okay");
+        t.eq(layer.grid[3][2].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "grid[3][0] wms overlay okay");
+        t.ok(layer.grid[0][2].url == null, "no latitudinal wrapping - tile not loaded if outside maxExtent");
         m.destroy();
     }
 
diff --git a/tests/Layer/XYZ.html b/tests/Layer/XYZ.html
index a13ee84..bd6d26e 100644
--- a/tests/Layer/XYZ.html
+++ b/tests/Layer/XYZ.html
@@ -41,8 +41,8 @@
 
         layer = new OpenLayers.Layer.XYZ(name, url, options);
 
-        var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
-        var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
+        var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
+        var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
         layer.grid = [ [6, tr], 
                        [bl, 7]];
 
@@ -195,7 +195,7 @@
         
         var map = new OpenLayers.Map({
             div: "map",
-            maxResolution: OpenLayers.Map.prototype.maxResolution / Math.pow(2, offset)
+            maxResolution: 1.40625 / Math.pow(2, offset)
         });
         var layer = new OpenLayers.Layer.XYZ(name, url, {zoomOffset: offset});
         map.addLayer(layer);
@@ -211,7 +211,7 @@
         
         var map = new OpenLayers.Map({
             div: "map",
-            maxResolution: OpenLayers.Map.prototype.maxResolution / Math.pow(2, offset)
+            maxResolution: 1.40625 / Math.pow(2, offset)
         });
         var layer = new OpenLayers.Layer.XYZ(name, url, {zoomOffset: offset});
         map.addLayer(layer);
@@ -251,17 +251,11 @@
     }
     
     function test_clone(t) {
-        t.plan(2);
-        
-        var clone;
+        t.plan(1);
         
         layer = new OpenLayers.Layer.XYZ(name, url, options);
-        clone = layer.clone();
+        var clone = layer.clone();
         t.ok(clone instanceof OpenLayers.Layer.XYZ, "clone is a Layer.XYZ instance");
-
-        layer = new OpenLayers.Layer.OSM();
-        clone = layer.clone();
-        t.ok(clone instanceof OpenLayers.Layer.OSM, "clone is a Layer.OSM instance");
     }
 
   </script>
diff --git a/tests/Layer/Yahoo.html b/tests/Layer/Yahoo.html
deleted file mode 100755
index b3b8372..0000000
--- a/tests/Layer/Yahoo.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<html>
-<head>
-  <script src="http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=euzuro-openlayers"></script>
-  <script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-    var layer; 
-
-    function test_Layer_Yahoo_constructor (t) {
-        t.plan( 4 );
-
-        var tempEventPane = OpenLayers.Layer.EventPane.prototype.initialize;
-        OpenLayers.Layer.EventPane.prototype.initialize = function(name, options) {
-            t.ok(name == g_Name, "EventPane initialize() called with correct name");
-            t.ok(options == g_Options, "EventPane initialize() called with correct options");
-        }
-
-        var tempFixedZoomLevels = OpenLayers.Layer.FixedZoomLevels.prototype.initialize;
-        OpenLayers.Layer.FixedZoomLevels.prototype.initialize = function(name, options) {
-            t.ok(name == g_Name, "FixedZoomLevels initialize() called with correct name");
-            t.ok(options == g_Options, "FixedZoomLevels initialize() called with correct options");
-        }
-
-
-        g_Name = {};
-        g_Options = {};        
-        var l = new OpenLayers.Layer.Yahoo(g_Name, g_Options);
-
-        OpenLayers.Layer.EventPane.prototype.initialize = tempEventPane;
-        OpenLayers.Layer.FixedZoomLevels.prototype.initialize = tempFixedZoomLevels;
-    }
-
-    function test_Layer_Yahoo_loadMapObject(t) {
-        t.plan(5);
-        
-        var temp = YMap;
-        YMap = OpenLayers.Class({
-            initialize: function(div, type, size) {
-                t.ok(div == g_Div, "correct div passed to YMap constructor");
-                t.ok(type == g_Type, "correct type passed to YMap constructor");
-                t.ok(size == g_YMapSize, "correct size passed to YMap constructor");
-            },
-            disableKeyControls: function() {
-                t.ok(true, "disableKeyControls called on map object");
-            }
-        });
-        
-        g_Div = {};
-        g_Type = {};
-        g_MapSize = {};
-        g_YMapSize = {};
-        
-        var l = new OpenLayers.Layer.Yahoo();
-        l.div = g_Div;
-        l.type = g_Type;
-        l.map = {
-            'getSize': function() {
-                return g_MapSize;
-            }
-        };
-        l.getMapObjectSizeFromOLSize = function(mapSize) {
-            t.ok(mapSize == g_MapSize, "correctly translating map size from ol to YSize");
-            return g_YMapSize;
-        };
-
-        l.loadMapObject();
-
-        YMap = temp;
-    }    
-
-    function test_Layer_Yahoo_onMapResize(t) {
-        t.plan(2);
-        
-        g_MapSize = {};
-        g_YMapSize = {};
-        
-        var l = new OpenLayers.Layer.Yahoo();
-        l.mapObject = {
-            'resizeTo': function(size) {
-                t.ok(size == g_YMapSize, "correct YSize passed to reiszeTo on map object");
-            }
-        }
-        l.map = {
-            'getSize': function() {
-                return g_MapSize;
-            }
-        };
-        l.getMapObjectSizeFromOLSize = function(mapSize) {
-            t.ok(mapSize == g_MapSize, "correctly translating map size from ol to YSize");
-            return g_YMapSize;
-        };
-
-        l.onMapResize();
-    }
-    
-    function test_Layer_Yahoo_getMapObjectSizeFromOLSize(t) {
-        t.plan(2);
-        
-        var temp = YSize;
-        YSize = function(w, h) {
-            t.ok(w == g_Size.w, "correct width passed to YSize constructor");
-            t.ok(h == g_Size.h, "correct height passed to YSize constructor");
-        }
-        
-        g_Size = {
-            'w': {},
-            'h': {}
-        };
-        
-        OpenLayers.Layer.Yahoo.prototype.getMapObjectSizeFromOLSize(g_Size);
-
-        YSize = temp;
-    }
-
-
-  </script>
-</head>
-<body>
-  <div id="map"></div>
-</body>
-</html>
diff --git a/tests/Map.html b/tests/Map.html
index 39da192..860ba33 100644
--- a/tests/Map.html
+++ b/tests/Map.html
@@ -1,7 +1,22 @@
 <html>
 <head>
-  <script src="OLLoader.js"></script>
-  <script type="text/javascript">
+    <script>
+    /**
+    * Because browsers that implement requestAnimationFrame may not execute
+    * animation functions while a window is not displayed (e.g. in a hidden
+    * iframe as in these tests), we mask the native implementations here.  The
+    * native requestAnimationFrame functionality is tested in Util.html and
+    * in PanZoom.html (where a popup is opened before panning).  The panTo tests
+    * here will test the fallback setTimeout implementation for animation.
+    */
+    window.requestAnimationFrame = 
+        window.webkitRequestAnimationFrame =
+        window.mozRequestAnimationFrame =
+        window.oRequestAnimationFrame =
+        window.msRequestAnimationFrame = null;
+    </script>
+    <script src="OLLoader.js"></script>
+    <script type="text/javascript">
 
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var map;
@@ -37,6 +52,41 @@
         map.destroy();
     }
     
+    function test_Map_constructor_convenience(t) {
+        t.plan(13);
+        var map = new OpenLayers.Map({
+            maxExtent: [-170, -80, 170, 80],
+            restrictedExtent: [-120, -65, 120, 65],
+            layers: [
+                new OpenLayers.Layer(null, {isBaseLayer: true})
+            ],
+            center: [-111, 45],
+            zoom: 3
+        });
+        
+        // maxExtent from array
+        t.ok(map.maxExtent instanceof OpenLayers.Bounds, "maxExtent bounds");
+        t.eq(map.maxExtent.left, -170, "maxExtent left");
+        t.eq(map.maxExtent.bottom, -80, "maxExtent bottom");
+        t.eq(map.maxExtent.right, 170, "maxExtent right");
+        t.eq(map.maxExtent.top, 80, "maxExtent top");
+
+        // restrictedExtent from array
+        t.ok(map.restrictedExtent instanceof OpenLayers.Bounds, "restrictedExtent bounds");
+        t.eq(map.restrictedExtent.left, -120, "restrictedExtent left");
+        t.eq(map.restrictedExtent.bottom, -65, "restrictedExtent bottom");
+        t.eq(map.restrictedExtent.right, 120, "restrictedExtent right");
+        t.eq(map.restrictedExtent.top, 65, "restrictedExtent top");
+        
+        var center = map.getCenter();
+        t.eq(center.lon, -111, "center lon");
+        t.eq(center.lat, 45, "center lat");
+        
+        t.eq(map.getZoom(), 3, "zoom");
+        
+        map.destroy();
+    }
+    
     function test_Map_constructor_late_rendering(t) {
         t.plan( 4 );
         
@@ -163,7 +213,7 @@
     }
 
     function test_Map_center(t) {
-        t.plan(11);
+        t.plan(14);
         var log = [];
         map = new OpenLayers.Map('map', {
             eventListeners: {
@@ -186,7 +236,7 @@
         t.ok( map.getCenter().equals(ll), "map center is correct after calling setCenter, zoom in");
         map.zoomOut();
         t.eq( map.getZoom(), 0, "map.zoom is correct after calling setCenter,zoom in, zoom out");
-
+        
         log = [];
         map.zoomTo(5);
         t.eq(log[0], "movestart", "zoomTo fires movestart event");
@@ -205,6 +255,13 @@
         map.getCenter().lon = 10;
         t.ok( map.getCenter().equals(ll), "map.getCenter returns a clone of map.center");
 
+        // allow calling setCenter with an array
+        map.setCenter([4, 2]);
+        var center = map.getCenter();
+        t.ok(center instanceof OpenLayers.LonLat, "(array) center is lonlat");
+        t.eq(center.lon, 4, "(array) center lon");
+        t.eq(center.lat, 2, "(array) center lat");
+
         map.destroy();
     }
 
@@ -338,11 +395,13 @@
  */
 
     function test_Map_isValidZoomLevel(t) {
-        t.plan(4);
+        t.plan(5);
         var map = new OpenLayers.Map("map");
         map.addLayer(new OpenLayers.Layer(null, {
-            isBaseLayer: true, numZoomLevels: 19
-        }))
+            isBaseLayer: true, wrapDateLine: true, numZoomLevels: 19
+        }));
+        map.zoomToMaxExtent();
+        
         var valid;
 
         valid = OpenLayers.Map.prototype.isValidZoomLevel.apply(map, [-1]);
@@ -356,6 +415,9 @@
 
         valid = OpenLayers.Map.prototype.isValidZoomLevel.apply(map, [19]);
         t.eq(valid, false, "19 is not a valid zoomLevel");
+        
+        map.moveTo([16, 48], 0);
+        t.eq(map.getCenter().toShortString(), "0, 0", "no panning when moveTo is called with invalid zoom");
 
         map.destroy();
     }
@@ -684,7 +746,7 @@
     }
 
     function test_Map_double_addLayer(t) {
-        t.plan( 1 );    
+        t.plan(2);
 
         map = new OpenLayers.Map($('map'));
         layer = new OpenLayers.Layer.WMS('Test Layer', 
@@ -692,15 +754,16 @@
                     {map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'} 
                     );
 
-        map.addLayers([layer,layer]);
-        
-        t.eq( map.layers.length, 1, "Map does not allow double adding of layers." );
+        var added = map.addLayer(layer);
+        t.ok(added === true, "Map.addLayer returns true if the layer is added to the map.");
+        var added = map.addLayer(layer);
+        t.ok(added === false, "Map.addLayer returns false if the layer is already present.");
     
         map.destroy();
     }
 
     function test_Map_setBaseLayer(t) {
-        t.plan( 4 );
+        t.plan( 6 );
         
         map = new OpenLayers.Map('map');
 
@@ -728,6 +791,20 @@
         t.ok(map.baseLayer == wmslayer2, "setbaselayer correctly sets 'baseLayer' property");
 
         map.destroy();
+
+        var l1 = new OpenLayers.Layer(),
+            l2 = new OpenLayers.Layer(null, {maxResolution: 1.4});
+        map = new OpenLayers.Map({
+            div: 'map',
+            allOverlays: true,
+            layers: [l1, l2],
+            zoom: 0,
+            center: [0, 0]
+        });
+        t.eq(l2.div.style.display, "none", "Layer invisible because not in range");
+        map.raiseLayer(l1, 1);
+        t.eq(l2.div.style.display, "block", "Layer visible after base layer change because in range now");
+        map.destroy();
     }
     
     function test_Map_removeLayer(t) {
@@ -1213,10 +1290,10 @@
         t.eq(res, null, "getResolutionForZoom returns null for no base layer");
         map.fractionalZoom = true;
         var layer = new OpenLayers.Layer("test", {isBaseLayer: true});
+        map.addLayer(layer);
         layer.getResolutionForZoom = function() {
             t.ok(true, "getResolutionForZoom calls base layer getResolutionForZoom");
         }
-        map.addLayer(layer);
         var res = map.getResolutionForZoom();
         layer.destroy();
         map.destroy();
@@ -1358,6 +1435,7 @@
         
         var m = {
             'baseLayer': { 'units': {} },
+            'size': {'w': 10, 'h': 15},
             'getSize': function() { return {'w': 10, 'h': 15}; },
             'getCachedCenter': function() { return {'lon': -5, 'lat': -25}; },
             'zoomToExtent': function(extent, closest) {
@@ -1383,54 +1461,93 @@
     }
     
     function test_Map_zoomToExtent(t) {
-        t.plan(8);
-
+        t.plan(12);
         
-        var m = {
-            'baseLayer': {
-                'wrapDateLine': false      
-            },
-            'setCenter': function(center, zoomLevel) {
-                g_Center = center;
-                g_ZoomLevel = zoomLevel;
-            },
-            'getZoomForExtent': function(bounds, closest) {
-                t.ok(bounds.equals(g_ToCenterBounds), "bounds correctly passed into getZoomForExtent()");
-                t.ok(closest == g_Closest, "closest correctly passed along to getZoomForExtent()");
-                return g_ZoomLevelReturn;
-            }
-        };
-
-    //no wrapDateLine        
-        g_ZoomLevelReturn = {};
-        g_Bounds = new OpenLayers.Bounds(-20,-15,0,5);
-        g_ExpectedCenter = new OpenLayers.LonLat(-10,-5);
-        g_Closest = {};
-        g_ToCenterBounds = g_Bounds;
-        var args = [g_Bounds, g_Closest];
-        OpenLayers.Map.prototype.zoomToExtent.apply(m, args);
+        var map = new OpenLayers.Map("map");
+        var layer = new OpenLayers.Layer(null, {isBaseLayer: true});
+        map.addLayer(layer);
         
-        t.ok(g_Center.equals(g_ExpectedCenter), "setCenter called on correct center");
-        t.ok(g_ZoomLevel == g_ZoomLevelReturn, "correctly passes along zoom level as returned from getZoomForExtent()");
-
-
-    //wrapDateLine
-        m.baseLayer.wrapDateLine = true;
-        m.getMaxExtent = function() { return new OpenLayers.Bounds(-200,-200,200,200); };
-
-        g_ZoomLevelReturn = {};
-        g_BoundsCenter = {};
-        g_Bounds = new OpenLayers.Bounds(160,-60,-60,60);
-        g_ExpectedCenter = new OpenLayers.LonLat(-150,0);
-        g_Closest = {};
-        g_ToCenterBounds = new OpenLayers.Bounds(160,-60,340,60);
-        var args = [g_Bounds, g_Closest];
-        OpenLayers.Map.prototype.zoomToExtent.apply(m, args);
-        t.ok(g_Center.equals(g_ExpectedCenter), "setCenter called on correct center");
-        t.ok(g_ZoomLevel == g_ZoomLevelReturn, "correctly passes along zoom level as returned from getZoomForExtent()");
+        var bounds = new OpenLayers.Bounds(-160, 15, -50, 69);
+        var center;
+        
+        // default for closest
+        map.zoomToExtent(bounds);
+        center = map.getCenter();
+        t.eq(center.lon, -105, "a) correct x");
+        t.eq(center.lat, 42, "a) correct y");
+        t.eq(map.getZoom(), 2, "a) correct zoom");
+
+        // false for closest
+        map.zoomToExtent(bounds, false);
+        center = map.getCenter();
+        t.eq(center.lon, -105, "b) correct x");
+        t.eq(center.lat, 42, "b) correct y");
+        t.eq(map.getZoom(), 2, "b) correct zoom");
+
+        // true for closest
+        map.zoomToExtent(bounds, true);
+        center = map.getCenter();
+        t.eq(center.lon, -105, "c) correct x");
+        t.eq(center.lat, 42, "c) correct y");
+        t.eq(map.getZoom(), 3, "c) correct zoom");
+
+        // accept array
+        map.zoomToExtent([-160, 15, -50, 69]);
+        center = map.getCenter();
+        t.eq(center.lon, -105, "(array) correct x");
+        t.eq(center.lat, 42, "(array) correct y");
+        t.eq(map.getZoom(), 2, "(array) correct zoom");
+        
+        map.destroy();
+    }
 
+    function test_Map_zoomToExtent_wrapped(t) {
+        t.plan(9);
+        
+        var map = new OpenLayers.Map("map");
+        var layer = new OpenLayers.Layer(null, {isBaseLayer: true, wrapDateLine: true});
+        map.addLayer(layer);
         
+        var bounds, center;
+        
+        var cases = [{
+            // real world
+            bbox: [120, -20, 140, 0],
+            center: [130, -10]
+        }, {
+            // one world to the right
+            bbox: [220, -45, 240, 45],
+            center: [-130, 0]
+        }, {
+            // two worlds to the right
+            bbox: [550, -15, 560, 5],
+            center: [-165, -5]
+        }, {
+            // one world to the left
+            bbox: [-240, -15, -220, 5],
+            center: [130, -5]
+        }, {
+            // two worlds to the left
+            bbox: [-600, -15, -580, 5],
+            center: [130, -5]
+        }];
+        
+        var num = cases.length;
+        t.plan(num * 2);
+        
+        var c, bounds, center;
+        for (var i=0; i<num; ++i) {
+            c = cases[i];
+            bounds = OpenLayers.Bounds.fromArray(c.bbox);
+            map.zoomToExtent(bounds);
+            center = map.getCenter();
+            t.eq(center.lon, c.center[0], "y: " + bounds);
+            t.eq(center.lat, c.center[1], "x: " + bounds);
+        }
+        
+        map.destroy();
     }
+
     
     function test_allOverlays(t) {
         
@@ -1595,7 +1712,36 @@
         t.eq(log[1], "move", "followed by move,");
         t.eq(log[log.length-2], "move", "move again before we stop panning,");
         t.eq(log[log.length-1], "moveend", "and moveend when we're done.");
-        
+    }
+
+    function test_pan_no_anim_event_sequence(t) {
+        t.plan(4);
+
+        var log = [];
+        var map = new OpenLayers.Map("map");
+        map.addLayer(
+            new OpenLayers.Layer(null, {isBaseLayer: true})
+        );
+        map.setCenter(new OpenLayers.LonLat(0, 0), 5);
+        map.events.on({
+            "movestart": function() {
+                log.push("movestart");
+            },
+            "move": function() {
+                log.push("move");
+            },
+            "moveend": function() {
+                log.push("moveend");
+            }
+        });
+
+        map.pan(5,5, {animate: false});
+        t.eq(log.length, 3, "no more than 3 events happen.");
+        t.eq(log[0], "movestart", "pan sequence starts with movestart");
+        t.eq(log[1], "move", "followed by move,");
+        t.eq(log[2], "moveend", "and moveend when we're done.");
+
+        map.destroy();
     }
 
     // test if we can call updateSize before document.body is ready. updateOk
@@ -1883,6 +2029,63 @@
         t.eq(map.layerContainerDiv.style.top, '0px', 'layer container top correct');
     }
 
+    function test_options(t) {
+        t.plan(2);
+
+        var map = new OpenLayers.Map('map');
+        t.eq(map.options, {}, 'map.options is empty with no options');
+        map.destroy();
+
+        var options = {
+            resolutions: [1,2,3,5],
+            projection: "EPSG:4326",
+            units: 'm'
+        };
+        var map = new OpenLayers.Map('map', options);
+        t.eq(map.options, options, 'map.options is a copy of the constructor option');
+        map.destroy();
+    }
+
+    function test_adjustZoom(t) {
+        t.plan(4);
+        var map = new OpenLayers.Map({
+            div: 'map',
+            layers: [
+                new OpenLayers.Layer('name', {
+                    isBaseLayer: true,
+                    wrapDateLine: true
+                })
+            ]
+        });
+        map.zoomToMaxExtent();
+        t.ok(map.getResolution() <= map.getMaxExtent().getWidth() / map.getSize().w, "wrapDateLine map not wider than world");
+        
+        t.eq(map.adjustZoom(9), 9, "valid zoom maintained");
+        t.eq(map.adjustZoom(1), 2, "zoom adjusted to not exceed world width");
+
+        map.moveTo([16, 48], 0);
+        t.eq(map.getCenter().toShortString(), "0, 0", "no panning when moveTo is called with invalid zoom");
+    }
+
+    function test_correctCenterAtZoomLevel0(t) {
+        t.plan(1);
+        var map = new OpenLayers.Map({
+            div: 'map',
+            maxExtent: new OpenLayers.Bounds(-30, 48.00, 3.50, 64.00),
+            restrictedExtent: new OpenLayers.Bounds(-30, 48.00, 3.50, 64.00),
+            projection: "EPSG:4258",
+            units: "degrees",
+            layers: [
+                new OpenLayers.Layer('name', {
+                    isBaseLayer: true
+                })
+            ]
+        });
+        map.setCenter(new OpenLayers.LonLat(-1.3, 50.8), 4);
+        map.moveTo(null, 0);
+        var center  = map.getCenter();
+        t.ok(center.equals(new OpenLayers.LonLat(-13.25, 56)), "Center is correct and not equal to maxExtent's center");
+    }
 
   </script>
 </head>
diff --git a/tests/Marker.html b/tests/Marker.html
index 77abc31..fa9b598 100644
--- a/tests/Marker.html
+++ b/tests/Marker.html
@@ -94,8 +94,8 @@
         var marker = new OpenLayers.Marker(ll);
         mlayer.addMarker(marker);
 
-        t.ok(marker.icon.imageDiv.firstChild.src.contains("img/marker.png"), "Marker.png is default URL");
-        
+        t.ok(OpenLayers.String.contains(marker.icon.imageDiv.firstChild.src, "img/marker.png"), "Marker.png is default URL");
+
         marker.setUrl("http://example.com/broken.png");
         t.eq(marker.icon.imageDiv.firstChild.src, "http://example.com/broken.png", "image source changes correctly.");
 
diff --git a/tests/OpenLayers1.html b/tests/OpenLayers1.html
index ea574ef..1d96be3 100644
--- a/tests/OpenLayers1.html
+++ b/tests/OpenLayers1.html
@@ -3,11 +3,13 @@
     <script src="../lib/OpenLayers.js"></script>
     <script type="text/javascript">
         function test_OpenLayers(t) {
-            t.plan(1);
-
-            var script = document.getElementById("script");
+            t.plan(3);
 
             t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
+            
+            t.ok(OpenLayers.ImgPath !== undefined, "An ImgPath property exists.");
+            
+            t.eq(OpenLayers.ImgPath, '', "The default for OpenLayers.ImgPath is the empty string.");
         }
     </script>
 </head>
diff --git a/tests/Popup.html b/tests/Popup.html
index 10245a0..2d6a90b 100644
--- a/tests/Popup.html
+++ b/tests/Popup.html
@@ -191,13 +191,14 @@
     //closeOnMove
         var checkMapEvent = function(map, popup) {
             var startListeners = map.events.listeners['movestart'];
-            for(var i=0; i < startListeners.length; i++) {
-                var listener = startListeners[i];
-                
-                if ((listener.obj == popup) && (listener.func == popup.hide)) {
-                    return true;
+            if (startListeners) {
+                for (var i = 0; i < startListeners.length; i++) {
+                    var listener = startListeners[i];
+                    if ((listener.obj == popup) && (listener.func == popup.hide)) {
+                        return true;
+                    }
                 }
-            }    
+            }
             return false;
         };
         var registered = checkMapEvent(map1, popup);
diff --git a/tests/Projection.html b/tests/Projection.html
index 6ef317d..236871a 100644
--- a/tests/Projection.html
+++ b/tests/Projection.html
@@ -60,7 +60,24 @@
          if (!hasProj) {
              window.Proj4js = undefined;
          }
-         
+
+    }
+    
+    function test_equals_string(t) {
+
+        t.plan(7);
+        var gg = new OpenLayers.Projection("EPSG:4326");
+        var sm = new OpenLayers.Projection("EPSG:900913");
+
+        // allow comparison with identifier
+        t.eq(gg.equals("EPSG:4326"), true, "EPSG:4326 equality with string");
+        t.eq(gg.equals("EPSG:4327"), false, "EPSG:4326 inequality with string");
+        t.eq(sm.equals("EPSG:900913"), true, "EPSG:900913 equality with string");
+        t.eq(sm.equals("EPSG:900914"), false, "EPSG:900913 inequality with string");
+        t.eq(sm.equals("EPSG:3857"), true, "EPSG:900913 equality with EPSG:3857");
+        t.eq(sm.equals("EPSG:102113"), true, "EPSG:900913 equality with EPSG:102113");
+        t.eq(sm.equals("EPSG:102100"), true, "EPSG:900913 equality with EPSG:102100");
+
      }
        
     </script> 
diff --git a/tests/Protocol/CSW.html b/tests/Protocol/CSW.html
new file mode 100644
index 0000000..8c0847c
--- /dev/null
+++ b/tests/Protocol/CSW.html
@@ -0,0 +1,90 @@
+<html>
+<head>
+  <script src="../../lib/OpenLayers.js"></script>
+  <script type="text/javascript">
+
+    function test_initialize(t) {
+        t.plan(3);
+
+        var protocol = new OpenLayers.Protocol.CSW({formatOptions: {foo: "bar"}});
+        t.ok(protocol instanceof OpenLayers.Protocol.CSW.v2_0_2,
+             "initialize returns instance of default versioned protocol");
+        var format = protocol.format;
+        t.ok(format instanceof OpenLayers.Format.CSWGetRecords.v2_0_2, "Default format created");
+        t.ok(format.foo, "bar", "formatOptions set correctly");
+        protocol.destroy();
+    }
+
+    function test_read(t) {
+        t.plan(6);
+
+        var protocol = new OpenLayers.Protocol.CSW({
+            url: "http://some.url.org",
+            parseData: function(request) {
+                t.eq(request.responseText, "foo", "parseData called properly");
+                return "foo";
+            }
+        });
+
+        var _POST = OpenLayers.Request.POST;
+
+        var expected, status;
+        OpenLayers.Request.POST = function(obj) {
+            t.xml_eq(new OpenLayers.Format.XML().read(obj.data).documentElement, expected, "GetRecords 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("GetRecords");
+        status = 200;
+        var data = {
+            "resultType": "results",
+            "maxRecords": 100,
+            "Query": {
+                "typeNames": "gmd:MD_Metadata",
+                "ElementSetName": {
+                    "value": "full"
+                }
+            }
+        };
+        var response = protocol.read({
+            params: data,
+            callback: function(response) {
+                t.eq(response.data, "foo", "user callback properly called with data");
+                t.eq(response.code, OpenLayers.Protocol.Response.SUCCESS, "success reported properly to user callback");
+            }
+        });
+
+        var options = {
+            params: data,
+            callback: function(response) {
+                t.eq(response.code, OpenLayers.Protocol.Response.FAILURE, "failure reported properly to user callback");
+            }
+        };
+        status = 400;
+        var response = protocol.read(options);
+
+        OpenLayers.Request.POST = _POST;
+    }
+
+    function readXML(id) {
+        var xml = document.getElementById(id).firstChild.nodeValue;
+        return new OpenLayers.Format.XML().read(xml).documentElement;
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="width:512px; height:256px"> </div>
+<div id="GetRecords"><!--
+<csw:GetRecords xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" service="CSW" version="2.0.2" resultType="results" maxRecords="100">
+  <csw:Query typeNames="gmd:MD_Metadata">
+    <csw:ElementSetName>full</csw:ElementSetName>
+  </csw:Query>
+</csw:GetRecords>
+--></div>
+</body>
+</html>
diff --git a/tests/Protocol/SQL.html b/tests/Protocol/SQL.html
deleted file mode 100644
index f02a5e8..0000000
--- a/tests/Protocol/SQL.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<html>
-<head>
-  <script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    function test_initialize(t) {
-        t.plan(3);
-        var options = {tableName: 'my_features', 
-                       databaseName: 'my_database_name'}
-        var protocol = new OpenLayers.Protocol.SQL(options);
-
-        t.ok(protocol instanceof OpenLayers.Protocol.SQL,
-             "new OpenLayers.Protocol.SQL returns object");
-
-        t.eq(protocol.tableName, options.tableName, "tableName property is set");
-        t.eq(protocol.databaseName, options.databaseName, "databaseName property is set");
-    }
-    
-  </script>
-</head>
-<body>
-</body>
-</html>
diff --git a/tests/Protocol/SQL/Gears.html b/tests/Protocol/SQL/Gears.html
deleted file mode 100644
index c206e5a..0000000
--- a/tests/Protocol/SQL/Gears.html
+++ /dev/null
@@ -1,473 +0,0 @@
-<html>
-<head>
-  <script src="../../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    function test_initialize(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(5);
-
-        t.eq(protocol.CLASS_NAME, "OpenLayers.Protocol.SQL.Gears",
-             "ctor returns correct value");
-
-        t.eq(protocol.jsonParser.CLASS_NAME,
-             "OpenLayers.Format.JSON",
-             "ctor creates a JSON parser");
-
-        t.eq(protocol.wktParser.CLASS_NAME,
-             "OpenLayers.Format.WKT",
-             "ctor creates a WKT parser");
-
-        var str = protocol.FID_PREFIX + "foo_bar";
-        t.ok(str.match(protocol.fidRegExp),
-             "ctor creates correct regexp");
-
-        t.ok(typeof protocol.db == "object",
-             "ctor creates a db object");
-
-        protocol.clear();
-        protocol.destroy();
-    }
-
-    function test_destroy(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(3);
-
-        protocol.destroy();
-
-        t.eq(protocol.db, null,
-             "destroy nullifies db");
-        t.eq(protocol.jsonParser, null,
-             "destroy nullifies jsonParser");
-        t.eq(protocol.wktParser, null,
-             "destroy nullifies wktParser");
-     }
-
-    function test_read(t) {
-        var protocolCallback, readCallback;
-        var protocolOptions = {callback: protocolCallback};
-        var readOptions = {callback: readCallback};
-
-        var protocol = new OpenLayers.Protocol.SQL.Gears(protocolOptions);
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        function okCallback(resp) {
-            t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
-                 "read calls correct callback with a response object");
-        }
-
-        function failCallback(resp) {
-            t.fail("read calls incorrect callback");
-        }
-
-        t.plan(4);
-
-        var resp;
-
-        // 2 tests
-        protocolOptions.callback = okCallback;
-        readOptions.callback = failCallback;
-        resp = protocol.read();
-        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
-             "read returns a response object");
-
-        // 2 test
-        protocolOptions.callback = failCallback;
-        readOptions.callback = okCallback;
-        resp = protocol.read(readOptions);
-        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
-             "read returns a response object");
-
-        protocol.clear();
-        protocol.destroy();
-    }
-
-    function test_unfreezeFeature(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(10);
-
-        var feature;
-        var wkt, json, fid, state;
-
-        json = "{\"fake\":\"properties\"}";
-        fid = "1000";
-        state = OpenLayers.State.INSERT;
-
-        var row = {
-            fieldByName: function(str) {
-                if (str == "geometry") {
-                    return wkt;
-                }
-                if (str == "properties") {
-                    return json;
-                }
-                if (str == "fid") {
-                    return fid;
-                }
-                if (str == "state") {
-                    return state;
-                }
-            }
-        };
-
-        // 5 tests
-        wkt = "POINT(1 2)";
-        feature = protocol.unfreezeFeature(row);
-        t.eq(feature.CLASS_NAME, "OpenLayers.Feature.Vector",
-             "unfreezeFeature returns an OpenLayers.Feature.Vector");
-        t.ok(feature.geometry.x == 1 && feature.geometry.y == 2,
-             "unfreezeFeature returns a feature with correct geometry");
-        t.eq(feature.attributes.fake, "properties",
-             "unfreezeFeature returns a feature with correct attributes");
-        t.eq(feature.fid, fid,
-             "unfreezeFeature returns a feature with fid");
-        t.eq(feature.state, state,
-             "unfreezeFeature returns a feature with state");
-
-        // 5 tests
-        wkt = protocol.NULL_GEOMETRY;
-        state = protocol.NULL_FEATURE_STATE;
-        feature = protocol.unfreezeFeature(row);
-        t.eq(feature.CLASS_NAME, "OpenLayers.Feature.Vector",
-             "unfreezeFeature returns an OpenLayers.Feature.Vector");
-        t.eq(feature.geometry, null,
-             "unfreezeFeature returns a feature with correct geometry");
-        t.eq(feature.attributes.fake, "properties",
-             "unfreezeFeature returns a feature with correct attributes");
-        t.eq(feature.fid, fid,
-             "unfreezeFeature returns a feature with fid");
-        t.eq(feature.state, null,
-             "unfreezeFeature returns a feature with state");
-
-        protocol.clear();
-        protocol.destroy();
-    }
-
-    function test_extractFidFromField(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(4);
-
-        var field, fid;
-
-        // fid is a string, field is not prefixed with FID_PREFIX
-        // 1 test
-        field = "10";
-        res = protocol.extractFidFromField(field);
-        t.eq(res, "10",
-             "extractFidFromField returns expected string");
-
-        // fid is a string, field is prefixed with FID_PREFIX
-        // 1 test
-        field = protocol.FIX_PREFIX + "10";
-        res = protocol.extractFidFromField(field);
-        t.eq(res, protocol.FIX_PREFIX + "10",
-             "extractFidFromField returns expected prefixed string");
-
-        // fid is a number, field is not prefixed with FIX_PREFIX
-        // 1 test
-        protocol.typeOfFid = "number";
-        field = "10";
-        res = protocol.extractFidFromField(field);
-        t.eq(res, 10,
-             "extractFidFromField returns expected number");
-
-        // fid is a number, field is prefixed with FIX_PREFIX
-        // 1 test
-        protocol.typeOfFid = "number";
-        field = protocol.FID_PREFIX + "10";
-        res = protocol.extractFidFromField(field);
-        t.eq(res, protocol.FID_PREFIX + "10",
-             "extractFidFromField returns expected prefixed string");
-    }
-
-    function test_freezeFeature(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(8);
-
-        var feature, res;
-
-        // 4 tests
-        feature = new OpenLayers.Feature.Vector();
-        feature.geometry = new OpenLayers.Geometry.Point(1, 2);
-        feature.attributes.fake = "properties";
-        feature.fid = "1000";
-        feature.state = OpenLayers.State.INSERT;
-        res = protocol.freezeFeature(feature);
-        t.eq(res[0], feature.fid,
-             "freezeFeature returns correct fid");
-        t.eq(res[1], "POINT(1 2)",
-             "freezeFeature returns correct WKT");
-        t.eq(res[2], "{\"fake\":\"properties\"}",
-             "freezeFeature returns correct JSON");
-        t.eq(res[3], feature.state,
-             "freezeFeature returns correct feature state");
-
-        // 4 tests
-        protocol.saveFeatureState = false;
-        feature = new OpenLayers.Feature.Vector();
-        feature.attributes.fake = "properties";
-        feature.fid = "1000";
-        feature.state = OpenLayers.State.INSERT;
-        res = protocol.freezeFeature(feature);
-        t.eq(res[0], feature.fid,
-             "freezeFeature returns correct fid");
-        t.eq(res[1], protocol.NULL_GEOMETRY,
-             "freezeFeature returns expected null geom string");
-        t.eq(res[2], "{\"fake\":\"properties\"}",
-             "freezeFeature returns correct JSON");
-        t.eq(res[3], protocol.NULL_FEATURE_STATE,
-             "freezeFeature returns expected null feature state string");
-
-        protocol.clear();
-        protocol.destroy();
-     }
-
-     function test_create(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(8);
-
-        var resp;
-        var scope = {"fake": "scope"};
-
-        var options = {
-            callback: function(resp) {
-                t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
-                     "user callback is passed a response");
-                t.eq(resp.requestType, "create",
-                     "user callback is passed correct request type in resp");
-                t.ok(this == scope,
-                     "user callback called with correct scope");
-            },
-            scope: scope
-        };
-
-        // 4 tests
-        var feature = new OpenLayers.Feature.Vector();
-        feature.fid = "1000";
-        feature.attributes.fake = "properties";
-        feature.state = OpenLayers.State.INSERT;
-        resp = protocol.create([feature], options);
-        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
-             "create returns a response");
-
-        // check what we have in the DB
-        // 4 tests
-        resp = protocol.read({"noFeatureStateReset": true});
-        t.eq(resp.features.length, 1,
-             "create inserts feature in the DB");
-        t.eq(resp.features[0].fid, feature.fid,
-             "create inserts feature with correct fid");
-        t.eq(resp.features[0].attributes.fake, feature.attributes.fake,
-             "create inserts feature with correct attributes");
-        t.eq(resp.features[0].state, feature.state,
-             "create inserts feature with correct state");
-
-        protocol.clear();
-        protocol.destroy();
-    }
-
-     function test_createOrUpdate(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(5);
-
-        // 1 test
-        var feature = new OpenLayers.Feature.Vector();
-        feature.fid = "1000";
-        feature.attributes.fake = "properties";
-        feature.state = OpenLayers.State.INSERT;
-        resp = protocol.createOrUpdate([feature]);
-        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
-             "createOrUpdate returns a response");
-
-        // check what we have in the DB
-        // 4 tests
-        resp = protocol.read({"noFeatureStateReset": true});
-        t.eq(resp.features.length, 1,
-             "createOrUpdate inserts feature in the DB");
-        t.eq(resp.features[0].fid, feature.fid,
-             "createOrUpdate inserts feature with correct fid");
-        t.eq(resp.features[0].attributes.fake, feature.attributes.fake,
-             "createOrUpdate inserts feature with correct attributes");
-        t.eq(resp.features[0].state, feature.state,
-             "createOrUpdate inserts feature with correct state");
-
-        protocol.clear();
-        protocol.destroy();
-    }
-
-    function test_delete(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(4);
-
-        function createOneAndDeleteOne(fid, deleteOptions) {
-            var feature = new OpenLayers.Feature.Vector();
-            feature.fid = fid;
-            feature.attributes.fake = "properties";
-            feature.state = OpenLayers.State.INSERT;
-            var r = protocol.create([feature]);
-            protocol["delete"](r.reqFeatures, deleteOptions);
-        }
-
-        var resp, fid;
-
-        // 1 test
-        fid = 1000;
-        protocol.saveFeatureState = false;
-        createOneAndDeleteOne(fid)
-        resp = protocol.read();
-        t.eq(resp.features.length, 0,
-             "delete deletes feature if saveFeatureState is false");
-        protocol.clear();
-
-        // 1 test
-        fid = 1000;
-        protocol.saveFeatureState = true;
-        createOneAndDeleteOne(fid);
-        resp = protocol.read();
-        t.eq(resp.features.length, 1,
-             "delete does not delete feature if saveFeatureState is true");
-        protocol.clear();
-
-        // 1 test
-        fid = "1000";
-        protocol.saveFeatureState = true;
-        createOneAndDeleteOne(fid);
-        resp = protocol.read();
-        t.eq(resp.features.length, 1,
-             "delete does not delete feature if saveFeatureState is true");
-        protocol.clear();
-
-        // 1 test
-        fid = protocol.FID_PREFIX + "1000";
-        protocol.saveFeatureState = true;
-        createOneAndDeleteOne(fid, {dontDelete: true});
-        resp = protocol.read();
-        t.eq(resp.features.length, 0,
-             "delete deletes feature if saveFeatureState is true and fid is prefixed");
-        protocol.clear();
-
-        protocol.destroy();
-    }
-
-    function test_callUserCallback(t) {
-        var protocol = new OpenLayers.Protocol.SQL.Gears();
-        if (!protocol.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(6);
-
-        var options, resp;
-        var scope = {'fake': 'scope'};
-
-        // test commit callback
-        // 1 tests
-        options = {
-            'callback': function() {
-                t.ok(this == scope, 'callback called with correct scope');
-            },
-            'scope': scope
-        };
-        resp = {'requestType': 'create', 'last': true};
-        protocol.callUserCallback(options, resp);
-        // 0 test
-        resp = {'requestType': 'create', 'last': false};
-        protocol.callUserCallback(options, resp);
-
-        // test create callback
-        // 2 tests
-        options = {
-            'create': {
-                'callback': function(r) {
-                    t.ok(this == scope, 'callback called with correct scope');
-                    t.ok(r == resp, 'callback called with correct response');
-                },
-                'scope': scope
-            }
-        };
-        resp = {'requestType': 'create'};
-        protocol.callUserCallback(options, resp);
-
-        // test with both callbacks set
-        // 3 tests
-        options = {
-            'create': {
-                'callback': function(r) {
-                    t.ok(this == scope, 'callback called with correct scope');
-                    t.ok(r == resp, 'callback called with correct response');
-                },
-                'scope': scope
-            },
-            'callback': function() {
-                t.ok(this == scope, 'callback called with correct scope');
-            },
-            'scope': scope
-        };
-        resp = {'requestType': 'create', 'last': true};
-        protocol.callUserCallback(options, resp);
-
-        // no callback set
-        // 0 test
-        options = {
-            'delete': {
-                'callback': function(resp) {
-                    t.fail('callback should not get called');
-                }
-            }
-        };
-        resp = {'requestType': 'create'};
-        protocol.callUserCallback(options, resp);
-
-        // cleanup
-        protocol.destroy();
-    }
-
-  </script>
-</head>
-<body>
-</body>
-</html>
diff --git a/tests/Protocol/Script.html b/tests/Protocol/Script.html
index a676e61..894427a 100644
--- a/tests/Protocol/Script.html
+++ b/tests/Protocol/Script.html
@@ -135,7 +135,7 @@
     }
 
     function test_createRequest(t) {
-        t.plan(3);
+        t.plan(6);
         var protocol = new OpenLayers.Protocol.Script({
             callbackKey: 'cb_key',
             callbackPrefix: 'cb_prefix:'
@@ -150,12 +150,23 @@
 
         t.eq(script.type, 'text/javascript',
             'created script has a correct type');
-        t.eq(script.src, 'http://bar_url/?k=bar_param&cb_key=cb_prefix%3AOpenLayers.Protocol.Script.registry%5Bbar%5D',
-            'created script has a correct url');
+
+        var params = OpenLayers.Util.getParameters(script.src);        
+        t.eq(params.k, "bar_param", "custom query string param");
+        t.eq(params.cb_key, "cb_prefix:OpenLayers.Protocol.Script.registry.bar", "callback with prefix");
+
         t.eq(script.id, 'OpenLayers_Protocol_Script_bar',
             'created script has a correct id');
 
+        protocol.callbackTemplate = "customCallback(${id})";
+        script = protocol.createRequest('http://bar_url/', {'k': 'bar_param2'}, 'bar_callback');
+
+        params = OpenLayers.Util.getParameters(script.src);        
+        t.eq(params.k, "bar_param2", "custom query string param");
+        t.eq(params.cb_key, "cb_prefix:customCallback(bar)", "custom callback with prefix");
+
         OpenLayers.Protocol.Script.register = _register;
+
     }
 
     function test_destroyRequest(t) {
diff --git a/tests/Protocol/WFS.html b/tests/Protocol/WFS.html
index cc56e45..24e775d 100644
--- a/tests/Protocol/WFS.html
+++ b/tests/Protocol/WFS.html
@@ -302,7 +302,7 @@
     function test_fromWMSLayer(t) {
         t.plan(9);
         var map = new OpenLayers.Map("map", {
-            projection: "EPSG:1234"
+            projection: "CRS:84"
         });
         var layer = new OpenLayers.Layer.WMS("foo", "htttp://foo/ows",
             {layers: "topp:states"}
@@ -312,7 +312,7 @@
         t.eq(protocol.url, "htttp://foo/ows", "url taken from wms layer");
         t.eq(protocol.featurePrefix, "topp", "feature prefix correctly extracted");
         t.eq(protocol.featureType, "states", "typeName correctly extracted");
-        t.eq(protocol.srsName, "EPSG:1234", "srsName set correctly");
+        t.eq(protocol.srsName, "CRS:84", "srsName set correctly");
         t.eq(protocol.version, "1.1.0", "version set correctly");
         t.eq(protocol.format.geometryName, null, "format's geometryName set to null");
 
diff --git a/tests/Renderer.html b/tests/Renderer.html
index a149d63..4ec44f6 100644
--- a/tests/Renderer.html
+++ b/tests/Renderer.html
@@ -24,6 +24,7 @@
         t.plan(2);
         
         var r = new OpenLayers.Renderer();
+        r.map = {};
         var extent = new OpenLayers.Bounds(1,2,3,4);
         r.resolution = 1;
         r.setExtent(extent, true);
@@ -52,6 +53,21 @@
         t.eq(resolution, map.getResolution(), "resolution matches the map resolution");
         t.eq(r.resolution, resolution, "resolution is correctly set");
     }
+    
+    function test_calculateFeatureDx(t) {
+        t.plan(4);
+        var r = new OpenLayers.Renderer();
+        r.extent = new OpenLayers.Bounds(177, -2, 183, 2);
+        var worldBounds = new OpenLayers.Bounds(-180,-90,180,90);
+        r.calculateFeatureDx(new OpenLayers.Bounds(179,-1,181,1), worldBounds);
+        t.eq(r.featureDx, 0, "no offset for feature inside extent");
+        r.calculateFeatureDx(new OpenLayers.Bounds(-181,-1,-179,1), worldBounds);
+        t.eq(r.featureDx, -360, "negative offset for feature on other end of world");
+        r.calculateFeatureDx(new OpenLayers.Bounds(359,-1,361,1), worldBounds);
+        t.eq(r.featureDx, 360, "positive offset for feature that is one world away");
+        r.calculateFeatureDx(new OpenLayers.Bounds(719,-1,721,1), worldBounds);
+        t.eq(r.featureDx, 720, "correct offset for feature that is two worlds away");
+    }
 
     function test_Renderer_destroy(t) {
         t.plan(5);
diff --git a/tests/Renderer/Canvas.html b/tests/Renderer/Canvas.html
index c4bef12..a1343bb 100644
--- a/tests/Renderer/Canvas.html
+++ b/tests/Renderer/Canvas.html
@@ -3,6 +3,24 @@
 <script src="../OLLoader.js"></script>
   <script type="text/javascript">
     var supported = OpenLayers.Renderer.Canvas.prototype.supported();
+    
+    var map, layer;
+    function setUp() {
+        map = new OpenLayers.Map("map");
+        layer = new OpenLayers.Layer.Vector(null, {
+            isBaseLayer: true,
+            renderers: ["Canvas"]
+        });
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0, 0));
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+    }
+    
     function test_Renderer_Canvas_constructor(t) {
         if (!supported) { t.plan(0); return; }
         t.plan(2);
@@ -18,16 +36,17 @@
     function test_Renderer_Canvas_setextent(t) {
         if (!supported) { t.plan(0); return; }
         t.plan(2);
-        var el = document.body;
-        el.id = "foo";
-        var r = new OpenLayers.Renderer.Canvas(el.id);
         
+        setUp();
+        
+        var r = layer.renderer;        
         var extent = new OpenLayers.Bounds(1,2,3,4);
         r.resolution = 1;
         r.setExtent(extent, true);
         t.ok(r.extent.equals(extent), "extent is correctly set");
         t.eq(r.resolution, null, "resolution nullified");
-        r.destroy();
+        
+        tearDown();
     }
     
     function test_Renderer_Canvas_setsize(t) {
@@ -124,18 +143,8 @@
         }
         
         t.plan(10);
-        var layer = new OpenLayers.Layer.Vector(null, {
-            isBaseLayer: true,
-            renderers: ["Canvas"]
-        });
         
-        var map = new OpenLayers.Map({
-            div: "map",
-            controls: [],
-            layers: [layer],
-            center: new OpenLayers.LonLat(0, 0),
-            zoom: 0
-        });
+        setUp();
         
         var renderer = layer.renderer;
         var count = 0;
@@ -192,7 +201,7 @@
         t.eq(count, 1, "d) redraw is called when drawing a feature without bounds");
         renderer.clear();
 
-        map.destroy();
+        tearDown();
     }
 
 
@@ -295,6 +304,17 @@
             ),
             new OpenLayers.Feature.Vector(
                 OpenLayers.Geometry.fromWKT("POLYGON((100 -25, 150 -25, 150 25, 100 25, 100 -25), (120 -5, 130 -5, 130 5, 120 5, 120 -5))")
+            ),
+            new OpenLayers.Feature.Vector(
+                new OpenLayers.Geometry.Point(80, 0), {}, {
+                    graphicName: "square",
+                    pointRadius: 8,
+                    strokeWidth: 4,
+                    fillColor: "red",
+                    fillOpacity: 0.5,
+                    strokeColor: "blue",
+                    strokeOpacity: 0.75
+                } 
             )
         ]);
         
@@ -318,6 +338,12 @@
             msg: "inside polygon hole", x: 125, y: 0, id: null
         }, {
             msg: "outside polygon", x: 155, y: 0, id: null
+        }, {
+            msg: "inside symbol", x: 80, y: 0, id: layer.features[3].id
+        }, {
+            msg: "outside symbol interior, inside symbol edge", x: 90, y: 8, id: layer.features[3].id
+        }, {
+            msg: "outside symbol", x: 94, y: 0, id: null
         }];
 
         function px(x, y) {
@@ -327,12 +353,18 @@
         }        
         
         var num = cases.length;
-        t.plan(num);
+        t.plan(2 * num);
         var c, feature;
         for (var i=0; i<num; ++i) {
             c = cases[i];
             feature = layer.renderer.getFeatureIdFromEvent({xy: px(c.x, c.y)});
             t.eq(feature && feature.id, c.id, c.msg);
+            
+            // Extra test: hit detection on an invisible canvas should return undefined
+            layer.setVisibility(false);
+            feature = layer.renderer.getFeatureIdFromEvent({xy: px(c.x, c.y)});
+            t.eq(feature, undefined, c.msg + ' (invisible)');
+            layer.setVisibility(true);
         }
         
         map.destroy();
diff --git a/tests/Renderer/Elements.html b/tests/Renderer/Elements.html
index 48db70a..53590e2 100644
--- a/tests/Renderer/Elements.html
+++ b/tests/Renderer/Elements.html
@@ -188,7 +188,7 @@
     }
 
     function test_Elements_drawGeometry_2(t) {
-        t.plan(9);
+        t.plan(8);
         
         setUp();
         
@@ -253,17 +253,6 @@
         r.drawGeometry(polygon, style);
         t.ok(properDraw, "drawGeometry called drawPolygon when passed a polygon");
 
-        // surface
-        var properDraw = false;
-        r.drawSurface = function(g) {
-            properDraw = true;
-            return {};
-        }
-        var surface = OpenLayers.Util.applyDefaults({CLASS_NAME: 'OpenLayers.Geometry.Surface'}, geometry);
-        style = true;
-        r.drawGeometry(surface, style);
-        t.ok(properDraw, "drawGeometry called drawSurface when passed a surface");
-
         // rectangle
         var properDraw = false;
         r.drawRectangle = function(g) {
@@ -616,7 +605,43 @@
         tearDown();
     }
 
-
+    function test_setExtent(t) {
+        t.plan(10);
+        setUp();
+        var resolution = 1;
+        var r = create_renderer();
+        r.map = {
+            getMaxExtent: function() {
+                return new OpenLayers.Bounds(-180,-90,180,90);
+            },
+            getExtent: function() {
+                return r.extent;
+            },
+            getResolution: function() {
+                return resolution;
+            },
+            baseLayer: {wrapDateLine: true}
+        }
+        
+        r.setExtent(new OpenLayers.Bounds(179, -1, 182, 1), true);
+        t.eq(r.rightOfDateLine, true, "on the right side of the dateline");
+        t.eq(r.xOffset, r.map.getMaxExtent().getWidth(), "correct xOffset");
+        r.setExtent(new OpenLayers.Bounds(179.5, -1, 182.5, 1), false);
+        t.eq(r.rightOfDateLine, true, "still on the right side of the dateline");
+        t.eq(r.xOffset, r.map.getMaxExtent().getWidth(), "still correct xOffset");
+        resolution = 2;
+        r.setExtent(new OpenLayers.Bounds(178, -2, 184, 2), true);
+        t.eq(r.rightOfDateLine, true, "still on the right side of the dateline");
+        t.eq(r.xOffset, r.map.getMaxExtent().getWidth() / resolution, "xOffset adjusted for new resolution");
+        r.setExtent(new OpenLayers.Bounds(-184, -2, 178, 2), false);
+        t.eq(r.rightOfDateLine, false, "on the left side of the dateline");
+        t.eq(r.xOffset, 0, "no xOffset");
+        r.setExtent(new OpenLayers.Bounds(178, -2, 184, 2), true);
+        t.eq(r.rightOfDateLine, true, "back on the right side of the dateline");
+        t.eq(r.xOffset, r.map.getMaxExtent().getWidth() / resolution, "correct xOffset");
+        
+        tearDown();
+    }
 
   </script>
 </head>
diff --git a/tests/Renderer/SVG.html b/tests/Renderer/SVG.html
index fd82093..31eb058 100644
--- a/tests/Renderer/SVG.html
+++ b/tests/Renderer/SVG.html
@@ -79,7 +79,9 @@
         // test extent changes
         var extent = new OpenLayers.Bounds(4,3,2,1);
         r.setExtent(extent);
-        t.eq(r.root.getAttributeNS(null, "transform").replace(/ /g, ""), "translate(-6,-6)", "rendererRoot viewBox is correct after a new setExtent");
+        var el = r.createNode("g");
+        el.setAttributeNS(null, "transform", "translate(-6,-6)");
+        t.eq(r.root.getAttributeNS(null, "transform"), el.getAttributeNS(null, "transform"), "rendererRoot viewBox is correct after a new setExtent");
 
         OpenLayers.Renderer.Elements.prototype.setExtent =
             OpenLayers.Renderer.Elements.prototype._setExtent;
@@ -297,40 +299,6 @@
         t.eq(node.getAttributeNS(null, "height"), "8", "height attribute is correctly set");
     }
     
-    function test_SVG_drawsurface(t) {
-        if (!OpenLayers.Renderer.SVG.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(3);
-        
-        var r = new OpenLayers.Renderer.SVG(document.body);
-        
-        var node = document.createElement('div');
-        
-        var geometry = {
-            components: ['foo', 'bar', 'dude']
-        }
-        g_GetString = false;
-        r.getShortString = function(c) {
-            g_GetString = true;
-            return c;
-        }
-        
-        r.drawSurface(node, geometry);
-        
-        t.ok(g_GetString, "getShortString is called");
-        
-        t.eq(node.getAttributeNS(null, "d"), "M foo C bar dude Z", "d attribute is correctly set");
-        
-        r.getShortString = function(c) {
-            return false;
-        }
-
-        t.eq(r.drawSurface(node, geometry), false, "drawSurface returns false if one linearRing cannot be drawn");
-    }
-    
     function test_SVG_getcomponentsstring(t) {
         if (!OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
diff --git a/tests/Renderer/SVG2.html b/tests/Renderer/SVG2.html
deleted file mode 100644
index 8e92a71..0000000
--- a/tests/Renderer/SVG2.html
+++ /dev/null
@@ -1,426 +0,0 @@
-<html>
-<head>
-<script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-
-    var geometry = null, node = null;
-    
-    function test_SVG_constructor(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(1);
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        t.ok(r instanceof OpenLayers.Renderer.SVG2, "new OpenLayers.Renderer.SVG2 returns SVG object" );
-    }
-    
-    function test_SVG_destroy(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(1);
-        
-        var g_Destroy = false;
-        
-        OpenLayers.Renderer.Elements.prototype._destroy = 
-            OpenLayers.Renderer.Elements.prototype.destroy;
-            
-        OpenLayers.Renderer.prototype.destroy = function() {
-            g_Destroy = true;
-        }
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        r.destroy();
-        
-        t.eq(g_Destroy, true, "OpenLayers.Renderer.Elements.destroy() called");
-        
-        OpenLayers.Renderer.prototype.destroy = 
-            OpenLayers.Renderer.prototype._destroy;
-    }
-    
-    function test_SVG_updateDimensions(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(7);
-        
-        OpenLayers.Renderer.SVG2.prototype._setExtent =
-            OpenLayers.Renderer.SVG2.prototype.setExtent;
-        
-        var g_SetExtent = false;
-        OpenLayers.Renderer.SVG2.prototype.setExtent = function() {
-            g_SetExtent = true;
-            OpenLayers.Renderer.SVG2.prototype._setExtent.apply(this, arguments);
-        }
-                
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        var extent = new OpenLayers.Bounds(1,2,3,4);
-        r.map = {
-            getResolution: function() {
-                return 0.5;
-            },
-            getExtent: function() {
-                return extent;
-            },
-            getMaxExtent: function() {
-                return extent;
-            }
-        }
-        r.updateDimensions();
-        
-        t.eq(g_SetExtent, true, "Elements.setExtent() called");
-        
-        t.eq(r.extent.toString(), extent.scale(3).toString(), "renderer's extent is correct");
-        t.eq(r.rendererRoot.getAttributeNS(null, "width"), "12", "width is correct");
-        t.eq(r.rendererRoot.getAttributeNS(null, "height"), "12", "height is correct");
-        t.eq(r.rendererRoot.getAttributeNS(null, "viewBox"), "-1 -6 6 6", "rendererRoot viewBox is correct");
-        
-        // test extent changes
-        extent = new OpenLayers.Bounds(2,3,5,6);
-        r.updateDimensions();
-        t.eq(r.extent.toString(), extent.scale(3).toString(), "renderer's extent changed after updateDimensions");
-        t.eq(r.rendererRoot.getAttributeNS(null, "viewBox"), "-1 -9 9 9", "rendererRoot viewBox is correct after a new setExtent");
-
-        OpenLayers.Renderer.SVG2.prototype.setExtent =
-            OpenLayers.Renderer.SVG2.prototype._setExtent;
-    }
-    
-    function test_SVG_drawpoint(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-    
-        t.plan(1);
-
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        
-        var properDraw = false;
-        var g_Radius = null;
-        r.drawCircle = function(n, g, r) {
-            properDraw = true;
-            g_Radius = 1;
-        }
-        r.drawPoint();
-        
-        t.ok(properDraw && g_Radius == 1, "drawPoint called drawCircle with radius set to 1");
-    }
-    
-    function test_SVG_drawcircle(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(5);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        r.resolution = 0.5;
-        r.left = 0;
-        r.top = 0;
-        
-        var node = document.createElement('div');
-        
-        var geometry = {
-            x: 1,
-            y: 2
-        }
-        
-        r.drawCircle(node, geometry, 3);
-        
-        t.eq(node.getAttributeNS(null, 'cx'), '1', "cx is correct");
-        t.eq(node.getAttributeNS(null, 'cy'), '-2', "cy is correct");
-        t.eq(node._radius, 3, "radius preset is correct");
-       
-        // #1274: out of bound node fails when first added
-        var geometry = {
-            x: 10000000,
-            y: 200000000,
-            CLASS_NAME: "OpenLayers.Geometry.Point",
-            id: "foo",
-            getBounds: function() {return {bottom: 0}}
-        }
-        node.id = geometry.id;
-        r.root.appendChild(node);
-
-        var drawCircleCalled = false;
-        r.drawCircle = function() {
-            drawCircleCalled = true;
-            return OpenLayers.Renderer.SVG2.prototype.drawCircle.apply(r, arguments);
-        }
-        
-        r.drawGeometry(geometry, {pointRadius: 3}, "blah_4000");
-        t.eq(drawCircleCalled, true, "drawCircle called on drawGeometry for a point geometry.")
-        t.ok(node.parentNode != r.root, "circle will not be drawn when coordinates are outside the valid range");
-    }
-    
-    function test_SVG_drawlinestring(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(2);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        
-        var node = document.createElement('div');
-        
-        var geometry = {
-            components: "foo"
-        }
-        g_GetString = false;
-        g_Components = null;
-        r.getComponentsString = function(c) {
-            g_GetString = true;
-            g_Components = c;
-            return "bar";
-        }
-        
-        r.drawLineString(node, geometry);
-        
-        t.ok(g_GetString && g_Components == "foo", "getComponentString is called with valid arguments");
-        t.eq(node.getAttributeNS(null, "points"), "bar", "points attribute is correct");
-    }
-    
-    function test_SVG_drawlinearring(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(2);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        
-        var node = document.createElement('div');
-        
-        var geometry = {
-            components: "foo"
-        }
-        g_GetString = false;
-        g_Components = null;
-        r.getComponentsString = function(c) {
-            g_GetString = true;
-            g_Components = c;
-            return "bar";
-        }
-        
-        r.drawLinearRing(node, geometry);
-        
-        t.ok(g_GetString, "getComponentString is called with valid arguments");
-        t.eq(node.getAttributeNS(null, "points"), "bar", "points attribute is correct");
-    }
-
-    function test_SVG_drawpolygon(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(3);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        
-        var node = document.createElement('div');
-        
-        var linearRings = [{
-            components: ["foo"]
-        },{
-            components: ["bar"]
-        }]
-        
-        var geometry = {
-            components: linearRings
-        }
-        g_GetString = false;
-        r.getShortString = function(c) {
-            g_GetString = true;
-            return c;
-        }
-        
-        r.drawPolygon(node, geometry);
-        
-        t.ok(g_GetString, "getShortString is called");
-        t.eq(node.getAttributeNS(null, "d"), "M foo M bar z", "d attribute is correctly set");
-        t.eq(node.getAttributeNS(null, "fill-rule"), "evenodd", "fill-rule attribute is correctly set");
-    }
-
-    function test_SVG_drawrectangle(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(4);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        r.resolution = 0.5;
-        r.left = 0;
-        r.top = 0;
-        
-        var node = document.createElement('div');
-        
-        var geometry = {
-            x: 1,
-            y: 2,
-            width: 3,
-            height: 4
-        }
-        
-        r.drawRectangle(node, geometry);
-        
-        t.eq(node.getAttributeNS(null, "x"), "1", "x attribute is correctly set");
-        t.eq(node.getAttributeNS(null, "y"), "-2", "y attribute is correctly set");
-        t.eq(node.getAttributeNS(null, "width"), "3", "width attribute is correctly set");
-        t.eq(node.getAttributeNS(null, "height"), "4", "height attribute is correctly set");
-    }
-    
-    function test_SVG_drawsurface(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(2);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        
-        var node = document.createElement('div');
-        
-        var geometry = {
-            components: ['foo', 'bar', 'dude']
-        }
-        g_GetString = false;
-        r.getShortString = function(c) {
-            g_GetString = true;
-            return c;
-        }
-        
-        r.drawSurface(node, geometry);
-        
-        t.ok(g_GetString, "getShortString is called");
-        
-        t.eq(node.getAttributeNS(null, "d"), "M foo C bar dude Z", "d attribute is correctly set");
-    }
-    
-    function test_SVG_getcomponentsstring(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(1);
-        
-        var components = ['foo', 'bar'];
-        
-        OpenLayers.Renderer.SVG2.prototype._getShortString = 
-            OpenLayers.Renderer.SVG2.prototype.getShortString;
-            
-        OpenLayers.Renderer.SVG2.prototype.getShortString = function(p) {
-            return p;
-        };
-        
-        var string = OpenLayers.Renderer.SVG2.prototype.getComponentsString(components);
-        t.eq(string, "foo,bar", "returned string is correct");
-        
-        OpenLayers.Renderer.SVG2.prototype.getShortString = 
-            OpenLayers.Renderer.SVG2.prototype._getShortString;
-    }
-    
-    
-    
-    function test_SVG_getshortstring(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-        
-        t.plan(1);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-        r.resolution = 0.5;
-        r.left = 0;
-        r.top = 0;
-        
-        var point = {
-            x: 1,
-            y: 2
-        };
-        
-        var string = r.getShortString(point);
-        t.eq(string, "1,-2", "returned string is correct");
-    }
-    
-    function test_svg_getnodetype(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(1);
-         
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-
-        var g = {CLASS_NAME: "OpenLayers.Geometry.Point"}
-        var s = {graphicName: "square"};
-        
-        t.eq(r.getNodeType(g, s), "svg", "Correct node type for well known symbols");
-    }
-        
-    function test_svg_importsymbol(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(2);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-
-        r.importSymbol("square");
-
-        var polygon = document.getElementById(r.container.id + "_defs").firstChild.firstChild;
-        
-        var pass = false;
-        for (var i = 0; i < polygon.points.numberOfItems; i++) {
-            var p = polygon.points.getItem(i);
-            pass = p.x === OpenLayers.Renderer.symbol.square[2*i] && 
-                   p.y === OpenLayers.Renderer.symbol.square[2*i+1];
-            if (!pass) {
-                break;
-            }
-        }
-        t.ok(pass, "Square symbol rendered correctly");
-        t.ok(r.symbolMetrics["-square"], "Symbol metrics cached correctly.");
-    }
-        
-    function test_svg_dashstyle(t) {
-        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(5);
-        
-        var r = new OpenLayers.Renderer.SVG2(document.body);
-
-        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "dot"}, 1), "1,4", "dot dasharray created correctly");
-        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "dash"}, 1), "4,4", "dash dasharray created correctly");
-        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "longdash"}, 1), "8,4", "longdash dasharray created correctly");
-        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "dashdot"}, 1), "4,4,1,4", "dashdot dasharray created correctly");
-        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "longdashdot"}, 1), "8,4,1,4", "dashdot dasharray created correctly");
-    }
-
-  </script>
-</head>
-<body>
-<div id="map" style="width:500px;height:550px"></div>
-</body>
-</html>
diff --git a/tests/Renderer/VML.html b/tests/Renderer/VML.html
index f383848..2bdc876 100644
--- a/tests/Renderer/VML.html
+++ b/tests/Renderer/VML.html
@@ -6,7 +6,7 @@
     var geometry = null, node = null;
 
     function test_VML_constructor(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -17,7 +17,7 @@
     }
     
     function test_VML_destroy(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -43,7 +43,7 @@
     }
     
     function test_VML_setextent(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -80,7 +80,7 @@
     }
 
     function test_VML_setsize(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -99,7 +99,7 @@
     }
     
     function test_VML_drawText(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -128,7 +128,7 @@
     }
 
     function test_VML_drawpoint(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -149,7 +149,7 @@
     }
 
     function test_VML_drawcircle(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -177,7 +177,7 @@
     }
     
     function test_VML_drawGraphic(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -219,7 +219,7 @@
     }
 
     function test_VML_drawlinestring(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -239,7 +239,7 @@
     }
     
     function test_VML_drawlinearring(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -259,7 +259,7 @@
     }
 
     function test_VML_drawline(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -300,7 +300,7 @@
     }
     
     function test_VML_drawpolygon(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -331,7 +331,7 @@
     }
     
     function test_VML_drawrectangle(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -360,7 +360,7 @@
     }
     
     function test_vml_getnodetype(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -376,7 +376,7 @@
     }
 
     function test_vml_importsymbol(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -405,7 +405,7 @@
     }
     
     function test_vml_dashstyle(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
@@ -422,7 +422,7 @@
     }
     
     function test_vml_moveRoot(t) {
-        if (!OpenLayers.Renderer.VML.prototype.supported()) {
+        if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);
             return;
         }
diff --git a/tests/Request.html b/tests/Request.html
index 52643e4..29ced66 100644
--- a/tests/Request.html
+++ b/tests/Request.html
@@ -20,7 +20,7 @@
     function test_issue(t) {
         setup();
 
-        t.plan(22);
+        t.plan(25);
         var request, config;
         var proto = OpenLayers.Request.XMLHttpRequest.prototype;
         var issue = OpenLayers.Function.bind(OpenLayers.Request.issue,
@@ -96,19 +96,35 @@
         // reset open method
         proto.open = _open;
         
-        // test that headers are correctly set - 4 tests
+        // test that headers are correctly set - 6 tests
         var _setRequestHeader = proto.setRequestHeader;
         config = {
             headers: {
                 foo: "bar",
-                chicken: "soup"
+                chicken: "soup",
+                // This checks whether the autoadded 'X-Requested-With'-header
+                // can be overridden, even though the given key here is spelled
+                // in lowercase. 
+                'x-requested-with': 'humpty'
             }
         };
+        // we also track how often setRequestHeader is being called, it should
+        // be called once for every header, even with the above defined
+        // custom 'x-requested-with' header which we usually autoadd.
+        // If the numbers match, we make sure to not send duplicate headers like
+        //   x-requested-with: humpty         AND
+        //   X-Requested-With: XMLHttpRequest
+        var actualSetHeaderCnt = 0;
+        var expectedSetHeaderCnt = 3; // and not four!
         proto.setRequestHeader = function(key, value) {
+            actualSetHeaderCnt++;
             t.ok(key in config.headers, "setRequestHeader called with key: " + key);
             t.eq(value, config.headers[key], "setRequestHeader called with correct value: " + value);
-        }
+        };
         request = issue(config);
+        
+        t.eq(actualSetHeaderCnt, expectedSetHeaderCnt, 'A custom "x-requested-with" header overrides the default "X-Requested-With" header.');
+
         proto.setRequestHeader = _setRequestHeader;
         
         // test that callback is called (no scope) - 1 test
@@ -444,6 +460,35 @@
         var req = OpenLayers.Request.GET();
         req.abort();
     }
+    
+    function test_XRequestedWithHeaderAutoadded(t) {
+        t.plan( 2 );
+        
+        var headerSet = false;
+        var headerGot = '';
+        var headerExpected = 'XMLHttpRequest';
+        
+        // save to be able to restore later
+        var _setRequestHeader = OpenLayers.Request.XMLHttpRequest.prototype.setRequestHeader;
+        
+        OpenLayers.Request.XMLHttpRequest.prototype.setRequestHeader = function(field, value) {
+            if (field === 'X-Requested-With') {
+                headerSet = true;
+                headerGot = value;
+            }
+        };
+        
+        var req = OpenLayers.Request.issue({
+            url: location.href,
+            async: false
+        });
+                
+        t.ok( headerSet, 'We call the method "setRequestHeader" to set a "X-Requested-With"-header' );
+        t.eq( headerGot, headerExpected,  'The "X-Requested-With"-header is set to "' + headerExpected + '" as expected.' );
+        
+        // restore old setRequestHeader
+        OpenLayers.Request.XMLHttpRequest.prototype.setRequestHeader = _setRequestHeader;
+    }
     </script>
 </head>
 <body>
diff --git a/tests/SingleFile1.html b/tests/SingleFile1.html
new file mode 100644
index 0000000..836a1a5
--- /dev/null
+++ b/tests/SingleFile1.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+    <script src="some/OpenLayers/path/OpenLayers.js"></script>
+    <script src="../lib/OpenLayers/SingleFile.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+            t.eq(OpenLayers._getScriptLocation(), "some/OpenLayers/path/",
+                 "Script location correctly detected (OpenLayers.js).");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/SingleFile2.html b/tests/SingleFile2.html
new file mode 100644
index 0000000..68b47a3
--- /dev/null
+++ b/tests/SingleFile2.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+    <script src="some/OpenLayers/path/OpenLayers.light.js"></script>
+    <script src="../lib/OpenLayers/SingleFile.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+            t.eq(OpenLayers._getScriptLocation(), "some/OpenLayers/path/",
+                 "Script location correctly detected (OpenLayers.light.js)�.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/SingleFile3.html b/tests/SingleFile3.html
new file mode 100644
index 0000000..bb58fcb
--- /dev/null
+++ b/tests/SingleFile3.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+    <script src="some/OpenLayers/path/OpenLayers.light.debug.js"></script>
+    <script src="../lib/OpenLayers/SingleFile.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+            t.eq(OpenLayers._getScriptLocation(), "some/OpenLayers/path/",
+                 "Script location correctly detected (OpenLayers.light.debug.js).");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/Strategy/BBOX.html b/tests/Strategy/BBOX.html
index 026a13d..4194b59 100644
--- a/tests/Strategy/BBOX.html
+++ b/tests/Strategy/BBOX.html
@@ -33,7 +33,7 @@
     }
 
     function test_update(t) {
-        t.plan(5);
+        t.plan(7);
 
         // Create a dummy layer that can act as the map base layer.
         // This will be unnecessary if #1921 is addressed (allowing
@@ -43,9 +43,10 @@
         var strategy = new OpenLayers.Strategy.BBOX({
             ratio: 1 // makes for easier comparison to map bounds
         });
+        var log = [];
         var layer = new OpenLayers.Layer.Vector(null, {
             isBaseLayer: true,
-            protocol: new OpenLayers.Protocol(),
+            protocol: new OpenLayers.Protocol({abort: function(response) { log.push(response); }}),
             strategies: [strategy]
         });
 
@@ -61,7 +62,14 @@
          * should be removed when the issue(s) described in #1835 are addressed.
          */
         strategy.update({force: true});
-        
+        strategy.response = {};
+        strategy.update({force: true});
+        t.eq(log.length, 1, "Response aborted");
+        log = [];
+        strategy.update({force: true});
+        strategy.update({force: true, noAbort: true}); 
+        t.eq(log.length, 0, "Response not aborted when noAbort is true");
+
         // test that the strategy bounds were set
         t.ok(map.getExtent().equals(strategy.bounds), "[set center] bounds set to map extent");
         
@@ -80,9 +88,26 @@
         strategy.update({force: true});
         var from = map.getProjectionObject();
         var to = layer.projection;
-        t.ok(strategy.bounds.equals(map.getExtent().transform(from, to)), "[force update different proj] bounds transformed");
         
-
+        var strategyBounds = strategy.bounds,
+            mapExtent = map.getExtent().transform(from, to),
+            // we don't use bounds::toString because we might run into 
+            // precision issues
+            precision = 7,
+            strategyBoundsGot = [
+                strategyBounds.left.toFixed( precision ),
+                strategyBounds.bottom.toFixed( precision ),
+                strategyBounds.right.toFixed( precision ),
+                strategyBounds.top.toFixed( precision )
+            ].join(','),
+            mapExtentExpected = [
+                mapExtent.left.toFixed( precision ),
+                mapExtent.bottom.toFixed( precision ),
+                mapExtent.right.toFixed( precision ),
+                mapExtent.top.toFixed( precision )
+            ].join(',');
+        t.eq(strategyBoundsGot, mapExtentExpected, 
+            "[force update different proj] bounds transformed");
     }
     
     function test_events(t) {
@@ -280,7 +305,7 @@
 
     // Test fix for Ticket #3142
     function test_layerLoadedAfterBeingAdded(t) {
-        t.plan(2);
+        t.plan(3);
 
         var dummy = new OpenLayers.Layer(null, {isBaseLayer: true});
 
@@ -316,6 +341,11 @@
         // test that the strategy bounds were set
         t.ok(map.getExtent().equals(strategy.bounds), "[set center] bounds set to map extent");
         t.eq(layerOutOfRange.strategies[0].bounds, null, "Data not requested if layer is out of range");
+
+        layerOutOfRange.setVisibility(false);
+        layerOutOfRange.setVisibility(true);
+        t.eq(layerOutOfRange.strategies[0].bounds, null, "Data not requested if layer is out of range when switching visibility");
+
         map.destroy();
     }
 
diff --git a/tests/Style.html b/tests/Style.html
index 2c3a18b..0b8b33b 100644
--- a/tests/Style.html
+++ b/tests/Style.html
@@ -176,9 +176,9 @@
         
         // c) test that label in returned symbolizer is a string even if property value is a number
         var symbolizer = style.createSymbolizer(
-            new OpenLayers.Feature.Vector(null, {foo: "bar", labelValue: 10})
+            new OpenLayers.Feature.Vector(null, {foo: "bar", labelValue: 0})
         );
-        t.eq(symbolizer.label, "10", "c) feature property cast to string when used as symbolizer label");
+        t.eq(symbolizer.label, "0", "c) feature property cast to string when used as symbolizer label");
 
     }
     
diff --git a/tests/Test.AnotherWay.baseadditions.js b/tests/Test.AnotherWay.baseadditions.js
new file mode 100644
index 0000000..2354b34
--- /dev/null
+++ b/tests/Test.AnotherWay.baseadditions.js
@@ -0,0 +1,177 @@
+// total counters
+Test.AnotherWay._openlayers_sum_total_detail_ok=0;
+Test.AnotherWay._openlayers_sum_total_detail_fail=0;
+Test.AnotherWay._startTime = null;
+
+// method overwrites
+//
+// behaviour (timing)
+Test.AnotherWay._old_run_all_onclick = Test.AnotherWay._run_all_onclick;
+Test.AnotherWay._run_all_onclick = function(){
+    Test.AnotherWay._startTime = (new Date()).getTime();
+    Test.AnotherWay.reset_running_time();
+    Test.AnotherWay._old_run_all_onclick.apply(this, arguments);
+};
+
+Test.AnotherWay._old_run_selected_onclick = Test.AnotherWay._run_selected_onclick;
+Test.AnotherWay._run_selected_onclick = function(){
+    Test.AnotherWay._startTime = (new Date()).getTime();
+    Test.AnotherWay.reset_running_time();
+    Test.AnotherWay._old_run_selected_onclick.apply(this, arguments);
+};
+
+Test.AnotherWay._old_run_one_onclick = Test.AnotherWay._run_one_onclick;
+Test.AnotherWay._run_one_onclick = function(){
+    Test.AnotherWay._startTime = (new Date()).getTime();
+    Test.AnotherWay.reset_running_time();
+    Test.AnotherWay._old_run_one_onclick.apply(this, arguments);
+};
+
+// test page loading
+Test.AnotherWay.old_load_next_page = Test.AnotherWay._load_next_page;
+Test.AnotherWay._load_next_page = function(){
+    Test.AnotherWay.update_running_time();    
+    Test.AnotherWay.old_load_next_page.apply(this, arguments);
+};
+
+
+Test.AnotherWay._add_test_page_url = function(test_url, convention){
+    var table = document.getElementById("testtable");
+    var record_select = document.getElementById("record_select");
+    var index = Test.AnotherWay._g_test_page_urls.length;
+    
+    // trim spaces.
+    if (test_url.match("^(\\s*)(.*\\S)(\\s*)$")) {
+        test_url = RegExp.$2;
+    }
+    
+    Test.AnotherWay._g_test_page_urls[index] = {
+        url: test_url,
+        convention: convention
+    };
+    var row = table.insertRow(-1);
+    
+    var cell;
+    var cell_child;
+    var link;
+    
+    cell = row.insertCell(-1);
+    cell_child = document.createElement("input");
+    cell_child.type = "checkbox";
+    cell_child.id = "checkbox" + index;
+    cell_child.checked = 'checked';
+    cell_child.defaultChecked = 'checked';
+    cell.appendChild(cell_child);
+    
+    cell = row.insertCell(-1);
+    cell.setAttribute("width", "75%");
+     
+    // make the URL a clickable link that opens in a new window
+    // start changes 
+    link = document.createElement("a");
+    link.href=test_url;
+    link.target='_blank';
+    link.title='Opens testfile in a new window.';
+    link.appendChild(document.createTextNode(test_url));    
+    cell.appendChild(link);
+    // end changes
+    
+    cell = row.insertCell(-1);
+    cell_child = document.createElement("input");
+    cell_child.type = "button";
+    cell_child.id = "test" + index;
+    cell_child.value = " run ";
+    cell_child.onclick = Test.AnotherWay._run_one_onclick;
+    cell.appendChild(cell_child);
+    
+    cell = row.insertCell(-1);
+    cell.setAttribute("width", "8em");
+    cell_child = document.createElement("span");
+    cell.appendChild(cell_child);
+    
+    var option = document.createElement("option");
+    option.appendChild(document.createTextNode(test_url));
+    record_select.appendChild(option);
+};
+
+
+// new methods
+Test.AnotherWay.update_running_time = function() {
+    var now = (new Date()).getTime();
+    var floor = Math.floor;
+    var elapsed = now - Test.AnotherWay._startTime;
+    var zeroPad = function(num, length){
+        var len = -1 * (length || 2);
+        return ('00000' + num).slice(len);  
+    };
+    var ms = zeroPad(elapsed%1000, 3);
+    var seconds=zeroPad(floor((elapsed/1000)%60));
+    var minutes=zeroPad(floor((elapsed/60000)%60));
+    
+    document.getElementById('running-time').innerHTML = 'Elapsed time ' + minutes + ':' + seconds + ':' + ms +' (m:s:ms).';
+};
+
+Test.AnotherWay.reset_running_time = function(){
+    document.getElementById('running-time').innerHTML = '';
+};
+
+// quickfilter
+Test.AnotherWay.bindQuicksearchListener = function(){
+    var input = document.getElementById('quickfilter');
+    if (input.addEventListener) {
+        input.addEventListener('keyup', Test.AnotherWay.quicksearch);
+    } else if (input.attachEvent) {
+        input.attachEvent('onkeyup', Test.AnotherWay.quicksearch);
+    } else {
+        // remove the input field
+        input.parentNode.removeChild(input);
+    }
+};
+Test.AnotherWay.quicksearchThrottleTimeOut = null;
+Test.AnotherWay.quicksearch = function(){
+    if (Test.AnotherWay.quicksearchThrottleTimeOut) {
+        window.clearTimeout(Test.AnotherWay.quicksearchThrottleTimeOut);
+    }
+    Test.AnotherWay.quicksearchThrottleTimeOut = window.setTimeout(function(){
+        var input = document.getElementById('quickfilter');
+        Test.AnotherWay.filterTestList(input.value);
+    }, 300);
+};
+
+Test.AnotherWay.filterTestList = function(str){
+    Test.AnotherWay.unfilterTestList();
+    var re = new RegExp(str, 'i');
+    var candidates  = document.querySelectorAll('#testtable tr a');
+    for (var idx = 0, len = candidates.length; idx<len; idx++) {
+        var tr = candidates[idx].parentNode.parentNode;
+        var html = candidates[idx].innerHTML;
+        if (re.test(html)) {
+            tr.className = 'isShown';
+        } else {
+            tr.className = 'isHidden';
+        }
+    }
+    
+};
+
+Test.AnotherWay.unfilterTestList = function() {
+    if ( document.querySelectorAll ) {
+        var hidden = document.querySelectorAll('.isHidden');
+        for (var idx = 0, len = hidden.length; idx < len; idx++) {
+            hidden[idx].className = 'isShown';
+        }
+    }
+};
+
+// bind our quicksearch init method to body onload.
+(function(win) {
+    if (win.addEventListener) {
+        win.addEventListener('load', Test.AnotherWay.bindQuicksearchListener);
+    } else if (win.attachEvent) {
+        win.attachEvent('onload', Test.AnotherWay.bindQuicksearchListener);
+    } else {
+        win.onload = function(){
+            Test.AnotherWay.bindQuicksearchListener();
+        };
+    }
+})(window);
diff --git a/tests/Test.AnotherWay.css b/tests/Test.AnotherWay.css
new file mode 100644
index 0000000..5bb1181
--- /dev/null
+++ b/tests/Test.AnotherWay.css
@@ -0,0 +1,243 @@
+/**
+ *  Test.AnotherWay version 0.5
+ *  
+ *  Copyright (c) 2005 Artem Khodush, http://straytree.org
+ *  
+ *  Permission is hereby granted, free of charge, to any person obtaining
+ *  a copy of this software and associated documentation files (the
+ *  "Software"), to deal in the Software without restriction, including
+ *  without limitation the rights to use, copy, modify, merge, publish,
+ *  distribute, sublicense, and/or sell copies of the Software, and to
+ *  permit persons to whom the Software is furnished to do so, subject to
+ *  the following conditions:
+ *  
+ *  The above copyright notice and this permission notice shall be
+ *  included in all copies or substantial portions of the Software.
+ *  
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *  
+ */
+
+* {
+    padding: 0;
+    margin: 0;
+}
+
+html {
+    height: 99%;
+}
+
+body {
+    height: 98%;
+    font: normal normal 10pt sans-serif
+}
+
+#col1 {
+    float: left;
+    width: 27em;
+    margin: 0 0 0 1em;
+    overflow: visible;
+}
+
+#col2 {
+    position: relative;
+    height: 98%;
+    margin: 0 0.5em 0 28em;
+}
+
+#col1_header {
+    margin-top: 0.5em;
+}
+
+#scroller {
+    height: 400px;
+    overflow: auto;
+}
+
+#testtable {
+    margin: 0 0 2em 0;
+    width: 97%;
+    font-size: 1em;
+    border-collapse: collapse;
+}
+#testtable input {
+    cursor: pointer;
+}
+#testtable td {
+    line-height: 2em;
+    padding: 0;
+    margin: 0;
+    border-top: 1px solid #ccc;
+    border-bottom: 1px solid #ccc;
+}
+#testtable tr:hover td {
+    background-color: #ededed;
+}
+#testtable tr.isHidden {
+    display: none;
+}
+#testtable tr.isShown {
+    display: table-row;
+}
+
+#run_buttons, #running-time {
+    margin-bottom: 1em;
+}
+
+#right_header {
+    padding-top: 0.8em;
+}
+
+#results_count {
+    float: left;
+}
+
+#results > p:hover {
+    background-color: #ededed;
+}
+
+.active_tab {
+    float: right;
+    padding: 0 1em 0.2em 1em;
+    background: #0af;
+    border: 1px solid #048;
+    border-bottom: none;
+    cursor: pointer;
+    cursor: hand;
+    position: relative;
+    top: -0.2em;
+}
+
+.inactive_tab {
+    float: right;
+    padding: 0 1em 0 1em;
+    background: #9bb;
+    color: #444;
+    border: 1px solid #9bb;
+    border-bottom: none;
+    cursor: pointer;
+    cursor: hand;
+}
+
+.inactive_mouseover_tab {
+    float: right;
+    padding: 0 1em 0 1em;
+    background: #9bb;
+    color: #062;
+    border: 1px solid #062;
+    border-bottom: none;
+    cursor: pointer;
+    cursor: hand;
+}
+
+#right_frame {
+    overflow: auto;
+    position: relative;
+    top: -0.2em;
+    clear: right;
+    height: 95%;
+    border: 1px solid #048;
+}
+
+#debug {
+    display: none;
+}
+
+#debug p {
+    margin: 2px 0 0 5em;
+    text-indent: -4.8em;
+}
+
+#error {
+    display: none;
+    color: #c22;
+}
+
+#results p {
+    margin: 0 0 2px 0;
+}
+
+/* cursor indicating that detailed results may be expanded/contracted */
+#results p.badtest {
+    cursor: text;
+}
+
+#results p.ok, #results p.fail {
+    cursor: pointer;
+    cursor: hand;
+}
+
+/* colored squares in the results window at the left of test page names */
+#results p.ok .bullet {
+    background: #6d6;
+}
+
+#results p.fail .bullet {
+    background: #d46;
+}
+
+#results p.badtest .bullet {
+    background: #ea3;
+}
+
+#results p.loading .bullet {
+    background: #48f;
+}
+
+#results p.running .bullet {
+    background: #26e;
+}
+
+#results p.waiting .bullet {
+    background: #04d;
+}
+
+/* highlight in the results line */
+#results p .warning {
+    background: #ffc;
+}
+
+/* layout of the detailed results */
+.result_detail {
+    padding-left: 3em;
+}
+
+.result_exception_detail {
+    padding-left: 4em;
+}
+
+.result_exception_stack_detail {
+    padding-left: 5em;
+}
+
+.result_micro_detail {
+    padding-left: 6em;
+}
+
+/* colouring in the detailed results */
+.result_detail .fail, .result_exception_detail .fail, .result_micro_detail .fail {
+    background: #ffd8d8;
+}
+
+/* "start recording" controls*/
+#record_div {
+    margin-top: 3em;
+}
+
+#record_div p {
+    margin-bottom: 0.5em;
+}
+
+#record_select {
+    width: 88%;
+}
+
+#record_input {
+    width: 53%;
+}
\ No newline at end of file
diff --git a/tests/Test.AnotherWay.geom_eq.js b/tests/Test.AnotherWay.geom_eq.js
new file mode 100644
index 0000000..893c5b5
--- /dev/null
+++ b/tests/Test.AnotherWay.geom_eq.js
@@ -0,0 +1,139 @@
+/**
+ * File: Test.AnotherWay.geom_eq.js
+ * Adds a geom_eq method to AnotherWay test objects.
+ *
+ */
+
+(function() {
+    
+    /**
+     * Function assertEqual
+     * Test two objects for equivalence (based on ==).  Throw an exception
+     *     if not equivalent.
+     * 
+     * Parameters:
+     * got - {Object}
+     * expected - {Object}
+     * msg - {String} The message to be thrown.  This message will be appended
+     *     with ": got {got} but expected {expected}" where got and expected are
+     *     replaced with string representations of the above arguments.
+     */
+    function assertEqual(got, expected, msg) {
+        if(got === undefined) {
+            got = "undefined";
+        } else if (got === null) {
+            got = "null";
+        }
+        if(expected === undefined) {
+            expected = "undefined";
+        } else if (expected === null) {
+            expected = "null";
+        }
+        if(got != expected) {
+            throw msg + ": got '" + got + "' but expected '" + expected + "'";
+        }
+    }
+    
+    /**
+     * Function assertFloatEqual
+     * Test two objects for floating point equivalence.  Throw an exception
+     *     if not equivalent.
+     * 
+     * Parameters:
+     * got - {Object}
+     * expected - {Object}
+     * msg - {String} The message to be thrown.  This message will be appended
+     *     with ": got {got} but expected {expected}" where got and expected are
+     *     replaced with string representations of the above arguments.
+     */
+    function assertFloatEqual(got, expected, msg) {
+        var OpenLayers = Test.AnotherWay._g_test_iframe.OpenLayers;
+        if(got === undefined) {
+            got = "undefined";
+        } else if (got === null) {
+            got = "null";
+        }
+        if(expected === undefined) {
+            expected = "undefined";
+        } else if (expected === null) {
+            expected = "null";
+        }
+        if(Math.abs(got - expected) > Math.pow(10, -OpenLayers.Util.DEFAULT_PRECISION)) {
+            throw msg + ": got '" + got + "' but expected '" + expected + "'";
+        }
+    }
+    
+    /**
+     * Function assertGeometryEqual
+     * Test two geometries for equivalence.  Geometries are considered
+     *     equivalent if they are of the same class, and given component
+     *     geometries, if all components are equivalent. Throws a message as
+     *     exception if not equivalent.
+     * 
+     * Parameters:
+     * got - {OpenLayers.Geometry}
+     * expected - {OpenLayers.Geometry}
+     * options - {Object} Optional object for configuring test options.
+     */
+    function assertGeometryEqual(got, expected, options) {
+        
+        var OpenLayers = Test.AnotherWay._g_test_iframe.OpenLayers;
+
+        // compare types
+        assertEqual(typeof got, typeof expected, "Object types mismatch");
+        
+        // compare classes
+        assertEqual(got.CLASS_NAME, expected.CLASS_NAME, "Object class mismatch");
+        
+        if(got instanceof OpenLayers.Geometry.Point) {
+            // compare points
+            assertFloatEqual(got.x, expected.x, "x mismatch");
+            assertFloatEqual(got.y, expected.y, "y mismatch");
+            assertFloatEqual(got.z, expected.z, "z mismatch");
+        } else {
+            // compare components
+            assertEqual(
+                got.components.length, expected.components.length,
+                "Component length mismatch for " + got.CLASS_NAME
+            );
+            for(var i=0; i<got.components.length; ++i) {
+                try {
+                    assertGeometryEqual(
+                        got.components[i], expected.components[i], options
+                    );
+                } catch(err) {
+                    throw "Bad component " + i + " for " + got.CLASS_NAME + ": " + err;
+                }
+            }
+        }
+        return true;
+    }
+    
+    /**
+     * Function: Test.AnotherWay._test_object_t.geom_eq
+     * Test if two geometry objects are equivalent.  Tests for same geometry
+     *     class, same number of components (if any), equivalent component
+     *     geometries, and same coordinates.
+     *
+     * (code)
+     * t.geom_eq(got, expected, message);
+     * (end)
+     * 
+     * Parameters:
+     * got - {OpenLayers.Geometry} Any geometry instance.
+     * expected - {OpenLayers.Geometry} The expected geometry.
+     * msg - {String} A message to print with test output.
+     * options - {Object} Optional object for configuring test options.
+     */
+    var proto = Test.AnotherWay._test_object_t.prototype;
+    proto.geom_eq = function(got, expected, msg, options) {        
+        // test geometries for equivalence
+        try {
+            assertGeometryEqual(got, expected, options);
+            this.ok(true, msg);
+        } catch(err) {
+            this.fail(msg + ": " + err);
+        }
+    }
+    
+})();
diff --git a/tests/Test.AnotherWay.js b/tests/Test.AnotherWay.js
new file mode 100644
index 0000000..8500f13
--- /dev/null
+++ b/tests/Test.AnotherWay.js
@@ -0,0 +1,2498 @@
+/**
+ *  Test.AnotherWay version 0.5
+ *  
+ *  Copyright (c) 2005 Artem Khodush, http://straytree.org
+ *  
+ *  Permission is hereby granted, free of charge, to any person obtaining
+ *  a copy of this software and associated documentation files (the
+ *  "Software"), to deal in the Software without restriction, including
+ *  without limitation the rights to use, copy, modify, merge, publish,
+ *  distribute, sublicense, and/or sell copies of the Software, and to
+ *  permit persons to whom the Software is furnished to do so, subject to
+ *  the following conditions:
+ *  
+ *  The above copyright notice and this permission notice shall be
+ *  included in all copies or substantial portions of the Software.
+ *  
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *  
+ */
+
+if (typeof(Test) == "undefined") {
+    Test = {};
+}
+Test.AnotherWay = {};
+
+Test.AnotherWay._g_test_iframe = null; // frame where to load test pages
+Test.AnotherWay._g_test_frame_no_clear = false; // true - leave last page displayed after tests end
+Test.AnotherWay._g_test_page_urls = []; // array of: { url: url, convention: "anotherway" or "jsan" }
+Test.AnotherWay._g_test_object_for_jsan = null; // test object for filling by tests that adhere to jsan Test.Simple calling convention
+Test.AnotherWay._g_pages_to_run = null; // list of pages to run automatically after loading
+Test.AnotherWay._g_run_on_main_load = false; // special handling for run_pages_to_run when it might be called before onload or before list of test pages is known.
+Test.AnotherWay._g_run_on_list_load = false;
+Test.AnotherWay._g_main_loaded = false;
+
+Test.AnotherWay._run_pages_to_run = function(called_from_outside){
+    if (!Test.AnotherWay._g_main_loaded) {
+        Test.AnotherWay._g_run_on_main_load = true;
+    }
+    else {
+        var a_pages = Test.AnotherWay._g_pages_to_run;
+        if (a_pages == "all") {
+            for (var i = 0; i < Test.AnotherWay._g_test_page_urls.length; ++i) {
+                Test.AnotherWay._run_test_page("test" + i);
+            }
+        }
+        else 
+            if (a_pages != null) {
+                for (var run_i = 0; run_i < a_pages.length; ++run_i) {
+                    var run_page = a_pages[run_i];
+                    var found = false;
+                    for (var all_i = 0; all_i < Test.AnotherWay._g_test_page_urls.length; ++all_i) {
+                        if (run_page == Test.AnotherWay._g_test_page_urls[all_i].url) {
+                            Test.AnotherWay._run_test_page("test" + all_i, called_from_outside);
+                            found = true;
+                            break;
+                        }
+                    }
+                    if (!found) {
+                        Test.AnotherWay._show_error("page specified to run is not found in the page list: " + run_page);
+                        break;
+                    }
+                }
+            }
+    }
+};
+
+Test.AnotherWay._add_test_page_url = function(test_url, convention){
+    var table = document.getElementById("testtable");
+    var record_select = document.getElementById("record_select");
+    var index = Test.AnotherWay._g_test_page_urls.length;
+    
+    // trim spaces.
+    if (test_url.match("^(\\s*)(.*\\S)(\\s*)$")) {
+        test_url = RegExp.$2;
+    }
+    
+    Test.AnotherWay._g_test_page_urls[index] = {
+        url: test_url,
+        convention: convention
+    };
+    var row = table.insertRow(-1);
+    
+    var cell;
+    var cell_child;
+    var link;
+    
+    cell = row.insertCell(-1);
+    cell_child = document.createElement("input");
+    cell_child.type = "checkbox";
+    cell_child.id = "checkbox" + index;
+    cell_child.checked = 'checked';
+    cell_child.defaultChecked = 'checked';
+    cell.appendChild(cell_child);
+    
+    cell = row.insertCell(-1);
+    cell.setAttribute("width", "75%");
+    
+    cell.appendChild(document.createTextNode(test_url));    
+    
+    cell = row.insertCell(-1);
+    cell_child = document.createElement("input");
+    cell_child.type = "button";
+    cell_child.id = "test" + index;
+    cell_child.value = " run ";
+    cell_child.onclick = Test.AnotherWay._run_one_onclick;
+    cell.appendChild(cell_child);
+    
+    cell = row.insertCell(-1);
+    cell.setAttribute("width", "8em");
+    cell_child = document.createElement("span");
+    cell.appendChild(cell_child);
+    
+    var option = document.createElement("option");
+    option.appendChild(document.createTextNode(test_url));
+    record_select.appendChild(option);
+};
+Test.AnotherWay._show_error = function(msg){
+    var error_div = document.getElementById("error");
+    error_div.innerHTML = "";
+    error_div.appendChild(document.createTextNode(msg));
+    error_div.style.display = "block";
+};
+
+// read urls from the list in the html file inside the list_iframe
+// fill on-screen list with urls and "run" buttons, and fill the g_test_page_urls object.
+Test.AnotherWay._list_iframe_onload = function(){
+    if (window.frames.list_iframe != null && window.frames.list_iframe.location != "" && window.frames.list_iframe.location != "about:blank") {
+        var list_doc = window.frames.list_iframe.document;
+        var list = list_doc.getElementById("testlist");
+        if (list != null) {
+            for (var i = 0; i < list.childNodes.length; ++i) {
+                var item = list.childNodes[i];
+                if (item.nodeName == "LI" || item.nodeName == "li") {
+                    var convention = "anotherway";
+                    if (Test.AnotherWay._get_css_class(item) == "jsan") {
+                        convention = "jsan";
+                    }
+                    Test.AnotherWay._add_test_page_url(item.innerHTML, convention);
+                }
+            }
+            if (Test.AnotherWay._g_run_on_list_load) {
+                Test.AnotherWay._g_run_on_list_load = false;
+                Test.AnotherWay._run_pages_to_run();
+            }
+        }
+        else {
+            Test.AnotherWay._show_error("no list with id 'testlist' in a list file " + window.frames.list_iframe.location);
+        }
+    }
+};
+
+Test.AnotherWay._map_checkboxes = function(f){
+    var table = document.getElementById("testtable");
+    var checks = table.getElementsByTagName("INPUT");
+    for (var i = 0; i < checks.length; ++i) {
+        if (checks[i].type == "checkbox" && checks[i].id.match(/^checkbox(\d+)$/)) {
+            f(checks[i], RegExp.$1);
+        }
+    }
+};
+
+Test.AnotherWay._run_all_onclick = function(){
+    Test.AnotherWay._map_checkboxes(function(c, id){
+        Test.AnotherWay._run_test_page("test" + id);
+    });
+};
+Test.AnotherWay._run_selected_onclick = function(){
+    Test.AnotherWay._map_checkboxes(function(c, id){
+        if (c.checked) {
+            Test.AnotherWay._run_test_page("test" + id);
+        }
+    });
+};
+
+Test.AnotherWay._unselect_all_onclick = function(){
+    Test.AnotherWay._map_checkboxes(function(c, id){
+        c.checked = false;
+    });
+};
+
+Test.AnotherWay._run_one_onclick = function(){
+    Test.AnotherWay._run_test_page(this.id);
+};
+
+// construct an object that will gather results of running one test function
+Test.AnotherWay._test_object_t = function(fun_name){
+    this.name = fun_name; // name of the test function
+    this.n_plan = null; // planned number of assertions
+    this.n_ok = 0; // # of ok assertions
+    this.n_fail = 0; // # of failed assertions
+    this.exception = ""; // if the function throwed an exception, it's its message
+    this.exception_stack = []; // strings: function call stack from the exception
+    this.assertions = []; // assertion results: array of { ok: 1 or 0, name: string }
+    this.wait_result_milliseconds = 0; // how long to wait before collecting results from the test
+    this.second_wait_msg = null; // <p> status message (in addition to the page wait_msg)
+    this.delay_actions = []; // array of actions to be perfomed after the test function returns
+    //  action : { acton_kind: "call" | "window" | "replay"
+    //              when "call":        { call_fn call_delay_milliseconds } call_fn takes nothing
+    //              when "window" :     { wnd_url wnd_wnd wnd_fn wnd_timeout_milliseconds wnd_dont_close } wnd_fn takes wnd
+    //              wnen "replay" :     { replay_wnd replay_events replay_event_i replay_checkpoints } checkpoint_fn takes this, wnd
+    //  }
+    this.delay_action_i = null; // index of delay action currently being performed
+    this.delay_prev_timer_time = 0; // for counting time while performing delay_actions
+    this.delay_current_milliseconds_left = 0; // time left before the next action, runs down
+    this.delay_total_milliseconds_left = 0; // for indication: total estimated time for all actions, runs up and down
+};
+
+Test.AnotherWay._test_object_t.prototype.ok = function(cond, name){
+    if (cond) {
+        ++this.n_ok;
+        cond = 1;
+    }
+    else {
+        ++this.n_fail;
+        cond = 0;
+    }
+    this.assertions.push({
+        ok: cond,
+        name: name
+    });
+};
+Test.AnotherWay._test_object_t.prototype.fail = function(name){
+    this.ok(false, name);
+};
+Test.AnotherWay._test_object_t.prototype.plan = function(n){
+    this.n_plan = n;
+};
+Test.AnotherWay._test_object_t.prototype.wait_result = function(seconds){
+    this.wait_result_milliseconds = 1000 * seconds;
+};
+Test.AnotherWay._eq_fail_msg = function(path, what, expected, got){
+    return "eq: " + path + " " + what + " differ: got " + got + ", but expected " + expected;
+};
+Test.AnotherWay._array_eq = function(expected, got, path, msg){
+    if (expected.length != got.length) {
+        msg.msg = Test.AnotherWay._eq_fail_msg(path, "array length", expected.length, got.length);
+        return false;
+    }
+    for (var i = 0; i < expected.length; ++i) {
+        if (!Test.AnotherWay._thing_eq(expected[i], got[i], path + "[" + i + "]", msg)) {
+            return false;
+        }
+    }
+    return true;
+};
+Test.AnotherWay._object_eq = function(expected, got, path, msg){
+    var v;
+    for (v in expected) {
+        if (!(v in got)) {
+            msg.msg = Test.AnotherWay._eq_fail_msg(path + "." + v, "properties", expected[v], "undefined");
+            return false;
+        }
+        if (!Test.AnotherWay._thing_eq(expected[v], got[v], path + "." + v, msg)) {
+            return false;
+        }
+    }
+    for (v in got) {
+        if (!(v in expected)) {
+            msg.msg = Test.AnotherWay._eq_fail_msg(path + "." + v, "properties", "undefined", got[v]);
+            return false;
+        }
+    }
+    return true;
+};
+
+Test.AnotherWay._constructor_name = function(x){
+    if (x == null) {
+        return "";
+    }
+    var s = "unknown";
+    try {
+        s = typeof(x.constructor);
+        if (s != "unknown") {
+            s = x.constructor.toString();
+        }
+    } 
+    catch (e) {
+        s = "unknown";
+    }
+    if (s == "unknown") {
+        // hackish attempt to guess a type
+        var is_array = true;
+        var index = 0;
+        for (i in x) {
+            if (i != index) {
+                is_array = false;
+            }
+            ++index;
+        }
+        return is_array ? "Array" : "Object"; // for empty arrays/objects, this will be wrong half the time
+    }
+    else 
+        if (s.match(/^\s*function\s+(\w+)\s*\(/)) {
+            return RegExp.$1;
+        }
+        else {
+            var c = '';
+            switch (typeof x) {
+                case 'string':
+                    c = 'String';
+                    break;
+                case 'object':
+                    c = 'Object';
+                    break;
+                default:
+                    c = '';
+            }
+            return c;
+        }
+};
+Test.AnotherWay._is_array = function(x){
+    return Test.AnotherWay._constructor_name(x) == "Array";
+};
+
+Test.AnotherWay._is_value_type = function(x){
+    cn = Test.AnotherWay._constructor_name(x);
+    return cn == "Number" || cn == "String" || cn == "Boolean" || cn == "Date";
+};
+
+Test.AnotherWay._thing_eq = function(expected, got, path, msg){
+    if (expected == null && got == null) {
+        return true;
+    }
+    else 
+        if ((expected == null && got != null) || (expected != null && got == null)) {
+            msg.msg = Test.AnotherWay._eq_fail_msg(path, "values", expected, got);
+            return false;
+        }
+        else {
+            var expected_cn = Test.AnotherWay._constructor_name(expected);
+            var got_cn = Test.AnotherWay._constructor_name(got);
+            if (expected_cn != got_cn) {
+                msg.msg = Test.AnotherWay._eq_fail_msg(path, "types", expected_cn, got_cn);
+                return false;
+            }
+            else {
+                if (Test.AnotherWay._is_array(expected)) {
+                    return Test.AnotherWay._array_eq(expected, got, path, msg);
+                }
+                else 
+                    if (Test.AnotherWay._is_value_type(expected)) {
+                        if (expected != got) {
+                            msg.msg = Test.AnotherWay._eq_fail_msg(path, "values", expected, got);
+                            return false;
+                        }
+                        else {
+                            return true;
+                        }
+                    }
+                    else { // just a plain object
+                        return Test.AnotherWay._object_eq(expected, got, path, msg);
+                    }
+            }
+        }
+};
+
+Test.AnotherWay._test_object_t.prototype.eq = function(got, expected, name){
+    var msg = {};
+    if (Test.AnotherWay._thing_eq(expected, got, "", msg)) {
+        this.ok(1, name);
+    }
+    else {
+        this.fail(name + ". " + msg.msg);
+    }
+};
+
+Test.AnotherWay._test_object_t.prototype.like = function(got, expected, name){
+    if (got.match(expected) != null) {
+        this.ok(1, name);
+    }
+    else {
+        this.fail(name + ": got " + got + ", but expected it to match: " + expected);
+    }
+};
+
+Test.AnotherWay._g_html_eq_span = null;
+Test.AnotherWay._html_eq_string_to_node = function(string_or_node, what, msg){
+    if (string_or_node.nodeType != null) {
+        string_or_node = Test.AnotherWay._html_eq_node_to_string(string_or_node); // double trip - to make properties assigned in scripts available as html node attributes
+    }
+    if (Test.AnotherWay._g_html_eq_span == null) {
+        Test.AnotherWay._g_html_eq_span = document.createElement("span");
+    }
+    Test.AnotherWay._g_html_eq_span.innerHTML = string_or_node;
+    if (Test.AnotherWay._g_html_eq_span.childNodes.length != 1) {
+        msg.msg = "bad " + what + " html string given (should contain exactly one outermost element): " + string_or_node;
+    }
+    return Test.AnotherWay._g_html_eq_span.childNodes[0].cloneNode(true);
+};
+
+Test.AnotherWay._html_eq_node_to_string = function(node){
+    if (Test.AnotherWay._g_html_eq_span == null) {
+        Test.AnotherWay._g_html_eq_span = document.createElement("span");
+    }
+    Test.AnotherWay._g_html_eq_span.innerHTML = "";
+    if (node.outerHTML != null) {
+        Test.AnotherWay._g_html_eq_span.innerHTML = node.outerHTML;
+    }
+    else {
+        var clone = node.cloneNode(true);
+        var node = Test.AnotherWay._g_html_eq_span;
+        if (node.ownerDocument && node.ownerDocument.importNode) {
+            if (node.ownerDocument != clone.ownerDocument) {
+                clone = node.ownerDocument.importNode(clone, true);
+            }
+        }
+        node.appendChild(clone);
+    }
+    return Test.AnotherWay._g_html_eq_span.innerHTML;
+};
+
+Test.AnotherWay._html_eq_path_msg = function(path){
+    var msg = "";
+    for (var i = 0; i < path.length; ++i) {
+        msg += " [node " + path[i].node;
+        if (path[i].id != null && path[i].id != "") {
+            msg += " id " + path[i].id;
+        }
+        else 
+            if (path[i].index != null) {
+                msg += " at index " + path[i].index;
+            }
+        msg += "] ";
+    }
+    return msg;
+};
+
+Test.AnotherWay._html_eq_fail_msg = function(path, what, expected, got){
+    return Test.AnotherWay._html_eq_path_msg(path) + ": " + what + " differ: got " + got + ", but expected " + expected;
+};
+
+Test.AnotherWay._html_eq_remove_blank = function(text){
+    if (text == null) {
+        return "";
+    }
+    else 
+        if (text.match("^(\\s*)(.*\\S)(\\s*)$")) {
+            return RegExp.$2;
+        }
+        else 
+            if (text.match("\s*")) {
+                return "";
+            }
+    return text;
+};
+
+Test.AnotherWay._html_eq_remove_blank_nodes = function(node){
+    var to_remove = [];
+    for (var child = node.firstChild; child != null; child = child.nextSibling) {
+        if (child.nodeType == 3) {
+            var value = Test.AnotherWay._html_eq_remove_blank(child.nodeValue);
+            if (value == "") {
+                to_remove.push(child);
+            }
+            else {
+                child.nodeValue = value;
+            }
+        }
+    }
+    for (var i = 0; i < to_remove.length; ++i) {
+        node.removeChild(to_remove[i]);
+    }
+};
+
+Test.AnotherWay._html_node_type_text = function(node_type){
+    if (node_type == 1) {
+        return "1 (html element)";
+    }
+    else 
+        if (node_type == 3) {
+            return "3 (text)";
+        }
+        else {
+            return node_type;
+        }
+};
+
+Test.AnotherWay._html_eq_node = function(expected, got, path, msg, expected_loc_base, got_loc_base){
+    if (expected.nodeType != got.nodeType) {
+        msg.msg = Test.AnotherWay._html_eq_fail_msg(path, "node types", Test.AnotherWay._html_node_type_text(expected.nodeType), Test.AnotherWay._html_node_type_text(got.nodeType));
+        return false;
+    }
+    else 
+        if (expected.nodeType == 3) {
+            if (expected.nodeValue != got.nodeValue) {
+                msg.msg = Test.AnotherWay._html_eq_fail_msg(path, "text", expected.nodeValue, got.nodeValue);
+                return false;
+            }
+        }
+        else 
+            if (expected.nodeType == 1) {
+                if (expected.nodeName != got.nodeName) {
+                    msg.msg = Test.AnotherWay._html_eq_fail_msg(path, "node names", expected.nodeName, got.nodeName);
+                    return false;
+                }
+                // compare attributes
+                var expected_attrs = {};
+                var got_attrs = {};
+                var i;
+                var a;
+                for (i = 0; i < expected.attributes.length; ++i) {
+                    a = expected.attributes[i];
+                    if (a.specified) {
+                        expected_attrs[a.name] = 1;
+                    }
+                }
+                for (i = 0; i < got.attributes.length; ++i) {
+                    a = got.attributes[i];
+                    if (a.specified) {
+                        got_attrs[a.name] = 1;
+                    }
+                }
+                for (a in expected_attrs) {
+                    if (!(a in got_attrs)) {
+                        msg.msg = Test.AnotherWay._html_eq_path_msg(path) + ": attribute sets differ: expected attribute " + a + " is missing";
+                        return false;
+                    }
+                }
+                for (a in got_attrs) {
+                    if (!(a in expected_attrs)) {
+                        msg.msg = Test.AnotherWay._html_eq_path_msg(path) + ": attribute sets differ: got extra attribute " + a;
+                        return false;
+                    }
+                }
+                for (a in expected_attrs) {
+                    var expected_value = expected.getAttribute(a);
+                    var got_value = got.getAttribute(a);
+                    if (typeof(expected_value) == "string" && typeof(got_value) == "string") {
+                        expected_value = Test.AnotherWay._html_eq_remove_blank(expected_value);
+                        got_value = Test.AnotherWay._html_eq_remove_blank(got_value);
+                        var ok = expected_value == got_value;
+                        if (!ok && (a == "href" || a == "HREF")) { // try relative hrefs
+                            var expected_relative_value = expected_value;
+                            if (expected_loc_base != null && expected_value.substring(0, expected_loc_base.length) == expected_loc_base) {
+                                expected_relative_value = expected_value.substring(expected_loc_base.length);
+                            }
+                            var got_relative_value = got_value;
+                            if (got_loc_base != null && got_value.substring(0, got_loc_base.length) == got_loc_base) {
+                                got_relative_value = got_value.substring(got_loc_base.length);
+                            }
+                            ok = expected_relative_value == got_relative_value;
+                        }
+                        if (!ok) {
+                            msg.msg = Test.AnotherWay._html_eq_fail_msg(path, "attribute " + a + " values", expected_value, got_value);
+                            return false;
+                        }
+                    }
+                    else 
+                        if (typeof(expected_value) == "function" && typeof(got_value) == "function") {
+                            expected_value = expected_value.toString();
+                            got_value = got_value.toString();
+                            if (expected_value != got_value) {
+                                msg.msg = Test.AnotherWay._html_eq_fail_msg(path, "attribute " + a + " values", expected_value, got_value);
+                                return false;
+                            }
+                        }
+                        else {
+                            var value_msg = {};
+                            if (!Test.AnotherWay._thing_eq(expected_value, got_value, "", value_msg)) {
+                                msg.msg = Test.AnotherWay._html_eq_path_msg(path) + ": attribute " + a + " values differ: " + value_msg.msg;
+                                return false;
+                            }
+                        }
+                }
+                // compare child nodes
+                Test.AnotherWay._html_eq_remove_blank_nodes(expected);
+                Test.AnotherWay._html_eq_remove_blank_nodes(got);
+                var expected_length = expected.childNodes.length;
+                var got_length = got.childNodes.length;
+                if (expected_length < got_length) {
+                    msg.msg = Test.AnotherWay._html_eq_path_msg(path) + ": got " + (got_length - expected_length) + " extra child nodes";
+                    return false;
+                }
+                else 
+                    if (expected_length > got_length) {
+                        msg.msg = Test.AnotherWay._html_eq_path_msg(path) + ": expected " + (expected_length - got_length) + " more child nodes";
+                        return false;
+                    }
+                    else {
+                        for (i = 0; i < expected_length; ++i) {
+                            var expected_node = expected.childNodes[i];
+                            path.push({
+                                node: expected_node.nodeName,
+                                id: expected_node.id,
+                                index: i
+                            });
+                            var eq = Test.AnotherWay._html_eq_node(expected_node, got.childNodes[i], path, msg, expected_loc_base, got_loc_base);
+                            path.pop();
+                            if (!eq) {
+                                return false;
+                            }
+                        }
+                    }
+            }
+    return true;
+};
+
+Test.AnotherWay._html_eq_get_loc_base = function(node){
+    var loc_base = document.location;
+    if (node.ownerDocument != null) {
+        loc_base = node.ownerDocument.location;
+    }
+    if (loc_base != null) {
+        loc_base = loc_base.href;
+        var slash_pos = loc_base.lastIndexOf("/");
+        if (slash_pos != -1) {
+            loc_base = loc_base.substring(0, slash_pos + 1);
+        }
+    }
+    return loc_base;
+};
+
+Test.AnotherWay._test_object_t.prototype.html_eq = function(got, expected, name){
+    var msg = {};
+    var expected_node = Test.AnotherWay._html_eq_string_to_node(expected, "expected", msg);
+    if (msg.msg != null) {
+        this.fail(name + " html_eq: " + msg.msg);
+    }
+    else {
+        var got_node = Test.AnotherWay._html_eq_string_to_node(got, "got", msg);
+        if (msg.msg != null) {
+            this.fail(name + " html_eq: " + msg.msg);
+        }
+        else {
+            var expected_loc_base = Test.AnotherWay._html_eq_get_loc_base(expected);
+            var got_loc_base = Test.AnotherWay._html_eq_get_loc_base(got);
+            if (Test.AnotherWay._html_eq_node(expected_node, got_node, [], msg, expected_loc_base, got_loc_base)) {
+                this.ok(1, name);
+            }
+            else {
+                var msg = name + " html_eq " + msg.msg;
+                var expected_str = Test.AnotherWay._html_eq_node_to_string(expected_node);
+                var got_str = Test.AnotherWay._html_eq_node_to_string(got_node);
+                msg += ".\n got html: " + got_str;
+                msg += ".\n expected html: " + expected_str;
+                this.fail(msg);
+            }
+        }
+    }
+};
+
+Test.AnotherWay._debug_pane_print = function(msg){
+    var d = new Date();
+    var p = document.createElement("p");
+    p.appendChild(document.createTextNode(d.toLocaleTimeString() + " " + msg));
+    var debug_pane = document.getElementById("debug");
+    debug_pane.appendChild(p);
+    var debug_tab = document.getElementById("debug_tab");
+    var results_tab = document.getElementById("results_tab");
+    debug_tab.style.visibility = "visible";
+    results_tab.style.visibility = "visible";
+};
+
+Test.AnotherWay._test_object_t.prototype.debug_print = function(msg){
+    Test.AnotherWay._debug_pane_print(this.name + ": " + msg);
+};
+
+Test.AnotherWay._test_object_t.prototype.delay_call = function(){
+    var timeout_ms = 200;
+    for (var i = 0; i < arguments.length; ++i) {
+        if (typeof(arguments[i]) != "function") {
+            timeout_ms = 1000 * arguments[i];
+        }
+        else {
+            var action = {
+                action_kind: "call",
+                call_delay_milliseconds: timeout_ms,
+                call_fn: arguments[i]
+            };
+            this.delay_total_milliseconds_left += Test.AnotherWay._action_estimate_milliseconds(action);
+            this.delay_actions.push(action);
+        }
+    }
+};
+
+Test.AnotherWay._test_object_t.prototype.open_window = function(url, fn, timeout_seconds){
+    if (timeout_seconds == null) {
+        timeout_seconds = 4;
+    }
+    var no_close = document.getElementById("dont_close_test_windows");
+    var action = {
+        action_kind: "window",
+        wnd_url: url.toString() + (window.location.search || ""),
+        wnd_wnd: null,
+        wnd_fn: fn,
+        wnd_timeout_milliseconds: timeout_seconds * 1000,
+        wnd_no_close: no_close.checked
+    };
+    this.delay_total_milliseconds_left += Test.AnotherWay._action_estimate_milliseconds(action);
+    this.delay_actions.push(action);
+};
+
+Test.AnotherWay._test_object_t.prototype.replay_events = function(wnd, events){
+    if (Test.AnotherWay._g_no_record_msg != null) {
+        this.fail("replay_events: " + Test.AnotherWay._g_no_record_msg);
+    }
+    else {
+        var action = {
+            action_kind: "replay",
+            replay_wnd: wnd,
+            replay_events: events.events,
+            replay_event_i: null,
+            replay_checkpoints: events.checkpoints
+        };
+        this.delay_total_milliseconds_left += Test.AnotherWay._action_estimate_milliseconds(action);
+        this.delay_actions.push(action);
+    }
+};
+
+Test.AnotherWay._action_estimate_milliseconds = function(action){
+    var ms = 0;
+    if (action.action_kind == "call") {
+        ms = action.call_delay_milliseconds;
+    }
+    else 
+        if (action.action_kind == "window") {
+            ms = 0;
+        }
+        else 
+            if (action.action_kind == "replay") {
+                ms = 0;
+                for (var i = 0; i < action.replay_events.length; ++i) {
+                    ms += action.replay_events[i]["time"] - 0;
+                }
+            }
+    return ms;
+};
+
+Test.AnotherWay._g_timeout_granularity = 200;
+Test.AnotherWay._g_tests_queue = []; // vector of { url: string, test_objects : array of test_object_t, test_object_i: int, wait_msg: <p> object, loading_timeout_milliseconds: int, timeout_id: id }
+// load one html page, schedule further processing
+Test.AnotherWay._run_test_page = function(id, called_from_outside){
+    if (id.match(/^test(\d+)/)) {
+        id = RegExp.$1;
+        Test.AnotherWay._g_tests_queue.push({
+            url: Test.AnotherWay._g_test_page_urls[id].url,
+            convention: Test.AnotherWay._g_test_page_urls[id].convention,
+            test_objects: []
+        });
+        if (Test.AnotherWay._g_tests_queue.length == 1) {
+            if (!called_from_outside) {
+                // Crap. Be careful stepping around.
+                // For Mozilla and Opera, when this file is included into the frameset page that is in another directory (and _g_outside_path_correction!=null)
+                // but the test pages are started from within it (by "run" buttons), then:
+                // depending on whether the page is the first one loaded into the test frame or not,
+                // the base url for relative test pages differs.
+                // Crap, like I said.
+                Test.AnotherWay._g_tests_queue[0].suppress_outside_path_correction = true;
+            }
+            Test.AnotherWay._start_loading_page();
+        }
+    }
+};
+
+Test.AnotherWay._load_next_page = function(){
+    Test.AnotherWay._g_tests_queue.splice(0, 1);
+    if (Test.AnotherWay._g_tests_queue.length > 0) {
+        Test.AnotherWay._start_loading_page();
+    }
+    else {
+        if (!Test.AnotherWay._g_test_frame_no_clear) {
+            Test.AnotherWay._g_test_iframe.location.replace("about:blank");
+        }
+    }
+};
+
+Test.AnotherWay._g_opera_path_correction = null; // ugly wart to support opera
+Test.AnotherWay._g_outside_path_correction = null; // ugly wart to accomodate Opera and Mozilla, where relative url relates to the directory where the page that calls this function is located
+Test.AnotherWay._set_iframe_location = function(iframe, loc, outside_path_correction){
+    // allow to load only locations with the same origin
+    var proto_end = loc.indexOf("://");
+    if (proto_end != -1) { // otherwise, it's safe to assume (for Opera, Mozilla and IE ) that loc will be treated as relative
+        var main_loc = window.location.href;
+        var host_end = loc.substring(proto_end + 3).indexOf("/");
+        var ok = false;
+        if (host_end != -1) {
+            var loc_origin = loc.substring(0, proto_end + 3 + host_end + 1);
+            if (main_loc.length >= loc_origin.length && main_loc.substring(0, loc_origin.length) == loc_origin) {
+                ok = true;
+            }
+        }
+        if (!ok) {
+            return {
+                msg: "test pages may have only urls with the same origin as " + main_loc
+            };
+        }
+    }
+    // opera cannot handle urls relative to file:// without assistance
+    if (window.opera != null && window.location.protocol == "file:" && loc.indexOf(":") == -1) {
+        var base = window.location.href;
+        var q_pos = base.indexOf("?");
+        if (q_pos != -1) {
+            base = base.substring(0, q_pos);
+        }
+        var slash_pos = base.lastIndexOf("/");
+        if (slash_pos != -1) {
+            base = base.substring(0, slash_pos + 1);
+            Test.AnotherWay._g_opera_path_correction = base;
+            loc = base + loc;
+        }
+    }
+    // if this function is called from another page, and if that page is in another directory, correction is needed
+    if (outside_path_correction != null) {
+        var pos = loc.indexOf(outside_path_correction);
+        if (pos == 0) {
+            loc = loc.substring(outside_path_correction.length + 1);
+        }
+    }
+    if (iframe.location != null) {
+        iframe.location.replace(loc);
+    }
+    else {
+        iframe.src = loc;
+    }
+    return {};
+};
+
+Test.AnotherWay._start_loading_page = function(){
+    var test_page = Test.AnotherWay._g_tests_queue[0];
+    test_page.loading_timeout_milliseconds = 12000;
+    test_page.timeout_id = setTimeout(Test.AnotherWay._loading_timeout, Test.AnotherWay._g_timeout_granularity);
+    test_page.wait_msg = Test.AnotherWay._print_counter_result(test_page.url, "loading...", test_page.loading_timeout_milliseconds, "loading");
+    if (test_page.convention == "jsan") {
+        // the tests in that page will run when it's loading, so the test object must be ready
+        Test.AnotherWay._g_test_object_for_jsan = new Test.AnotherWay._test_object_t(test_page.url);
+    }
+    var outside_path_correction = null;
+    if (Test.AnotherWay._g_outside_path_correction != null && !test_page.suppress_outside_path_correction) {
+        outside_path_correction = Test.AnotherWay._g_outside_path_correction;
+    }
+    var result = Test.AnotherWay._set_iframe_location(Test.AnotherWay._g_test_iframe, test_page.url, outside_path_correction);
+    if (result.msg != null) {
+        Test.AnotherWay._unprint_result(test_page.wait_msg);
+        Test.AnotherWay._print_result(test_page.url, result.msg, "badtest", null);
+        Test.AnotherWay._load_next_page();
+    }
+};
+
+Test.AnotherWay._loading_timeout = function(){
+    var test_page = Test.AnotherWay._g_tests_queue[0];
+    test_page.loading_timeout_milliseconds -= Test.AnotherWay._g_timeout_granularity;
+    if (test_page.loading_timeout_milliseconds > 0) {
+        Test.AnotherWay._update_msg_counter(test_page.wait_msg, (test_page.loading_timeout_milliseconds / 1000).toFixed());
+        test_page.timeout_id = setTimeout(Test.AnotherWay._loading_timeout, Test.AnotherWay._g_timeout_granularity);
+    }
+    else {
+        Test.AnotherWay._unprint_result(test_page.wait_msg);
+        Test.AnotherWay._print_result(test_page.url, "Unable to load test page. Timeout expired", "badtest", null);
+        Test.AnotherWay._load_next_page();
+    }
+};
+
+Test.AnotherWay._strip_query_and_hash = function(s){
+    var i = s.lastIndexOf("#");
+    if (i != -1) {
+        s = s.substring(0, i);
+    }
+    i = s.lastIndexOf("?");
+    if (i != -1) {
+        s = s.substring(0, i);
+    }
+    return s;
+};
+
+Test.AnotherWay._is_url_loaded = function(url, wnd){
+    var loaded = false;
+    if (wnd != null && wnd.location != null) {
+        // after some popup blocker interference, location may behave strange..
+        var location_s = "";
+        location_s += wnd.location;
+        if (location_s != "") {
+            var pathname = wnd.location.pathname;
+            var expected_url = url;
+            var i = expected_url.lastIndexOf("#");
+            if (i != -1) {
+                expected_url = expected_url.substring(0, i);
+            }
+            i = expected_url.lastIndexOf("?");
+            if (i != -1) {
+                expected_url = expected_url.substring(0, i);
+            }
+            i = expected_url.lastIndexOf("/");
+            if (i != -1 && i != expected_url.length - 1) {
+                expected_url = expected_url.substring(i + 1);
+            }
+            i = pathname.indexOf(expected_url);
+            if (wnd.location.href == url || (i != -1 && i == pathname.length - expected_url.length)) {
+                if ( /*window.opera==null*/wnd.document.readyState == null || wnd.document.readyState == "complete") { // for opera (and IE?), getElementById does not work until..
+                    loaded = true;
+                }
+            }
+        }
+    }
+    return loaded;
+};
+// find and run all test functions in the g_cur_page html page.
+Test.AnotherWay._test_page_onload = function(){
+    if (Test.AnotherWay._g_tests_queue.length == 0) {
+        return;
+    }
+    var test_page = Test.AnotherWay._g_tests_queue[0];
+    if (!Test.AnotherWay._is_url_loaded(test_page.url, Test.AnotherWay._g_test_iframe)) {
+        return;
+    }
+    clearTimeout(test_page.timeout_id);
+    Test.AnotherWay._unprint_result(test_page.wait_msg);
+    
+    if (test_page.convention == "anotherway") {
+        // get test function names (those beginning with "test")
+        if (typeof(Test.AnotherWay._g_test_iframe.document.scripts) != 'undefined') { // IE
+            for (var i = 0; i < Test.AnotherWay._g_test_iframe.document.scripts.length; ++i) {
+                var script_text = Test.AnotherWay._g_test_iframe.document.scripts[i].text;
+                var fun_sig = "function test";
+                var fun_start = script_text.indexOf(fun_sig);
+                
+                while (fun_start != -1) {
+                    script_text = script_text.substring(fun_start, script_text.length);
+                    var fun_end = script_text.indexOf('(');
+                    var fun_name = script_text.substring("function ".length, fun_end);
+                    var whitespace = fun_name.indexOf(' ');
+                    if (whitespace >= 0) {
+                        fun_name = fun_name.substring(0, whitespace);
+                    }
+                    test_page.test_objects.push(new Test.AnotherWay._test_object_t(fun_name));
+                    script_text = script_text.substring(fun_end, script_text.length);
+                    fun_start = script_text.indexOf(fun_sig);
+                }
+            }
+        }
+        else { // otherwise (not IE) it ought to work like this
+            for (var i in Test.AnotherWay._g_test_iframe) {
+                // Hack to prevent failure in FF3.0b1 (innerWidth/innerHeight) and FF>=3.5 (sessionStorage)
+                if (i == "innerWidth" || i == "innerHeight" || i == "sessionStorage") {
+                    continue;
+                }
+                if (typeof(Test.AnotherWay._g_test_iframe[i]) == 'function') {
+                    if (i.substring(0, 4) == "test") {
+                        test_page.test_objects.push(new Test.AnotherWay._test_object_t(i));
+                    }
+                }
+            }
+        }
+    }
+    else 
+        if (test_page.convention == "jsan") {
+            // the test object is already filled with results
+            test_page.test_objects.push(Test.AnotherWay._g_test_object_for_jsan);
+        }
+    
+    if (test_page.test_objects.length == 0) {
+        Test.AnotherWay._print_result(test_page.url, "No test functions defined in the page", "badtest", null);
+        Test.AnotherWay._load_next_page();
+        return;
+    }
+    
+    test_page.wait_msg = Test.AnotherWay._print_result(test_page.url, "running tests..<span class=\"counter\">" + test_page.test_objects.length + "</span>", "running", null);
+    
+    test_page.test_object_i = 0;
+    Test.AnotherWay._run_more_tests();
+};
+
+Test.AnotherWay._handle_exception = function(o, e, title){
+    var s = title + ": " + typeof(e) + ": ";
+    if (e.message != null) {
+        s += e.message;
+    }
+    else 
+        if (e.description != null) {
+            s += e.description;
+        }
+        else {
+            s += e.toString();
+        }
+    //  if( e.location!=null ) {  // XXX figure out how to display exception location if it's present (like in mozilla)
+    //      s+=" location: "+e.location.toString();
+    //  }
+    o.exception = s;
+    s = [];
+    if (e.stack) {
+        var lines = e.stack.split("\n");
+        for (var i = 0; i < lines.length; ++i) {
+            // format of the line: func_name(args)@file_name:line_no
+            if (lines[i].match(/(\w*)\(([^\)]*)\)@(.*):([^:]*)$/)) {
+                var func_name = RegExp.$1;
+                if (func_name.length == 0) {
+                    func_name = "<anonymous>";
+                }
+                s.push("in " + func_name + "( " + RegExp.$2 + ") at " + RegExp.$3 + " line " + RegExp.$4 + "\n");
+            }
+        }
+    }
+    o.exception_stack = s;
+};
+
+Test.AnotherWay._run_more_tests = function(){
+    var test_page = Test.AnotherWay._g_tests_queue[0];
+    while (test_page.test_object_i < test_page.test_objects.length) {
+        Test.AnotherWay._update_msg_counter(test_page.wait_msg, (1 + test_page.test_object_i) + "/" + test_page.test_objects.length);
+        var o = test_page.test_objects[test_page.test_object_i];
+        if (test_page.convention == "anotherway") {
+            try {
+                Test.AnotherWay._g_test_iframe[o.name](o);
+            } 
+            catch (e) {
+                Test.AnotherWay._handle_exception(o, e, "");
+            }
+        } // for "jsan" convention, test has run already
+        if (o.delay_actions.length > 0 || o.wait_result_milliseconds > 0) {
+            o.delay_total_milliseconds_left += o.wait_result_milliseconds;
+            Test.AnotherWay._delay_actions_timeout();
+            return;
+        }
+        ++test_page.test_object_i;
+    }
+    Test.AnotherWay._unprint_result(test_page.wait_msg);
+    Test.AnotherWay._print_result(test_page.url, null, null, test_page.test_objects);
+    Test.AnotherWay._load_next_page();
+};
+
+Test.AnotherWay._delay_actions_timeout = function(){
+    var test_page = Test.AnotherWay._g_tests_queue[0];
+    var test_object = test_page.test_objects[test_page.test_object_i];
+    var finished = true;
+    if (test_object.delay_action_i == null) {
+        // set up to start first action
+        test_object.delay_action_i = -1;
+    }
+    else {
+        // perform current action
+        var milliseconds_passed = (new Date()).getTime() - test_object.delay_prev_timer_time;
+        test_object.delay_current_milliseconds_left -= milliseconds_passed;
+        test_object.delay_total_milliseconds_left -= milliseconds_passed;
+        finished = Test.AnotherWay._delay_continue_action(test_object, milliseconds_passed);
+    }
+    while (finished && test_object.delay_action_i < test_object.delay_actions.length) {
+        ++test_object.delay_action_i; // start next action
+        finished = Test.AnotherWay._delay_start_action(test_object);
+    }
+    if (test_object.delay_action_i <= test_object.delay_actions.length) { // any more actions left ?
+        test_object.delay_prev_timer_time = (new Date()).getTime();
+        var next_timeout = Test.AnotherWay._g_timeout_granularity;
+        if (test_object.delay_current_milliseconds_left < next_timeout) {
+            next_timeout = test_object.delay_current_milliseconds_left;
+        }
+        if (test_object.second_wait_msg != null) {
+            Test.AnotherWay._update_msg_counter(test_object.second_wait_msg, (test_object.delay_total_milliseconds_left / 1000).toFixed());
+        }
+        setTimeout(Test.AnotherWay._delay_actions_timeout, next_timeout);
+    }
+    else { // no more actions left. run the next test.
+        if (test_object.second_wait_msg != null) {
+            Test.AnotherWay._unprint_result(test_object.second_wait_msg);
+            test_object.second_wait_msg = null;
+        }
+        ++test_page.test_object_i;
+        Test.AnotherWay._run_more_tests();
+    }
+};
+
+Test.AnotherWay._delay_start_action = function(test_object){
+    var finished = false;
+    var wait_msg = "";
+    if (test_object.delay_action_i == test_object.delay_actions.length) {
+        if (test_object.wait_result_milliseconds > 0) {
+            test_object.delay_current_milliseconds_left = test_object.wait_result_milliseconds; // wait for result
+            wait_msg = "waiting for results..";
+        }
+        else {
+            ++test_object.delay_action_i; // dont wait for result
+        }
+    }
+    else {
+        var action = test_object.delay_actions[test_object.delay_action_i];
+        if (action.action_kind == "call") {
+            test_object.delay_current_milliseconds_left = action.call_delay_milliseconds;
+            wait_msg = "performing delayed calls..";
+        }
+        else 
+            if (action.action_kind == "window") {
+                if (Test.AnotherWay._g_opera_path_correction != null && action.wnd_url.indexOf(":") == -1) {
+                    action.wnd_url = Test.AnotherWay._g_opera_path_correction + action.wnd_url;
+                }
+                action.wnd_wnd = window.open(action.wnd_url, "_blank");
+                if (action.wnd_wnd == null) {
+                    finished = true;
+                    test_object.fail("unable to open window for " + action.wnd_url);
+                }
+                else {
+                    test_object.delay_current_milliseconds_left = action.wnd_timeout_milliseconds;
+                    wait_msg = "opening window..";
+                }
+            }
+            else 
+                if (action.action_kind == "replay") {
+                    if (action.replay_events.length == 0) {
+                        finished = true;
+                    }
+                    else {
+                        action.replay_event_i = 0;
+                        test_object.delay_current_milliseconds_left = action.replay_events[0]["time"];
+                        wait_msg = "replaying events..";
+                    }
+                }
+    }
+    if (test_object.second_wait_msg != null) {
+        Test.AnotherWay._unprint_result(test_object.second_wait_msg);
+    }
+    if (wait_msg != "") {
+        var test_page = Test.AnotherWay._g_tests_queue[0];
+        test_object.second_wait_msg = Test.AnotherWay._print_counter_result(test_page.url, wait_msg, test_object.delay_total_milliseconds_left, "waiting");
+    }
+    else {
+        test_object.second_wait_msg = null;
+    }
+    return finished;
+};
+Test.AnotherWay._delay_continue_action = function(test_object, milliseconds_passed){
+    var finished = test_object.delay_current_milliseconds_left <= 0;
+    if (test_object.delay_action_i == test_object.delay_actions.length) { // action is "waiting for results"
+        if (test_object.n_plan != null && test_object.n_plan == test_object.n_ok + test_object.n_fail) {
+            finished = true; // if all assertions results are recorded, don't wait any more
+        }
+        if (finished) {
+            ++test_object.delay_action_i; // move on to the next test
+        }
+    }
+    else {
+        var action = test_object.delay_actions[test_object.delay_action_i];
+        if (action.action_kind == "call") {
+            if (finished) {
+                try {
+                    action.call_fn();
+                } 
+                catch (e) {
+                    Test.AnotherWay._handle_exception(test_object, e, "in delay_call");
+                }
+            }
+        }
+        else 
+            if (action.action_kind == "window") {
+                test_object.delay_total_milliseconds_left += milliseconds_passed; // for "window", the countdown is suspended since it's unknown how long it will take
+                if (Test.AnotherWay._is_url_loaded(action.wnd_url, action.wnd_wnd)) {
+                    try {
+                        action.wnd_fn(action.wnd_wnd);
+                    } 
+                    catch (e) {
+                        Test.AnotherWay._handle_exception(test_object, e, "in open_window function call");
+                    }
+                    finished = true;
+                }
+                else 
+                    if (finished) {
+                        test_object.fail("unable to open window for url '" + action.wnd_url + "'. timeout expired");
+                    }
+            }
+            else 
+                if (action.action_kind == "replay") {
+                    if (finished) {
+                        //              try {
+                        Test.AnotherWay._delay_replay_event(test_object, action.replay_wnd, action.replay_events[action.replay_event_i], action.replay_checkpoints);
+                        //              }catch( e ) { // disabled, until I know how to gel location info from an exception
+                        //                  Test.AnotherWay._handle_exception( test_object, e, "while replaying event" );
+                        //              }
+                        ++action.replay_event_i;
+                        finished = action.replay_event_i == action.replay_events.length;
+                        if (!finished) {
+                            test_object.delay_current_milliseconds_left = action.replay_events[action.replay_event_i]["time"];
+                        }
+                    }
+                }
+    }
+    return finished;
+};
+
+Test.AnotherWay._delay_replay_event = function(test_object, wnd, event, checkpoints){
+    if (event.type == "_checkpoint") {
+        var checkpoint_n = event.which;
+        var prev_n_fail = test_object.n_fail;
+        checkpoints[checkpoint_n](test_object, wnd);
+        var flash_color = prev_n_fail == test_object.n_fail ? "#2f2" : "#f22";
+        Test.AnotherWay._record_flash_border(flash_color);
+    }
+    else 
+        if (event.type == "click" || event.type == "mouseover" || event.type == "mouseout" || event.type == "mousemove" || event.type == "mousedown" || event.type == "mouseup") {
+            var target = Test.AnotherWay._record_node_path_to_node(event["target"], wnd.document);
+            if (target != null) {
+                Test.AnotherWay._record_control_update_highlight(target, "ball", event);
+                var e = wnd.document.createEvent("MouseEvents");
+                var related_target = Test.AnotherWay._record_node_path_to_node(event["relatedTarget"], wnd.document);
+                e.initMouseEvent(event["type"], event["cancelable"], event["bubbles"], wnd.document.defaultView, event["detail"], event["screenX"], event["screenY"], event["clientX"], event["clientY"], event["ctrlKey"], event["altKey"], event["shiftKey"], event["metaKey"], event["button"], Test.AnotherWay._record_node_path_to_node(event["relatedTarget"], wnd.document));
+                // Firefox 1.0.6 somehow loses relatedTarget somewhere on the way. Pass through our own, for those who choose to care.
+                e.passThroughRelatedTarget = related_target;
+                target.dispatchEvent(e);
+            }
+        }
+        else 
+            if (event.type == "keyup" || event.type == "keydown" || event.type == "keypress") {
+                var e = wnd.document.createEvent("KeyboardEvents"); // forget it. Apparently it's not supported neither by mozilla nor by opera.
+                e.initKeyboardEvent(event["type"], event["cancelable"], event["bubbles"], wnd.document.defaultView, event["which"], event["which"], event["ctrlKey"], event["altKey"], event["shiftKey"], event["metaKey"], false);
+                wnd.document.dispatchEvent(e);
+            }
+};
+
+Test.AnotherWay._print_counter_result = function(url, msg, milliseconds, style){
+    return Test.AnotherWay._print_result(url, msg + "<span class=\"counter\">" + (milliseconds / 1000).toFixed() + "</span>", style, null);
+};
+
+Test.AnotherWay._g_result_count = 0; // for assigning unique ids to result paragraphs
+// number of pages tested
+Test.AnotherWay._g_ok_pages = 0;
+Test.AnotherWay._g_fail_pages = 0;
+
+Test.AnotherWay._print_result = function(url, msg, style, test_objects){
+    var results = document.getElementById("results");
+    var r = results.appendChild(document.createElement("p"));
+    r.id = "result" + Test.AnotherWay._g_result_count;
+    ++Test.AnotherWay._g_result_count;
+    r.onclick = Test.AnotherWay._toggle_detail;
+    var text = "<span class=\"bullet\">   </span> ";
+    if (url != "") {
+        text += url + ":  ";
+    }
+    if (msg != null) {
+        text += msg;
+    }
+    if (test_objects != null) {
+        // compose summary and detail texts
+        var total_ok = 0;
+        var total_detail_ok = 0;
+        var total_fail = 0;
+        var total_detail_fail = 0;
+        var no_plan = 0;
+        
+        var detail = results.appendChild(document.createElement("div"));
+        
+        if (r.id.match(/^result(\d+)$/)) {
+            detail.id = "result_detail" + RegExp.$1;
+        }
+        
+        for (var i = 0; i < test_objects.length; ++i) {
+            var o = test_objects[i];
+            var p;
+            var p_text;
+            p = document.createElement("P");
+            Test.AnotherWay._set_css_class(p, "result_detail");
+            p_text = o.name;
+            if (o.n_fail > 0 || o.exception || (o.n_plan != null && o.n_plan != o.n_ok + o.n_fail) || (o.n_plan == null && o.n_ok == 0 && o.n_fail == 0)) {
+                ++total_fail;
+                p_text += " <span class=\"fail\">";
+                if (o.n_plan != null && o.n_plan != o.n_ok + o.n_fail) {
+                    p_text += "planned " + o.n_plan + " assertions but got " + (o.n_ok + o.n_fail) + "; ";
+                }
+                if (o.n_plan == null && o.n_ok == 0 && o.n_fail == 0) {
+                    p_text += "test did not output anything";
+                }
+                else {
+                    p_text += " fail " + o.n_fail;
+                }
+                p_text += "</span>";
+            }
+            else {
+                ++total_ok;
+            }
+            p_text += " ok " + o.n_ok;
+            if (o.n_plan == null) {
+                no_plan = 1;
+                p_text += " <span class=\"warning\">no plan</span>";
+            }
+            p.innerHTML = p_text;
+            detail.appendChild(p);
+            if (o.exception) {
+                p = document.createElement("P");
+                Test.AnotherWay._set_css_class(p, "result_exception_detail");
+                p.innerHTML = "<span class=\"fail\">exception:</span> " + o.exception;
+                detail.appendChild(p);
+                p = document.createElement("P");
+                Test.AnotherWay._set_css_class(p, "result_exception_stack_detail");
+                p.innerHTML = o.exception_stack.join("<br/>");
+                detail.appendChild(p);
+            }
+            for (var ii = 0; ii < o.assertions.length; ++ii) {
+                var oo = o.assertions[ii];
+                var status = oo.ok ? "ok" : "<span class=\"fail\">fail</span>";
+                p = document.createElement("P");
+                Test.AnotherWay._set_css_class(p, "result_micro_detail");
+                p.innerHTML = status;
+                p.appendChild(document.createTextNode(" " + oo.name));
+                detail.appendChild(p);
+            }
+            total_detail_ok += o.n_ok;
+            total_detail_fail += o.n_fail;
+        }
+        if (total_fail || total_detail_fail) {
+            text += " fail " + total_fail;
+        }
+        text += " ok " + total_ok + " (detailed:";
+        if (total_fail || total_detail_fail) {
+            text += " fail " + total_detail_fail;
+        }
+        text += " ok " + total_detail_ok + ")";
+        if (no_plan) {
+            text += " <span class=\"warning\">no plan</span>";
+        }
+        style = total_fail == 0 ? "ok" : "fail";
+        detail.style.display = style == "fail" ? "block" : "none";
+        detail.style.cursor = "text";
+    }
+    if (style != null) {
+        Test.AnotherWay._set_css_class(r, style);
+        if (style == "ok") {
+            ++Test.AnotherWay._g_ok_pages;
+        }
+        else 
+            if (style == "fail" || style == "badtest") {
+                ++Test.AnotherWay._g_fail_pages;
+            }
+        var pages_total = "";
+        if (Test.AnotherWay._g_fail_pages > 0) {
+            pages_total += " fail " + Test.AnotherWay._g_fail_pages;
+        }
+        pages_total += " ok " + Test.AnotherWay._g_ok_pages;
+        
+        // also count out the total number of tests in fail and ok
+        Test.AnotherWay._openlayers_sum_total_detail_ok  = Test.AnotherWay._openlayers_sum_total_detail_ok || 0;
+        Test.AnotherWay._openlayers_sum_total_detail_ok += (total_detail_ok||0);
+        
+        Test.AnotherWay._openlayers_sum_total_detail_fail  = Test.AnotherWay._openlayers_sum_total_detail_fail || 0;
+        Test.AnotherWay._openlayers_sum_total_detail_fail += (total_detail_fail||0);
+        
+        pages_total+=" (detailed: fail " + Test.AnotherWay._openlayers_sum_total_detail_fail + " | ok " + Test.AnotherWay._openlayers_sum_total_detail_ok + ")";
+        
+        Test.AnotherWay._update_results_total(pages_total);
+    }
+    r.innerHTML = text;
+    if (results.scrollHeight != null && results.scrollTop != null && results.offsetHeight != null) {
+        results.scrollTop = results.scrollHeight - results.offsetHeight;
+    }
+    // when test_objects is not null, the results are final - good time to clean up
+    if (test_objects != null) {
+        for (var i = 0; i < test_objects.length; ++i) {
+            var actions = test_objects[i].delay_actions;
+            for (var action_i = 0; action_i < actions.length; ++action_i) {
+                var action = actions[action_i];
+                if (action.action_kind == "window" && action.wnd_wnd != null && !action.wnd_no_close) {
+                    action.wnd_wnd.close();
+                    action.wnd_wnd = null;
+                }
+            }
+        }
+    }
+    return r;
+};
+
+Test.AnotherWay._unprint_result = function(child){
+    var results = document.getElementById("results");
+    results.removeChild(child);
+};
+
+Test.AnotherWay._toggle_detail = function(){
+    if (this.id.match(/^result(\d+)$/)) {
+        var detail = document.getElementById("result_detail" + RegExp.$1);
+        if (detail != null) {
+            if (detail.style.display == "none") {
+                detail.style.display = "block";
+            }
+            else 
+                if (detail.style.display == "block") {
+                    detail.style.display = "none";
+                }
+        }
+    }
+};
+
+Test.AnotherWay._update_msg_counter = function(msg, text){
+    for (var i = 0; i < msg.childNodes.length; ++i) {
+        var item = msg.childNodes[i];
+        if (item.nodeName == "SPAN" && Test.AnotherWay._get_css_class(item) == "counter") {
+            item.innerHTML = text;
+        }
+    }
+};
+
+Test.AnotherWay._update_results_total = function(msg){
+    var total = document.getElementById("total");
+    if (total) {
+        total.innerHTML = msg;
+    }
+};
+
+Test.AnotherWay._results_clear_onclick = function(){
+    var results = document.getElementById("results");
+    results.innerHTML = "";
+    Test.AnotherWay._update_results_total("");
+    Test.AnotherWay._g_ok_pages = 0;
+    Test.AnotherWay._g_fail_pages = 0;
+    Test.AnotherWay._openlayers_sum_total_detail_ok=0;
+    Test.AnotherWay._openlayers_sum_total_detail_fail=0;
+    var debug = document.getElementById("debug");
+    debug.innerHTML = "";
+    Test.AnotherWay.reset_running_time();
+};
+
+Test.AnotherWay._get_css_class = function(o){
+    var c = o.getAttribute("className");
+    if (c == null || c == "") {
+        c = o.getAttribute("class");
+    }
+    return c;
+};
+
+Test.AnotherWay._set_css_class = function(o, css_class){
+    o.setAttribute("className", css_class);
+    o.setAttribute("class", css_class);
+};
+
+Test.AnotherWay._tab_onclick = function(){
+    var tab = this;
+    var tabs = [document.getElementById("debug_tab"), document.getElementById("results_tab")];
+    var panes = [document.getElementById("debug"), document.getElementById("results")];
+    for (var i = 0; i < tabs.length; ++i) {
+        if (tab == tabs[i]) {
+            Test.AnotherWay._set_css_class(tabs[i], "active_tab");
+            panes[i].style.display = "block";
+        }
+        else {
+            Test.AnotherWay._set_css_class(tabs[i], "inactive_tab");
+            panes[i].style.display = "none";
+        }
+    }
+};
+Test.AnotherWay._tab_mouseover = function(){
+    if (Test.AnotherWay._get_css_class(this) == "inactive_tab") {
+        Test.AnotherWay._set_css_class(this, "inactive_mouseover_tab");
+    }
+};
+Test.AnotherWay._tab_mouseout = function(){
+    if (Test.AnotherWay._get_css_class(this) == "inactive_mouseover_tab") {
+        Test.AnotherWay._set_css_class(this, "inactive_tab");
+    }
+};
+
+// recording mouse input
+Test.AnotherWay._record_check_onfocus = function(){
+    var o = this;
+    var check_select = o.type != "text";
+    var div = document.getElementById("record_div");
+    var inputs = div.getElementsByTagName("input");
+    for (var i = 0; i < inputs.length; ++i) {
+        var input = inputs[i];
+        if (input.type == "radio") {
+            if (input.value == "select") {
+                input.checked = check_select;
+            }
+            else 
+                if (input.value == "input") {
+                    input.checked = !check_select;
+                }
+        }
+    }
+};
+
+Test.AnotherWay._g_no_record_msg = null; // not null - recording is unavailable
+Test.AnotherWay._g_record_timeout_cnt = 0; // opening window for a page for recording
+Test.AnotherWay._g_record_url = null;
+Test.AnotherWay._g_record_wnd = null;
+Test.AnotherWay._g_record_random_id = null; // added to element ids of record_control div so that they do not clash with ids already in the page for which input is recorded
+Test.AnotherWay._g_record_keydown = null; // recording control - which key is down
+Test.AnotherWay._g_record_ctrl_keydown = false;
+Test.AnotherWay._g_record_shift_keydown = false;
+Test.AnotherWay._g_record_control_visible = true; // recording control ui state
+Test.AnotherWay._g_record_started;
+Test.AnotherWay._g_record_paused;
+Test.AnotherWay._g_record_include_mousemove = false;
+Test.AnotherWay._g_record_start_time; // for time references
+Test.AnotherWay._g_record_pause_start_time;
+Test.AnotherWay._g_record_update_time_interval; // showing time in the control ui
+Test.AnotherWay._g_record_waiting_for_results = false; // waiting for results window to open
+Test.AnotherWay._g_record_events; // recorded events
+Test.AnotherWay._g_record_under_cursor; // track element under cursor
+Test.AnotherWay._g_record_checkpoint_count; // for checkpoint numbering
+Test.AnotherWay._g_record_mouse_over_record_control; // for avoiding record control highlight on mouseover
+Test.AnotherWay._g_record_highlighted_element = {
+    element: null,
+    x: null,
+    y: null
+};
+
+Test.AnotherWay._record_control_get_element = function(id){
+    if (Test.AnotherWay._g_record_wnd != null && Test.AnotherWay._g_record_wnd.document != null) {
+        return Test.AnotherWay._g_record_wnd.document.getElementById(id + Test.AnotherWay._g_record_random_id);
+    }
+    else {
+        return null;
+    }
+};
+Test.AnotherWay._record_start_onclick = function() // "record" button on the run_tests.html: open a window for a page for which input is recorded
+{
+    if (Test.AnotherWay._g_no_record_msg != null) {
+        alert(Test.AnotherWay._g_no_record_msg);
+        return;
+    }
+    if (Test.AnotherWay._g_record_timeout_cnt > 0 ||
+    (Test.AnotherWay._g_record_wnd != null && (Test.AnotherWay._g_record_wnd.closed != null && !Test.AnotherWay._g_record_wnd.closed))) { // in opera, closed is null.
+        alert("there is already window opened for recording input for a page " + Test.AnotherWay._g_record_url);
+        return;
+    }
+    var div = document.getElementById("record_div");
+    var inputs = div.getElementsByTagName("input");
+    var url = null;
+    for (var i = 0; i < inputs.length; ++i) {
+        var input = inputs[i];
+        if (input.type == "radio") {
+            if (input.value == "select" && input.checked) {
+                var index = document.getElementById("record_select").selectedIndex;
+                if (index > 0) {
+                    url = Test.AnotherWay._g_test_page_urls[index - 1].url;
+                }
+            }
+            else 
+                if (input.value == "input" && input.checked) {
+                    url = document.getElementById("record_input").value;
+                }
+        }
+    }
+    if (url != null) {
+        Test.AnotherWay._g_record_url = url;
+        Test.AnotherWay._g_record_wnd = window.open(url, "_blank");
+        if (Test.AnotherWay._g_record_wnd == null) {
+            alert("unable to open new window for a page: " + url);
+        }
+        else {
+            Test.AnotherWay._g_record_timeout_cnt = 50;
+            setTimeout(Test.AnotherWay._record_window_timeout, 100);
+        }
+    }
+};
+Test.AnotherWay._record_window_timeout = function(){
+    if (Test.AnotherWay._is_url_loaded(Test.AnotherWay._g_record_url, Test.AnotherWay._g_record_wnd)) {
+        Test.AnotherWay._record_window_setup(Test.AnotherWay._g_record_wnd);
+    }
+    else {
+        if (--Test.AnotherWay._g_record_timeout_cnt > 0) {
+            setTimeout(Test.AnotherWay._record_window_timeout, 100);
+        }
+        else {
+            alert("timeout expired while opening new window for a page: " + Test.AnotherWay._g_record_url);
+            Test.AnotherWay._g_record_wnd = null;
+            Test.AnotherWay._g_record_url = null;
+            Test.AnotherWay._g_record_timeout_cnt = 0;
+        }
+    }
+};
+Test.AnotherWay._record_control_randomize_id = function(e, r){
+    if (e.id != "") {
+        e.id = e.id + r;
+    }
+    for (var c = e.firstChild; c != null; c = c.nextSibling) {
+        Test.AnotherWay._record_control_randomize_id(c, r);
+    }
+};
+Test.AnotherWay._record_window_setup = function(wnd) // insert recording control into the page for which input is recorded
+{
+    Test.AnotherWay._g_record_timeout_cnt = 0;
+    var this_div = document.getElementById("record_control");
+    var record_control = wnd.document.importNode(this_div, true);
+    Test.AnotherWay._g_record_random_id = (1000 * Math.random()).toFixed();
+    Test.AnotherWay._record_control_randomize_id(record_control, Test.AnotherWay._g_record_random_id);
+    Test.AnotherWay._g_record_control_visible = true;
+    Test.AnotherWay._g_record_started = false;
+    Test.AnotherWay._g_record_paused = false;
+    Test.AnotherWay._g_record_checkpoint_count = 0;
+    Test.AnotherWay._g_record_mouse_over_record_control = false;
+    var doc = wnd.document;
+    doc.body.appendChild(record_control);
+    // opera sans-serif font is different
+    if (window.opera) {
+        cursor_over_indicator = Test.AnotherWay._record_control_get_element("record_cursor_over");
+        cursor_over_indicator.style.width = "18em";
+        cursor_over_indicator.style.height = "2em";
+        cursor_over_indicator.style.fontSize = "7pt";
+    }
+    doc.addEventListener("keydown", Test.AnotherWay._record_control_keydown, true);
+    doc.addEventListener("keyup", Test.AnotherWay._record_control_keyup, true);
+    //  doc.addEventListener( "keypress", Test.AnotherWay._record_event, true ); // replaying is not supported by any known browser
+    
+    doc.body.addEventListener("mousemove", Test.AnotherWay._record_on_mousemove, true);
+    doc.body.addEventListener("click", Test.AnotherWay._record_event, true);
+    doc.body.addEventListener("mouseover", Test.AnotherWay._record_event, true);
+    doc.body.addEventListener("mouseout", Test.AnotherWay._record_event, true);
+    doc.body.addEventListener("mousedown", Test.AnotherWay._record_event, true);
+    doc.body.addEventListener("mouseup", Test.AnotherWay._record_event, true);
+};
+Test.AnotherWay._record_control_key_disabled = function(k){
+    if (k == "c") {
+        return !Test.AnotherWay._g_record_started;
+    }
+    else 
+        if (k == "p") {
+            return !Test.AnotherWay._g_record_started;
+        }
+        else 
+            if (k == "s") {
+                return Test.AnotherWay._g_record_waiting_for_results;
+            }
+            else {
+                return false;
+            }
+};
+
+Test.AnotherWay._record_control_update_ui = function(){
+    var keydown_color = "#fff";
+    var disabled_color = "#aaa";
+    var button_color = "#adf";
+    var active_color = "#fdf";
+    
+    var display = {};
+    display[false] = "none";
+    display[true] = "inline";
+    
+    var s_button = Test.AnotherWay._record_control_get_element("record_s");
+    var record_on = Test.AnotherWay._record_control_get_element("record_on");
+    var record_off = Test.AnotherWay._record_control_get_element("record_off");
+    
+    s_button.style.backgroundColor = Test.AnotherWay._record_control_key_disabled("s") ? disabled_color : Test.AnotherWay._g_record_keydown == "s" ? keydown_color : Test.AnotherWay._g_record_started ? active_color : button_color;
+    record_on.style.display = display[!Test.AnotherWay._g_record_started];
+    record_off.style.display = display[Test.AnotherWay._g_record_started];
+    
+    var h_button = Test.AnotherWay._record_control_get_element("record_h");
+    h_button.style.backgroundColor = Test.AnotherWay._g_record_keydown == "h" ? keydown_color : button_color;
+    
+    var p_button = Test.AnotherWay._record_control_get_element("record_p");
+    var record_pause_on = Test.AnotherWay._record_control_get_element("record_pause_on");
+    var record_pause_off = Test.AnotherWay._record_control_get_element("record_pause_off");
+    p_button.style.backgroundColor = Test.AnotherWay._record_control_key_disabled("p") ? disabled_color : Test.AnotherWay._g_record_keydown == "p" ? keydown_color : Test.AnotherWay._g_record_paused ? active_color : button_color;
+    record_pause_on.style.display = display[!Test.AnotherWay._g_record_paused];
+    record_pause_off.style.display = display[Test.AnotherWay._g_record_paused];
+    
+    var m_button = Test.AnotherWay._record_control_get_element("record_m");
+    var record_include_mousemove = Test.AnotherWay._record_control_get_element("record_include_mousemove");
+    var record_omit_mousemove = Test.AnotherWay._record_control_get_element("record_omit_mousemove");
+    m_button.style.backgroundColor = Test.AnotherWay._g_record_keydown == "m" ? keydown_color : Test.AnotherWay._g_record_include_mousemove ? active_color : button_color;
+    record_include_mousemove.style.display = display[!Test.AnotherWay._g_record_include_mousemove];
+    record_omit_mousemove.style.display = display[Test.AnotherWay._g_record_include_mousemove];
+    
+    var c_button = Test.AnotherWay._record_control_get_element("record_c");
+    c_button.style.backgroundColor = Test.AnotherWay._record_control_key_disabled("c") ? disabled_color : Test.AnotherWay._g_record_keydown == "c" ? keydown_color : button_color;
+    
+    var record_indicator = Test.AnotherWay._record_control_get_element("record_indicator");
+    record_indicator.style.display = display[Test.AnotherWay._g_record_started];
+    
+    var pause_indicator = Test.AnotherWay._record_control_get_element("record_pause_indicator");
+    pause_indicator.style.display = display[Test.AnotherWay._g_record_paused];
+    
+    var record_control = Test.AnotherWay._record_control_get_element("record_control");
+    record_control.style.display = Test.AnotherWay._g_record_control_visible ? "block" : "none";
+    
+    var shift_button = Test.AnotherWay._record_control_get_element("record_shift_key");
+    shift_button.style.backgroundColor = Test.AnotherWay._g_record_shift_keydown ? keydown_color : button_color;
+    
+    var ctrl_button = Test.AnotherWay._record_control_get_element("record_ctrl_key");
+    ctrl_button.style.backgroundColor = Test.AnotherWay._g_record_ctrl_keydown ? keydown_color : button_color;
+};
+Test.AnotherWay._record_format_time = function(t){
+    t = new Date(t);
+    var m = t.getMinutes();
+    var s = t.getSeconds();
+    var str = m == 0 ? "" : m + "m ";
+    str += s + "s.";
+    return str;
+};
+Test.AnotherWay._record_control_update_time = function(){
+    var time_display = Test.AnotherWay._record_control_get_element("record_time");
+    if (time_display != null) {
+        time_display.innerHTML = Test.AnotherWay._record_format_time((new Date()).getTime() - Test.AnotherWay._g_record_start_time);
+    }
+};
+Test.AnotherWay._record_control_update_highlight = function(elem, style, event){
+    if (elem == null) {
+        Test.AnotherWay._record_highlight_border(null);
+    }
+    else {
+        var pos = Test.AnotherWay._get_page_coords(elem);
+        if (style == "ball" || elem != Test.AnotherWay._g_record_highlighted_element.element || pos.x != Test.AnotherWay._g_record_highlighted_element.x || pos.y != Test.AnotherWay._g_record_highlighted_element.y) {
+            Test.AnotherWay._g_record_highlighted_element = {
+                element: elem,
+                x: pos.x,
+                y: pos.y
+            };
+            Test.AnotherWay._record_highlight_border(elem, style, event);
+        }
+    }
+};
+Test.AnotherWay._record_decode_key = function(event){
+    var k = null;
+    if (event == null) {
+        k = Test.AnotherWay._g_record_wnd.event.keyCode;
+    }
+    else {
+        k = event.which;
+    }
+    if (k == 83) {
+        return "s";
+    }
+    else 
+        if (k == 72) {
+            return "h";
+        }
+        else 
+            if (k == 73) {
+                return "i";
+            }
+            else 
+                if (k == 80) {
+                    return "p";
+                }
+                else 
+                    if (k == 67) {
+                        return "c";
+                    }
+                    else 
+                        if (k == 77) {
+                            return "m";
+                        }
+                        else 
+                            if (k == 16) {
+                                return "shift";
+                            }
+                            else 
+                                if (k == 17) {
+                                    return "ctrl";
+                                }
+                                else 
+                                    if (k == 18) {
+                                        return "alt";
+                                    }
+                                    else 
+                                        if (k == 19) {
+                                            return "pause";
+                                        }
+                                        else 
+                                            if (k == 123) {
+                                                return "f12";
+                                            }
+    return "";
+};
+Test.AnotherWay._record_control_keydown = function(event){
+    var handled = false;
+    var k = Test.AnotherWay._record_decode_key(event);
+    if (k == "shift") {
+        Test.AnotherWay._g_record_shift_keydown = true;
+    }
+    else 
+        if (k == "ctrl") {
+            Test.AnotherWay._g_record_ctrl_keydown = true;
+        }
+        else 
+            if (k != "" && (Test.AnotherWay._g_record_keydown == null || Test.AnotherWay._g_record_keydown == k)) {
+                if (Test.AnotherWay._g_record_ctrl_keydown && Test.AnotherWay._g_record_shift_keydown && !Test.AnotherWay._record_control_key_disabled(k)) {
+                    Test.AnotherWay._g_record_keydown = k;
+                    handled = true;
+                }
+            }
+            else {
+                Test.AnotherWay._g_record_keydown = "";
+            }
+    Test.AnotherWay._record_control_update_ui();
+    if (!handled) {
+        //      Test.AnotherWay._record_event( event ); // replaying is not supported in any known browser
+    }
+    return;
+};
+Test.AnotherWay._record_control_keyup = function(event){
+    var handled = false;
+    var k = Test.AnotherWay._record_decode_key(event);
+    if (k == "shift") {
+        Test.AnotherWay._g_record_shift_keydown = false;
+    }
+    else 
+        if (k == "ctrl") {
+            Test.AnotherWay._g_record_ctrl_keydown = false;
+        }
+        else 
+            if (k != "" && k == Test.AnotherWay._g_record_keydown && Test.AnotherWay._g_record_ctrl_keydown && Test.AnotherWay._g_record_shift_keydown) {
+                if (k == "s") {
+                    Test.AnotherWay._g_record_started = !Test.AnotherWay._g_record_started;
+                    if (Test.AnotherWay._g_record_started) {
+                        Test.AnotherWay._g_record_events = [];
+                        Test.AnotherWay._g_record_start_time = (new Date()).getTime();
+                        Test.AnotherWay._record_control_update_time();
+                        Test.AnotherWay._g_record_update_time_interval = window.setInterval(Test.AnotherWay._record_control_update_time, 200);
+                    }
+                    else {
+                        Test.AnotherWay._record_control_update_highlight(null);
+                        if (!Test.AnotherWay._g_record_paused) {
+                            window.clearInterval(Test.AnotherWay._g_record_update_time_interval);
+                        }
+                        Test.AnotherWay._g_record_waiting_for_results = true;
+                        // open a new window for self, pass a parameter to dump recorded events as javascript code there
+                        // (the easiest way to obtain a document from the same origin, so it's writable, is to open this same page again)
+                        Test.AnotherWay._g_record_paused = false;
+                        var loc = window.location;
+                        loc = loc.protocol + "//" + loc.host + loc.pathname + "?recording_results=" + Test.AnotherWay._g_record_random_id;
+                        if (window.open(loc, "_blank") == null) {
+                            alert("unable to open new window for results");
+                        }
+                    }
+                    handled = true;
+                }
+                else 
+                    if (k == "h") {
+                        Test.AnotherWay._g_record_control_visible = !Test.AnotherWay._g_record_control_visible;
+                        handled = true;
+                    }
+                    else 
+                        if (k == "p") {
+                            Test.AnotherWay._g_record_paused = !Test.AnotherWay._g_record_paused;
+                            if (Test.AnotherWay._g_record_paused) {
+                                Test.AnotherWay._g_record_pause_start_time = (new Date()).getTime();
+                                if (Test.AnotherWay._g_record_started) {
+                                    window.clearInterval(Test.AnotherWay._g_record_update_time_interval);
+                                }
+                                Test.AnotherWay._record_control_update_highlight(null);
+                            }
+                            else {
+                                var pause_duration = (new Date()).getTime() - Test.AnotherWay._g_record_pause_start_time;
+                                Test.AnotherWay._g_record_start_time += pause_duration;
+                                Test.AnotherWay._g_record_update_time_interval = window.setInterval(Test.AnotherWay._record_control_update_time, 200);
+                            }
+                            handled = true;
+                        }
+                        else 
+                            if (k == "m") {
+                                Test.AnotherWay._g_record_include_mousemove = !Test.AnotherWay._g_record_include_mousemove;
+                                handled = true;
+                            }
+                            else 
+                                if (k == "c") {
+                                    var o = Test.AnotherWay._record_checkpoint();
+                                    Test.AnotherWay._record_display_checkpoint(o);
+                                    Test.AnotherWay._record_flash_border("#24d");
+                                    handled = true;
+                                }
+            }
+    Test.AnotherWay._g_record_keydown = null;
+    Test.AnotherWay._record_control_update_ui();
+    if (!handled) {
+        //      Test.AnotherWay._record_event( event ); // replaying is not supported in any known browser
+    }
+    return;
+};
+Test.AnotherWay._record_html_node_path = function(node){
+    if (node == null) {
+        return null;
+    }
+    var path = [];
+    while (true) {
+        if (node.id != null && node.id != "") {
+            path.unshift("#" + node.id + " " + node.nodeName);
+            break;
+        }
+        else {
+            var parent_node = node.parentNode;
+            if (parent_node == null) {
+                return []; // no BODY up the path - this node is screwed (browsers differ in what's above the body), discard
+            }
+            else {
+                var i = 0;
+                var found = false;
+                for (var child = parent_node.firstChild; child != null; child = child.nextSibling) {
+                    if (child == node) {
+                        found = true;
+                        break;
+                    }
+                    if (child.nodeType == 1) { // count only HTML element nodes
+                        ++i;
+                    }
+                }
+                if (!found) {
+                    i = -1;
+                }
+                path.unshift(i + " " + node.nodeName);
+                if (parent_node.nodeName == "BODY" || parent_node.nodeName == "body") {
+                    break;
+                }
+                node = parent_node;
+            }
+        }
+    }
+    return path;
+};
+Test.AnotherWay._record_node_path_to_string = function(path){
+    var s = "";
+    if (path != null) {
+        for (var i = 0; i < path.length; ++i) {
+            s += i == 0 ? "" : ", ";
+            var elem = path[i].split(" ");
+            if (elem[0].charAt(0) == "#") {
+                s += elem[1] + " " + elem[0];
+            }
+            else {
+                s += elem[1] + " [" + elem[0] + "]";
+            }
+        }
+    }
+    return s;
+};
+Test.AnotherWay._record_node_path_to_node = function(path_str, doc){
+    if (path_str == null) {
+        return null;
+    }
+    var path = path_str.split(",");
+    var node = doc.body;
+    for (var i = 0; i < path.length; ++i) {
+        var node_i = path[i].split(" ")[0];
+        if (node_i.charAt(0) == "#") {
+            node = doc.getElementById(node_i.substring(1));
+        }
+        else {
+            if (node_i < 0 || node_i >= node.childNodes.length) {
+                node = null;
+            }
+            else {
+                node = node.firstChild;
+                while (node != null) {
+                    if (node.nodeType == 1) { // count only HTML element nodes
+                        if (node_i == 0) {
+                            break;
+                        }
+                        --node_i;
+                    }
+                    node = node.nextSibling;
+                }
+            }
+        }
+        if (node == null) {
+            return null;
+        }
+    }
+    return node;
+};
+Test.AnotherWay._record_control_contains_id = function(s){
+    return s.match(/^#record_[\w_]+/) && s.match(Test.AnotherWay._g_record_random_id);
+};
+Test.AnotherWay._record_checkpoint = function(){
+    var o = {
+        type: "_checkpoint",
+        time: (new Date()).getTime() - Test.AnotherWay._g_record_start_time,
+        which: Test.AnotherWay._g_record_checkpoint_count++,
+        target: Test.AnotherWay._record_html_node_path(Test.AnotherWay._g_record_under_cursor)
+    };
+    Test.AnotherWay._g_record_events.push(o);
+    return o;
+};
+Test.AnotherWay._record_event = function(event){
+    var unneeded = ["rangeOffset", "eventPhase", "timeStamp", "isTrusted", "popupWindowFeatures", "rangeOffset"];
+    if (Test.AnotherWay._g_record_started && !Test.AnotherWay._g_record_paused) {
+        var o = {};
+        for (var n in event) {
+            var needed = !n.match(/^[A-Z0-9_]+$/);
+            if (needed) {
+                for (var ui = 0; ui < unneeded.length; ++ui) {
+                    if (unneeded[ui] == n) {
+                        needed = false;
+                        break;
+                    }
+                }
+                if (needed) {
+                    var value = event[n];
+                    if (typeof(value) != "object" && typeof(value) != "function") {
+                        o[n] = value;
+                    }
+                    else 
+                        if (n == "target" || n == "relatedTarget") {
+                            o[n] = Test.AnotherWay._record_html_node_path(value);
+                        }
+                }
+            }
+        }
+        o["time"] = (new Date()).getTime() - Test.AnotherWay._g_record_start_time;
+        var over_record_control = o["target"] != null && o["target"][0] != null && Test.AnotherWay._record_control_contains_id(o["target"][0]);
+        if (!over_record_control) {
+            Test.AnotherWay._g_record_events.push(o);
+        }
+    }
+    return true;
+};
+Test.AnotherWay._record_on_mousemove = function(event){
+    var path = Test.AnotherWay._record_html_node_path(event.target);
+    var new_mouse_over_record_control = path != null && path[0] != null && Test.AnotherWay._record_control_contains_id(path[0]);
+    if (new_mouse_over_record_control != Test.AnotherWay._g_record_mouse_over_record_control) {
+        Test.AnotherWay._g_record_mouse_over_record_control = new_mouse_over_record_control;
+        Test.AnotherWay._record_control_update_ui();
+    }
+    if (event.target != null && event.target != Test.AnotherWay._g_record_under_cursor) {
+        Test.AnotherWay._g_record_under_cursor = event.target;
+        var s = "";
+        if (path == null || path[0] == null || !Test.AnotherWay._record_control_contains_id(path[0])) {
+            s = Test.AnotherWay._record_node_path_to_string(path);
+        }
+        if (s == "") {
+            s = " ";
+        }
+        var cursor_over_indicator = Test.AnotherWay._record_control_get_element("record_cursor_over");
+        cursor_over_indicator.innerHTML = s;
+    }
+    
+    var highlight_element = null;
+    if (!Test.AnotherWay._g_record_mouse_over_record_control && Test.AnotherWay._g_record_started && !Test.AnotherWay._g_record_paused) {
+        highlight_element = event.target;
+    }
+    // highlight border disabled on recording - it causes page to scroll, issuing spurious mouseover/mouseout event
+    //Test.AnotherWay._record_control_update_highlight( highlight_element, "border" );
+    
+    if (Test.AnotherWay._g_record_include_mousemove) {
+        Test.AnotherWay._record_event(event);
+    }
+    return true;
+};
+Test.AnotherWay._record_display_checkpoint = function(o){
+    var checkpoints_div = Test.AnotherWay._record_control_get_element("record_checkpoints");
+    var p = checkpoints_div.appendChild(checkpoints_div.ownerDocument.createElement("div"));
+    p.style.marginTop = "3px";
+    p.style.font = "normal normal 8pt sans-serif";
+    p.style.color = "#000";
+    p.style.textAligh = "left";
+    p.style.position = "relative";
+    p.style.width = "100%";
+    var checkpoint_text = "";
+    checkpoint_text += "#" + (o.which + 1);
+    checkpoint_text += "  " + Test.AnotherWay._record_format_time(o.time);
+    if (o.target != null) {
+        checkpoint_text += Test.AnotherWay._record_node_path_to_string(o.target);
+    }
+    p.appendChild(p.ownerDocument.createTextNode(checkpoint_text));
+};
+Test.AnotherWay._record_save_results = function(doc){
+    // strange, but DOM-style append does not work here in opera 8.
+    var append = function(s){
+        doc.write("<div>" + s + "</div>");
+    };
+    append("/* paste this data into your javascript and pass it as an argument to replay_events method */");
+    append("{ checkpoints: [");
+    var first_checkpoint = true;
+    for (var i = 0; i < Test.AnotherWay._g_record_events.length; ++i) {
+        var o = Test.AnotherWay._g_record_events[i];
+        if (o.type == "_checkpoint") {
+            var str = first_checkpoint ? "" : "}, ";
+            str += "function( tst, wnd ) { // #" + o.which + " time " + Test.AnotherWay._record_format_time(o.time) + " cursor was over " + Test.AnotherWay._record_node_path_to_string(o.target);
+            append(str);
+            first_checkpoint = false;
+        }
+    }
+    if (!first_checkpoint) {
+        append("}");
+    }
+    append("], events: [ ");
+    var prev_time = 0;
+    for (var i = 0; i < Test.AnotherWay._g_record_events.length; ++i) {
+        var o = Test.AnotherWay._g_record_events[i];
+        var s = "";
+        s += "{";
+        var n_first = true;
+        for (var n in o) {
+            if (n == "time") { // convert to relative time
+                var cur_time = o[n] - 0;
+                o[n] = cur_time - prev_time;
+                prev_time = cur_time;
+            }
+            s += n_first ? n : ", " + n;
+            s += ":";
+            if (o[n] == null) {
+                s += "null";
+            }
+            else {
+                s += "\"" + o[n] + "\"";
+            }
+            n_first = false;
+        }
+        s += i == Test.AnotherWay._g_record_events.length - 1 ? "}" : "},";
+        append(s);
+    }
+    append("] }");
+    append(";");
+};
+
+Test.AnotherWay._g_record_border; // border highlighting element under cursor
+Test.AnotherWay._g_record_border_flashes = []; // array of { color: color, timeout: milliseconds }
+Test.AnotherWay._g_record_border_flashing = false;
+Test.AnotherWay._g_record_border_normal_color = "#d4b";
+Test.AnotherWay._record_flash_border_timeout = function(){
+    var color = Test.AnotherWay._g_record_border_normal_color;
+    var timeout = null;
+    if (Test.AnotherWay._g_record_border_flashes.length != 0) {
+        color = Test.AnotherWay._g_record_border_flashes[0].color;
+        timeout = Test.AnotherWay._g_record_border_flashes[0].timeout;
+        Test.AnotherWay._g_record_border_flashes.splice(0, 1);
+    }
+    if (Test.AnotherWay._g_record_border != null) {
+        for (var i = 0; i < Test.AnotherWay._g_record_border.length; ++i) {
+            Test.AnotherWay._g_record_border[i].style.backgroundColor = color;
+        }
+    }
+    if (timeout != null) {
+        setTimeout(Test.AnotherWay._record_flash_border_timeout, timeout);
+    }
+    else {
+        Test.AnotherWay._g_record_border_flashing = false;
+    }
+};
+Test.AnotherWay._get_page_coords = function(elm){
+    var point = {
+        x: 0,
+        y: 0
+    };
+    while (elm) {
+        point.x += elm.offsetLeft;
+        point.y += elm.offsetTop;
+        elm = elm.offsetParent;
+    }
+    return point;
+};
+Test.AnotherWay._set_page_coords = function(elm, x, y){
+    var parent_coords = {
+        x: 0,
+        y: 0
+    };
+    if (elm.offsetParent) {
+        parent_coords = Test.AnotherWay._get_page_coords(elm.offsetParent);
+    }
+    var new_x = x - parent_coords.x;
+    if (new_x < 0) {
+        new_x = 0;
+    }
+    elm.style.left = new_x + 'px';
+    var new_y = y - parent_coords.y;
+    if (new_y < 0) {
+        new_y = 0;
+    }
+    elm.style.top = new_y + 'px';
+};
+Test.AnotherWay._record_setup_highlight_positions = function(element, style, coords, positions){
+    if (style == "border") {
+        var width = element.clientWidth;
+        var height = element.clientHeight;
+        var step = 0;
+        var thickness = 2;
+        var fudge_expand = 4;
+        positions.push({
+            x: coords.x - step - thickness,
+            y: coords.y - step - thickness,
+            width: width + 2 * step + 2 * thickness + fudge_expand,
+            height: thickness
+        });
+        positions.push({
+            x: coords.x + width + step + fudge_expand,
+            y: coords.y - step - thickness,
+            width: thickness,
+            height: height + 2 * step + 2 * thickness + fudge_expand
+        });
+        positions.push({
+            x: positions[0].x,
+            y: positions[0].y,
+            width: positions[0].width,
+            height: positions[0].height
+        });
+        positions.push({
+            x: positions[1].x,
+            y: positions[1].y,
+            width: positions[1].width,
+            height: positions[1].height
+        });
+        positions[2].y += height + thickness + 2 * step + fudge_expand;
+        positions[3].x -= width + thickness + 2 * step + fudge_expand;
+    }
+    else 
+        if (style == "ball") {
+            positions.push({
+                x: coords.x + 2,
+                y: coords.y,
+                width: 2,
+                height: 6
+            });
+            positions.push({
+                x: coords.x,
+                y: coords.y + 2,
+                width: 6,
+                height: 2
+            });
+            positions.push({
+                x: coords.x + 1,
+                y: coords.y + 1,
+                width: 4,
+                height: 4
+            });
+        }
+};
+Test.AnotherWay._record_highlight_border = function(element, style, event) // null - hide border
+{
+    if (element != null) {
+        if (Test.AnotherWay._g_record_border == null || Test.AnotherWay._g_record_border[0].ownerDocument != element.ownerDocument) {
+            Test.AnotherWay._g_record_border = [];
+            var n = style == "border" ? 4 : style == "ball" ? 3 : 0;
+            for (var i = 0; i < 4; ++i) {
+                var b = element.ownerDocument.createElement("div");
+                b.style.position = "absolute";
+                b.style.zIndex = "1";
+                b.style.backgroundColor = Test.AnotherWay._g_record_border_normal_color;
+                element.ownerDocument.body.appendChild(b);
+                Test.AnotherWay._g_record_border.push(b);
+            }
+        }
+        var coords = null;
+        if (style == "border") {
+            coords = Test.AnotherWay._get_page_coords(element);
+        }
+        else 
+            if (style == "ball") {
+                if (event != null) {
+                    if (event.pageX != null && event.pageY != null) {
+                        coords = {
+                            x: event.pageX - 0,
+                            y: event.pageY - 0
+                        };
+                    }
+                    else 
+                        if (event.clientX != null && event.clientY != null) {
+                            var doc = element.ownerDocument;
+                            if (doc != null) {
+                                coords = {
+                                    x: (event.clientX - 0) + doc.body.scrollLeft,
+                                    y: (event.clientY - 0) + doc.body.scrollTop
+                                };
+                            }
+                        }
+                }
+            }
+        if (coords != null && element.clientWidth != null && element.clientHeight != null) {
+            var positions = [];
+            Test.AnotherWay._record_setup_highlight_positions(element, style, coords, positions);
+            for (var i = 0; i < positions.length; ++i) {
+                var b = Test.AnotherWay._g_record_border[i];
+                var p = positions[i];
+                Test.AnotherWay._set_page_coords(b, p.x, p.y);
+                b.style.width = p.width + "px";
+                b.style.height = p.height + "px";
+                b.style.display = "block";
+            }
+        }
+    }
+    else {
+        if (Test.AnotherWay._g_record_border != null) {
+            for (var i = 0; i < Test.AnotherWay._g_record_border.length; ++i) {
+                Test.AnotherWay._g_record_border[i].style.display = "none";
+            }
+        }
+    }
+};
+Test.AnotherWay._record_flash_border = function(color){
+    if (Test.AnotherWay._g_record_border_flashing) { //already
+        Test.AnotherWay._g_record_border_flashes.push({
+            color: Test.AnotherWay._g_record_border_normal_color,
+            timeout: 300
+        });
+        Test.AnotherWay._g_record_border_flashes.push({
+            color: color,
+            timeout: 600
+        });
+    }
+    else {
+        Test.AnotherWay._g_record_border_flashing = true;
+        Test.AnotherWay._g_record_border_flashes.push({
+            color: color,
+            timeout: 600
+        });
+        Test.AnotherWay._record_flash_border_timeout();
+    }
+};
+Test.AnotherWay._record_prepare_doc_for_results = function(){
+    document.open();
+    document.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
+    document.write("<html><head><title> Input recording results</title>");
+    document.write("<style type=\"text/css\">");
+    document.write("body { font: normal normal smaller sans-serif; }");
+    document.write("div { margin-top: 3px; }");
+    document.write("</style></head><body>");
+    // opera and mozilla disagree over who the opener is.
+    if (typeof(window.opener.Test) != "undefined" && typeof(window.opener.Test.AnotherWay) != "undefined") {
+        window.opener.Test.AnotherWay._record_save_results(document);
+        window.opener.Test.AnotherWay._g_record_waiting_for_results = false;
+        window.opener.Test.AnotherWay._record_control_update_ui();
+    }
+    else 
+        if (typeof(window.opener.opener.Test) != "undefined" && typeof(window.opener.opener.Test.AnotherWay) != "undefined") {
+            window.opener.opener.Test.AnotherWay._record_save_results(document);
+            window.opener.opener.Test.AnotherWay._g_record_waiting_for_results = false;
+            window.opener.opener.Test.AnotherWay._record_control_update_ui();
+        }
+    document.write("</body>");
+    document.close();
+};
+
+// global initialization
+onload = function(){
+    if (window.opera) {
+        var good_opera = typeof(window.opera.version) == "function";
+        good_opera = good_opera && window.opera.version().match(/^\s*(\d+)/);
+        good_opera = good_opera && RegExp.$1 >= 8;
+    }
+    var span = document.createElement("SPAN");
+    span.innerHTML = "<!--[if IE]><br /><![endif]-" + "->";
+    var is_ie = span.getElementsByTagName("BR").length > 0;
+    
+    Test.AnotherWay._g_test_iframe = window.frames.test_iframe;
+    
+    var query_str = window.location.search;
+    if (query_str.charAt(0) == "?") {
+        query_str = query_str.substring(1);
+    }
+    var testlist_page = "list-tests.html";
+    var auto_run = false;
+    if (query_str != "") {
+        var params = [query_str];
+        if (query_str.indexOf(";") != -1) {
+            params = query_str.split(";");
+        }
+        else 
+            if (query_str.indexOf("&") != -1) {
+                params = query_str.split("&");
+            }
+        for (var param_i = 0; param_i < params.length; ++param_i) {
+            var param = params[param_i].split("=");
+            if (param[0] == "recording_results") {
+                if (window.opener != null) {
+                    // we were told to show recording results - replace everything in the document with the results
+                    Test.AnotherWay._record_prepare_doc_for_results();
+                    return;
+                }
+            }
+            else 
+                if (param[0] == "testpage") {
+                    Test.AnotherWay._add_test_page_url(decodeURIComponent(param[1]), "anotherway");
+                }
+                else 
+                    if (param[0] == "jsantestpage") {
+                        Test.AnotherWay._add_test_page_url(decodeURIComponent(param[1]), "jsan");
+                    }
+                    else 
+                        if (param[0] == "testlist") {
+                            testlist_page = decodeURIComponent(param[1]);
+                        }
+                        else 
+                            if (param[0] == "testframe") {
+                                if (window.opera && !good_opera) {
+                                    Test.AnotherWay._show_error("testframe parameter does not work in versions of Opera prior to 8.0. Sorry (pathches are welcome).");
+                                // Opera 7 barfs on attempt to access frame.frameElement.
+                                // if someone knows a way to assign onload handler to that iframe in Opera 7
+                                // without disrupting code that works in other browsers, patches are welcome.
+                                }
+                                else {
+                                    var frame_path = param[1].split(".");
+                                    var frame = top;
+                                    for (var frame_path_i = 0; frame_path_i < frame_path.length; ++frame_path_i) {
+                                        frame = frame[frame_path[frame_path_i]];
+                                    }
+                                    if (frame == null) {
+                                        Test.AnotherWay._show_error("unable to find frame specified for loading test pages: " + param[1]);
+                                    }
+                                    else {
+                                        if (frame.frameElement != null) { // for the following assignement to onload to work, frameElement is required
+                                            frame = frame.frameElement;
+                                        }
+                                        Test.AnotherWay._g_test_iframe = frame;
+                                    }
+                                }
+                            }
+                            else 
+                                if (param[0] == "testframe_no_clear") {
+                                    Test.AnotherWay._g_test_frame_no_clear = true;
+                                }
+                                else 
+                                    if (param[0] == "windows") {
+                                        if (param[1] == "none") {
+                                            Test.AnotherWay._test_object_t.prototype.open_window = null;
+                                        }
+                                    }
+                                    else 
+                                        if (param[0] == "run") {
+                                            auto_run = true;
+                                            if (param[1] == "all") {
+                                                Test.AnotherWay._g_pages_to_run = "all";
+                                            }
+                                            else {
+                                                if (Test.AnotherWay._g_pages_to_run == null || Test.AnotherWay._g_pages_to_run == "all") {
+                                                    Test.AnotherWay._g_pages_to_run = [];
+                                                }
+                                                var pages = param[1].split(",");
+                                                for (var i = 0; i < pages.length; ++i) {
+                                                    Test.AnotherWay._g_pages_to_run.push(pages[i]);
+                                                }
+                                            }
+                                        }
+        }
+    }
+    if (Test.AnotherWay._g_test_page_urls.length == 0) { // if no individual pages were given on the command line, load the list
+        var result = Test.AnotherWay._set_iframe_location(window.frames["list_iframe"], testlist_page);
+        if (result.msg != null) {
+            Test.AnotherWay._show_error(result.msg);
+        }
+        Test.AnotherWay._g_run_on_list_load = auto_run;
+    }
+    else {
+        Test.AnotherWay._g_run_on_main_load = auto_run;
+    }
+    
+    var f = Test.AnotherWay._g_test_iframe;
+    try {
+        if (f.attachEvent != null) {
+            f.attachEvent("onload", Test.AnotherWay._test_page_onload);
+        }
+        else {
+            f.onload = Test.AnotherWay._test_page_onload;
+        }
+        if (Test.AnotherWay._g_test_iframe.nodeType != null && Test.AnotherWay._g_test_iframe.contentWindow != null) { // it's iframe element, not the iframe. we need iframe.
+            Test.AnotherWay._g_test_iframe = Test.AnotherWay._g_test_iframe.contentWindow;
+        }
+    } 
+    catch (e) {
+        // ignore stupid opera error if the frame has onload handler assigned in the inline html
+    }
+    var handlers = {
+        "run_all": {
+            "onclick": Test.AnotherWay._run_all_onclick
+        },
+        "run_selected": {
+            "onclick": Test.AnotherWay._run_selected_onclick
+        },
+        "unselect_all": {
+            "onclick": Test.AnotherWay._unselect_all_onclick
+        },
+        "record_select": {
+            "onfocus": Test.AnotherWay._record_check_onfocus
+        },
+        "record_input": {
+            "onfocus": Test.AnotherWay._record_check_onfocus
+        },
+        "record_start": {
+            "onclick": Test.AnotherWay._record_start_onclick
+        },
+        "clear_btn": {
+            "onclick": Test.AnotherWay._results_clear_onclick
+        },
+        "results_tab": {
+            "onclick": Test.AnotherWay._tab_onclick,
+            "onmouseover": Test.AnotherWay._tab_mouseover,
+            "onmouseout": Test.AnotherWay._tab_mouseout
+        },
+        "debug_tab": {
+            "onclick": Test.AnotherWay._tab_onclick,
+            "onmouseover": Test.AnotherWay._tab_mouseover,
+            "onmouseout": Test.AnotherWay._tab_mouseout
+        }
+    };
+    for (var hs in handlers) {
+        var o = document.getElementById(hs);
+        if (o != null) {
+            for (var h in handlers[hs]) {
+                o[h] = handlers[hs][h];
+            }
+        }
+        else {
+            Test.AnotherWay._show_error("unable to set " + h + " handler: id " + hs + " not found");
+        }
+    }
+    
+    if (window.opera && !good_opera) {
+        Test.AnotherWay._g_no_record_msg = "Input events recording and replaying is not available in opera versions prior to 8.0.";
+    }
+    if (is_ie) {
+        Test.AnotherWay._g_no_record_msg = "Input events recording and replaying is not available in internet explorer.";
+    }
+    if (Test.AnotherWay._g_no_record_msg != null) {
+        var no_record_p = document.getElementById("record_not_supported");
+        no_record_p.style.display = "block";
+        no_record_p.appendChild(document.createTextNode(Test.AnotherWay._g_no_record_msg));
+    }
+    
+    Test.AnotherWay._g_main_loaded = true;
+    if (Test.AnotherWay._g_run_on_main_load) {
+        Test.AnotherWay._g_run_on_main_load = false;
+        Test.AnotherWay._run_pages_to_run();
+    }
+};
diff --git a/tests/Test.AnotherWay.xml_eq.js b/tests/Test.AnotherWay.xml_eq.js
new file mode 100644
index 0000000..8c24566
--- /dev/null
+++ b/tests/Test.AnotherWay.xml_eq.js
@@ -0,0 +1,311 @@
+/**
+ * File: Test.AnotherWay.xml_eq.js 
+ * Adds a xml_eq method to AnotherWay test objects.
+ *
+ */
+
+(function() {
+
+    /**
+     * Function: createNode
+     * Given a string, try to create an XML DOM node.  Throws string messages
+     *     on failure.
+     * 
+     * Parameters:
+     * text - {String} An XML string.
+     *
+     * Returns:
+     * {DOMElement} An element node.
+     */
+    function createNode(text) {
+        
+        var index = text.indexOf('<');
+        if(index > 0) {
+            text = text.substring(index);
+        }
+        
+        var doc;
+        if(window.ActiveXObject && !this.xmldom) {
+            doc = new ActiveXObject("Microsoft.XMLDOM");
+            try {
+                doc.loadXML(text);
+            } catch(err) {
+                throw "ActiveXObject loadXML failed: " + err;
+            }
+        } else if(window.DOMParser) {
+            try {
+                doc = new DOMParser().parseFromString(text, 'text/xml');
+            } catch(err) {
+                throw "DOMParser.parseFromString failed";
+            }
+            if(doc.documentElement && doc.documentElement.nodeName == "parsererror") {
+                throw "DOMParser.parseFromString returned parsererror";
+            }
+        } else {
+            var req = new XMLHttpRequest();
+            req.open("GET", "data:text/xml;charset=utf-8," +
+                     encodeURIComponent(text), false);
+            if(req.overrideMimeType) {
+                req.overrideMimeType("text/xml");
+            }
+            req.send(null);
+            doc = req.responseXML;
+        }
+        
+        var root = doc.documentElement;
+        if(!root) {
+            throw "no documentElement";
+        }
+        return root;
+    }
+    
+    /**
+     * Function assertEqual
+     * Test two objects for equivalence (based on ==).  Throw an exception
+     *     if not equivalent.
+     * 
+     * Parameters:
+     * got - {Object}
+     * expected - {Object}
+     * msg - {String} The message to be thrown.  This message will be appended
+     *     with ": got {got} but expected {expected}" where got and expected are
+     *     replaced with string representations of the above arguments.
+     */
+    function assertEqual(got, expected, msg) {
+        if(got === undefined) {
+            got = "undefined";
+        } else if (got === null) {
+            got = "null";
+        }
+        if(expected === undefined) {
+            expected = "undefined";
+        } else if (expected === null) {
+            expected = "null";
+        }
+        if(got != expected) {
+            throw msg + ": got '" + got + "' but expected '" + expected + "'";
+        }
+    }
+    
+    /**
+     * Function assertElementNodesEqual
+     * Test two element nodes for equivalence.  Nodes are considered equivalent
+     *     if they are of the same type, have the same name, have the same
+     *     namespace prefix and uri, and if all child nodes are equivalent.
+     *     Throws a message as exception if not equivalent.
+     * 
+     * Parameters:
+     * got - {DOMElement}
+     * expected - {DOMElement}
+     * options - {Object} Optional object for configuring test options.
+     *
+     * Valid options:
+     * prefix - {Boolean} Compare element and attribute
+     *     prefixes (namespace uri always tested).  Default is false.
+     * includeWhiteSpace - {Boolean} Include whitespace only nodes when
+     *     comparing child nodes.  Default is false.
+     */
+    function assertElementNodesEqual(got, expected, options) {
+        var testPrefix = (options && options.prefix === true);
+        
+        // compare types
+        assertEqual(got.nodeType, expected.nodeType, "Node type mismatch");
+        
+        // compare names
+        var gotName = testPrefix ?
+            got.nodeName : got.nodeName.split(":").pop();
+        var expName = testPrefix ?
+            expected.nodeName : expected.nodeName.split(":").pop();
+        assertEqual(gotName, expName, "Node name mismatch");
+        
+        // for text nodes compare value
+        if(got.nodeType == 3) {
+            assertEqual(
+                got.nodeValue, expected.nodeValue, "Node value mismatch"
+            );
+        }
+        // for element type nodes compare namespace, attributes, and children
+        else if(got.nodeType == 1) {
+            
+            // test namespace alias and uri
+            if(got.prefix || expected.prefix) {
+                if(testPrefix) {
+                    assertEqual(
+                        got.prefix, expected.prefix,
+                        "Bad prefix for " + got.nodeName
+                    );
+                }
+            }
+            if(got.namespaceURI || expected.namespaceURI) {
+                assertEqual(
+                    got.namespaceURI, expected.namespaceURI,
+                    "Bad namespaceURI for " + got.nodeName
+                );
+            }
+            
+            // compare attributes - disregard xmlns given namespace handling above
+            var gotAttrLen = 0;
+            var gotAttr = {};
+            var expAttrLen = 0;
+            var expAttr = {};
+            var ga, ea, gn, en;
+            for(var i=0; i<got.attributes.length; ++i) {
+                ga = got.attributes[i];
+                if(ga.specified === undefined || ga.specified === true) {
+                    if(ga.name.split(":").shift() != "xmlns") {
+                        gn = testPrefix ? ga.name : ga.name.split(":").pop();
+                        gotAttr[gn] = ga;
+                        ++gotAttrLen;
+                    }
+                }
+            }
+            for(var i=0; i<expected.attributes.length; ++i) {
+                ea = expected.attributes[i];
+                if(ea.specified === undefined || ea.specified === true) {
+                    if(ea.name.split(":").shift() != "xmlns") {
+                        en = testPrefix ? ea.name : ea.name.split(":").pop();
+                        expAttr[en] = ea;
+                        ++expAttrLen;
+                    }
+                }
+            }
+            assertEqual(
+                gotAttrLen, expAttrLen,
+                "Attributes length mismatch for " + got.nodeName
+            );
+            var gv, ev;
+            for(var name in gotAttr) {
+                if(expAttr[name] == undefined) {
+                    throw "Attribute name " + gotAttr[name].name + " expected for element " + got.nodeName;
+                }
+                // test attribute namespace
+                assertEqual(
+                    gotAttr[name].namespaceURI, expAttr[name].namespaceURI,
+                    "Attribute namespace mismatch for element " +
+                    got.nodeName + " attribute name " + gotAttr[name].name
+                );
+                // test attribute value
+                assertEqual(
+                    gotAttr[name].value, expAttr[name].value,
+                    "Attribute value mismatch for element " + got.nodeName +
+                    " attribute name " + gotAttr[name].name
+                );
+            }
+            
+            // compare children
+            var gotChildNodes = getChildNodes(got, options);
+            var expChildNodes = getChildNodes(expected, options);
+
+            assertEqual(
+                gotChildNodes.length, expChildNodes.length,
+                "Children length mismatch for " + got.nodeName
+            );
+            for(var j=0; j<gotChildNodes.length; ++j) {
+                try {
+                    assertElementNodesEqual(
+                        gotChildNodes[j], expChildNodes[j], options
+                    );
+                } catch(err) {
+                    throw "Bad child " + j + " for element " + got.nodeName + ": " + err;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Function getChildNodes
+     * Returns the child nodes of the specified nodes. By default this method
+     *     will ignore child text nodes which are made up of whitespace content.
+     *     The 'includeWhiteSpace' option is used to control this behaviour.
+     * 
+     * Parameters:
+     * node - {DOMElement}
+     * options - {Object} Optional object for test configuration.
+     * 
+     * Valid options:
+     * includeWhiteSpace - {Boolean} Include whitespace only nodes when
+     *     comparing child nodes.  Default is false.
+     * 
+     * Returns:
+     * {Array} of {DOMElement}
+     */
+    function getChildNodes(node, options) {
+        //check whitespace
+        if (options && options.includeWhiteSpace) {
+            return node.childNodes;
+        }
+        else {
+           nodes = [];
+           for (var i = 0; i < node.childNodes.length; i++ ) {
+              var child = node.childNodes[i];
+              if (child.nodeType == 1) {
+                 //element node, add it 
+                 nodes.push(child);
+              }
+              else if (child.nodeType == 3) {
+                 //text node, add if non empty
+                 if (child.nodeValue && 
+                       child.nodeValue.replace(/^\s*(.*?)\s*$/, "$1") != "" ) { 
+
+                    nodes.push(child);
+                 }
+              }
+           }
+  
+           return nodes;
+        }
+    } 
+    
+    /**
+     * Function: Test.AnotherWay._test_object_t.xml_eq
+     * Test if two XML nodes are equivalent.  Tests for same node types, same
+     *     node names, same namespace URI, same attributes, and recursively
+     *     tests child nodes for same criteria.
+     *
+     * (code)
+     * t.xml_eq(got, expected, message);
+     * (end)
+     * 
+     * Parameters:
+     * got - {DOMElement | String} A DOM node or XML string to test.
+     * expected - {DOMElement | String} The expected DOM node or XML string.
+     * msg - {String} A message to print with test output.
+     * options - {Object} Optional object for configuring test.
+     *
+     * Valid options:
+     * prefix - {Boolean} Compare element and attribute
+     *     prefixes (namespace uri always tested).  Default is false.
+     * includeWhiteSpace - {Boolean} Include whitespace only nodes when
+     *     comparing child nodes.  Default is false.
+     */
+    var proto = Test.AnotherWay._test_object_t.prototype;
+    proto.xml_eq = function(got, expected, msg, options) {
+        // convert arguments to nodes if string
+        if(typeof got == "string") {
+            try {
+                got = createNode(got);
+            } catch(err) {
+                this.fail(msg + ": got argument could not be converted to an XML node: " + err);
+                return;
+            }
+        }
+        if(typeof expected == "string") {
+            try {
+                expected = createNode(expected);
+            } catch(err) {
+                this.fail(msg + ": expected argument could not be converted to an XML node: " + err);
+                return;
+            }
+        }
+        
+        // test nodes for equivalence
+        try {
+            assertElementNodesEqual(got, expected, options);
+            this.ok(true, msg);
+        } catch(err) {
+            this.fail(msg + ": " + err);
+        }
+    }
+    
+})();
diff --git a/tests/Tile.html b/tests/Tile.html
index b199f03..ce813cb 100644
--- a/tests/Tile.html
+++ b/tests/Tile.html
@@ -3,69 +3,101 @@
   <script src="OLLoader.js"></script>
   <script type="text/javascript">
     var tile; 
+
+    var map, layer;
+    function setUp() {
+        map = new OpenLayers.Map("map");
+        layer = new OpenLayers.Layer(null, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer)
+        map.setCenter(new OpenLayers.LonLat(0, 0));
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+    }
+
     
     function test_Tile_constructor (t) {
-        t.plan( 12 );
+        t.plan( 13 );
      
-        var layer = {}; // bogus layer
+        setUp();
+        
+        var dummy = {};
+
         var position = new OpenLayers.Pixel(10,20);
         var bounds = new OpenLayers.Bounds(1,2,3,4);
         var url = "bobob";
         var size = new OpenLayers.Size(5,6);
         
-        tile = new OpenLayers.Tile(layer, position, bounds, url, size);
+        tile = new OpenLayers.Tile(layer, position, bounds, url, size, {
+            eventListeners: {
+                loadstart: OpenLayers.Function.False
+            }
+        });
 
-        t.ok( tile instanceof OpenLayers.Tile, "new OpenLayers.Tile returns Tile object" );
-        t.eq( tile.layer, layer, "tile.layer set correctly");
-        t.ok( tile.position.equals(position), "tile.position set correctly");
-        t.ok( tile.position != position, "tile.position set not by reference");
-        t.ok( tile.bounds.equals(bounds), "tile.bounds set correctly");
-        t.ok( tile.bounds != bounds, "tile.bounds set not by reference");
-        t.eq( tile.url, url, "tile.url set correctly");        
-        t.ok( tile.size.equals(size), "tile.size is set correctly" );
-        t.ok( tile.size != size, "tile.size set not by reference");
+        t.ok(tile instanceof OpenLayers.Tile, "new OpenLayers.Tile returns Tile object");
+        t.ok(tile.layer === layer, "tile.layer set correctly");
+        t.ok(tile.position.equals(position), "tile.position set correctly");
+        t.ok(tile.position != position, "tile.position set not by reference");
+        t.ok(tile.bounds.equals(bounds), "tile.bounds set correctly");
+        t.ok(tile.bounds != bounds, "tile.bounds set not by reference");
+        t.eq(tile.url, url, "tile.url set correctly");        
+        t.ok(tile.size.equals(size), "tile.size is set correctly");
+        t.ok(tile.size != size, "tile.size set not by reference");
 
-        t.ok( tile.id != null, "tile is given an id");
+        t.ok(tile.id != null, "tile is given an id");
         t.ok(OpenLayers.String.startsWith(tile.id, "Tile_"),
              "tile's id starts correctly");
-        t.ok( tile.events != null, "tile's events intitialized");
+        t.ok(tile.events != null, "tile's events initialized");
+        t.ok(tile.events.listeners.loadstart.length == 1, 
+             "tile's events initialized from eventListeners option");
+        
+        tearDown();
+        
     }
+    
+    function test_Tile_draw(t) {
+        t.plan(6);
+        setUp();
 
-    function test_Tile_clone (t) {
-        t.plan( 10 );
-     
-        var layer = {}; // bogus layer
         var position = new OpenLayers.Pixel(10,20);
         var bounds = new OpenLayers.Bounds(1,2,3,4);
         var url = "bobob";
         var size = new OpenLayers.Size(5,6);
         
         tile = new OpenLayers.Tile(layer, position, bounds, url, size);
-        var clone = tile.clone();
+        var log = [];
+        tile.clear = function() {
+            log.push("clear");
+        }
+        tile.draw();
+        t.eq(log.length, 1, "Tile cleared before drawing");
         
-        t.ok( clone instanceof OpenLayers.Tile, "OpenLayers.Tile.clone returns Tile object" );
-        t.eq( clone.layer, layer, "clone.layer set correctly");
-        t.ok( clone.position.equals(position), "clone.position set correctly");
-        t.ok( clone.bounds.equals(bounds), "clone.bounds set correctly");
-        t.eq( clone.url, url, "clone.url set correctly");        
-        t.ok( clone.size.equals(size), "clone.size is set correctly" );
+        log = [];
+        tile.events.register("beforedraw", this, function() {
+            log.push("beforedraw");
+            return false;
+        });
+        var drawn = tile.draw();
+        t.eq(log[0], "clear", "tile cleared");
+        t.eq(log[1], "beforedraw", "beforedraw event fired");
+        t.eq(drawn, false, "tile not drawn when beforedraw listener returns false");
+        drawn = tile.draw(true);
+        t.eq(log.length, 2, "no beforedraw event fired and tile not cleared when draw called with 'deferred' argument set to true");
+        t.eq(drawn, true, "tile drawn when draw called with 'deferred' argument set to true");
 
-        t.ok( clone.id != null, "clone is given an id");
-        t.ok( clone.id != tile.id, "clone is given a new id");
-        t.ok(OpenLayers.String.startsWith(clone.id, "Tile_"),
-             "clone's id starts correctly");
-        t.ok( clone.events != null, "clone's events intitialized");
+        tearDown();
     }
 
     function test_Tile_destroy(t) {
         t.plan( 6 );
+        
+        setUp();
 
-        var layer = {
-            SUPPORTED_TRANSITIONS: [],
-            events: {
-                unregister: function() {}
-            }
-        }; // bogus layer
         var position = new OpenLayers.Pixel(10,20);
         var bounds = new OpenLayers.Bounds(1,2,3,4);
         var url = "bobob";
@@ -85,6 +117,9 @@
         t.ok(tile.position == null, "tile.position set to null");
         
         t.ok(tile.events == null, "tile.events set to null");
+        
+        tearDown();
+        
     }
 
   </script>
diff --git a/tests/Tile/Image.html b/tests/Tile/Image.html
index f12bb19..2623dd5 100644
--- a/tests/Tile/Image.html
+++ b/tests/Tile/Image.html
@@ -2,15 +2,33 @@
 <head>
   <script src="../OLLoader.js"></script>
   <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var tile; 
     
+    var map, layer;
+    function setUp() {
+        map = new OpenLayers.Map("map");
+        layer = new OpenLayers.Layer(null, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer)
+        map.setCenter(new OpenLayers.LonLat(0, 0));
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+    }
+
     function test_Tile_Image_constructor (t) {
         t.plan( 6 );
         
-        var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
-
+        setUp();
+        
         var position = new OpenLayers.Pixel(20,30);
         var bounds = new OpenLayers.Bounds(1,2,3,4);
         var url = "http://www.openlayers.org/dev/tests/tileimage";
@@ -23,6 +41,8 @@
         t.ok( tile.bounds.equals(bounds), "tile.bounds is set correctly");
         t.eq( tile.url, url, "tile.url is set correctly");
         t.ok( tile.size.equals(size), "tile.size is set correctly");
+        
+        tearDown();
     }
 
     function test_destroy_observers(t) {
@@ -30,7 +50,7 @@
 
         var map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
+            "../../img/blank.gif", {layers: 'basic'}); 
         map.addLayer(layer);
 
         var position = new OpenLayers.Pixel(20,30);
@@ -62,38 +82,15 @@
         map.destroy();
     }
 
-    function test_Tile_Image_clone (t) {
-        t.plan( 9 );
-        
-        var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
-
-        var position = new OpenLayers.Pixel(20,30);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var url = "http://www.openlayers.org/dev/tests/tileimage";
-        var size = new OpenLayers.Size(5,6);
-        tile = new OpenLayers.Tile.Image(layer, position, bounds, url, size);
-        tile.imgDiv = {};
-        var clone = tile.clone();
-        
-        t.ok( clone instanceof OpenLayers.Tile.Image, "OpenLayers.Tile.clone returns Tile.Image 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_viewRequestID (t) {
-        t.plan( 2 );
+    function test_Tile_Image_async (t) {
+        t.plan( 3 );
         var map   = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS(
             "Name",
-            "http://labs.metacarta.com/TESTURL?",
-            {layers: 'basic'}
+            "../../img/blank.gif",
+            {layers: 'basic'}, {async: true, getURLasync: function(bounds, callback, scope) {
+                callback.call(scope, this.getURL(bounds));
+            }}
         ); 
         map.addLayer(layer);
 
@@ -101,23 +98,29 @@
         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();
+        t.delay_call(0.1, function() {
+            var expected = new Image();
+            expected.src = layer.getURL(bounds);
+            t.eq(tile.imgDiv.src, expected.src, "image src correct for async request");
+            t.eq(tile.asyncRequestId, 1, "asyncRequestId correct after renderTile");
+            tile.renderTile();
+        });
+        t.delay_call(0.2, function() {
+            t.eq(tile.asyncRequestId, 2, "asyncRequestId correct after subsequent renderTile");
+            tile.destroy();
+            layer.destroy();
+            map.destroy();
+        });
     }
 
     function test_Tile_Image_draw (t) {
-        t.plan( 7 );
+        t.plan(8);
 
         var map = new OpenLayers.Map('map');
         
         var size = new OpenLayers.Size(5,6);
         layer = new OpenLayers.Layer.WMS("Name",
-                                         "http://labs.metacarta.com/TESTURL",
+                                         "../../img/blank.gif",
                                          null,
                                          {tileSize: size});  
         map.addLayer(layer);  
@@ -153,11 +156,14 @@
             SRS: "EPSG:4326", BBOX: [1,2,3,4],
             WIDTH: String(size.w), HEIGHT: String(size.h)
         };
-        t.eq( img.src,
-             "http://labs.metacarta.com/TESTURL?" + OpenLayers.Util.getParameterString(tParams),
-             "tile.draw creates an image");
-        t.eq( tile.imgDiv.style.width, "5px", "Image width is correct" );
-        t.eq( tile.imgDiv.style.height, "6px", "Image height is correct" );
+        var expected = new Image();
+        expected.src =  "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams)
+        t.delay_call(0.1, function() {
+            t.eq( img.src, expected.src, "tile.draw creates an image");
+        });
+        t.eq( tile.imgDiv.style.width, "5%", "Image width is correct" );
+        t.eq( tile.imgDiv.style.height, "6%", "Image height is correct" );
+        t.ok( tile.imgDiv.parentNode === layer.div, "Image is directly appended to the layer div" ); 
 
         // this should trigger a "reload" event (since the image never actually
         // loads in tests)
@@ -172,7 +178,7 @@
         var size = new OpenLayers.Size(5,6);
         var map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, {reproject:false, encodeBBOX: true}); 
+            "../../img/blank.gif", {layers: 'basic'}, {reproject:false, encodeBBOX: true}); 
         map.addLayer(layer);
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-90,-180,90), url, size);
         tile.draw()
@@ -186,64 +192,64 @@
             SRS: "EPSG:4326", BBOX: "-181,-91,180,90",
             WIDTH: "256", HEIGHT: "256"
         };
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Images over edges of maxextent do load");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-181,-90,180,90), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-181,-90,180,90"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Images over edges of maxextent do load");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-180,-90,180,90), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-180,-90,180,90"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Image covering all of extent loads");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-80,-45,80,45), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-80,-45,80,45"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Image covering small part of extent loads");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-95,185,95), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-185,-95,185,95"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Image covering more than all of extent loads");
 
         layer.displayOutsideMaxExtent=1;
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-90,-180,90), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-185,-90,-180,90"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Images against side of maxextent do load with displayOutsideMaxExtent");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-181,-90,180,90), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-181,-90,180,90"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Images over edges of maxextent do load with displayOutsideMaxExtent set");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-180,-90,180,90), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-180,-90,180,90"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Image covering all of extent loads with display outside max extent");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-80,-45,80,45), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-80,-45,80,45"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Image covering small part of extent loads with display outside max extent");
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-95,185,95), url, size);
         tile.draw()
         tParams = OpenLayers.Util.extend(tParams, {BBOX: "-185,-95,185,95"});
-        t.eq(tile.imgDiv.src,
-             "http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
+        t.eq(tile.url,
+             "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
              "Image covering more than all of extent loads");
     } 
     function test_Tile_Image_Display_After_Move(t) {
@@ -254,20 +260,20 @@
         var size = new OpenLayers.Size(5,6);
         var map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, {'reproject': true}); 
+            "../../img/blank.gif", {layers: 'basic'}); 
         map.addLayer(layer);
         map.zoomToMaxExtent();
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-90,-85,-90,85), url, size);
         tile.draw();
         tile.moveTo(new OpenLayers.Bounds(-185,-90,-180,-80), new OpenLayers.Pixel(-180,-85), true);
-        t.delay_call( 1, function() { t.eq(tile.imgDiv, null, "Tile imgDiv is null.") } );
+        t.delay_call( 1, function() { t.eq(tile.imgDiv.style.visibility, "hidden", "Tile image is invisible.") } );
         var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, {'reproject': true, 'alpha':true});
+            "../../img/blank.gif", {layers: 'basic'}, {'alpha':true});
         map.addLayer(layer);
         tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-90,-85,-90,85), url, size);
         tile.draw();
         tile.moveTo(new OpenLayers.Bounds(-185,-90,-180,-80), new OpenLayers.Pixel(-180,-85), true)
-        t.delay_call( 1, function() { t.eq(tile.imgDiv, null, "Alpha tile imgDiv is null.") } );
+        t.delay_call( 1, function() { t.eq(tile.imgDiv.style.visibility, "hidden", "Alpha tile image is invisible.") } );
         
     }
 
@@ -291,9 +297,6 @@
         t.ok(tile.layer.imageSize == null,
              "zero size gutter doesn't set image size"); 
 
-        t.ok(tile.layer.imageOffset == null,
-             "zero size gutter doesn't set image offset");
-        
         var zero_gutter_bounds = tile.bounds;
         
         map.destroy();
@@ -308,14 +311,185 @@
                                                              tile.size.h + (2 * gutter))),
              "gutter properly changes image size"); 
 
-        t.ok(tile.layer.imageOffset.equals(new OpenLayers.Pixel(-gutter, -gutter)),
-             "gutter properly sets image offset");
+        var offsetLeft = -(gutter / layer.tileSize.w * 100) | 0;
+        var offsetTop = -(gutter / layer.tileSize.h * 100) | 0;
+        t.eq(parseInt(tile.imgDiv.style.left, 10), offsetLeft,
+             "gutter properly sets image left style");
+        t.eq(parseInt(tile.imgDiv.style.top, 10), offsetTop,
+             "gutter properly sets image top style");
         t.ok(tile.bounds.equals(zero_gutter_bounds),
              "gutter doesn't affect tile bounds");
 
         map.destroy();
     }
     
+    function test_createBackBuffer(t) {
+        t.plan(3);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
+            "../../img/blank.gif", {layers: 'basic'});
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0,0), 5);
+        var tile = layer.grid[0][0];
+
+        // we're going to create a back buffer while the image
+        // is actually loading, so we call stopObservingElement
+        // to avoid any unexpected behavior
+        tile.isLoading = false;
+        OpenLayers.Event.stopObservingElement(tile.imgDiv);
+
+        var img = tile.imgDiv;
+        var left = img.style.left;
+        var bb = tile.createBackBuffer();
+        t.eq(bb.style.left, left, "backbuffer has same left style as frame");
+        t.ok(bb === img, "image appended to bb");
+        t.ok(tile.imgDiv == null, "image reference removed from tile");
+        map.destroy();
+    }
+
+    function test_onImageLoad(t) {
+        t.plan(3);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+            "../../img/blank.gif", {layers: 'basic'}, {opacity: 0.5});
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0,0), 5);
+
+        var tile = layer.grid[0][0];
+
+        var log;
+        tile.events.on({loadend: function() { log++; }});
+
+        log = 0;
+        tile.onImageLoad();
+        t.eq(tile.imgDiv.style.visibility, 'inherit',
+             'onImageLoad makes the image visible');
+        t.eq(parseFloat(tile.imgDiv.style.opacity), 0.5,
+             'onImageLoad sets the expected opacity for the image');
+        t.eq(log, 1,
+             'onImageLoad does trigger loadend');
+
+        map.destroy();
+    }
+
+    function test_getCanvasContext(t) {
+        if (!OpenLayers.CANVAS_SUPPORTED) {
+            t.plan(0);
+        } else {
+            t.plan(1);
+
+            var map = new OpenLayers.Map('map');
+            var layer = new OpenLayers.Layer.WMS("blank",
+                "../../img/blank.gif", {layers: 'fake'});
+            map.addLayer(layer);
+            map.setCenter(new OpenLayers.LonLat(0, 0), 5);
+
+            t.delay_call(5, function() {
+                var tile = layer.grid[0][0];
+                if (tile.isLoading) {
+                    t.ok(false, "test_getCanvasContext timeout");
+                } else {
+                    t.ok(tile.getCanvasContext() instanceof CanvasRenderingContext2D,
+                         "getCanvasContext() returns CanvasRenderingContext2D instance");
+                }
+                map.destroy();
+            });
+        }
+    }
+
+    /*
+     * A series of tests to verify the dimensions and positions
+     * of the tile frame and img after draw.
+
+     * Written for https://github.com/openlayers/openlayers/issues/441
+     */
+    function test_draw_without_gutter_without_frame(t) {
+        t.plan(5);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('blank',
+                        '../../img/blank.gif',
+                        {layers: 'fake'},
+                        {isBaseLayer: true});
+        map.addLayer(layer);
+        var tile = new OpenLayers.Tile.Image(
+                            layer,
+                            new OpenLayers.Pixel(6, 6),
+                            new OpenLayers.Bounds(5, 45, 6, 46),
+                            null,
+                            new OpenLayers.Size(256, 256));
+
+        tile.draw();
+        t.eq(tile.frame, null, 'no frame');
+        t.eq(parseInt(tile.imgDiv.style.left, 10), 6, 'correct tile img left');
+        t.eq(parseInt(tile.imgDiv.style.top, 10), 6, 'correct tile img top');
+        t.eq(parseInt(tile.imgDiv.style.width, 10), 256, 'correct tile img width');
+        t.eq(parseInt(tile.imgDiv.style.height, 10), 256, 'correct tile img height');
+
+        map.destroy();
+    }
+    function test_draw_without_gutter_with_frame(t) {
+        t.plan(8);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('blank',
+                        '../../img/blank.gif',
+                        {layers: 'fake'},
+                        {isBaseLayer: true});
+        map.addLayer(layer);
+        layer.gutter = 1; // this is just for a frame to be created for
+                          // the tile
+        var tile = new OpenLayers.Tile.Image(
+                            layer,
+                            new OpenLayers.Pixel(6, 6),
+                            new OpenLayers.Bounds(5, 45, 6, 46),
+                            null,
+                            new OpenLayers.Size(256, 256));
+        layer.gutter = null;
+
+        tile.draw();
+        t.eq(parseInt(tile.frame.style.left, 10), 6, 'correct tile frame left');
+        t.eq(parseInt(tile.frame.style.top, 10), 6, 'correct tile frame top');
+        t.eq(parseInt(tile.frame.style.width, 10), 256, 'correct tile frame width');
+        t.eq(parseInt(tile.frame.style.height, 10), 256, 'correct tile frame height');
+        t.eq(parseInt(tile.imgDiv.style.left, 10), 0, 'correct tile img left');
+        t.eq(parseInt(tile.imgDiv.style.top, 10), 0, 'correct tile img top');
+        t.eq(parseInt(tile.imgDiv.style.width, 10), 100, 'correct tile img width');
+        t.eq(parseInt(tile.imgDiv.style.height, 10), 100, 'correct tile img height');
+
+        map.destroy();
+    }
+    function test_draw_with_gutter(t) {
+        t.plan(8);
+
+        var map = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS('blank',
+                        '../../img/blank.gif',
+                        {layers: 'fake'},
+                        {isBaseLayer: true, gutter: 15});
+        map.addLayer(layer);
+        var tile = new OpenLayers.Tile.Image(
+                            layer,
+                            new OpenLayers.Pixel(6, 6),
+                            new OpenLayers.Bounds(5, 45, 6, 46),
+                            null,
+                            new OpenLayers.Size(256, 256));
+
+        tile.draw();
+        t.eq(parseInt(tile.frame.style.left, 10), 6, 'correct tile frame left');
+        t.eq(parseInt(tile.frame.style.top, 10), 6, 'correct tile frame top');
+        t.eq(parseInt(tile.frame.style.width, 10), 256, 'correct tile frame width');
+        t.eq(parseInt(tile.frame.style.height, 10), 256, 'correct tile frame height');
+        t.eq(parseInt(tile.imgDiv.style.left, 10), -5, 'correct tile img left');
+        t.eq(parseInt(tile.imgDiv.style.top, 10), -5, 'correct tile img top');
+        t.eq(parseInt(tile.imgDiv.style.width, 10), 111, 'correct tile img width');
+        t.eq(parseInt(tile.imgDiv.style.height, 10), 111, 'correct tile img height');
+
+        map.destroy();
+    }
+
   </script>
 </head>
 <body>
diff --git a/tests/Tile/Image/IFrame.html b/tests/Tile/Image/IFrame.html
index e1fa549..5dc3af1 100644
--- a/tests/Tile/Image/IFrame.html
+++ b/tests/Tile/Image/IFrame.html
@@ -2,9 +2,12 @@
 <head>
     <script src="../../OLLoader.js"></script>
     <script type="text/javascript">
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var isOpera   = (navigator.userAgent.indexOf("Opera") != -1);
-    var isIE      = (navigator.userAgent.indexOf("MSIE") != -1);
+    var isIElt9      = (parseFloat(navigator.appVersion.split("MSIE")[1]) < 9);
 
     var map, layer;
     var position = new OpenLayers.Pixel(20,30);
@@ -18,23 +21,24 @@
         t.plan( 3 );
         map   = new OpenLayers.Map('map');
         var bar = new Array(205).join("1234567890");
-        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic', foo: bar}, {tileOptions: {maxGetUrlLength: 2048}}); 
+        layer = new OpenLayers.Layer.WMS(name, wmsUrl,
+                                         {layers: 'basic', foo: bar},
+                                         {tileOptions: {maxGetUrlLength: 2048},
+                                          transitionEffect: 'resize'});
         map.addLayer(layer);
 
         var tile = layer.addTile(bounds, position);
-        tile.renderTile();
-        tile.positionImage();
-        t.eq(tile.imgDiv.firstChild.nodeName.toLowerCase(), "iframe", "IFrame used for long URL");
+
+        tile.draw();
+        t.eq(tile.imgDiv.nodeName.toLowerCase(), "iframe", "IFrame used for long URL");
         
         layer.mergeNewParams({foo: null});
-        tile.renderTile();
-        tile.positionImage();
+        tile.draw();
         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.draw();
+        t.eq(tile.imgDiv.nodeName.toLowerCase(), "iframe", "IFrame used when maxGetUrlLength is 0");
         
         tile.destroy();
         layer.destroy();
@@ -52,22 +56,22 @@
         tile.clear();
 
         t.eq(
-            tile.imgDiv.firstChild.nodeName.toLowerCase(), "div",
-            "IFrame successfully removed from DOM");
+            tile.frame.getElementsByTagName("iframe").length, 0,
+            "IFrame removed on clear()");
         tile.destroy();
         layer.destroy();
         map.destroy();
     }
 
-    function test_Tile_Image_IFrame_initImgDiv (t) {
-        t.plan( 4 );
+    function test_Tile_Image_IFrame_initImage (t) {
+        t.plan( 2 );
 
         map   = new OpenLayers.Map('map');
         layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
         map.addLayer(layer);  
         tile = layer.addTile(bounds, position);
         tile.url = layer.getURL(bounds);
-        tile.initImgDiv();
+        tile.initImage();
 
         if(isMozilla) {
             t.ok( tile.imgDiv instanceof HTMLElement, "tile.iFrame successfully created.");
@@ -75,63 +79,41 @@
         else {
             t.ok( tile.imgDiv != null, "tile.iFrame successfully created.");
         }
-        t.eq( tile.imgDiv.id, tile.id, "imgDiv id correctly set.");
         t.eq( tile.imgDiv.className, "olTileImage", "iFrame's className correctly set.");
-        t.ok( tile.imgDiv.map == map, "map correctly added to iFrame.");
 
         map.destroy();
     }
 
-    function test_Tile_Image_IFrame_createImgDiv (t) {
-        t.plan( 3 );
+    function test_Tile_Image_IFrame_createImage (t) {
+        t.plan( 9 );
 
         map   = new OpenLayers.Map('map');
         layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
         map.addLayer(layer);  
         var tile = layer.addTile(bounds, position);
-        tile.renderTile();
-        var imgDiv = tile.imgDiv;
-        var iFrame    = imgDiv.firstChild;
-        var eventPane = imgDiv.childNodes[1];
-
-        if(isIE) {
+        tile.draw();
+        var iFrame    = tile.imgDiv;
+        var eventPane = tile.frame.childNodes[0];
+
+        t.ok(OpenLayers.String.contains(eventPane.style.backgroundImage,
+                    tile._blankImageUrl),
+             "backgroundImage of eventPane is set.");
+        t.eq(parseInt(eventPane.style.zIndex, 10), 1, "zIndex of eventPane is set.");
+        if(isIElt9) {
             t.ok(iFrame != null, "IFrame successfully created.");
-            t.eq(eventPane.style.backgroundColor, '#ffffff', "backgroundColor of overlay pane is set in InternetExplorer.");
-            t.eq(eventPane.style.filter, 'chroma(color=#FFFFFF)', "filter of overlay pane is set in InternetExplorer.");
-        }
-        else {
-            t.ok(iFrame instanceof HTMLElement, "IFrame successfully created.");
-            t.ok(true, 'Skip eventPane backgroundColor test outside IE');
-            t.ok(true, 'Skip eventPane filter test outside IE');
-        }
-        map.destroy();
-    }
-
-    function test_Tile_Image_IFrame_createIFrame (t) {
-        t.plan( 8 );
-        
-        map   = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
-        map.addLayer(layer);  
-        var tile = layer.addTile(bounds, position);
-        var iFrame = tile.createIFrame();
-
-        var id = tile.id+'_iFrame';
-        t.eq(iFrame.id, id, "iframe id correctly set.");
-        t.eq(iFrame.name, id, "iframe name correctly set.");
-        
-        if(isIE) {
             t.eq(iFrame.style.backgroundColor, '#ffffff', "backgroundColor correctly set.");
             t.eq(iFrame.style.filter, 'chroma(color=#FFFFFF)', "filter correctly set.");
-        }
-        else {
-            t.eq(iFrame.style.backgroundColor, 'transparent', "backgroundColor correctly set.");
-            t.ok(true, "Skip filter test outside InternetExplorer.");
+        } else {
+            t.ok(iFrame instanceof HTMLElement, "IFrame successfully created.");
+            t.ok(true, 'Skip IFrame backgroundColor test outside IE < 9');
+            t.ok(true, 'Skip IFrame filter test outside IE < 9');
         }
         t.eq( iFrame.scrolling, 'no', "no scrolling");
         t.eq( parseFloat(iFrame.marginWidth), 0, "no margin width");
         t.eq( parseFloat(iFrame.marginHeight), 0, "no margin height");
         t.eq( parseFloat(iFrame.frameBorder), 0, "no iframe border");
+
+        map.destroy();
     }
 
     function test_Tile_Image_IFrame_createRequestForm (t) {
@@ -152,7 +134,7 @@
         map.addLayer(newLayer);  
         tile = newLayer.addTile(bounds, position);
         tile.url = newLayer.getURL(bounds);
-        tile.initImgDiv();
+        tile.initImage();
 
         tile.url = newLayer.getURL(bounds);
         var form = tile.createRequestForm();
@@ -182,9 +164,10 @@
 
         tile.draw();
         tile.clear();
+        tile.initImage();
         tile.createRequestForm();
         t.ok(
-            tile.imgDiv.firstChild.nodeName == "IFRAME",
+            tile.imgDiv.nodeName == "IFRAME",
             "Iframe has been reinserted properly"
         );
         
diff --git a/tests/Tile/UTFGrid.html b/tests/Tile/UTFGrid.html
new file mode 100644
index 0000000..b9f7352
--- /dev/null
+++ b/tests/Tile/UTFGrid.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <script>
+      /**
+      * Because browsers that implement requestAnimationFrame may not execute
+      * animation functions while a window is not displayed (e.g. in a hidden
+      * iframe as in these tests), we mask the native implementations here.  The
+      * native requestAnimationFrame functionality is tested in Util.html and
+      * in PanZoom.html (where a popup is opened before panning).  The panTo tests
+      * here will test the fallback setTimeout implementation for animation.
+      */
+      window.requestAnimationFrame = 
+          window.webkitRequestAnimationFrame =
+          window.mozRequestAnimationFrame =
+          window.oRequestAnimationFrame =
+          window.msRequestAnimationFrame = null;
+  </script>
+  <script src="../OLLoader.js"></script>
+  <script type="text/javascript">
+
+    var map, layer;
+    function setUp() {
+        layer = new OpenLayers.Layer.UTFGrid({
+            url: "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
+            isBaseLayer: true, 
+            utfgridResolution: 4
+        });
+        map = new OpenLayers.Map({
+            div: "map",
+            projection: "EPSG:900913",
+            layers: [layer],
+            center: [0, 0],
+            zoom: 1
+        });
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+    }
+
+    function test_constructor(t) {
+        t.plan(7);
+
+        setUp();
+        
+        var position = new OpenLayers.Pixel(20, 30);
+        var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
+        var url = "http://example.com/";
+        var size = new OpenLayers.Size(5, 6);
+        var tile = new OpenLayers.Tile.UTFGrid(layer, position, bounds, url, size);
+        
+        t.ok(tile instanceof OpenLayers.Tile, "tile instance");
+        t.ok(tile instanceof OpenLayers.Tile.UTFGrid, "UTFGrid tile instance");
+        t.ok(tile.layer === layer, "layer set");
+        t.ok(tile.position.equals(position), "position set");
+        t.ok(tile.bounds.equals(bounds), "bounds set");
+        t.eq(tile.url, url, "url set");
+        t.ok(tile.size.equals(size), "size set");
+        
+        tearDown();
+    }
+    
+    function test_parseData(t) {
+        t.plan(2);
+        setUp();
+
+        var tile = layer.grid[0][0];
+        
+        tile.parseData('{"foo": "bar"}');
+        t.eq(tile.json, {foo: "bar"}, "valid json parsed");
+        
+        var err, obj;
+        try {
+            obj = tile.parseData('foo bar');
+        } catch (e) {
+            err = e;
+        }
+        // The JSON format doesn't actually throw on IE6, so we also check
+        // for undefined here.
+        t.ok(err instanceof Error || obj === undefined, "throws on invalid json");
+        
+        tearDown();
+    }
+    
+    function test_draw(t) {
+        t.plan(7);
+        setUp();
+        
+        var position = new OpenLayers.Pixel(20, 30);
+        var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
+        var url = "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json";
+        var size = new OpenLayers.Size(256, 256);
+        var tile = new OpenLayers.Tile.UTFGrid(layer, position, bounds, url, size);
+        
+        var log = [];
+        function logger(event) {
+            log.push(event);
+        }
+        tile.events.on({
+            loadstart: logger,
+            reload: logger,
+            loadend: logger
+        });
+        
+        t.eq(log.length, 0, "no events logged");
+        
+        // start tile loading
+        tile.draw();
+        t.eq(log.length, 1, "[first draw] one event");
+        t.eq(log[0].type, "loadstart", "[first draw] loadstart");
+        
+        // restart tile loading
+        log.length = 0;
+        tile.draw();
+        t.eq(log.length, 1, "[second draw] first event");
+        t.eq(log[0].type, "reload", "[second draw] reload");
+        
+        // wait for tile loading to finish
+        t.delay_call(1, function() {
+            t.eq(log.length, 2, "[second draw] second event");
+            t.eq(log[1].type, "loadend", "[second draw] loadend");
+            tearDown();
+        });
+        
+    }
+
+    function test_abortLoading(t) {
+        t.plan(7);
+        setUp();
+        
+        var position = new OpenLayers.Pixel(20, 30);
+        var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
+        var url = "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json";
+        var size = new OpenLayers.Size(256, 256);
+        var tile = new OpenLayers.Tile.UTFGrid(layer, position, bounds, url, size);
+        
+        var log = [];
+        function logger(event) {
+            log.push(event);
+        }
+        tile.events.on({
+            loadstart: logger,
+            reload: logger,
+            loadend: logger
+        });
+        
+        t.eq(log.length, 0, "no events logged");
+        
+        // start tile loading
+        tile.draw();
+        t.eq(log.length, 1, "[first draw] one event");
+        t.eq(log[0].type, "loadstart", "[first draw] loadstart");
+        
+        // abort tile loading
+        log.length = 0;
+        tile.abortLoading();
+        t.eq(log.length, 0, "[first abort] no events logged"); // TODO: does anybody need an abort event?
+        
+        // abort again for the heck of it
+        var err;
+        try {
+            tile.abortLoading();
+        } catch (e) {
+            err = e;
+        }
+        t.ok(!err, "[second abort] no trouble");
+        t.eq(log.length, 0, "[second abort] no events");
+        
+        // wait to confirm tile loading doesn't happen after abort
+        t.delay_call(1, function() {
+            t.eq(log.length, 0, "[wait] no events");
+            tearDown();
+        });
+        
+    }
+    
+    function test_getFeatureId(t) {
+        t.plan(3);
+        setUp();
+        
+        var tile = layer.grid[1][1];
+        t.delay_call(0.5, function() {
+            var id = tile.getFeatureId(16, 60);
+            t.eq(id, "238", "feature 238 at 16, 60");
+            t.eq(tile.getFeatureId(18, 63), id, "same feature at 18, 63");
+            
+            t.eq(tile.getFeatureId(300, 10), null, "null id outside tile");
+            
+            tearDown();
+        });
+    }
+
+    function test_getFeatureInfo(t) {
+        t.plan(3);
+        setUp();
+        
+        var tile = layer.grid[1][1];
+        t.delay_call(0.5, function() {
+            var info = tile.getFeatureInfo(16, 60);
+            var exp = {
+                id: "238",
+                data: {
+                    NAME: "Svalbard",
+                    POP2005: 0
+                }
+            };
+            t.eq(info, exp, "feature info at 16, 60");
+            t.eq(tile.getFeatureInfo(17, 62), exp, "same feature at 17, 62");
+
+            t.eq(tile.getFeatureInfo(300, 10), null, "undefined outside tile");
+
+            tearDown();
+        });
+    }
+    
+    // While I dislike committing tests that aren't run, I'd like to make an 
+    // exception here.  This test (or something like it) should pass.  When
+    // https://github.com/mapbox/utfgrid-spec/issues/1 is resolved, we should
+    // either modify this or update demo.json and enable the test.
+    function xtest_getFeatureId_demo(t) {
+        /**
+         * The UTFGrid 1.2 spec (https://github.com/mapbox/utfgrid-spec/blob/master/1.2/utfgrid.md)
+         * links to a demo.json to be used for testing implementations.  This
+         * file is constructed with 256x256 data points.  Each data point maps
+         * to a "feature id" using this heuristic:
+         *
+         *     // x and y are pixel offsets from top left of 256x256 tile
+         *     if (y < 255 || x < 222) {
+         *         id = (y * 256) + x
+         *     } else {
+         *         id = 65501; // max number of ids that can be encoded
+         *     }
+         */
+        t.plan(1);
+        setUp();
+        
+        // look at this beauty of a constructor
+        var tile = new OpenLayers.Tile.UTFGrid(
+            layer, // layer
+            new OpenLayers.Pixel(0, 0), // position
+            new OpenLayers.Bounds(0, 0, 256, 256), // bounds
+            "../data/utfgrid/demo-1.1.json", // url
+            new OpenLayers.Size(256, 256), // size
+            {utfgridResolution: 1} // options
+        );
+        
+        var err;        
+        var request = new OpenLayers.Request.GET({
+            url: tile.url,
+            success: function(req) {
+                try {
+                    tile.parseData(req.responseText);
+                } catch (e) {
+                    err = e;
+                }
+            },
+            failure: function(req) {
+                err = new Error("Failed to fetch json.  Status: " + req.status);
+            }
+        });
+        
+        // wait for response and parsing, then make assertions
+        t.delay_call(1, function() {
+            if (err) {
+                t.fail(err);
+            } else {
+                var got, exp, failure;
+                outer: for (var y=0; y<256; ++y) {
+                    for (var x=0; x<256; ++x) {
+                        if (y<255 || x<222) {
+                            exp = String((y * 256) + x);
+                        } else {
+                            exp = "65501";
+                        }
+                        got = tile.getFeatureId(x, y);
+                        if (got !== exp) {
+                            failure = "Failed to get id for (" + x + ", " + y + "): " +
+                                "got " + got + " but expected " + exp;
+                            
+                            break outer;
+                        }
+                    }
+                }
+                if (!failure) {
+                    t.ok(true, "resolved feature ids for all data points");
+                } else {
+                    t.fail(failure);
+                }
+            }
+            tearDown();
+        });
+        
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="height:550px;width:500px"></div>
+</body>
+</html>
+
diff --git a/tests/Tile/WFS.html b/tests/Tile/WFS.html
deleted file mode 100644
index ae996ce..0000000
--- a/tests/Tile/WFS.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<html>
-<head>
-  <script src="../OLLoader.js"></script>
-  <script type="text/javascript">
-    var tile; 
-    
-    function test_Tile_WFS_constructor (t) {
-        t.plan( 8 );
-     
-        var layer = {}; // bogus layer
-        var position = new OpenLayers.Pixel(10,20);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var url = "bobob";
-        var size = new OpenLayers.Size(5,6);
-        
-        tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size);
-
-        t.ok( tile instanceof OpenLayers.Tile.WFS, "new OpenLayers.Tile.WFS returns Tile.WFS object" );
-        t.eq( tile.layer, layer, "tile.layer set correctly");
-        t.ok( tile.position.equals(position), "tile.position set correctly");
-        t.ok( tile.bounds.equals(bounds), "tile.bounds set correctly");
-        t.eq( tile.url, url, "tile.url set correctly");        
-        t.ok( tile.size.equals(size), "tile.size is set correctly" );
-
-        t.ok( tile.id != null, "tile is given an id");
-        t.ok( tile.events != null, "tile's events intitialized");
-    }
-
-    function test_Tile_WFS_requestSuccess(t) {
-        t.plan(2);
-
-        var tile = {
-            'request': {}
-        };
-            
-        OpenLayers.Tile.WFS.prototype.requestSuccess.apply(tile, []);
-        
-        t.ok(tile.request == null, "request property on tile set to null");
-
-        var layer = {
-            SUPPORTED_TRANSITIONS: [],
-            events: {
-                unregister: function() {}
-            }
-        }; // bogus layer
-        var position = new OpenLayers.Pixel(10,20);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var url = "bobob";
-        var size = new OpenLayers.Size(5,6);
-        
-        tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size);
-        tile.destroy();
-        tile.requestSuccess({'requestText': '<xml><foo /></xml>'});
-        t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile.");
-        
-    }
-    
-    function test_Tile_WFS_loadFeaturesForRegion(t) {
-        t.plan(9);
-        
-        var tile = {
-            'url': {}
-        };
-
-        var g_Success = {};        
-
-        var _get = OpenLayers.Request.GET;
-        OpenLayers.Request.GET = function(config) {
-            t.ok(config.url == tile.url, "tile's url correctly passed");
-            t.ok(config.params == null, "null params");
-            t.ok(config.scope == tile, "tile passed as scope");
-            t.ok(config.success == g_Success, "success passed");
-        };
-        
-      //no running request -- 4 tests
-        OpenLayers.Tile.WFS.prototype.loadFeaturesForRegion.apply(tile, [g_Success]);
-
-      //running request (cancelled) -- 4 tests + 1 test (for request abort)
-        tile.request = {
-            'abort': function() {
-                    t.ok(true, "request aborted");
-            }
-        };
-        OpenLayers.Tile.WFS.prototype.loadFeaturesForRegion.apply(tile, [g_Success]);
-
-        OpenLayers.Request.GET = _get;
-    }
-    
-    function test_Tile_WFS_destroy(t) {
-        t.plan(9);
-
-        var layer = {
-            SUPPORTED_TRANSITIONS: [],
-            events: {
-                unregister: function() {}
-            }
-        }; // bogus layer
-        var position = new OpenLayers.Pixel(10,20);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var url = "bobob";
-        var size = new OpenLayers.Size(5,6);
-        
-        tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size);
-        tile.events.destroy = function() {
-            t.ok(true, "tile events destroy() called");
-        };
-
- 
-        var _gAbort = false; 
-        tile.request = { 
-            abort: function() { 
-                _gAbort = true; 
-            } 
-        } 
-
-        
-        tile.destroy();
-
-        t.ok(tile.layer == null, "tile.layer set to null");
-        t.ok(tile.bounds == null, "tile.bounds set to null");
-        t.ok(tile.size == null, "tile.size set to null");
-        t.ok(tile.position == null, "tile.position set to null");
-        t.ok(_gAbort, "request transport is aborted");
-        t.ok(tile.request == null, "tile.request set to null");
-        
-        t.ok(tile.events == null, "tile.events set to null");
-        
-        tile.requestSuccess({'requestText': '<xml><foo /></xml>'});
-        t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile.");
-    }
-    function test_nonxml_format(t) {
-        t.plan(1);
-        var data = '{"type":"Feature", "id":"OpenLayers.Feature.Vector_135", "properties":{}, "geometry":{"type":"Point", "coordinates":[118.125, -18.6328125]}, "crs":{"type":"OGC", "properties":{"urn":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}'
-        var position = new OpenLayers.Pixel(10,20);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var url = "bobob";
-        var size = new OpenLayers.Size(5,6);
-        
-        var tile = new OpenLayers.Tile.WFS({
-            vectorMode: true, 
-            formatObject: new OpenLayers.Format.GeoJSON(), 
-            addFeatures: function(features) { 
-                t.eq(features.length, 1, "GeoJSON format returned a single feature which was added.")
-            }
-        }, position, bounds, url, size);
-        tile.requestSuccess({responseText: data});
-    }  
-     
-    function test_xml_string_and_dom(t) {
-        t.plan(2);
-        var data = '<?xml version="1.0" encoding="ISO-8859-1" ?><wfs:FeatureCollection   xmlns:bsc="http://www.bsc-eoc.org/bsc"   xmlns:wfs="http://www.opengis.net/wfs"   xmlns:gml="http://www.opengis.net/gml"   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.opengeospatial.net//wfs/1.0.0/WFS-basic.xsd                        http://www.bsc-eoc.org/bsc http://www.bsc-eoc.org/cgi- [...]
-        var position = new OpenLayers.Pixel(10,20);
-        var bounds = new OpenLayers.Bounds(1,2,3,4);
-        var url = "bobob";
-        var size = new OpenLayers.Size(5,6);
-        var tile = new OpenLayers.Tile.WFS({
-        }, position, bounds, url, size);
-        tile.addResults = function(results) {
-            t.eq(results.length, 1, "results count is correct when passing in XML as a string into non-vectormode");
-        } 
-        tile.requestSuccess({responseText: data});
-        
-        tile.addResults = function(results) {
-            t.eq(results.length, 1, "results count is correct when passing in XML as DOM into non-vectormode");
-        } 
-        tile.requestSuccess({responseXML: OpenLayers.Format.XML.prototype.read(data)}); 
-    }         
-  </script>
-</head>
-<body>
-</body>
-</html>
-
diff --git a/tests/Tween.html b/tests/Tween.html
index f185bee..fdd8fa7 100644
--- a/tests/Tween.html
+++ b/tests/Tween.html
@@ -1,5 +1,20 @@
 <html> 
 <head> 
+    <script>
+    /**
+    * Because browsers that implement requestAnimationFrame may not execute
+    * animation functions while a window is not displayed (e.g. in a hidden
+    * iframe as in these tests), we mask the native implementations here.  The
+    * native requestAnimationFrame functionality is tested in Util.html and
+    * in PanZoom.html (where a popup is opened before panning).  The panTo tests
+    * here will test the fallback setTimeout implementation for animation.
+    */
+    window.requestAnimationFrame = 
+        window.webkitRequestAnimationFrame =
+        window.mozRequestAnimationFrame =
+        window.oRequestAnimationFrame =
+        window.msRequestAnimationFrame = null;
+    </script>
     <script src="OLLoader.js"></script> 
     <script type="text/javascript">
 
@@ -36,7 +51,7 @@
             }
         }
         tween.start(start, finish, 10, {callbacks: callbacks});
-        t.ok(tween.interval != null, "interval correctly set");
+        t.ok(tween.animationId != null, "animationId correctly set");
         t.delay_call(0.8, function() {
             t.eq(_start, true, "start callback called");
             t.eq(_done, true, "finish callback called");
@@ -49,15 +64,15 @@
         t.plan(2);
         
         var tween = new OpenLayers.Tween();
-        tween.interval = window.setInterval(function() {}, 10);
+        tween.animationId = OpenLayers.Animation.start(function() {});
         tween.playing = true;
         tween.stop();
-        t.eq(tween.interval, null, "tween correctly stopped");
+        t.eq(tween.animationId, null, "tween correctly stopped");
         
-        tween.interval = window.setInterval(function() {}, 10);
+        tween.animationId = OpenLayers.Animation.start(function() {});
         tween.playing = false;
         tween.stop();
-        t.ok(tween.interval != null, "stop method doesn't do anything if tween isn't running");
+        t.ok(tween.animationId != null, "stop method doesn't do anything if tween isn't running");
     }
 
     </script> 
diff --git a/tests/Util.html b/tests/Util.html
index f70cbb9..ecb583b 100644
--- a/tests/Util.html
+++ b/tests/Util.html
@@ -254,21 +254,6 @@
 
     }
 
-    function test_Util_imageLoadError(t) {
-        t.plan(2);
-
-        var img = OpenLayers.Util.createImage(null, null, null, null, null, null, null, false);
-
-        // mock up image load failure
-        img._attempts = OpenLayers.IMAGE_RELOAD_ATTEMPTS + 1;
-        OpenLayers.Util.onImageLoadError.call(img);
-        t.ok(OpenLayers.Element.hasClass(img, 'olImageLoadError'), 'broken image has class olImageLoadError');
-
-        // mock up image load success
-        OpenLayers.Util.onImageLoad.call(img);
-        t.ok(!OpenLayers.Element.hasClass(img, 'olImageLoadError'), 'good image does not have class olImageLoadError');
-    }
-
     function test_Util_applyDefaults(t) {
     
         t.plan(12);
@@ -522,9 +507,8 @@
 
         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.BROWSER_NAME == 'safari') ? null : '';
-        t.eq(element.style.filter, filterString, 
+        // Some browser returns null instead of '', which is okay
+        t.ok(element.style.filter == '' || element.style.filter == null,
              "element.style.filter is removed when opacity = " + opacity);
     }
 
@@ -1034,33 +1018,6 @@
 
     }
 
-    function test_Util_getArgs(t) {
-        //DEPRECATED -- to be removed in 3.0
-        t.plan(3);
-        
-        OpenLayers.Lang.setCode(OpenLayers.Lang.defaultCode);
-        
-        var temp = OpenLayers.Console.warn;
-        OpenLayers.Console.warn = function(err) {
-            t.ok(err != null, "warning is fired on use of getArgs()");
-        }
-
-        var temp2 = OpenLayers.Util.getParameters;
-        OpenLayers.Util.getParameters = function(url) {
-            t.eq(url, g_Url, "correct url passed to getParameters()");
-            return g_Params;
-        }
-        
-        g_Params = {};
-        g_Url = {};
-        
-        var ret = OpenLayers.Util.getArgs(g_Url);
-        t.ok( ret == g_Params, "correctly returns value from getParameters");
-
-        OpenLayers.Console.warn = temp;
-        OpenLayers.Util.getParameters = temp2;
-    }
-
     function tests_Util_extend(t) {
         t.plan(7);
 
@@ -1162,6 +1119,31 @@
         t.eq(OpenLayers.Util.getFormattedLonLat(-181, "lon"), "179°00'00\"E", "crossing dateline from the west results in correct east coordinate");
         t.eq(OpenLayers.Util.getFormattedLonLat(181, "lon"), "179°00'00\"W", "crossing dateline from the east results in correct west coordinate");
     }
+
+    /**
+     * To test that we can safely call OpenLayers.Util.extend with an Event
+     * instance, we need to capture a real event.
+     */
+    var loadEvent;
+    window.onload = function(evt) {
+        loadEvent = evt || window.event;
+    }
+    function test_extend_event(t) {
+        t.plan(2);
+        t.ok(loadEvent, "loadEvent recorded");
+        var extended, err;
+        try {
+            extended = OpenLayers.Util.extend({foo: "bar"}, loadEvent);
+        } catch (e) {
+            err = e;
+        }
+        if (err) {
+            t.fail("Failed to extend with an event: " + err.message);
+        } else {
+            t.eq(extended && extended.foo, "bar", "extended with event");
+        }
+    }
+
   </script>
 </head>
 <body>
diff --git a/tests/data/utfgrid/bio_utfgrid/1/0/0.json b/tests/data/utfgrid/bio_utfgrid/1/0/0.json
new file mode 100644
index 0000000..e1f305b
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/0/0.json
@@ -0,0 +1 @@
+{"keys": ["", "269", "270", "572", "271", "272", "585", "586", "273", "589", "573", "274", "275", "560", "558", "559", "562", "561", "279", "563", "566", "564", "281", "574", "565", "285", "286", "287", "576", "575", "1", "289", "569", "568", "567", "590", "295", "292", "294", "2", "299", "297", "578", "587", "556", "309", "570", "577", "313", "310", "312", "588", "315", "579", "592", "591", "557", "582", "580", "318", "319", "583", "321", "571", "584", "322", "323", "326", "325", "329", [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/0/1.json b/tests/data/utfgrid/bio_utfgrid/1/0/1.json
new file mode 100644
index 0000000..d3a0f0d
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/0/1.json
@@ -0,0 +1 @@
+{"keys": ["", "487", "474", "483", "489", "161", "492", "494", "171", "162", "459", "173", "164", "172", "502", "505", "175", "166", "511", "508", "510", "512", "519", "518", "177", "168", "176", "517", "522", "528", "538", "541", "542", "534", "549", "235", "237", "550", "239", "241", "240", "243", "242", "244", "245", "246", "247", "552", "248", "249", "553", "268", "555", "554"], "data": {"459": {"dom_desc": "HUMID TROPICAL DOMAIN", "pro_desc": "FOREST-PARAMO AND FOREST-MEADOW"}, "489 [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/0/2.json b/tests/data/utfgrid/bio_utfgrid/1/0/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/0/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/1/0.json b/tests/data/utfgrid/bio_utfgrid/1/1/0.json
new file mode 100644
index 0000000..0c2dede
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/1/0.json
@@ -0,0 +1 @@
+{"keys": ["", "276", "593", "277", "595", "594", "602", "604", "596", "603", "597", "278", "280", "606", "282", "283", "284", "288", "607", "608", "598", "600", "290", "291", "293", "301", "296", "300", "601", "605", "609", "298", "303", "599", "304", "305", "306", "302", "307", "308", "610", "311", "316", "314", "317", "320", "324", "328", "330", "327", "333", "334", "335", "338", "25", "26", "342", "340", "87", "341", "27", "344", "345", "343", "347", "68", "346", "348", "351", "71", " [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/1/1.json b/tests/data/utfgrid/bio_utfgrid/1/1/1.json
new file mode 100644
index 0000000..5457be3
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/1/1.json
@@ -0,0 +1 @@
+{"keys": ["", "486", "478", "475", "471", "493", "491", "484", "455", "468", "469", "463", "466", "481", "490", "201", "207", "208", "209", "488", "495", "179", "497", "496", "185", "202", "498", "499", "500", "234", "181", "186", "203", "501", "215", "214", "213", "504", "188", "218", "217", "216", "183", "195", "189", "219", "220", "221", "506", "507", "196", "194", "509", "228", "513", "199", "514", "520", "515", "516", "182", "521", "198", "523", "525", "524", "530", "527", "537", "5 [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/1/2.json b/tests/data/utfgrid/bio_utfgrid/1/1/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/1/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/2/0.json b/tests/data/utfgrid/bio_utfgrid/1/2/0.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/2/0.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/2/1.json b/tests/data/utfgrid/bio_utfgrid/1/2/1.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/2/1.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/bio_utfgrid/1/2/2.json b/tests/data/utfgrid/bio_utfgrid/1/2/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/bio_utfgrid/1/2/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/demo-1.1.json b/tests/data/utfgrid/demo-1.1.json
new file mode 100644
index 0000000..0848e26
--- /dev/null
+++ b/tests/data/utfgrid/demo-1.1.json
@@ -0,0 +1 @@
+{"grid":[" !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„
†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġ","ĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀ [...]
diff --git a/tests/data/utfgrid/world_utfgrid/1/0/0.json b/tests/data/utfgrid/world_utfgrid/1/0/0.json
new file mode 100644
index 0000000..7ad337b
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/0/0.json
@@ -0,0 +1 @@
+{"keys": ["", "71", "24", "245", "207", "238", "82", "132", "205", "51", "65", "242", "231", "186", "165", "114", "120", "2", "13", "235", "116", "113", "41", "234", "34", "90", "78", "48", "173", "215", "150", "75", "79", "224", "42", "181", "158", "38", "225", "211", "11", "208", "212", "167", "76", "39", "164", "77", "183", "104", "87", "95", "157", "59", "49", "21"], "data": {"150": {"NAME": "United States Minor Outlying Islands", "POP2005": 0}, "215": {"NAME": "United States Virgin  [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/0/1.json b/tests/data/utfgrid/world_utfgrid/1/0/1.json
new file mode 100644
index 0000000..549b5e6
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/0/1.json
@@ -0,0 +1 @@
+{"keys": ["", "150", "49", "161", "38", "21", "95", "195", "64", "43", "17", "218", "61", "196", "33", "160", "8", "209", "159", "62", "243"], "data": {"150": {"NAME": "United States Minor Outlying Islands", "POP2005": 0}, "38": {"NAME": "Colombia", "POP2005": 4494579}, "21": {"NAME": "Brazil", "POP2005": 186830759}, "17": {"NAME": "Bolivia", "POP2005": 9182015}, "49": {"NAME": "Ecuador", "POP2005": 13060993}, "159": {"NAME": "New Zealand", "POP2005": 4097112}, "95": {"NAME": "Kiribati", [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/0/2.json b/tests/data/utfgrid/world_utfgrid/1/0/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/0/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/1/0.json b/tests/data/utfgrid/world_utfgrid/1/1/0.json
new file mode 100644
index 0000000..1be321e
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/1/0.json
@@ -0,0 +1 @@
+{"keys": ["", "245", "238", "154", "189", "60", "142", "53", "45", "101", "103", "102", "205", "153", "72", "163", "98", "206", "30", "207", "129", "65", "105", "110", "191", "86", "182", "81", "170", "80", "236", "171", "210", "89", "186", "22", "202", "112", "200", "5", "3", "93", "94", "74", "84", "194", "96", "2", "199", "117", "88", "162", "190", "31", "83", "107", "50", "139", "175", "155", "168", "226", "244", "14", "18", "113", "126", "36", "188", "118", "99", "214", "220", "193" [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/1/1.json b/tests/data/utfgrid/world_utfgrid/1/1/1.json
new file mode 100644
index 0000000..66a2faf
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/1/1.json
@@ -0,0 +1 @@
+{"keys": ["", "52", "67", "28", "204", "92", "185", "119", "223", "156", "95", "174", "203", "166", "177", "148", "201", "6", "221", "227", "20", "123", "37", "9", "122", "108", "151", "216", "222", "146", "61", "180", "115", "124", "178", "219", "179", "159", "147", "145"], "data": {"151": {"NAME": "Vanuatu", "POP2005": 215366}, "201": {"NAME": "Tuvalu", "POP2005": 10441}, "156": {"NAME": "Nauru", "POP2005": 10111}, "159": {"NAME": "New Zealand", "POP2005": 4097112}, "67": {"NAME": "Gab [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/1/2.json b/tests/data/utfgrid/world_utfgrid/1/1/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/1/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/2/0.json b/tests/data/utfgrid/world_utfgrid/1/2/0.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/2/0.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/2/1.json b/tests/data/utfgrid/world_utfgrid/1/2/1.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/2/1.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/data/utfgrid/world_utfgrid/1/2/2.json b/tests/data/utfgrid/world_utfgrid/1/2/2.json
new file mode 100644
index 0000000..a0e62f4
--- /dev/null
+++ b/tests/data/utfgrid/world_utfgrid/1/2/2.json
@@ -0,0 +1 @@
+{"keys": [""], "data": {}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                [...]
\ No newline at end of file
diff --git a/tests/deprecated/Ajax.html b/tests/deprecated/Ajax.html
new file mode 100644
index 0000000..e73e80c
--- /dev/null
+++ b/tests/deprecated/Ajax.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+  <script src="../OLLoader.js"></script>
+  <script src="../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    function test_Ajax_loadUrl(t) {
+        t.plan(5);
+        var _get = OpenLayers.Request.GET;
+        var caller = {};
+        var onComplete = function() {};
+        var onFailure = function() {};
+        var params = {};
+        OpenLayers.Request.GET = function(config) {
+            t.eq(config.url, "http://example.com/?format=image+kml", "correct url")
+            t.eq(config.params, params, "correct params");
+            t.eq(config.scope, caller, "correct scope");
+            t.ok(config.success === onComplete, "correct success callback");
+            t.ok(config.failure === onFailure, "correct failure callback");
+        };
+        OpenLayers.loadURL("http://example.com/?format=image+kml", params, caller, onComplete, onFailure);
+        OpenLayers.Request.GET = _get;
+    }
+  </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/deprecated/BaseTypes/Class.html b/tests/deprecated/BaseTypes/Class.html
new file mode 100644
index 0000000..572765d
--- /dev/null
+++ b/tests/deprecated/BaseTypes/Class.html
@@ -0,0 +1,142 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+    // remove this next line at 3.0
+    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
+    
+    // Remove this at 3.0
+    function test_Class_backwards(t) {
+        t.plan(4);
+        // test that a new style class supports old style inheritance
+        var NewClass = OpenLayers.Class({
+            newProp: "new",
+            initialize: function() {
+                t.ok(false, "the base class is never instantiated");
+            },
+            toString: function() {
+                return "new style";
+            }
+        });
+        
+        var OldClass = OpenLayers.Class.create();
+        OldClass.prototype = OpenLayers.Class.inherit(NewClass, {
+            oldProp: "old",
+            initialize: function() {
+                t.ok(true, "only the child class constructor is called");
+            }
+        });
+        
+        var oldObj = new OldClass();
+        t.eq(oldObj.oldProp, "old",
+             "old style classes can still be instantiated");
+        t.eq(oldObj.newProp, "new",
+             "old style inheritance of properties works with new style base");
+        t.eq(oldObj.toString(), "new style",
+             "toString inheritance works with backwards style");
+        
+    }
+
+    // Remove this at 3.0
+    function test_Class_create (t) {
+        t.plan( 3 );
+        var cls = OpenLayers.Class.create();
+        cls.prototype = {
+            initialize: function () {
+                if (isMozilla)
+                    t.ok(this instanceof cls,
+                                "initialize is called on the right class");
+                else
+                    t.ok(true, "initialize is called");
+            }
+        };
+        var obj = new cls();
+        t.eq(typeof obj, "object", "obj is an object");
+        if (isMozilla)
+            t.ok(obj instanceof cls,
+                        "object is of the right class");
+        else
+            t.ok(true, "this test doesn't work in IE");
+    }
+
+    // Remove this at 3.0
+    function test_Class_inherit (t) {
+        t.plan( 20 );
+        var A = OpenLayers.Class.create();
+        var initA = 0;
+        A.prototype = {
+            count: 0,
+            mixed: false,
+            initialize: function () {
+                initA++;
+                this.count++;
+            }
+        };
+
+        var B = OpenLayers.Class.create();
+        var initB = 0;
+        B.prototype = OpenLayers.Class.inherit( A, {
+            initialize: function () {
+                A.prototype.initialize.apply(this, arguments);
+                initB++;
+                this.count++;
+            }
+        });
+
+        var mixin = OpenLayers.Class.create()
+        mixin.prototype = {
+            mixed: true
+        };
+
+        t.eq( initA, 0, "class A not inited" );
+        t.eq( initB, 0, "class B not inited" );
+
+        var objA = new A();
+        t.eq( objA.count, 1, "object A init" );
+        t.eq( initA, 1, "class A init" );
+        if (isMozilla) 
+            t.ok( objA instanceof A, "obj A isa A" );
+        else
+            t.ok( true, "IE sucks" );
+
+        var objB = new B();
+        t.eq( initA, 2, "class A init" );
+        t.eq( initB, 1, "class B init" );
+        t.eq( objB.count, 2, "object B init twice" );
+        if (isMozilla) {
+            t.ok( objB instanceof A, "obj B isa A" );
+            t.ok( objB instanceof B, "obj B isa B" );
+        } else {
+            t.ok( true, "IE sucks" );
+            t.ok( true, "IE sucks" );
+        }
+
+        var C = OpenLayers.Class.create();
+        C.prototype = OpenLayers.Class.inherit( B, mixin, {count: 0} );
+        t.eq( initA, 2, "class A init unchanged" );
+        t.eq( initB, 1, "class B init unchanged" );
+        
+        var objC = new C();
+        t.eq( initA, 3, "class A init changed" );
+        t.eq( initB, 2, "class B init changed" );
+        t.eq( objC.count, 2, "object C init changed" );
+        if (isMozilla) {
+            t.ok( objC instanceof A, "obj C isa A" );
+            t.ok( objC instanceof B, "obj C isa B" );
+            t.ok( objC instanceof C, "obj C isa C" );
+            t.ok( !(objC instanceof mixin), "obj C isn'ta mixin" );
+        } else {
+            t.ok( true, "IE sucks" );
+            t.ok( true, "IE sucks" );
+            t.ok( true, "IE sucks" );
+            t.ok( true, "IE sucks" );
+        }
+        t.eq( objC.mixed, true, "class C has mixin properties" );
+    }
+
+  </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/deprecated/BaseTypes/Element.html b/tests/deprecated/BaseTypes/Element.html
new file mode 100644
index 0000000..bd7e074
--- /dev/null
+++ b/tests/deprecated/BaseTypes/Element.html
@@ -0,0 +1,56 @@
+<html>
+<head>
+    <script src="../../OLLoader.js"></script>
+    <script src="../../../lib/deprecated.js"></script>
+
+    <script type="text/javascript">
+
+        function test_Element_hide(t) {
+            t.plan(2);
+
+            var elem1 = {
+                style: {
+                    'display': "none"
+                }
+            };
+        
+            var elem2 = {
+                style: {
+                    'display': ""
+                }
+            };
+
+            OpenLayers.Element.hide(elem1, elem2, "do-not-exists");
+        
+            t.eq(elem1.style.display, "none", "hidden element stays hidden");
+            t.eq(elem2.style.display, "none", "shown element hidden");
+        }
+    
+        function test_Element_show(t) {
+            t.plan(2);
+
+            var elem1 = {
+                style: {
+                    'display': "none"
+                }
+            };
+        
+            var elem2 = {
+                style: {
+                    'display': ""
+                }
+            };
+
+            OpenLayers.Element.show(elem1, "do-not-exists", elem2);
+        
+            t.eq(elem1.style.display, "", "hidden element shown");
+            t.eq(elem2.style.display, "", "shown element stays shown");
+        }
+
+    </script>
+</head>
+<body>
+    <div id="elemID" style="width:50px; height:100px; background-color:red">test</div>
+</body>
+</html>
+        
\ No newline at end of file
diff --git a/tests/deprecated/Control/MouseToolbar.html b/tests/deprecated/Control/MouseToolbar.html
new file mode 100644
index 0000000..f66a18b
--- /dev/null
+++ b/tests/deprecated/Control/MouseToolbar.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+    var map; 
+    function test_Control_MouseToolbar_constructor (t) {
+        t.plan( 1 );
+    
+        control = new OpenLayers.Control.MouseToolbar();
+        t.ok( control instanceof OpenLayers.Control.MouseToolbar, "new OpenLayers.Control.MouseToolbar returns object" );
+    }
+    function test_Control_MouseToolbar_addControl (t) {
+        t.plan( 8 );
+        map = new OpenLayers.Map('map');
+        control = new OpenLayers.Control.MouseToolbar();
+        t.ok( control instanceof OpenLayers.Control.MouseToolbar, "new OpenLayers.Control.MouseToolbar returns object" );
+        t.ok( map instanceof OpenLayers.Map, "new OpenLayers.Map creates map" );
+        map.addControl(control);
+        t.ok( control.map === map, "Control.map is set to the map object" );
+        t.ok( map.controls[4] === control, "map.controls contains control" );
+        t.eq( parseInt(control.div.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Control div zIndexed properly" );
+        t.eq( parseInt(map.viewPortDiv.lastChild.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Viewport div contains control div" );
+        t.eq( control.div.style.left, "6px", "Control div left located correctly by default");
+        t.eq( control.div.style.top, "300px", "Control div top located correctly by default");
+
+    }
+    function test_Control_MouseToolbar_control_events (t) {
+        t.plan( 1 );
+        if ((navigator.userAgent.indexOf("compatible") == -1)) { 
+            var evt = {which: 1}; // control expects left-click
+            map = new OpenLayers.Map('map');
+            var layer = new OpenLayers.Layer.WMS("Test Layer", 
+                "http://octo.metacarta.com/cgi-bin/mapserv?",
+                {map: "/mapdata/vmap_wms.map", layers: "basic"});
+            map.addLayer(layer);
+
+            control = new OpenLayers.Control.MouseToolbar();
+            map.addControl(control);
+
+            var centerLL = new OpenLayers.LonLat(0,0); 
+            map.setCenter(centerLL, 5);
+
+            evt.shiftKey = true;
+            evt.xy = new OpenLayers.Size(5,5);
+            control.defaultMouseDown(evt);
+            evt.xy = new OpenLayers.Size(15,15);
+            control.defaultMouseUp(evt);
+            t.eq(map.getZoom(), 6, "Map zoom set correctly after zoombox");
+        } else {
+            t.ok(true, "IE does not run this test.") 
+        }
+    }
+
+  </script>
+</head>
+<body>
+    <div id="map" style="width: 1024px; height: 512px;"/>
+</body>
+</html>
diff --git a/tests/deprecated/Geometry/Rectangle.html b/tests/deprecated/Geometry/Rectangle.html
new file mode 100644
index 0000000..75778e8
--- /dev/null
+++ b/tests/deprecated/Geometry/Rectangle.html
@@ -0,0 +1,77 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    function test_Rectangle_constructor (t) {
+        t.plan( 8 );
+
+      //empty
+        var rect = new OpenLayers.Geometry.Rectangle();
+        t.ok( rect instanceof OpenLayers.Geometry.Rectangle, "new OpenLayers.Geometry.Rectangle returns Rectangle object" );
+        t.eq( rect.CLASS_NAME, "OpenLayers.Geometry.Rectangle", "Rectangle.CLASS_NAME is set correctly");
+        t.ok( rect.id != null, "rect.id is set");
+        t.ok( ! (rect.x || rect.y || rect.width || rect.height), "empty construct leaves properties empty");
+        
+      //good
+        var x = {};
+        var y = {};
+        var w = {};
+        var h = {};
+        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
+        t.eq( rect.x, x, "good init correctly sets x property"); 
+        t.eq( rect.y, y, "good init correctly sets y property"); 
+        t.eq( rect.width, w, "good init correctly sets width property"); 
+        t.eq( rect.height, h, "good init correctly sets height property"); 
+    }
+
+    function test_Rectangle_calculateBounds(t) {
+        t.plan(1);
+        
+        var x = 1;
+        var y = 2;
+        var w = 10;
+        var h = 20;
+        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
+        rect.calculateBounds();
+
+        var testBounds = new OpenLayers.Bounds(x, y, x + w, y + h)
+        
+        t.ok( rect.bounds.equals(testBounds), "calculateBounds works correctly"); 
+    }
+
+    function test_Rectangle_getLength(t) {
+        t.plan(1);
+
+        var x = 1;
+        var y = 2;
+        var w = 10;
+        var h = 20;
+        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
+
+        var testLength = (2 * w) + (2 * h);
+
+        t.eq(rect.getLength(), testLength, "getLength() works");
+    }
+
+    function test_Rectangle_getArea(t) {
+        t.plan(1);
+
+        var x = 1;
+        var y = 2;
+        var w = 10;
+        var h = 20;
+        var rect = new OpenLayers.Geometry.Rectangle(x, y, w, h);
+
+        var testArea = w * h;
+        t.eq(rect.getArea(), testArea, "testArea() works");
+    }
+
+
+
+  </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/deprecated/Layer/GML.html b/tests/deprecated/Layer/GML.html
new file mode 100644
index 0000000..daf5917
--- /dev/null
+++ b/tests/deprecated/Layer/GML.html
@@ -0,0 +1,61 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    var name = "GML Layer";
+    
+    var gml = "./owls.xml";
+    var gml2 = "./mice.xml";
+
+    // if this test is running online, different rules apply
+    var isMSIE = (navigator.userAgent.indexOf("MSIE") > -1);
+    if (isMSIE) {
+        gml = "." + gml;
+        gml2 = "." + gml2;
+    }
+    
+    function test_Layer_GML_constructor(t) {
+        t.plan(3);
+
+        var layer = new OpenLayers.Layer.GML(name);
+        t.ok(layer instanceof OpenLayers.Layer.GML, "new OpenLayers.Layer.GML returns correct object" );
+        t.eq(layer.name, name, "layer name is correctly set");
+        t.ok(layer.renderer.CLASS_NAME, "layer has a renderer");
+
+    }
+    function test_Layer_GML_events(t) {
+        t.plan(3);
+
+        var layer = new OpenLayers.Layer.GML(name, gml, {isBaseLayer: true});
+        layer.events.register("loadstart", layer, function() { 
+            t.ok(true, "loadstart called.")
+        });
+        layer.events.register("loadend", layer, function() { 
+            t.ok(true, "loadend called.")
+        });
+        var map = new OpenLayers.Map("map");
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+        t.delay_call(3, function() { 
+            t.ok(true, "waited for 3s"); 
+        });
+
+    }
+    function test_GML_setUrl(t) {
+        t.plan(2);
+        var layer = new OpenLayers.Layer.GML(name, gml);
+        var map = new OpenLayers.Map("map");
+        map.addLayer(layer);
+        t.eq(layer.url, gml, "layer has correct original url");
+        layer.setUrl(gml2);
+        t.eq(layer.url, gml2, "layer has correctly changed url");
+    }
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
+
diff --git a/tests/deprecated/Layer/MapServer.html b/tests/deprecated/Layer/MapServer.html
new file mode 100644
index 0000000..27ce63d
--- /dev/null
+++ b/tests/deprecated/Layer/MapServer.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+<script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
+
+<script src="../../OLLoader.js"></script>
+<script src="../../../lib/deprecated.js"></script>
+<script type="text/javascript">
+    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
+    var layer; 
+
+    var name = 'Test Layer';
+    var url = "http://labs.metacarta.com/cgi-bin/mapserv";
+    var params = { map: '/mapdata/vmap_wms.map', 
+                   layers: 'basic'};
+
+    function test_Layer_MapServer_Reproject (t) { 
+        var validkey = (window.location.protocol == "file:") ||
+                       (window.location.host == "localhost") ||
+                       (window.location.host == "openlayers.org");
+
+        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) {
+            t.plan(5);
+            var map = new OpenLayers.Map('map');
+            var layer = new OpenLayers.Layer.Google("Google");
+            map.addLayer(layer);
+            layer = new OpenLayers.Layer.MapServer(name, url, params, {reproject: true, isBaseLayer: false, buffer: 2});
+            layer.isBaseLayer=false;
+            map.addLayer(layer);
+            map.setCenter(new OpenLayers.LonLat(0,0), 5);
+            var tile = layer.grid[0][0];
+            tile.draw(true); // the tile queue defers the drawing
+            t.eq( tile.bounds.left, -22.5, "left side matches" ); 
+            t.eq( tile.bounds.right, -11.25, "top side matches" ); 
+            t.eq( tile.bounds.bottom.toFixed(6), '11.178402', "bottom side matches" ); 
+            t.eq( tile.bounds.top.toFixed(6), '21.943046', "top side matches" );
+            map.destroy();
+        } else {
+            t.plan(1);
+            t.debug_print("can't test google layer from " +
+                          window.location.host);
+        }
+
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.MapServer(name, url, params, {buffer:2});
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0,0), 5);
+        var tile = layer.grid[0][0];
+        t.ok( tile.bounds.equals(new OpenLayers.Bounds(-33.75, 33.75, -22.5, 45)), "okay");
+        map.destroy();
+    }
+    
+</script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/deprecated/Layer/MapServer/Untiled.html b/tests/deprecated/Layer/MapServer/Untiled.html
new file mode 100644
index 0000000..c3f9c44
--- /dev/null
+++ b/tests/deprecated/Layer/MapServer/Untiled.html
@@ -0,0 +1,161 @@
+<html>
+<head>    
+
+    <script src="../../../OLLoader.js"></script>
+    <script src="../../../../lib/deprecated.js"></script>
+    <script type="text/javascript">
+
+    // turn off animation frame handling, so we can check img urls in tests
+    delete OpenLayers.Layer.Grid.prototype.queueTileDraw;
+
+    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
+    var layer; 
+
+    var name = 'Test Layer';
+    var url = "http://labs.metacarta.com/cgi-bin/mapserv";
+    var params = { map: '/mapdata/vmap_wms.map', 
+                   layers: 'basic'};
+    
+    function test_Layer_MapServer_Untiled_constructor (t) {
+        t.plan( 4 );
+
+        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
+        t.ok( layer instanceof OpenLayers.Layer.MapServer.Untiled, "new OpenLayers.Layer.MapServer returns object" );
+        t.eq( layer.url, "http://labs.metacarta.com/cgi-bin/mapserv", "layer.url is correct (HTTPRequest inited)" );
+
+        t.eq( layer.params.mode, "map", "default mode param correctly copied");
+        t.eq( layer.params.map_imagetype, "png", "default imagetype correctly copied");
+
+
+    }
+    
+    function test_Layer_MapServer_Untiled_clone (t) {
+        t.plan(3);
+        
+        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
+        var map = new OpenLayers.Map('map', {});
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
+        map.addLayer(layer);
+
+        var clone = layer.clone();
+        layer.tile = [[1,2],[3,4]];
+        
+        t.ok( clone.tile != layer.tile, "clone does not copy tile");
+
+        layer.ratio += 1;
+
+        t.eq( clone.ratio, 1.5, "changing layer.ratio does not change clone.ratio -- a fresh copy was made, not just copied reference");
+
+        t.eq( clone.alpha, layer.alpha, "alpha copied correctly");
+
+        layer.tile = null;
+        map.destroy();
+    }
+
+    function test_Layer_MapServer_Untiled_isBaseLayer(t) {
+        t.plan(3);
+        
+        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
+        t.ok( layer.isBaseLayer, "baselayer is true by default");
+
+        var newParams = OpenLayers.Util.extend({}, params);
+        newParams.transparent = "true";
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, newParams);
+        t.ok( !layer.isBaseLayer, "baselayer is false when transparent is set to true");
+
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params, {isBaseLayer: false});
+        t.ok( !layer.isBaseLayer, "baselayer is false when option is set to false" );
+    }
+
+    function test_Layer_MapServer_Untiled_mergeNewParams (t) {
+        t.plan( 5 );
+
+        var map = new OpenLayers.Map("map");
+        var url = "http://labs.metacarta.com/cgi-bin/mapserv";
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
+        
+        var newParams = { layers: 'sooper', 
+                          chickpeas: 'image/png'};
+
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+        t.ok( !layer.grid[0][0].url.match("chickpeas"), "chickpeas is not in URL of first tile in grid" );
+
+        layer.mergeNewParams(newParams);
+        
+        t.eq( layer.params.layers, "sooper", "mergeNewParams() overwrites well");
+        t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() adds well");
+        t.ok( layer.grid[0][0].url.match("chickpeas"), "chickpeas is in URL of first tile in grid" );
+
+        newParams.chickpeas = 151;
+
+        t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable");
+        map.destroy();
+    }
+
+    function test_Layer_MapServer_Untiled_getFullRequestString (t) {
+
+        
+        t.plan( 1 );
+        var map = new OpenLayers.Map('map');
+        tUrl = "http://labs.metacarta.com/cgi-bin/mapserv";
+        tParams = { layers: 'basic', 
+                    format: 'png'};
+        var tLayer = new OpenLayers.Layer.MapServer.Untiled(name, tUrl, tParams);
+        map.addLayer(tLayer);
+        str = tLayer.getFullRequestString();
+        var tParams = {
+             layers: 'basic', 
+             format: 'png',
+             mode: 'map',
+             map_imagetype: 'png'
+        };
+
+        var sStr = tUrl + "?" + OpenLayers.Util.getParameterString(tParams);
+        sStr = sStr.replace(/,/g, "+");
+        
+        t.eq(str, sStr , "getFullRequestString() works");
+        map.destroy();
+
+    }
+
+    // DEPRECATED -- REMOVE IN 3.0
+    function test_Layer_Untiled_MapServer(t) { 
+        t.plan(1);
+        
+        var layer = new OpenLayers.Layer.MapServer.Untiled();
+        
+        var clone = layer.clone();
+        
+        t.ok(clone.singleTile, "regression test: clone works. this is for #1013");
+    }
+    
+    function test_Layer_MapServer_Untiled_destroy (t) {
+
+        t.plan( 1 );
+
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.MapServer.Untiled(name, url, params);
+        map.addLayer(layer);
+
+        map.setCenter(new OpenLayers.LonLat(0,0), 5);
+
+        //grab a reference to one of the tiles
+        var tile = layer.tile;        
+
+        layer.destroy();
+        
+    // checks to make sure superclass (grid) destroy() was called    
+        
+        t.ok( layer.tile == null, "tile set to null");
+        map.destroy();
+    }
+    
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/deprecated/Layer/WFS.html b/tests/deprecated/Layer/WFS.html
new file mode 100644
index 0000000..09b6a54
--- /dev/null
+++ b/tests/deprecated/Layer/WFS.html
@@ -0,0 +1,178 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    var name = "Vector Layer";
+    
+    function test_Layer_WFS_constructor(t) {
+        t.plan(3);
+
+        var layer = new OpenLayers.Layer.WFS(name, "url", {});
+        t.ok(layer instanceof OpenLayers.Layer.WFS, "new OpenLayers.Layer.Vector returns correct object" );
+        t.eq(layer.name, name, "layer name is correctly set");
+        t.ok(layer.renderer.CLASS_NAME, "layer has a renderer");
+
+    }
+    
+    function test_Layer_WFS_getDataExtent(t) {
+        t.plan(1);
+
+        var layer = new OpenLayers.Layer.WFS(name, "url", {});
+        layer.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0, 0)));
+        layer.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0, 1)));
+        t.eq(layer.getDataExtent().toBBOX(), "0,0,0,1", "bbox is correctly pulled from vectors.");
+
+    }
+    
+    function test_Layer_WFS_setOpacity(t) {
+        t.plan(3);
+
+        var layer = new OpenLayers.Layer.WFS(name, "url", {});
+        layer.setOpacity(.5);
+        t.eq(layer.opacity, 0.5, "vector setOpacity didn't fail");
+        var layer = new OpenLayers.Layer.WFS(name, "url", {}, {'featureClass': OpenLayers.Feature.WFS});
+        var marker = new OpenLayers.Marker(new OpenLayers.LonLat(0,0));
+        marker.setOpacity = function() {
+            t.ok(true, "Marker setOpacity was called");
+        }    
+        layer.addMarker(marker);
+        layer.setOpacity(.6);
+        t.eq(layer.opacity, 0.6, "setOpacity didn't fail on markers");
+    }
+    
+    function test_Layer_WFS_destroy(t) {
+        t.plan(13);
+        
+        var tVectorDestroy = OpenLayers.Layer.Vector.prototype.destroy;
+        OpenLayers.Layer.Vector.prototype.destroy = function() {
+            g_VectorDestroyed = true;
+        }
+
+        var tMarkersDestroy = OpenLayers.Layer.Markers.prototype.destroy;
+        OpenLayers.Layer.Markers.prototype.destroy = function() {
+            g_MarkersDestroyed = true;
+        }
+
+        var layer = {
+            'vectorMode': true,
+            'tile': {
+                'destroy': function() {
+                    t.ok(true, "wfs layer's tile is destroyed");
+                }
+            },
+            'ratio': {},
+            'featureClass': {},
+            'format': {},
+            'formatObject': {
+                'destroy': function() {
+                    t.ok(true, "wfs layer's format object is destroyed");
+                }
+            },
+            'formatOptions': {},
+            'encodeBBOX': {},
+            'extractAttributes': {}
+        };
+        
+        //this call should set off two tests (destroys for tile and format object)
+        g_VectorDestroyed = null;
+        g_MarkersDestroyed = null;        
+        OpenLayers.Layer.WFS.prototype.destroy.apply(layer, []);        
+
+        t.ok(g_VectorDestroyed && !g_MarkersDestroyed, "when vector mode is set to true, the default vector layer's destroy() method is called");
+        t.eq(layer.vectorMode, null, "'vectorMode' property nullified");
+        t.eq(layer.tile, null, "'tile' property nullified");
+        t.eq(layer.ratio, null, "'ratio' property nullified");
+        t.eq(layer.featureClass, null, "'featureClass' property nullified");
+        t.eq(layer.format, null, "'format' property nullified");
+        t.eq(layer.formatObject, null, "'formatObject' property nullified");
+        t.eq(layer.formatOptions, null, "'formatOptions' property nullified");
+        t.eq(layer.encodeBBOX, null, "'encodeBBOX' property nullified");
+        t.eq(layer.extractAttributes, null, "'extractAttributes' property nullified");
+
+        layer.vectorMode = false;
+
+        //this call will *not* set off two tests (tile and format object are null)
+        g_VectorDestroyed = null;
+        g_MarkersDestroyed = null;        
+        OpenLayers.Layer.WFS.prototype.destroy.apply(layer, []);        
+        t.ok(!g_VectorDestroyed && g_MarkersDestroyed, "when vector mode is set to false, the default markers layer's destroy() method is called");
+        
+        OpenLayers.Layer.Vector.prototype.destroy = tVectorDestroy;
+        OpenLayers.Layer.Markers.prototype.destroy = tMarkersDestroy;
+    }
+    
+    function test_Layer_WFS_mapresizevector(t) {
+        t.plan(2);
+
+        var map = new OpenLayers.Map("map");
+        map.addLayer(new OpenLayers.Layer.WMS("WMS", "url", {}));
+        var layer = new OpenLayers.Layer.WFS(name, "url", {});
+        t.ok(layer.renderer.CLASS_NAME, "layer has a renderer");
+        map.addLayer(layer);
+        setSize = false;
+        layer.renderer.setSize = function() { setSize = true; }
+        layer.onMapResize();
+        t.eq(setSize, true, "Renderer resize called on map size change.");
+        map.destroy();     
+
+    }
+    function test_Layer_WFS_drawmap(t) {
+        t.plan(2);
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
+            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+        map.addLayer(layer);
+
+        layer = new OpenLayers.Layer.WFS( "Owl Survey",
+            "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?",
+            {typename: "OWLS", maxfeatures: 10},
+            { featureClass: OpenLayers.Feature.WFS});
+        map.addLayer(layer);
+        map.addControl(new OpenLayers.Control.LayerSwitcher());
+        try { 
+            map.setCenter(new OpenLayers.LonLat(-100, 60), 3);
+        } catch (Exception) {
+        }    
+        t.eq(layer.tile.url, "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?TYPENAME=OWLS&MAXFEATURES=10&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&SRS=EPSG%3A4326&BBOX=-187.890625,-36.6796875,-12.109375,156.6796875", "Tile URL is set correctly when not encoded");
+        map.destroy();     
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
+            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'}
+            );
+        map.addLayer(layer);
+
+        layer = new OpenLayers.Layer.WFS( "Owl Survey",
+            "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?",
+            {typename: "OWLS", maxfeatures: 10},
+            { featureClass: OpenLayers.Feature.WFS, 'encodeBBOX': true});
+        map.addLayer(layer);
+        map.addControl(new OpenLayers.Control.LayerSwitcher());
+        try { 
+            map.setCenter(new OpenLayers.LonLat(-100, 60), 3);
+        } catch (Exception) {
+        }  
+        t.eq(layer.tile.url, "http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?TYPENAME=OWLS&MAXFEATURES=10&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&SRS=EPSG%3A4326&BBOX=-187.890625%2C-36.679687%2C-12.109375%2C156.679688", "Tile URL is set correctly when not encoded");
+        map.destroy();     
+    }
+    function test_projection_srs(t) {
+        t.plan(1);
+        var map = new OpenLayers.Map('map');
+        map.addLayer(new OpenLayers.Layer("",{isBaseLayer: true} ));
+        // we use an empty moveTo function because we don't want to request tiles
+        var layer = new OpenLayers.Layer.WFS("","/wfs",{},{'projection': new OpenLayers.Projection("EPSG:900913"),
+            moveTo: function() {}});
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+        var params = OpenLayers.Util.getParameters(layer.getFullRequestString());
+        t.eq(params.SRS, "EPSG:900913", "SRS represents projection of WFS layer, instead of map (#1537)");   
+    }
+
+
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/deprecated/Layer/WMS.html b/tests/deprecated/Layer/WMS.html
new file mode 100644
index 0000000..523d6ee
--- /dev/null
+++ b/tests/deprecated/Layer/WMS.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+    <!-- this gmaps key generated for http://openlayers.org/dev/ -->
+    <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA9XNhd8q0UdwNC7YSO4YZghSPUCi5aRYVveCcVYxzezM4iaj_gxQ9t-UajFL70jfcpquH5l1IJ-Zyyw'></script>
+    <script src="../../OLLoader.js"></script>
+    <script src="../../../lib/deprecated.js"></script>
+    <script type="text/javascript">
+    
+    var name = 'Test Layer';
+    var url = "http://octo.metacarta.com/cgi-bin/mapserv";
+    var params = { map: '/mapdata/vmap_wms.map',
+                   layers: 'basic',
+                   format: 'image/jpeg'};
+
+    function test_Layer_WMS_Reproject (t) {
+        var validkey = (window.location.protocol == "file:") ||
+                       (window.location.host == "localhost") ||
+                       (window.location.host == "openlayers.org");
+        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) {
+            t.plan(5);
+
+            var map = new OpenLayers.Map('map');
+            var layer = new OpenLayers.Layer.Google("Google");
+            map.addLayer(layer);
+            var wmslayer = new OpenLayers.Layer.WMS(name, url, params,
+                                                    {isBaseLayer: false, reproject:true, buffer: 2});
+            wmslayer.isBaseLayer=false;
+            map.addLayer(wmslayer);
+            map.setCenter(new OpenLayers.LonLat(0,0), 5);
+            var tile = wmslayer.grid[0][0];
+            tile.draw(true); // the tile queue defers the drawing
+            t.eq( tile.bounds.left, -22.5, "left side matches" );
+            t.eq( tile.bounds.right, -11.25, "right side matches" );
+            t.eq( tile.bounds.bottom.toFixed(6), '11.178402', "bottom side matches" );
+            t.eq( tile.bounds.top.toFixed(6), '21.943046', "top side matches" );
+            map.destroy();
+        } else {
+            t.plan(1);
+            t.debug_print("can't test google layer from " +
+                          window.location.host);
+        }
+
+        var map = new OpenLayers.Map('map');
+        layer = new OpenLayers.Layer.WMS(name, url, params, {buffer: 2});
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0,0), 5);
+        var tile = layer.grid[0][0];
+        t.ok( tile.bounds.equals(new OpenLayers.Bounds(-33.75, 33.75, -22.5, 45)), "okay");
+
+        map.destroy();
+    }
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/deprecated/Layer/WMS/Post.html b/tests/deprecated/Layer/WMS/Post.html
new file mode 100644
index 0000000..d79aec5
--- /dev/null
+++ b/tests/deprecated/Layer/WMS/Post.html
@@ -0,0 +1,89 @@
+<html>
+<head>
+    <script src="../../../OLLoader.js"></script>
+    <script src="../../../../lib/deprecated.js"></script>
+    <script type="text/javascript">
+    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
+    var isOpera   = (navigator.userAgent.indexOf("Opera") != -1);
+    var layer;
+
+    var name = 'Test Layer';
+    var url = "http://octo.metacarta.com/cgi-bin/mapserv";
+    var params = { map: '/mapdata/vmap_wms.map', 
+                   layers: 'basic', 
+                   format: 'image/jpeg'};
+
+    function test_Layer_WMS_Post_constructor (t) {
+        t.plan( 2 );
+
+        var url = "http://octo.metacarta.com/cgi-bin/mapserv";
+        var options = {unsupportedBrowsers: []};
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
+
+        t.eq(
+            layer.usePost, true,
+            "Supported browsers use IFrame tiles.");
+
+        layer.destroy();
+
+        var options = { unsupportedBrowsers: [OpenLayers.BROWSER_NAME]};
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
+        t.eq(
+            layer.usePost, false,
+            "unsupported browsers use Image tiles.");
+        layer.destroy();
+    }
+
+    function test_Layer_WMS_Post_addtile (t) {
+        t.plan( 3 );
+    
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params);
+        var map = new OpenLayers.Map('map');
+        map.addLayer(layer);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        var pixel  = new OpenLayers.Pixel(5,6);
+        var tile   = layer.addTile(bounds, pixel);
+        
+        if(isMozilla || isOpera) {
+            t.ok(
+                tile instanceof OpenLayers.Tile.Image,
+                "tile is an instance of OpenLayers.Tile.Image");
+        }
+        else {
+            t.ok(
+                tile.useIFrame !== undefined,
+                "tile is created with the OpenLayers.Tile.Image.IFrame mixin");
+        }
+        map.destroy();
+
+        // test the unsupported browser
+        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);
+        t.ok(
+            tile instanceof OpenLayers.Tile.Image,
+            "unsupported browser: tile is an instance of Tile.Image");
+        layer.destroy();
+
+        // test a supported browser
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params, {
+            unsupportedBrowsers: []
+        });
+        map.addLayer(layer);
+        var tile2 = layer.addTile(bounds, pixel);
+        tile2.draw();
+        t.eq(
+            tile2.useIFrame, true,
+            "supported browser: tile is created with the Tile.Image.IFrame mixin");
+        map.destroy();
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/deprecated/Layer/Yahoo.html b/tests/deprecated/Layer/Yahoo.html
new file mode 100755
index 0000000..f7c67c0
--- /dev/null
+++ b/tests/deprecated/Layer/Yahoo.html
@@ -0,0 +1,121 @@
+<html>
+<head>
+  <script src="http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=euzuro-openlayers"></script>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+    var layer; 
+
+    function test_Layer_Yahoo_constructor (t) {
+        t.plan( 4 );
+
+        var tempEventPane = OpenLayers.Layer.EventPane.prototype.initialize;
+        OpenLayers.Layer.EventPane.prototype.initialize = function(name, options) {
+            t.ok(name == g_Name, "EventPane initialize() called with correct name");
+            t.ok(options == g_Options, "EventPane initialize() called with correct options");
+        }
+
+        var tempFixedZoomLevels = OpenLayers.Layer.FixedZoomLevels.prototype.initialize;
+        OpenLayers.Layer.FixedZoomLevels.prototype.initialize = function(name, options) {
+            t.ok(name == g_Name, "FixedZoomLevels initialize() called with correct name");
+            t.ok(options == g_Options, "FixedZoomLevels initialize() called with correct options");
+        }
+
+
+        g_Name = {};
+        g_Options = {};        
+        var l = new OpenLayers.Layer.Yahoo(g_Name, g_Options);
+
+        OpenLayers.Layer.EventPane.prototype.initialize = tempEventPane;
+        OpenLayers.Layer.FixedZoomLevels.prototype.initialize = tempFixedZoomLevels;
+    }
+
+    function test_Layer_Yahoo_loadMapObject(t) {
+        t.plan(5);
+        
+        var temp = YMap;
+        YMap = OpenLayers.Class({
+            initialize: function(div, type, size) {
+                t.ok(div == g_Div, "correct div passed to YMap constructor");
+                t.ok(type == g_Type, "correct type passed to YMap constructor");
+                t.ok(size == g_YMapSize, "correct size passed to YMap constructor");
+            },
+            disableKeyControls: function() {
+                t.ok(true, "disableKeyControls called on map object");
+            }
+        });
+        
+        g_Div = {};
+        g_Type = {};
+        g_MapSize = {};
+        g_YMapSize = {};
+        
+        var l = new OpenLayers.Layer.Yahoo();
+        l.div = g_Div;
+        l.type = g_Type;
+        l.map = {
+            'getSize': function() {
+                return g_MapSize;
+            }
+        };
+        l.getMapObjectSizeFromOLSize = function(mapSize) {
+            t.ok(mapSize == g_MapSize, "correctly translating map size from ol to YSize");
+            return g_YMapSize;
+        };
+
+        l.loadMapObject();
+
+        YMap = temp;
+    }    
+
+    function test_Layer_Yahoo_onMapResize(t) {
+        t.plan(2);
+        
+        g_MapSize = {};
+        g_YMapSize = {};
+        
+        var l = new OpenLayers.Layer.Yahoo();
+        l.mapObject = {
+            'resizeTo': function(size) {
+                t.ok(size == g_YMapSize, "correct YSize passed to reiszeTo on map object");
+            }
+        }
+        l.map = {
+            'getSize': function() {
+                return g_MapSize;
+            }
+        };
+        l.getMapObjectSizeFromOLSize = function(mapSize) {
+            t.ok(mapSize == g_MapSize, "correctly translating map size from ol to YSize");
+            return g_YMapSize;
+        };
+
+        l.onMapResize();
+    }
+    
+    function test_Layer_Yahoo_getMapObjectSizeFromOLSize(t) {
+        t.plan(2);
+        
+        var temp = YSize;
+        YSize = function(w, h) {
+            t.ok(w == g_Size.w, "correct width passed to YSize constructor");
+            t.ok(h == g_Size.h, "correct height passed to YSize constructor");
+        }
+        
+        g_Size = {
+            'w': {},
+            'h': {}
+        };
+        
+        OpenLayers.Layer.Yahoo.prototype.getMapObjectSizeFromOLSize(g_Size);
+
+        YSize = temp;
+    }
+
+
+  </script>
+</head>
+<body>
+  <div id="map"></div>
+</body>
+</html>
diff --git a/tests/Layer/mice.xml b/tests/deprecated/Layer/mice.xml
similarity index 100%
rename from tests/Layer/mice.xml
rename to tests/deprecated/Layer/mice.xml
diff --git a/tests/Layer/owls.xml b/tests/deprecated/Layer/owls.xml
similarity index 100%
rename from tests/Layer/owls.xml
rename to tests/deprecated/Layer/owls.xml
diff --git a/tests/deprecated/Protocol/SQL.html b/tests/deprecated/Protocol/SQL.html
new file mode 100644
index 0000000..f45203d
--- /dev/null
+++ b/tests/deprecated/Protocol/SQL.html
@@ -0,0 +1,24 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    function test_initialize(t) {
+        t.plan(3);
+        var options = {tableName: 'my_features', 
+                       databaseName: 'my_database_name'}
+        var protocol = new OpenLayers.Protocol.SQL(options);
+
+        t.ok(protocol instanceof OpenLayers.Protocol.SQL,
+             "new OpenLayers.Protocol.SQL returns object");
+
+        t.eq(protocol.tableName, options.tableName, "tableName property is set");
+        t.eq(protocol.databaseName, options.databaseName, "databaseName property is set");
+    }
+    
+  </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/deprecated/Protocol/SQL/Gears.html b/tests/deprecated/Protocol/SQL/Gears.html
new file mode 100644
index 0000000..0909fb4
--- /dev/null
+++ b/tests/deprecated/Protocol/SQL/Gears.html
@@ -0,0 +1,474 @@
+<html>
+<head>
+  <script src="../../../OLLoader.js"></script>
+  <script src="../../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    function test_initialize(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(5);
+
+        t.eq(protocol.CLASS_NAME, "OpenLayers.Protocol.SQL.Gears",
+             "ctor returns correct value");
+
+        t.eq(protocol.jsonParser.CLASS_NAME,
+             "OpenLayers.Format.JSON",
+             "ctor creates a JSON parser");
+
+        t.eq(protocol.wktParser.CLASS_NAME,
+             "OpenLayers.Format.WKT",
+             "ctor creates a WKT parser");
+
+        var str = protocol.FID_PREFIX + "foo_bar";
+        t.ok(str.match(protocol.fidRegExp),
+             "ctor creates correct regexp");
+
+        t.ok(typeof protocol.db == "object",
+             "ctor creates a db object");
+
+        protocol.clear();
+        protocol.destroy();
+    }
+
+    function test_destroy(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(3);
+
+        protocol.destroy();
+
+        t.eq(protocol.db, null,
+             "destroy nullifies db");
+        t.eq(protocol.jsonParser, null,
+             "destroy nullifies jsonParser");
+        t.eq(protocol.wktParser, null,
+             "destroy nullifies wktParser");
+     }
+
+    function test_read(t) {
+        var protocolCallback, readCallback;
+        var protocolOptions = {callback: protocolCallback};
+        var readOptions = {callback: readCallback};
+
+        var protocol = new OpenLayers.Protocol.SQL.Gears(protocolOptions);
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        function okCallback(resp) {
+            t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
+                 "read calls correct callback with a response object");
+        }
+
+        function failCallback(resp) {
+            t.fail("read calls incorrect callback");
+        }
+
+        t.plan(4);
+
+        var resp;
+
+        // 2 tests
+        protocolOptions.callback = okCallback;
+        readOptions.callback = failCallback;
+        resp = protocol.read();
+        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
+             "read returns a response object");
+
+        // 2 test
+        protocolOptions.callback = failCallback;
+        readOptions.callback = okCallback;
+        resp = protocol.read(readOptions);
+        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
+             "read returns a response object");
+
+        protocol.clear();
+        protocol.destroy();
+    }
+
+    function test_unfreezeFeature(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(10);
+
+        var feature;
+        var wkt, json, fid, state;
+
+        json = "{\"fake\":\"properties\"}";
+        fid = "1000";
+        state = OpenLayers.State.INSERT;
+
+        var row = {
+            fieldByName: function(str) {
+                if (str == "geometry") {
+                    return wkt;
+                }
+                if (str == "properties") {
+                    return json;
+                }
+                if (str == "fid") {
+                    return fid;
+                }
+                if (str == "state") {
+                    return state;
+                }
+            }
+        };
+
+        // 5 tests
+        wkt = "POINT(1 2)";
+        feature = protocol.unfreezeFeature(row);
+        t.eq(feature.CLASS_NAME, "OpenLayers.Feature.Vector",
+             "unfreezeFeature returns an OpenLayers.Feature.Vector");
+        t.ok(feature.geometry.x == 1 && feature.geometry.y == 2,
+             "unfreezeFeature returns a feature with correct geometry");
+        t.eq(feature.attributes.fake, "properties",
+             "unfreezeFeature returns a feature with correct attributes");
+        t.eq(feature.fid, fid,
+             "unfreezeFeature returns a feature with fid");
+        t.eq(feature.state, state,
+             "unfreezeFeature returns a feature with state");
+
+        // 5 tests
+        wkt = protocol.NULL_GEOMETRY;
+        state = protocol.NULL_FEATURE_STATE;
+        feature = protocol.unfreezeFeature(row);
+        t.eq(feature.CLASS_NAME, "OpenLayers.Feature.Vector",
+             "unfreezeFeature returns an OpenLayers.Feature.Vector");
+        t.eq(feature.geometry, null,
+             "unfreezeFeature returns a feature with correct geometry");
+        t.eq(feature.attributes.fake, "properties",
+             "unfreezeFeature returns a feature with correct attributes");
+        t.eq(feature.fid, fid,
+             "unfreezeFeature returns a feature with fid");
+        t.eq(feature.state, null,
+             "unfreezeFeature returns a feature with state");
+
+        protocol.clear();
+        protocol.destroy();
+    }
+
+    function test_extractFidFromField(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(4);
+
+        var field, fid;
+
+        // fid is a string, field is not prefixed with FID_PREFIX
+        // 1 test
+        field = "10";
+        res = protocol.extractFidFromField(field);
+        t.eq(res, "10",
+             "extractFidFromField returns expected string");
+
+        // fid is a string, field is prefixed with FID_PREFIX
+        // 1 test
+        field = protocol.FIX_PREFIX + "10";
+        res = protocol.extractFidFromField(field);
+        t.eq(res, protocol.FIX_PREFIX + "10",
+             "extractFidFromField returns expected prefixed string");
+
+        // fid is a number, field is not prefixed with FIX_PREFIX
+        // 1 test
+        protocol.typeOfFid = "number";
+        field = "10";
+        res = protocol.extractFidFromField(field);
+        t.eq(res, 10,
+             "extractFidFromField returns expected number");
+
+        // fid is a number, field is prefixed with FIX_PREFIX
+        // 1 test
+        protocol.typeOfFid = "number";
+        field = protocol.FID_PREFIX + "10";
+        res = protocol.extractFidFromField(field);
+        t.eq(res, protocol.FID_PREFIX + "10",
+             "extractFidFromField returns expected prefixed string");
+    }
+
+    function test_freezeFeature(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(8);
+
+        var feature, res;
+
+        // 4 tests
+        feature = new OpenLayers.Feature.Vector();
+        feature.geometry = new OpenLayers.Geometry.Point(1, 2);
+        feature.attributes.fake = "properties";
+        feature.fid = "1000";
+        feature.state = OpenLayers.State.INSERT;
+        res = protocol.freezeFeature(feature);
+        t.eq(res[0], feature.fid,
+             "freezeFeature returns correct fid");
+        t.eq(res[1], "POINT(1 2)",
+             "freezeFeature returns correct WKT");
+        t.eq(res[2], "{\"fake\":\"properties\"}",
+             "freezeFeature returns correct JSON");
+        t.eq(res[3], feature.state,
+             "freezeFeature returns correct feature state");
+
+        // 4 tests
+        protocol.saveFeatureState = false;
+        feature = new OpenLayers.Feature.Vector();
+        feature.attributes.fake = "properties";
+        feature.fid = "1000";
+        feature.state = OpenLayers.State.INSERT;
+        res = protocol.freezeFeature(feature);
+        t.eq(res[0], feature.fid,
+             "freezeFeature returns correct fid");
+        t.eq(res[1], protocol.NULL_GEOMETRY,
+             "freezeFeature returns expected null geom string");
+        t.eq(res[2], "{\"fake\":\"properties\"}",
+             "freezeFeature returns correct JSON");
+        t.eq(res[3], protocol.NULL_FEATURE_STATE,
+             "freezeFeature returns expected null feature state string");
+
+        protocol.clear();
+        protocol.destroy();
+     }
+
+     function test_create(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(8);
+
+        var resp;
+        var scope = {"fake": "scope"};
+
+        var options = {
+            callback: function(resp) {
+                t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
+                     "user callback is passed a response");
+                t.eq(resp.requestType, "create",
+                     "user callback is passed correct request type in resp");
+                t.ok(this == scope,
+                     "user callback called with correct scope");
+            },
+            scope: scope
+        };
+
+        // 4 tests
+        var feature = new OpenLayers.Feature.Vector();
+        feature.fid = "1000";
+        feature.attributes.fake = "properties";
+        feature.state = OpenLayers.State.INSERT;
+        resp = protocol.create([feature], options);
+        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
+             "create returns a response");
+
+        // check what we have in the DB
+        // 4 tests
+        resp = protocol.read({"noFeatureStateReset": true});
+        t.eq(resp.features.length, 1,
+             "create inserts feature in the DB");
+        t.eq(resp.features[0].fid, feature.fid,
+             "create inserts feature with correct fid");
+        t.eq(resp.features[0].attributes.fake, feature.attributes.fake,
+             "create inserts feature with correct attributes");
+        t.eq(resp.features[0].state, feature.state,
+             "create inserts feature with correct state");
+
+        protocol.clear();
+        protocol.destroy();
+    }
+
+     function test_createOrUpdate(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(5);
+
+        // 1 test
+        var feature = new OpenLayers.Feature.Vector();
+        feature.fid = "1000";
+        feature.attributes.fake = "properties";
+        feature.state = OpenLayers.State.INSERT;
+        resp = protocol.createOrUpdate([feature]);
+        t.eq(resp.CLASS_NAME, "OpenLayers.Protocol.Response",
+             "createOrUpdate returns a response");
+
+        // check what we have in the DB
+        // 4 tests
+        resp = protocol.read({"noFeatureStateReset": true});
+        t.eq(resp.features.length, 1,
+             "createOrUpdate inserts feature in the DB");
+        t.eq(resp.features[0].fid, feature.fid,
+             "createOrUpdate inserts feature with correct fid");
+        t.eq(resp.features[0].attributes.fake, feature.attributes.fake,
+             "createOrUpdate inserts feature with correct attributes");
+        t.eq(resp.features[0].state, feature.state,
+             "createOrUpdate inserts feature with correct state");
+
+        protocol.clear();
+        protocol.destroy();
+    }
+
+    function test_delete(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(4);
+
+        function createOneAndDeleteOne(fid, deleteOptions) {
+            var feature = new OpenLayers.Feature.Vector();
+            feature.fid = fid;
+            feature.attributes.fake = "properties";
+            feature.state = OpenLayers.State.INSERT;
+            var r = protocol.create([feature]);
+            protocol["delete"](r.reqFeatures, deleteOptions);
+        }
+
+        var resp, fid;
+
+        // 1 test
+        fid = 1000;
+        protocol.saveFeatureState = false;
+        createOneAndDeleteOne(fid)
+        resp = protocol.read();
+        t.eq(resp.features.length, 0,
+             "delete deletes feature if saveFeatureState is false");
+        protocol.clear();
+
+        // 1 test
+        fid = 1000;
+        protocol.saveFeatureState = true;
+        createOneAndDeleteOne(fid);
+        resp = protocol.read();
+        t.eq(resp.features.length, 1,
+             "delete does not delete feature if saveFeatureState is true");
+        protocol.clear();
+
+        // 1 test
+        fid = "1000";
+        protocol.saveFeatureState = true;
+        createOneAndDeleteOne(fid);
+        resp = protocol.read();
+        t.eq(resp.features.length, 1,
+             "delete does not delete feature if saveFeatureState is true");
+        protocol.clear();
+
+        // 1 test
+        fid = protocol.FID_PREFIX + "1000";
+        protocol.saveFeatureState = true;
+        createOneAndDeleteOne(fid, {dontDelete: true});
+        resp = protocol.read();
+        t.eq(resp.features.length, 0,
+             "delete deletes feature if saveFeatureState is true and fid is prefixed");
+        protocol.clear();
+
+        protocol.destroy();
+    }
+
+    function test_callUserCallback(t) {
+        var protocol = new OpenLayers.Protocol.SQL.Gears();
+        if (!protocol.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(6);
+
+        var options, resp;
+        var scope = {'fake': 'scope'};
+
+        // test commit callback
+        // 1 tests
+        options = {
+            'callback': function() {
+                t.ok(this == scope, 'callback called with correct scope');
+            },
+            'scope': scope
+        };
+        resp = {'requestType': 'create', 'last': true};
+        protocol.callUserCallback(options, resp);
+        // 0 test
+        resp = {'requestType': 'create', 'last': false};
+        protocol.callUserCallback(options, resp);
+
+        // test create callback
+        // 2 tests
+        options = {
+            'create': {
+                'callback': function(r) {
+                    t.ok(this == scope, 'callback called with correct scope');
+                    t.ok(r == resp, 'callback called with correct response');
+                },
+                'scope': scope
+            }
+        };
+        resp = {'requestType': 'create'};
+        protocol.callUserCallback(options, resp);
+
+        // test with both callbacks set
+        // 3 tests
+        options = {
+            'create': {
+                'callback': function(r) {
+                    t.ok(this == scope, 'callback called with correct scope');
+                    t.ok(r == resp, 'callback called with correct response');
+                },
+                'scope': scope
+            },
+            'callback': function() {
+                t.ok(this == scope, 'callback called with correct scope');
+            },
+            'scope': scope
+        };
+        resp = {'requestType': 'create', 'last': true};
+        protocol.callUserCallback(options, resp);
+
+        // no callback set
+        // 0 test
+        options = {
+            'delete': {
+                'callback': function(resp) {
+                    t.fail('callback should not get called');
+                }
+            }
+        };
+        resp = {'requestType': 'create'};
+        protocol.callUserCallback(options, resp);
+
+        // cleanup
+        protocol.destroy();
+    }
+
+  </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/deprecated/Renderer/SVG2.html b/tests/deprecated/Renderer/SVG2.html
new file mode 100644
index 0000000..c23b95c
--- /dev/null
+++ b/tests/deprecated/Renderer/SVG2.html
@@ -0,0 +1,399 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+
+    var geometry = null, node = null;
+    
+    function test_SVG_constructor(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(1);
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        t.ok(r instanceof OpenLayers.Renderer.SVG2, "new OpenLayers.Renderer.SVG2 returns SVG object" );
+    }
+    
+    function test_SVG_destroy(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(1);
+        
+        var g_Destroy = false;
+        
+        OpenLayers.Renderer.Elements.prototype._destroy = 
+            OpenLayers.Renderer.Elements.prototype.destroy;
+            
+        OpenLayers.Renderer.prototype.destroy = function() {
+            g_Destroy = true;
+        }
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        r.destroy();
+        
+        t.eq(g_Destroy, true, "OpenLayers.Renderer.Elements.destroy() called");
+        
+        OpenLayers.Renderer.prototype.destroy = 
+            OpenLayers.Renderer.prototype._destroy;
+    }
+    
+    function test_SVG_updateDimensions(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(7);
+        
+        OpenLayers.Renderer.SVG2.prototype._setExtent =
+            OpenLayers.Renderer.SVG2.prototype.setExtent;
+        
+        var g_SetExtent = false;
+        OpenLayers.Renderer.SVG2.prototype.setExtent = function() {
+            g_SetExtent = true;
+            OpenLayers.Renderer.SVG2.prototype._setExtent.apply(this, arguments);
+        }
+                
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        var extent = new OpenLayers.Bounds(1,2,3,4);
+        r.map = {
+            getResolution: function() {
+                return 0.5;
+            },
+            getExtent: function() {
+                return extent;
+            },
+            getMaxExtent: function() {
+                return extent;
+            }
+        }
+        r.updateDimensions();
+        
+        t.eq(g_SetExtent, true, "Elements.setExtent() called");
+        
+        t.eq(r.extent.toString(), extent.scale(3).toString(), "renderer's extent is correct");
+        t.eq(r.rendererRoot.getAttributeNS(null, "width"), "12", "width is correct");
+        t.eq(r.rendererRoot.getAttributeNS(null, "height"), "12", "height is correct");
+        t.eq(r.rendererRoot.getAttributeNS(null, "viewBox"), "-1 -6 6 6", "rendererRoot viewBox is correct");
+        
+        // test extent changes
+        extent = new OpenLayers.Bounds(2,3,5,6);
+        r.updateDimensions();
+        t.eq(r.extent.toString(), extent.scale(3).toString(), "renderer's extent changed after updateDimensions");
+        t.eq(r.rendererRoot.getAttributeNS(null, "viewBox"), "-1 -9 9 9", "rendererRoot viewBox is correct after a new setExtent");
+
+        OpenLayers.Renderer.SVG2.prototype.setExtent =
+            OpenLayers.Renderer.SVG2.prototype._setExtent;
+    }
+    
+    function test_SVG_drawpoint(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+    
+        t.plan(1);
+
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        
+        var properDraw = false;
+        var g_Radius = null;
+        r.drawCircle = function(n, g, r) {
+            properDraw = true;
+            g_Radius = 1;
+        }
+        r.drawPoint();
+        
+        t.ok(properDraw && g_Radius == 1, "drawPoint called drawCircle with radius set to 1");
+    }
+    
+    function test_SVG_drawcircle(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(5);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        r.resolution = 0.5;
+        r.left = 0;
+        r.top = 0;
+        
+        var node = document.createElement('div');
+        
+        var geometry = {
+            x: 1,
+            y: 2
+        }
+        
+        r.drawCircle(node, geometry, 3);
+        
+        t.eq(node.getAttributeNS(null, 'cx'), '1', "cx is correct");
+        t.eq(node.getAttributeNS(null, 'cy'), '-2', "cy is correct");
+        t.eq(node._radius, 3, "radius preset is correct");
+       
+        // #1274: out of bound node fails when first added
+        var geometry = {
+            x: 10000000,
+            y: 200000000,
+            CLASS_NAME: "OpenLayers.Geometry.Point",
+            id: "foo",
+            getBounds: function() {return {bottom: 0}}
+        }
+        node.id = geometry.id;
+        r.root.appendChild(node);
+
+        var drawCircleCalled = false;
+        r.drawCircle = function() {
+            drawCircleCalled = true;
+            return OpenLayers.Renderer.SVG2.prototype.drawCircle.apply(r, arguments);
+        }
+        
+        r.drawGeometry(geometry, {pointRadius: 3}, "blah_4000");
+        t.eq(drawCircleCalled, true, "drawCircle called on drawGeometry for a point geometry.")
+        t.ok(node.parentNode != r.root, "circle will not be drawn when coordinates are outside the valid range");
+    }
+    
+    function test_SVG_drawlinestring(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(2);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        
+        var node = document.createElement('div');
+        
+        var geometry = {
+            components: "foo"
+        }
+        g_GetString = false;
+        g_Components = null;
+        r.getComponentsString = function(c) {
+            g_GetString = true;
+            g_Components = c;
+            return "bar";
+        }
+        
+        r.drawLineString(node, geometry);
+        
+        t.ok(g_GetString && g_Components == "foo", "getComponentString is called with valid arguments");
+        t.eq(node.getAttributeNS(null, "points"), "bar", "points attribute is correct");
+    }
+    
+    function test_SVG_drawlinearring(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(2);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        
+        var node = document.createElement('div');
+        
+        var geometry = {
+            components: "foo"
+        }
+        g_GetString = false;
+        g_Components = null;
+        r.getComponentsString = function(c) {
+            g_GetString = true;
+            g_Components = c;
+            return "bar";
+        }
+        
+        r.drawLinearRing(node, geometry);
+        
+        t.ok(g_GetString, "getComponentString is called with valid arguments");
+        t.eq(node.getAttributeNS(null, "points"), "bar", "points attribute is correct");
+    }
+
+    function test_SVG_drawpolygon(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(3);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        
+        var node = document.createElement('div');
+        
+        var linearRings = [{
+            components: ["foo"]
+        },{
+            components: ["bar"]
+        }]
+        
+        var geometry = {
+            components: linearRings
+        }
+        g_GetString = false;
+        r.getShortString = function(c) {
+            g_GetString = true;
+            return c;
+        }
+        
+        r.drawPolygon(node, geometry);
+        
+        t.ok(g_GetString, "getShortString is called");
+        t.eq(node.getAttributeNS(null, "d"), "M foo M bar z", "d attribute is correctly set");
+        t.eq(node.getAttributeNS(null, "fill-rule"), "evenodd", "fill-rule attribute is correctly set");
+    }
+
+    function test_SVG_drawrectangle(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(4);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        r.resolution = 0.5;
+        r.left = 0;
+        r.top = 0;
+        
+        var node = document.createElement('div');
+        
+        var geometry = {
+            x: 1,
+            y: 2,
+            width: 3,
+            height: 4
+        }
+        
+        r.drawRectangle(node, geometry);
+        
+        t.eq(node.getAttributeNS(null, "x"), "1", "x attribute is correctly set");
+        t.eq(node.getAttributeNS(null, "y"), "-2", "y attribute is correctly set");
+        t.eq(node.getAttributeNS(null, "width"), "3", "width attribute is correctly set");
+        t.eq(node.getAttributeNS(null, "height"), "4", "height attribute is correctly set");
+    }
+    
+    function test_SVG_getcomponentsstring(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(1);
+        
+        var components = ['foo', 'bar'];
+        
+        OpenLayers.Renderer.SVG2.prototype._getShortString = 
+            OpenLayers.Renderer.SVG2.prototype.getShortString;
+            
+        OpenLayers.Renderer.SVG2.prototype.getShortString = function(p) {
+            return p;
+        };
+        
+        var string = OpenLayers.Renderer.SVG2.prototype.getComponentsString(components);
+        t.eq(string, "foo,bar", "returned string is correct");
+        
+        OpenLayers.Renderer.SVG2.prototype.getShortString = 
+            OpenLayers.Renderer.SVG2.prototype._getShortString;
+    }
+    
+    
+    
+    function test_SVG_getshortstring(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+        
+        t.plan(1);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+        r.resolution = 0.5;
+        r.left = 0;
+        r.top = 0;
+        
+        var point = {
+            x: 1,
+            y: 2
+        };
+        
+        var string = r.getShortString(point);
+        t.eq(string, "1,-2", "returned string is correct");
+    }
+    
+    function test_svg_getnodetype(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(1);
+         
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+
+        var g = {CLASS_NAME: "OpenLayers.Geometry.Point"}
+        var s = {graphicName: "square"};
+        
+        t.eq(r.getNodeType(g, s), "svg", "Correct node type for well known symbols");
+    }
+        
+    function test_svg_importsymbol(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(2);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+
+        r.importSymbol("square");
+
+        var polygon = document.getElementById(r.container.id + "_defs").firstChild.firstChild;
+        
+        var pass = false;
+        for (var i = 0; i < polygon.points.numberOfItems; i++) {
+            var p = polygon.points.getItem(i);
+            pass = p.x === OpenLayers.Renderer.symbol.square[2*i] && 
+                   p.y === OpenLayers.Renderer.symbol.square[2*i+1];
+            if (!pass) {
+                break;
+            }
+        }
+        t.ok(pass, "Square symbol rendered correctly");
+        t.ok(r.symbolMetrics["-square"], "Symbol metrics cached correctly.");
+    }
+        
+    function test_svg_dashstyle(t) {
+        if (!OpenLayers.Renderer.SVG2.prototype.supported()) {
+            t.plan(0);
+            return;
+        }
+
+        t.plan(5);
+        
+        var r = new OpenLayers.Renderer.SVG2(document.body);
+
+        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "dot"}, 1), "1,4", "dot dasharray created correctly");
+        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "dash"}, 1), "4,4", "dash dasharray created correctly");
+        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "longdash"}, 1), "8,4", "longdash dasharray created correctly");
+        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "dashdot"}, 1), "4,4,1,4", "dashdot dasharray created correctly");
+        t.eq(r.dashStyle({strokeWidth: 1, strokeDashstyle: "longdashdot"}, 1), "8,4,1,4", "dashdot dasharray created correctly");
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>
diff --git a/tests/deprecated/Tile/WFS.html b/tests/deprecated/Tile/WFS.html
new file mode 100644
index 0000000..3dee1c7
--- /dev/null
+++ b/tests/deprecated/Tile/WFS.html
@@ -0,0 +1,215 @@
+<html>
+<head>
+  <script src="../../OLLoader.js"></script>
+  <script src="../../../lib/deprecated.js"></script>
+  <script type="text/javascript">
+    var tile; 
+
+    var map, layer;
+    function setUp() {
+        map = new OpenLayers.Map("map");
+        layer = new OpenLayers.Layer(null, {
+            isBaseLayer: true
+        });
+        map.addLayer(layer)
+        map.setCenter(new OpenLayers.LonLat(0, 0));
+    }
+    
+    function tearDown() {
+        map.destroy();
+        map = null;
+        layer = null;
+    }
+    
+    function test_Tile_WFS_constructor (t) {
+        t.plan( 8 );
+        setUp();
+     
+        var position = new OpenLayers.Pixel(10,20);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        var url = "bobob";
+        var size = new OpenLayers.Size(5,6);
+        
+        tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size);
+
+        t.ok( tile instanceof OpenLayers.Tile.WFS, "new OpenLayers.Tile.WFS returns Tile.WFS object" );
+        t.ok( tile.layer === layer, "tile.layer set correctly");
+        t.ok( tile.position.equals(position), "tile.position set correctly");
+        t.ok( tile.bounds.equals(bounds), "tile.bounds set correctly");
+        t.eq( tile.url, url, "tile.url set correctly");        
+        t.ok( tile.size.equals(size), "tile.size is set correctly" );
+
+        t.ok( tile.id != null, "tile is given an id");
+        t.ok( tile.events != null, "tile's events intitialized");
+        
+        tearDown();
+    }
+
+    function test_Tile_WFS_requestSuccess(t) {
+        t.plan(2);
+        setUp();
+
+        var tile = {
+            'request': {}
+        };
+            
+        OpenLayers.Tile.WFS.prototype.requestSuccess.apply(tile, []);
+        
+        t.ok(tile.request == null, "request property on tile set to null");
+
+        var position = new OpenLayers.Pixel(10,20);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        var url = "bobob";
+        var size = new OpenLayers.Size(5,6);
+        
+        tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size);
+        tile.destroy();
+        tile.requestSuccess({'requestText': '<xml><foo /></xml>'});
+        t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile.");
+        
+        tearDown();
+    }
+    
+    function test_Tile_WFS_loadFeaturesForRegion(t) {
+        t.plan(9);
+        
+        var tile = {
+            'url': {}
+        };
+
+        var g_Success = {};        
+
+        var _get = OpenLayers.Request.GET;
+        OpenLayers.Request.GET = function(config) {
+            t.ok(config.url == tile.url, "tile's url correctly passed");
+            t.ok(config.params == null, "null params");
+            t.ok(config.scope == tile, "tile passed as scope");
+            t.ok(config.success == g_Success, "success passed");
+        };
+        
+      //no running request -- 4 tests
+        OpenLayers.Tile.WFS.prototype.loadFeaturesForRegion.apply(tile, [g_Success]);
+
+      //running request (cancelled) -- 4 tests + 1 test (for request abort)
+        tile.request = {
+            'abort': function() {
+                    t.ok(true, "request aborted");
+            }
+        };
+        OpenLayers.Tile.WFS.prototype.loadFeaturesForRegion.apply(tile, [g_Success]);
+
+        OpenLayers.Request.GET = _get;
+    }
+    
+    function test_Tile_WFS_destroy(t) {
+        t.plan(9);
+        setUp();
+
+        var position = new OpenLayers.Pixel(10,20);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        var url = "bobob";
+        var size = new OpenLayers.Size(5,6);
+        
+        tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size);
+        tile.events.destroy = function() {
+            t.ok(true, "tile events destroy() called");
+        };
+
+ 
+        var _gAbort = false; 
+        tile.request = { 
+            abort: function() { 
+                _gAbort = true; 
+            } 
+        } 
+
+        
+        tile.destroy();
+
+        t.ok(tile.layer == null, "tile.layer set to null");
+        t.ok(tile.bounds == null, "tile.bounds set to null");
+        t.ok(tile.size == null, "tile.size set to null");
+        t.ok(tile.position == null, "tile.position set to null");
+        t.ok(_gAbort, "request transport is aborted");
+        t.ok(tile.request == null, "tile.request set to null");
+        
+        t.ok(tile.events == null, "tile.events set to null");
+        
+        tile.requestSuccess({'requestText': '<xml><foo /></xml>'});
+        t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile.");
+        
+        tearDown();
+    }
+    function test_nonxml_format(t) {
+        t.plan(2);
+        
+        setUp();
+        
+        var data = '{"type":"Feature", "id":"OpenLayers.Feature.Vector_135", "properties":{}, "geometry":{"type":"Point", "coordinates":[118.125, -18.6328125]}, "crs":{"type":"OGC", "properties":{"urn":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}'
+        var position = new OpenLayers.Pixel(10,20);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        var url = "bobob";
+        var size = new OpenLayers.Size(5,6);
+        
+        var log = [];
+        
+        var l = new OpenLayers.Layer(null, {
+            vectorMode: true,
+            formatObject: new OpenLayers.Format.GeoJSON(), 
+            addFeatures: function(features) { 
+                log.push(features);
+            }
+        })
+        map.addLayer(l);
+
+        var tile = new OpenLayers.Tile.WFS(l, position, bounds, url, size);
+
+        tile.requestSuccess({responseText: data});
+
+        t.eq(log.length, 1, "one call logged")
+        t.eq(log[0] && log[0].length, 1, "GeoJSON format returned a single feature which was added.");
+        
+        tearDown();
+    }  
+     
+    function test_xml_string_and_dom(t) {
+        t.plan(4);
+        setUp();
+        
+        var data = '<?xml version="1.0" encoding="ISO-8859-1" ?><wfs:FeatureCollection   xmlns:bsc="http://www.bsc-eoc.org/bsc"   xmlns:wfs="http://www.opengis.net/wfs"   xmlns:gml="http://www.opengis.net/gml"   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.opengeospatial.net//wfs/1.0.0/WFS-basic.xsd                        http://www.bsc-eoc.org/bsc http://www.bsc-eoc.org/cgi- [...]
+        var position = new OpenLayers.Pixel(10,20);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        var url = "bobob";
+        var size = new OpenLayers.Size(5,6);
+        
+        var l = new OpenLayers.Layer();
+        map.addLayer(l);
+
+        var tile = new OpenLayers.Tile.WFS(l, position, bounds, url, size);
+        
+        var log = [];
+        tile.addResults = function(results) {
+            log.push(results);
+        } 
+        tile.requestSuccess({responseText: data});
+        
+        t.eq(log.length, 1, "first call logged");
+        t.eq(log[0] && log[0].length, 1, "results count is correct when passing in XML as a string into non-vectormode");
+        
+        log.length = 0;
+        tile.addResults = function(results) {
+            log.push(results);
+        } 
+        tile.requestSuccess({responseXML: OpenLayers.Format.XML.prototype.read(data)}); 
+
+        t.eq(log.length, 1, "second call logged");
+        t.eq(log[0] && log[0].length, 1, "results count is correct when passing in XML as DOM into non-vectormode");
+
+        tearDown();
+    }         
+  </script>
+</head>
+<body>
+</body>
+</html>
+
diff --git a/tests/geom_eq.js b/tests/geom_eq.js
deleted file mode 100644
index 26f3a95..0000000
--- a/tests/geom_eq.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * File: xml_eq.js
- * Adds a xml_eq method to AnotherWay test objects.
- *
- */
-
-(function() {
-    
-    /**
-     * Function assertEqual
-     * Test two objects for equivalence (based on ==).  Throw an exception
-     *     if not equivalent.
-     * 
-     * Parameters:
-     * got - {Object}
-     * expected - {Object}
-     * msg - {String} The message to be thrown.  This message will be appended
-     *     with ": got {got} but expected {expected}" where got and expected are
-     *     replaced with string representations of the above arguments.
-     */
-    function assertEqual(got, expected, msg) {
-        if(got === undefined) {
-            got = "undefined";
-        } else if (got === null) {
-            got = "null";
-        }
-        if(expected === undefined) {
-            expected = "undefined";
-        } else if (expected === null) {
-            expected = "null";
-        }
-        if(got != expected) {
-            throw msg + ": got '" + got + "' but expected '" + expected + "'";
-        }
-    }
-    
-    /**
-     * Function assertGeometryEqual
-     * Test two geometries for equivalence.  Geometries are considered
-     *     equivalent if they are of the same class, and given component
-     *     geometries, if all components are equivalent. Throws a message as
-     *     exception if not equivalent.
-     * 
-     * Parameters:
-     * got - {OpenLayers.Geometry}
-     * expected - {OpenLayers.Geometry}
-     * options - {Object} Optional object for configuring test options.
-     */
-    function assertGeometryEqual(got, expected, options) {
-        
-        var OpenLayers = Test.AnotherWay._g_test_iframe.OpenLayers;
-
-        // compare types
-        assertEqual(typeof got, typeof expected, "Object types mismatch");
-        
-        // compare classes
-        assertEqual(got.CLASS_NAME, expected.CLASS_NAME, "Object class mismatch");
-        
-        if(got instanceof OpenLayers.Geometry.Point) {
-            // compare points
-            assertEqual(got.x, expected.x, "x mismatch");
-            assertEqual(got.y, expected.y, "y mismatch");
-            assertEqual(got.z, expected.z, "z mismatch");
-        } else {
-            // compare components
-            assertEqual(
-                got.components.length, expected.components.length,
-                "Component length mismatch for " + got.CLASS_NAME
-            );
-            for(var i=0; i<got.components.length; ++i) {
-                try {
-                    assertGeometryEqual(
-                        got.components[i], expected.components[i], options
-                    );
-                } catch(err) {
-                    throw "Bad component " + i + " for " + got.CLASS_NAME + ": " + err;
-                }
-            }
-        }
-        return true;
-    }
-    
-    /**
-     * Function: Test.AnotherWay._test_object_t.geom_eq
-     * Test if two geometry objects are equivalent.  Tests for same geometry
-     *     class, same number of components (if any), equivalent component
-     *     geometries, and same coordinates.
-     *
-     * (code)
-     * t.geom_eq(got, expected, message);
-     * (end)
-     * 
-     * Parameters:
-     * got - {OpenLayers.Geometry} Any geometry instance.
-     * expected - {OpenLayers.Geometry} The expected geometry.
-     * msg - {String} A message to print with test output.
-     * options - {Object} Optional object for configuring test options.
-     */
-    var proto = Test.AnotherWay._test_object_t.prototype;
-    proto.geom_eq = function(got, expected, msg, options) {        
-        // test geometries for equivalence
-        try {
-            assertGeometryEqual(got, expected, options);
-            this.ok(true, msg);
-        } catch(err) {
-            this.fail(msg + ": " + err);
-        }
-    }
-    
-})();
\ No newline at end of file
diff --git a/tests/list-tests.html b/tests/list-tests.html
index 4983e0b..283bc69 100644
--- a/tests/list-tests.html
+++ b/tests/list-tests.html
@@ -1,5 +1,5 @@
 <ul id="testlist">
-    <li>Ajax.html</li>
+    <li>Animation.html</li>
     <li>BaseTypes.html</li>
     <li>BaseTypes/Bounds.html</li>
     <li>BaseTypes/Class.html</li>
@@ -13,6 +13,8 @@
     <li>Control/Attribution.html</li>
     <li>Control/ArgParser.html</li>
     <li>Control/Button.html</li>
+    <li>Control/CacheRead.html</li>
+    <li>Control/CacheWrite.html</li>
     <li>Control/DragFeature.html</li>
     <li>Control/DragPan.html</li>
     <li>Control/DrawFeature.html</li>
@@ -25,7 +27,6 @@
     <li>Control/Measure.html</li>
     <li>Control/ModifyFeature.html</li>
     <li>Control/MousePosition.html</li>
-    <li>Control/MouseToolbar.html</li>
     <li>Control/Navigation.html</li>
     <li>Control/NavigationHistory.html</li>
     <li>Control/NavToolbar.html</li>
@@ -42,11 +43,14 @@
     <li>Control/Split.html</li>
     <li>Control/TouchNavigation.html</li>
     <li>Control/TransformFeature.html</li>
+    <li>Control/UTFGrid.html</li>
     <li>Control/WMSGetFeatureInfo.html</li>
     <li>Control/WMTSGetFeatureInfo.html</li>
     <li>Control/PanPanel.html</li>
     <li>Control/SLDSelect.html</li>
+    <li>Control/Zoom.html</li>
     <li>Events.html</li>
+    <li>Events/buttonclick.html</li>
     <li>Extras.html</li>
     <li>Feature.html</li>
     <li>Feature/Vector.html</li>
@@ -73,6 +77,7 @@
     <li>Format/Text.html</li>
     <li>Format/SLD.html</li>
     <li>Format/SLD/v1_0_0.html</li>
+    <li>Format/SLD/v1_0_0_GeoServer.html</li>
     <li>Format/Filter.html</li>
     <li>Format/Filter/v1.html</li>
     <li>Format/Filter/v1_0_0.html</li>
@@ -125,8 +130,6 @@
     <li>Geometry/MultiPolygon.html</li>
     <li>Geometry/Point.html</li>
     <li>Geometry/Polygon.html</li>
-    <li>Geometry/Rectangle.html</li>
-    <li>Geometry/Surface.html</li>
     <li>Handler.html</li>
     <li>Handler/Box.html</li>
     <li>Handler/Click.html</li>
@@ -150,7 +153,6 @@
     <li>Layer/EventPane.html</li>
     <li>Layer/FixedZoomLevels.html</li>
     <li>Layer/GeoRSS.html</li>
-    <li>Layer/GML.html</li>
     <li>Layer/Google.html</li>
     <li>Layer/Google/v3.html</li>
     <li>Layer/Grid.html</li>
@@ -160,22 +162,20 @@
     <li>Layer/MapGuide.html</li>
     <li>Layer/MapServer.html</li>
     <li>Layer/Markers.html</li>
-    <li>Layer/MultiMap.html</li>
     <li>Layer/PointGrid.html</li>
     <li>Layer/PointTrack.html</li>
     <li>Layer/SphericalMercator.html</li>
     <li>Layer/Text.html</li>
     <li>Layer/TileCache.html</li>
     <li>Layer/TMS.html</li>
+    <li>Layer/UTFGrid.html</li>
     <li>Layer/Vector.html</li>
     <li>Layer/Vector/RootContainer.html</li>
-    <li>Layer/WFS.html</li>
     <li>Layer/WMS.html</li>
-    <li>Layer/WMS/Post.html</li>
     <li>Layer/WMTS.html</li>
     <li>Layer/WrapDateLine.html</li>
     <li>Layer/XYZ.html</li>
-    <li>Layer/Yahoo.html</li>
+    <li>Layer/OSM.html</li>
     <li>Map.html</li>
     <li>Marker.html</li>
     <li>Marker/Box.html</li>
@@ -184,6 +184,9 @@
     <li>OpenLayers3.html</li>
     <li>OpenLayers4.html</li>
     <li>OpenLayersJsFiles.html</li>
+    <li>SingleFile1.html</html>
+    <li>SingleFile2.html</html>
+    <li>SingleFile3.html</html>
     <li>Popup.html</li>
     <li>Popup/Anchored.html</li>
     <li>Popup/AnchoredBubble.html</li>
@@ -192,15 +195,13 @@
     <li>Protocol.html</li>
     <li>Protocol/HTTP.html</li>
     <li>Protocol/Script.html</li>
-    <li>Protocol/SQL.html</li>
-    <li>Protocol/SQL/Gears.html</li>
     <li>Protocol/WFS.html</li>
+    <li>Protocol/CSW.html</li>
     <li>Protocol/SOS.html</li>
     <li>Renderer.html</li>
     <li>Renderer/Canvas.html</li>
     <li>Renderer/Elements.html</li>
     <li>Renderer/SVG.html</li>
-    <li>Renderer/SVG2.html</li>
     <li>Renderer/VML.html</li>
     <li>Request.html</li>
     <li>Request/XMLHttpRequest.html</li>
@@ -225,8 +226,24 @@
     <li>Tile.html</li>
     <li>Tile/Image.html</li>
     <li>Tile/Image/IFrame.html</li>
-    <li>Tile/WFS.html</li>
+    <li>Tile/UTFGrid.html</li>
     <li>Tween.html</li>
     <li>Kinetic.html</li>
     <li>Util.html</li>
+    <li>deprecated/Ajax.html</li>
+    <li>deprecated/BaseTypes/Class.html</li>
+    <li>deprecated/BaseTypes/Element.html</li>
+    <li>deprecated/Control/MouseToolbar.html</li>
+    <li>deprecated/Geometry/Rectangle.html</li>
+    <li>deprecated/Layer/GML.html</li>
+    <li>deprecated/Layer/MapServer.html</li>
+    <li>deprecated/Layer/MapServer/Untiled.html</li>
+    <li>deprecated/Layer/WFS.html</li>
+    <li>deprecated/Layer/WMS.html</li>
+    <li>deprecated/Layer/WMS/Post.html</li>
+    <li>deprecated/Protocol/SQL.html</li>
+    <li>deprecated/Protocol/SQL/Gears.html</li>
+    <li>deprecated/Renderer/SVG2.html</li>
+    <li>deprecated/Layer/Yahoo.html</li>
+    <li>deprecated/Tile/WFS.html</li>
 </ul>
diff --git a/tests/manual/alloverlays-mixed.html b/tests/manual/alloverlays-mixed.html
index 4b64f11..2f8f959 100644
--- a/tests/manual/alloverlays-mixed.html
+++ b/tests/manual/alloverlays-mixed.html
@@ -8,7 +8,7 @@
     <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="../../examples/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?sensor=false&v=3.6"></script>
     <script src="../../lib/OpenLayers.js"></script>
     <script type="text/javascript">
         var map;
diff --git a/tests/manual/big-georss.html b/tests/manual/big-georss.html
index 6be290c..7e2f2b5 100644
--- a/tests/manual/big-georss.html
+++ b/tests/manual/big-georss.html
@@ -16,7 +16,13 @@
                     "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             map.zoomToExtent(new OpenLayers.Bounds(-94.617035,33.010025,-89.645401,36.492752));
-            map.addLayer(new OpenLayers.Layer.GML("GML", "arkansas.rss", {format: OpenLayers.Format.GeoRSS}));
+            map.addLayer(new OpenLayers.Layer.Vector("arkansas", {
+                protocol: new OpenLayers.Protocol.HTTP({
+                    url: "arkansas.rss",
+                    format: new OpenLayers.Format.GeoRSS()
+                }),
+                strategies: [new OpenLayers.Strategy.Fixed()]
+            }));
         }
     </script>
   </head>
diff --git a/tests/manual/dateline-sketch.html b/tests/manual/dateline-sketch.html
new file mode 100644
index 0000000..1be1f36
--- /dev/null
+++ b/tests/manual/dateline-sketch.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers: Sketch handlers crossing the dateline</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">
+        #map {
+            height: 512px;
+        }
+    </style>
+
+    <script src="../../lib/OpenLayers.js"></script>
+  </head>
+  <body>
+    <h1 id="title">OpenLayers sketch handlers crossing the dateline example</h1>
+
+    <div id="tags">
+        international date line, dateline, sketch
+    </div>
+    <p id="shortdesc">
+        Start digitizing a polygon or line
+        on one side of the international dateline, and then cross the dateline
+        whilst digitizing. The feature should behave like digitizing on any
+        other location.
+    </p>
+    <div id="map" class="smallmap"></div>
+
+    <div id="docs">
+    </div>
+        <script type="text/javascript">
+
+        var map = new OpenLayers.Map('map');
+
+        var base = new OpenLayers.Layer.WMS("marble", 
+            "http://demo.opengeo.org/geoserver/wms",
+            {layers: "topp:naturalearth"},
+            {wrapDateLine: true}
+        );
+        
+        // allow testing of specific renderers via "?renderer=Canvas", etc
+        var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+        renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
+        var vector = new OpenLayers.Layer.Vector("Editable Vectors", {renderers: renderer});
+
+        map.addLayers([base, vector]);
+        
+        var wkt = new OpenLayers.Format.WKT();
+        var f = wkt.read("POLYGON((210.8828125 39.7265625,151.8203125 36.2109375,152.171875 -9.4921875,219.3203125 -10.546875,210.8828125 39.7265625))");
+        
+        var f2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(-190, 0));
+        
+        vector.addFeatures([f, f2]);
+        
+        map.addControl(new OpenLayers.Control.EditingToolbar(vector));
+
+        map.setCenter(new OpenLayers.LonLat(-179, 0), 2);
+
+        </script>
+
+  </body>
+</html>
diff --git a/tests/manual/dateline-smallextent.html b/tests/manual/dateline-smallextent.html
new file mode 100644
index 0000000..1d05e84
--- /dev/null
+++ b/tests/manual/dateline-smallextent.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <title>OpenLayers: Overlay layer extents crossing the dateline</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">
+        #map {
+            height: 512px;
+        }
+    </style>
+
+    <script src="../../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+
+// make map available for easy debugging
+var map;
+
+function init(){
+    map = new OpenLayers.Map('map');
+
+    var base = new OpenLayers.Layer.WMS("marble", 
+        "http://demo.opengeo.org/geoserver/wms",
+        {layers: "topp:naturalearth"},
+        {wrapDateLine: true}
+    );
+    var extent = new OpenLayers.Bounds(142.3828125,-70.902270266175,233.6171875,-12.039326531729);
+    var wms = new OpenLayers.Layer.WMS( "world",
+        "http://demo.opengeo.org/geoserver/wms",
+        {layers: 'world', transparent: true},
+        {maxExtent: extent}
+    );
+    
+    var vector = new OpenLayers.Layer.Vector();
+    vector.addFeatures([
+        new OpenLayers.Feature.Vector(extent.toGeometry())
+    ]);
+
+    map.addLayers([base, wms, vector]);
+
+    map.addControl(new OpenLayers.Control.LayerSwitcher());
+    map.zoomToExtent(extent);
+}
+
+    </script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">OpenLayers overlays crossing the dateline test</h1>
+
+    <p id="shortdesc">
+        The overlay has an extent smaller than the world extent, but exceeds
+        the world extent. The base layer is configured with wrapDateLine set to
+        true. The area inside the orange rectangle should always contain tiles
+        from the world layer, regardless of the zoom level.
+    </p>
+    <div id="map" class="smallmap"></div>
+  </body>
+</html>
diff --git a/tests/manual/google-fullscreen-overlay.html b/tests/manual/google-fullscreen-overlay.html
new file mode 100644
index 0000000..80a8fd4
--- /dev/null
+++ b/tests/manual/google-fullscreen-overlay.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Google v3 with Overlay 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">
+        html, body, #map {
+            width: 100%;
+            height: 100%;
+            margin: 0;
+        }
+        #text {
+            position: absolute;
+            top: 1em;
+            right: 1em;
+            width: 512px;
+            z-index: 20000;
+            background-color: white;
+            padding: 0 0.5em 0.5em 0.5em;
+        }
+    </style>
+    <script src="http://maps.google.com/maps/api/js?v=3.6&sensor=false"></script>
+    <script src="../../lib/OpenLayers.js"></script>
+  </head>
+  <body>
+    <div id="map"></div>
+      <div id="text">
+          <h1 id="title">Google v3 with Overlay Test</h1>
+
+        <div id="docs">
+            <p>This test shows that the Google layer and overlays are not in sync while dragging or zooming.</p>
+        </div>
+    </div>
+    <script type="text/javascript">
+        var options = {
+            projection: new OpenLayers.Projection("EPSG:900913"),
+            units: "m",
+            maxResolution: 156543.0339,
+            maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508)
+        };
+        var map = new OpenLayers.Map('map', options);
+        var gmap = new OpenLayers.Layer.Google(
+            "Google Streets", {sphericalMercator: true}
+        );
+        var states = new OpenLayers.Layer.WMS(
+            "USA States", "http://demo.opengeo.org/geoserver/wms",
+            {layers: "topp:states", transparent: true}
+        );
+        map.addLayers([gmap, states]);
+        map.setCenter(new OpenLayers.LonLat(-10028537.429619, 4598451.0222853), 5);
+    </script>
+  </body>
+</html>
diff --git a/tests/manual/google-tilt.html b/tests/manual/google-tilt.html
new file mode 100644
index 0000000..f89e560
--- /dev/null
+++ b/tests/manual/google-tilt.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+        <title>OpenLayers Google (v3) Layer Example</title>
+        <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="../../examples/style.css" type="text/css">
+        <script src="http://maps.google.com/maps/api/js?v=3.6&sensor=false"></script>
+        <script src="../../lib/OpenLayers.js"></script>
+    </head>
+    <body onload="init()">
+        <h1 id="title">Google (v3) Unexpected Tilt Test</h1>
+        <div id="map" class="smallmap"></div>
+        <div id="docs">
+            <p>
+                OpenLayers uses the disableDefaultUI option of the GMaps API.
+                Despite that, the tilt feature is active. To see it, zoom in
+                once and see the buildings from a 45° angle instead of from the
+                top as you would expect from aerial imagery.
+            </p>
+        </div>
+        <script>
+            var map = new OpenLayers.Map('map');
+
+            var ghyb = new OpenLayers.Layer.Google(
+                "Google Hybrid",
+                {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20}
+            );
+
+            map.addLayers([ghyb]);
+
+            map.setCenter(new OpenLayers.LonLat(-13635213, 4544641), 17);
+        </script>
+    </body>
+</html>
diff --git a/tests/manual/google-v3-resize.html b/tests/manual/google-v3-resize.html
index fb6955b..6949ddc 100644
--- a/tests/manual/google-v3-resize.html
+++ b/tests/manual/google-v3-resize.html
@@ -3,7 +3,7 @@
     <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="http://maps.google.com/maps/api/js?sensor=false&v=3.6"></script>
     <script src="../../lib/OpenLayers.js"></script>
     <script type="text/javascript">
         var map;
diff --git a/tests/manual/loadend.html b/tests/manual/loadend.html
new file mode 100644
index 0000000..0536b75
--- /dev/null
+++ b/tests/manual/loadend.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <link rel="stylesheet" href="../../theme/default/style.css" type="text/css">
+    <link rel="stylesheet" href="../../examples/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;
+
+        var numLoadingLayers = 0;
+
+        function init(){
+            map = new OpenLayers.Map( 'map' );
+            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'});
+
+            layer.events.register('loadstart', this, onloadstart);
+            layer.events.register('loadend', this, onloadend);
+
+            map.addLayer(layer);
+
+            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
+        }
+
+        function log(msg) {
+            document.getElementById("output").innerHTML += msg + "<br />";
+        }
+
+        function onloadstart(evt) {
+            numLoadingLayers++;
+            var msg = ['loadstart', '# layers loading:', numLoadingLayers].join(' ');
+            log (msg);
+        };
+
+        function onloadend(evt) {
+            numLoadingLayers--;
+            var msg = ['loadend  ', '# layers loading:', numLoadingLayers].join(' ');
+            log (msg);
+        };
+
+    </script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">WMS loadstart/loadend events</h1>
+
+    <div id="tags">
+        wms, layer, singletile
+    </div>
+    <p id="shortdesc">
+        Shows the loadstart and loadend events of a WMS layer
+    </p>
+
+    <div id="map" class="smallmap"></div>
+   
+    <div id="docs">
+        <p>
+          This example is helpful in testing whether all loadstart events are followed
+          by a loadend event.
+          Test by using scroll-wheel up and down.
+        </p>
+    </div>
+
+    <h1>loadstart and loadend events</h1>
+    <pre id="output"></pre>
+
+  </body>
+</html>
\ No newline at end of file
diff --git a/tests/manual/rendered-dimensions.html b/tests/manual/rendered-dimensions.html
index 41b0fcf..71025af 100644
--- a/tests/manual/rendered-dimensions.html
+++ b/tests/manual/rendered-dimensions.html
@@ -39,10 +39,64 @@ function run() {
     else {
         out.innerHTML += "<br/>height Fail:  " + size + ", " + height;
     }
+    
+    // To use the same syntax as in "\tests"
+    var t = {eq: function(a, b, msg) {
+            if (a == b) {
+                out.innerHTML += "<br/>ok " + msg;
+            }
+            else {
+                out.innerHTML += "<br/><span style=\"color:red\">Fail (" + a + " not eq " + b + "): " + msg + "<span>";
+            }   
+        }
+    };
+    var text = (new Array(10)).join("foo foo foo <br>"),
+        content = "<div>" + text + "</div>";
+    var testName,
+        finalSize,
+        initialSize = OpenLayers.Util.getRenderedDimensions(content, null);
+    // containerElement option on absolute position with width and height
+    testName = "Absolute with w&h: ";
+    var optionAbsDiv ={
+        containerElement: document.getElementById("absoluteDiv")
+    };
+    finalSize = OpenLayers.Util.getRenderedDimensions(content, null, optionAbsDiv);
+    t.eq(finalSize.w, initialSize.w, 
+                testName + "initial width " + initialSize.w + "px is maintained");
+     t.eq(finalSize.h, initialSize.h, 
+                testName + "initial height " + initialSize.h + "px is maintained");
+    testName = "Absolute with w&h (set height): ";
+    finalSize = OpenLayers.Util.getRenderedDimensions(content, {h: 15}, optionAbsDiv);
+    t.eq(finalSize.h, 15, testName + "got the fixed height to 15px");
+    t.eq(finalSize.w, initialSize.w, 
+                testName + "initial width " + initialSize.w + "px is maintained");
+    testName = "Absolute with w&h (set width): ";
+    finalSize = OpenLayers.Util.getRenderedDimensions(content, {w: 20}, optionAbsDiv);
+    t.eq(finalSize.w, 20, testName + "got the fixed width to 20px");
+    // containerElement option on absolute position without width and height
+    testName = "Absolute without w&h: ";
+    var optionAbsDiv00 ={
+        containerElement: document.getElementById("absoluteDiv00")
+    };
+    finalSize = OpenLayers.Util.getRenderedDimensions(content, null, optionAbsDiv00);
+    t.eq(finalSize.w, initialSize.w, 
+                testName + "initial width " + initialSize.w + "px is maintained");
+    t.eq(finalSize.h, initialSize.h, 
+                testName + "initial height " + initialSize.h + "px is maintained");
+    testName = "Absolute without w&h (set height): ";
+    finalSize = OpenLayers.Util.getRenderedDimensions(content, {h: 15}, optionAbsDiv00);
+    t.eq(finalSize.h, 15, testName + "got the fixed height to 15px");
+    t.eq(finalSize.w, initialSize.w, 
+                testName + "initial width " + initialSize.w + "px is maintained");
+    testName = "Absolute without w&h (set width): ";
+    finalSize = OpenLayers.Util.getRenderedDimensions(content, {w: 20}, optionAbsDiv00);
+    t.eq(finalSize.w, 20, testName + "got the fixed width to 20px");
 } 
 </script>
 </head>
 <body onload="run()">
 <div id="out"></div>
+<div id="absoluteDiv" style="position:absolute; left:10px; width:500px; height: 500px"></div>
+<div id="absoluteDiv00" style="position:absolute; left:10px;"></div>
 </body>
 </html>
diff --git a/tests/manual/select-feature-right-click.html b/tests/manual/select-feature-right-click.html
new file mode 100644
index 0000000..edd79d6
--- /dev/null
+++ b/tests/manual/select-feature-right-click.html
@@ -0,0 +1,86 @@
+<html>
+    <head>
+        <title>OpenLayers Ticket 3404</title>
+        <script src="../../lib/OpenLayers.js"></script>
+    </head>
+    <body>
+        <table cellpadding="10px">
+            <tr>
+                <td width="600">
+                    <p><a href="http://trac.osgeo.org/openlayers/ticket/3404">Ticket 3404</a> Test Page</p>
+                    <p>This bug is only triggered by physical right mouse clicks so it is not possible to write
+                       an automated js unit test</p>
+                    <p>When a SelectFeature control and a Navigation control are added to a map the left-click
+                       mousedown events are stopped by a Drag handler before reaching the Feature handler. However,
+                       right-click mousedown events so pass through and reach the Feature handler.</p>
+                    <p>The Feature handler records the xy of
+                       each mousedown and mouseup events so they can be compared in the click event. Because only right-click
+                       mousedown event are received the location of future left-click mouseup events are compared
+                       to the location of the 'stale' right-click mousedown event resulting in the feature not being selected.</p>
+                    <p>Steps to recreate the bug:
+                        <ol>
+                            <li>Left-click a point to select it.</li>
+                            <li>Left-click the map to deselect the point.</li>
+                            <li>Left-click a different point to select it.</li>
+                            <li>Left-click the map to deselect the second point.</li>
+                            <li>Right-click the map then left-click to close the browser context menu.</li>
+                            <li>Left-click a point.</li>
+                        </ol>
+                    </p>
+                    <p>Expected: The point is selected.</p>
+                </td>
+                <td>
+                  <div style="width:300; height:400" id="map"></div>
+                </td>
+            </tr>
+        </table>
+
+        <script defer="defer" type="text/javascript">
+        var map = new OpenLayers.Map('map');
+
+        var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+            "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
+
+        // allow testing of specific renderers via "?renderer=Canvas", etc
+        var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+        renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
+        var vectorLayer = new OpenLayers.Layer.Vector("Vector Layer", {
+            renderers: renderer
+        });
+
+        map.addLayers([wmsLayer, vectorLayer]);
+        map.addControl(new OpenLayers.Control.LayerSwitcher());
+
+        var selectControl = new OpenLayers.Control.SelectFeature(
+            vectorLayer,
+            {
+                clickout: true, toggle: false,
+                multiple: false, hover: false,
+                toggleKey: "ctrlKey", // ctrl key removes from selection
+                multipleKey: "shiftKey", // shift key adds to selection
+            }
+        );
+
+        map.addControl(selectControl);
+        selectControl.activate();
+
+        map.addControl(new OpenLayers.Control.Navigation());
+        map.setCenter(new OpenLayers.LonLat(-75.1641667, 39.9522222), 10);
+
+        var createRandomFeatures = function() {
+            var extent = map.getExtent();
+            var features = [];
+            for(var i=0; i<10; ++i) {
+                features.push(new OpenLayers.Feature.Vector(
+                    new OpenLayers.Geometry.Point(extent.left + (extent.right - extent.left) * Math.random(),
+                    extent.bottom + (extent.top - extent.bottom) * Math.random()
+                )));
+            }
+            return features;
+        }
+
+        vectorLayer.addFeatures(createRandomFeatures());
+        </script>
+    </body>
+</html>
diff --git a/tests/manual/svg2-coordinaterange.html b/tests/manual/svg2-coordinaterange.html
deleted file mode 100644
index b1f5c62..0000000
--- a/tests/manual/svg2-coordinaterange.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
-<link rel="stylesheet" href="../../theme/default/style.css" type="text/css" />
-<style type="text/css">
-    #map {
-        width: 512px;
-        height: 512px;
-        border: 1px solid gray;
-    }
-</style>
-<title>SVG2 coordinate range check</title>
-<script type="text/javascript" src="../../lib/OpenLayers.js"></script>
-<script>
-
-var WGS84 = new OpenLayers.Projection("EPSG:4326");
-var Mercator = new OpenLayers.Projection("EPSG:900913");
-var wkt = new OpenLayers.Format.WKT({ internalProjection: Mercator, externalProjection: WGS84 });
-
-function init() {
-    var externalGraphic, baseURL, baseLayer, layerOptions, hidemessenger;
-
-    var map = new OpenLayers.Map('map', {
-        controls: [
-            new OpenLayers.Control.Navigation(),
-            new OpenLayers.Control.PanZoom(),
-            new OpenLayers.Control.Attribution()
-        ],
-        theme: null
-    });
-
-    baseLayer = new OpenLayers.Layer.OSM("OSM");
-
-    var viewLayer = new OpenLayers.Layer.Vector("View Layer", {renderers: ["SVG2"]});
-    map.addLayers([baseLayer, viewLayer]);
-
-    viewLayer.addFeatures([wkt.read("LINESTRING(2.4356174739332 48.816618174539, 2.4313688548536 48.826083884311)")]);
-    var lonLat = new OpenLayers.LonLat( 2.43686, 48.81742) .transform( WGS84, Mercator);
-    map.setCenter (lonLat, 16);
-}
-</script>
-
-<body onload="init()">
-<div id="map"></div>
-<p>The map should show a line on top of the OSM layer. If it does not, then
-    either the CSS or the SVG coordinate range is exceeded.</p>
-<p>This test only works on browsers that support SVG.</p>
-</body>
-</html>
diff --git a/tests/manual/ve-opacity.html b/tests/manual/ve-opacity.html
deleted file mode 100644
index 22fa43a..0000000
--- a/tests/manual/ve-opacity.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <style type="text/css">
-        #map {
-            width: 512px;
-            height: 512px;
-            border: 1px solid gray;
-        }
-    </style>
-
-    <script src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1"></script>
-
-    <script src="../../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
- 
-        // make map available for easy debugging
-        var map;
-
-        // increase reload attempts 
-        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
-
-        function init(){
-            var options = {
-                projection: "EPSG:900913",
-                units: "m",
-                maxResolution: 156543.0339,
-                maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
-                                                 20037508, 20037508.34)
-            };
-            map = new OpenLayers.Map('map', options);
-
-            // create Virtual Earth layers
-            var veroad = new OpenLayers.Layer.VirtualEarth(
-                "Virtual Earth Raods",
-                {'type': VEMapStyle.Road, 'sphericalMercator': true}
-            ); 
-
-            // create WMS layer
-            var wms = new OpenLayers.Layer.WMS(
-                "World Map",
-                "http://world.freemap.in/tiles/",
-                {'layers': 'factbook-overlay', 'format':'png'},
-                {
-                    'opacity': 0.4,
-                    'isBaseLayer': false,'wrapDateLine': true
-                }
-            );
-
-            map.addLayers([veroad, wms]);
-            map.zoomToMaxExtent()
-        }
-
-        
-    </script>
-  </head>
-  <body onload="init()">
-    <h3>VE Opacity</h3>
-    <p>The overlay should have an opacity of 40%.</p>  
-    <div id="map"></div>
-  </body>
-</html>
diff --git a/tests/run-tests.html b/tests/run-tests.html
index d2bff43..b2e0556 100644
--- a/tests/run-tests.html
+++ b/tests/run-tests.html
@@ -1,2419 +1,153 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html><head><title> Run the testsuite</title>
-<noscript>Javascript is disabled in your browser. This page cannot be displayed correctly without Javascript. Sorry. <br/> If you want to view this page, please change your browser settings so that Javascript is enabled.</noscript>
-<!--
-Test.AnotherWay version 0.5
-
-Copyright (c) 2005 Artem Khodush, http://straytree.org
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--->
-<style type="text/css">
-* { padding: 0; margin: 0; }
-html { height: 99%; }
-body { height: 98%; font: normal normal 10pt sans-serif }
-#col1 {  float: left; width: 27em; margin: 0 0 0 1em; overflow: visible; }
-#col2 {  position: relative; height: 98%; margin: 0 0.5em 0 28em; }
-#col1_header { margin-top: 0.5em; }
-#scroller { height: 400px; overflow: auto;}
-#testtable { margin: 0 0 2em 0; width: 97%; }
-#run_buttons { margin-bottom: 4em; }
-
-#right_header { padding-top: 0.8em; }
-#results_count { float: left; }
-.active_tab 			{ float: right; padding: 0 1em 0.2em 1em; background: #0af; border: 1px solid #048; border-bottom: none; cursor: pointer; cursor: hand;
-					 position: relative; top: -0.2em; }
-.inactive_tab 			{ float: right; padding: 0 1em 0 1em; background: #9bb; color: #444; border: 1px solid #9bb; border-bottom: none; cursor: pointer; cursor: hand; }
-.inactive_mouseover_tab 	{ float: right; padding: 0 1em 0 1em; background: #9bb; color: #062; border: 1px solid #062; border-bottom: none; cursor: pointer; cursor: hand; }
-
-#right_frame { overflow: auto; position: relative; top: -0.2em; clear: right; height: 95%; border: 1px solid #048; }
-
-#debug { display: none; }
-#debug p { margin: 2px 0 0 5em; text-indent: -4.8em; }
-
-#error { display: none; color: #c22; }
-
-#results p { margin: 0 0 2px 0; }
-/* cursor indicating that detailed results may be expanded/contracted */
-#results p.badtest { cursor: text; }
-#results p.ok, #results p.fail { cursor: pointer; cursor: hand; }
-
-/* colored squares in the results window at the left of test page names */
-#results p.ok .bullet { background: #6d6; }
-#results p.fail .bullet { background:  #d46; }
-#results p.badtest .bullet { background: #ea3; }
-#results p.loading .bullet { background: #48f; }
-#results p.running .bullet { background: #26e; }
-#results p.waiting .bullet { background: #04d; }
-/* highlight in the results line */
-#results p .warning { background: #ffc; }
-
-/* layout of the detailed results */
-.result_detail { padding-left: 3em; }
-.result_exception_detail { padding-left: 4em; }
-.result_exception_stack_detail { padding-left: 5em;  }
-.result_micro_detail { padding-left: 6em; }
-/* colouring in the detailed results */
-.result_detail .fail, .result_exception_detail .fail,  .result_micro_detail .fail { background: #ffd8d8; }
-
-/* "start recording" controls*/
-#record_div { margin-top: 3em; }
-#record_div p { margin-bottom: 0.5em; }
-#record_select { width: 88%; }
-#record_input { width: 53%; }
-</style>
-<script type="text/javascript">
-<!--
-if( typeof( Test )=="undefined" ) {
-	Test={};
-}
-Test.AnotherWay={};
-
-Test.AnotherWay._g_test_iframe=null; // frame where to load test pages
-Test.AnotherWay._g_test_frame_no_clear=false; // true - leave last page displayed after tests end
-Test.AnotherWay._g_test_page_urls=[]; // array of: { url: url, convention: "anotherway" or "jsan" }
-Test.AnotherWay._g_test_object_for_jsan=null; // test object for filling by tests that adhere to jsan Test.Simple calling convention
-Test.AnotherWay._g_pages_to_run=null; // list of pages to run automatically after loading
-Test.AnotherWay._g_run_on_main_load=false; // special handling for run_pages_to_run when it might be called before onload or before list of test pages is known.
-Test.AnotherWay._g_run_on_list_load=false;
-Test.AnotherWay._g_main_loaded=false;
-
-Test.AnotherWay._run_pages_to_run=function( called_from_outside )
-{
-	if( !Test.AnotherWay._g_main_loaded ) {
-		Test.AnotherWay._g_run_on_main_load=true;
-	}else {
-		var a_pages=Test.AnotherWay._g_pages_to_run;
-		if( a_pages=="all" ) {
-			for( var i=0; i<Test.AnotherWay._g_test_page_urls.length; ++i ) {
-				Test.AnotherWay._run_test_page( "test"+i );
-			}
-		}else if( a_pages!=null ) {
-			for( var run_i=0; run_i<a_pages.length; ++run_i ) {
-				var run_page=a_pages[run_i];
-				var found=false;
-				for( var all_i=0; all_i<Test.AnotherWay._g_test_page_urls.length; ++all_i ) {
-					if( run_page==Test.AnotherWay._g_test_page_urls[all_i].url ) {
-						Test.AnotherWay._run_test_page( "test"+all_i, called_from_outside );
-						found=true;
-						break;
-					}
-				}
-				if( !found ) {
-					Test.AnotherWay._show_error( "page specified to run is not found in the page list: "+run_page );
-					break;
-				}
-			}
-		}
-	}
-}
-
-Test.AnotherWay._add_test_page_url=function( test_url, convention )
-{
-	var table=document.getElementById( "testtable" );
-	var record_select=document.getElementById( "record_select" );
-	var index=Test.AnotherWay._g_test_page_urls.length;
-
-	// trim spaces.
-	if( test_url.match( "^(\\s*)(.*\\S)(\\s*)$" ) ) {
-		test_url=RegExp.$2;
-	}
-
-	Test.AnotherWay._g_test_page_urls[index]={ url: test_url, convention: convention };
-	var row=table.insertRow( -1 );
-
-	var cell;
-	var cell_child;
-	cell=row.insertCell( -1 );
-	cell_child=document.createElement( "input" );
-	cell_child.type="checkbox";
-	cell_child.id="checkbox"+index;
-    cell_child.checked='checked';
-    cell_child.defaultChecked='checked';
-	cell.appendChild( cell_child );
-
-	cell=row.insertCell( -1 );
-	cell.setAttribute( "width", "75%" );
-	cell.appendChild( document.createTextNode( test_url ) );
-
-	cell=row.insertCell( -1 );
-	cell_child=document.createElement( "input" );
-	cell_child.type="button";
-	cell_child.id="test"+index;
-	cell_child.value=" run ";
-	cell_child.onclick=Test.AnotherWay._run_one_onclick;
-	cell.appendChild( cell_child );
-
-	cell=row.insertCell( -1 );
-	cell.setAttribute( "width", "8em" );
-	cell_child=document.createElement( "span" );
-	cell.appendChild( cell_child );
-
-	var option=document.createElement( "option" );
-	option.appendChild( document.createTextNode( test_url ) );
-	record_select.appendChild( option );
-}
-Test.AnotherWay._show_error=function( msg )
-{
-	var error_div=document.getElementById( "error" );
-	error_div.innerHTML="";
-	error_div.appendChild( document.createTextNode( msg ) );
-	error_div.style.display="block";
-}
-
-// read urls from the list in the html file inside the list_iframe
-// fill on-screen list with urls and "run" buttons, and fill the g_test_page_urls object.
-Test.AnotherWay._list_iframe_onload=function()
-{
-	if( window.frames.list_iframe!=null && window.frames.list_iframe.location!="" && window.frames.list_iframe.location!="about:blank" ) {
-		var list_doc=window.frames.list_iframe.document;
-		var list=list_doc.getElementById( "testlist" );
-		if( list!=null ) {
-			for( var i=0; i<list.childNodes.length; ++i ) {
-				var item=list.childNodes[i];
-				if( item.nodeName=="LI" || item.nodeName=="li" ) {
-					var convention="anotherway";
-					if( Test.AnotherWay._get_css_class( item )=="jsan" ) {
-						convention="jsan";
-					}
-					Test.AnotherWay._add_test_page_url( item.innerHTML, convention );
-				}
-			}
-			if( Test.AnotherWay._g_run_on_list_load ) {
-				Test.AnotherWay._g_run_on_list_load=false;
-				Test.AnotherWay._run_pages_to_run();
-			}
-		}else {
-			Test.AnotherWay._show_error( "no list with id 'testlist' in a list file "+window.frames.list_iframe.location );
-		}
-	}
-}
-
-Test.AnotherWay._map_checkboxes=function( f )
-{
-	var table=document.getElementById( "testtable" );
-	var checks=table.getElementsByTagName( "INPUT" );
-	for( var i=0; i<checks.length; ++i ) {
-		if( checks[i].type=="checkbox" && checks[i].id.match( /^checkbox(\d+)$/ ) ) {
-			f( checks[i], RegExp.$1 );
-		}
-	}
-}
-Test.AnotherWay._run_all_onclick=function()
-{
-	Test.AnotherWay._map_checkboxes( function( c, id ) { Test.AnotherWay._run_test_page( "test"+id ); } );
-}
-Test.AnotherWay._run_selected_onclick=function()
-{
-	Test.AnotherWay._map_checkboxes( function( c, id ) { if( c.checked ) Test.AnotherWay._run_test_page( "test"+id ); } );
-}
-Test.AnotherWay._unselect_all_onclick=function()
-{
-	Test.AnotherWay._map_checkboxes( function( c, id ) { c.checked=false; } );
-}
-Test.AnotherWay._run_one_onclick=function()
-{
-	Test.AnotherWay._run_test_page( this.id );
-}
-
-// construct an object that will gather results of running one test function
-Test.AnotherWay._test_object_t=function( fun_name )
-{
-	this.name=fun_name; // name of the test function
-	this.n_plan=null; // planned number of assertions
-	this.n_ok=0; // # of ok assertions
-	this.n_fail=0; // # of failed assertions
-	this.exception=""; // if the function throwed an exception, it's its message
-	this.exception_stack=[]; // strings: function call stack from the exception
-	this.assertions=[]; // assertion results: array of { ok: 1 or 0, name: string }
-	this.wait_result_milliseconds=0; // how long to wait before collecting results from the test
-	this.second_wait_msg=null; // <p> status message (in addition to the page wait_msg)
-	this.delay_actions=[]; // array of actions to be perfomed after the test function returns
-				//	action : { acton_kind: "call" | "window" | "replay"
-				//				when "call": 		{ call_fn call_delay_milliseconds } call_fn takes nothing
-				//				when "window" : 	{ wnd_url wnd_wnd wnd_fn wnd_timeout_milliseconds wnd_dont_close } wnd_fn takes wnd
-				//				wnen "replay" : 	{ replay_wnd replay_events replay_event_i replay_checkpoints } checkpoint_fn takes this, wnd
-				//	}
-	this.delay_action_i=null; // index of delay action currently being performed
-	this.delay_prev_timer_time=0;	// for counting time while performing delay_actions
-	this.delay_current_milliseconds_left=0; // time left before the next action, runs down
-	this.delay_total_milliseconds_left=0; 	// for indication: total estimated time for all actions, runs up and down
-}
-
-Test.AnotherWay._test_object_t.prototype.ok=function( cond, name )
-{
-	if( cond ) {
-		++this.n_ok;
-		cond=1;
-	}else {
-		++this.n_fail;
-		cond=0;
-	}
-	this.assertions.push( { ok: cond, name: name } );
-}
-Test.AnotherWay._test_object_t.prototype.fail=function( name )
-{
-	this.ok( false, name );
-}
-Test.AnotherWay._test_object_t.prototype.plan=function( n )
-{
-	this.n_plan=n;
-}
-Test.AnotherWay._test_object_t.prototype.wait_result=function( seconds )
-{
-	this.wait_result_milliseconds=1000*seconds;
-}
-Test.AnotherWay._eq_fail_msg=function( path, what, expected, got )
-{
-	return "eq: "+path+" "+what+" differ: got "+got+", but expected "+expected;
-}
-Test.AnotherWay._array_eq=function( expected, got, path, msg )
-{
-	if( expected.length!=got.length ) {
-		msg.msg=Test.AnotherWay._eq_fail_msg( path, "array length", expected.length, got.length );
-		return false;
-	}
-	for( var i=0; i<expected.length; ++i ) {
-		if( !Test.AnotherWay._thing_eq( expected[i], got[i], path+"["+i+"]", msg ) ) {
-			return false;
-		}
-	}
-	return true;
-}
-Test.AnotherWay._object_eq=function( expected, got, path, msg )
-{
-	var v;
-	for( v in expected ) {
-		if( ! (v in got) ) {
-			msg.msg=Test.AnotherWay._eq_fail_msg( path+"."+v, "properties", expected[v], "undefined" );
-			return false;
-		}
-		if( !Test.AnotherWay._thing_eq( expected[v], got[v], path+"."+v, msg ) ) {
-			return false;
-		}
-	}
-	for( v in got ) {
-		if( ! (v in expected) ) {
-			msg.msg=Test.AnotherWay._eq_fail_msg( path+"."+v, "properties", "undefined", got[v] );
-			return false;
-		}
-	}
-	return true;
-}
-Test.AnotherWay._constructor_name=function( x )
-{
-	if( x==null ) {
-		return "";
-	}
-	var s="unknown";
-	try {
-		s=typeof( x.constructor );
-		if( s!="unknown" ) {
-			s=x.constructor.toString();
-		}
-	}catch( e ) {
-		s="unknown";
-	}
-	if( s=="unknown" ) {
-		// hackish attempt to guess a type
-		var is_array=true;
-		var index=0;
-		for( i in x ) {
-			if( i!=index ) {
-				is_array=false;
-			}
-			++index;
-		}
-		return is_array ? "Array" : "Object"; // for empty arrays/objects, this will be wrong half the time
-	}else if( s.match( /^\s*function\s+(\w+)\s*\(/ ) ) {
-		return RegExp.$1;
-	}else {
-	  var c = '';
-	  switch(typeof x) {
-	    case 'string':
-	      c = 'String';
-	      break;
-	    case 'object':
-	      c = 'Object';
-	      break;
-	    default:
-	      c = '';
-	  }
-		return c;
-	}
-}
-Test.AnotherWay._is_array=function( x )
-{
-	return Test.AnotherWay._constructor_name( x )=="Array";
-}
-Test.AnotherWay._is_value_type=function( x )
-{
-	cn=Test.AnotherWay._constructor_name( x );
-	return cn=="Number" || cn=="String" || cn=="Boolean" || cn=="Date";
-}
-Test.AnotherWay._thing_eq=function( expected, got, path, msg )
-{
-	if( expected==null && got==null ) {
-		return true;
-	}else if( (expected==null && got!=null) || (expected!=null && got==null) ) {
-		msg.msg=Test.AnotherWay._eq_fail_msg( path, "values", expected, got );
-		return false;
-	}else {
-		var expected_cn=Test.AnotherWay._constructor_name( expected );
-		var got_cn=Test.AnotherWay._constructor_name( got );
-		if( expected_cn!=got_cn ) {
-			msg.msg=Test.AnotherWay._eq_fail_msg( path, "types", expected_cn, got_cn );
-			return false;
-		}else {
-			if( Test.AnotherWay._is_array( expected ) ) {
-				return Test.AnotherWay._array_eq( expected, got, path, msg );
-			}else if( Test.AnotherWay._is_value_type( expected ) ) {
-				if( expected!=got ) {
-					msg.msg=Test.AnotherWay._eq_fail_msg( path, "values", expected, got );
-					return false;
-				}else {
-					return true;
-				}
-			}else { // just a plain object
-				return Test.AnotherWay._object_eq( expected, got, path, msg );
-			}
-		}
-	}
-}
-Test.AnotherWay._test_object_t.prototype.eq=function( got, expected, name )
-{
-	var msg={};
-	if( Test.AnotherWay._thing_eq( expected, got, "", msg ) ) {
-		this.ok( 1, name );
-	}else {
-		this.fail( name+". "+msg.msg );
-	}
-}
-Test.AnotherWay._test_object_t.prototype.like=function( got, expected, name )
-{
-	if( got.match( expected )!=null ) {
-		this.ok( 1, name );
-	}else {
-		this.fail( name+": got "+got+", but expected it to match: "+expected );
-	}
-}
-Test.AnotherWay._g_html_eq_span=null;
-Test.AnotherWay._html_eq_string_to_node=function( string_or_node, what, msg )
-{
-	if( string_or_node.nodeType!=null ) {
-		string_or_node=Test.AnotherWay._html_eq_node_to_string( string_or_node ); // double trip - to make properties assigned in scripts available as html node attributes
-	}
-	if( Test.AnotherWay._g_html_eq_span==null ) {
-		Test.AnotherWay._g_html_eq_span=document.createElement( "span" );
-	}
-	Test.AnotherWay._g_html_eq_span.innerHTML=string_or_node;
-	if( Test.AnotherWay._g_html_eq_span.childNodes.length!=1 ) {
-		msg.msg="bad "+what+" html string given (should contain exactly one outermost element): "+string_or_node;
-	}
-	return Test.AnotherWay._g_html_eq_span.childNodes[0].cloneNode( true );
-}
-Test.AnotherWay._html_eq_node_to_string=function( node ) {
-	if( Test.AnotherWay._g_html_eq_span==null ) {
-		Test.AnotherWay._g_html_eq_span=document.createElement( "span" );
-	}
-	Test.AnotherWay._g_html_eq_span.innerHTML="";
-	if( node.outerHTML!=null ) {
-		Test.AnotherWay._g_html_eq_span.innerHTML=node.outerHTML;
-	}else {
-            var clone = node.cloneNode(true);
-            var node = Test.AnotherWay._g_html_eq_span;
-            if(node.ownerDocument && node.ownerDocument.importNode) {
-                if(node.ownerDocument != clone.ownerDocument) {
-                    clone = node.ownerDocument.importNode(clone, true);
-                }
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Run the testsuite</title>
+        <noscript>
+            Javascript is disabled in your browser. This page cannot be 
+            displayed correctly without Javascript. Sorry. 
+            <br/>
+            If you want to view this page, please change your browser settings
+            so that Javascript is enabled.
+        </noscript>
+        <!--
+        
+        Test.AnotherWay version 0.5
+        
+        Copyright (c) 2005 Artem Khodush, http://straytree.org
+        
+        Permission is hereby granted, free of charge, to any person obtaining
+        a copy of this software and associated documentation files (the
+        "Software"), to deal in the Software without restriction, including
+        without limitation the rights to use, copy, modify, merge, publish,
+        distribute, sublicense, and/or sell copies of the Software, and to
+        permit persons to whom the Software is furnished to do so, subject to
+        the following conditions:
+        
+        The above copyright notice and this permission notice shall be
+        included in all copies or substantial portions of the Software.
+        
+        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+        EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+        MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+        NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+        LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+        OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+        WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+        
+        -->
+        <link rel="stylesheet" href="Test.AnotherWay.css" />
+        <script type="text/javascript" src="Test.AnotherWay.js"></script>
+        <script type="text/javascript" src="Test.AnotherWay.baseadditions.js"></script>
+        <script type="text/javascript" src="Test.AnotherWay.xml_eq.js"></script>
+        <script type="text/javascript" src="Test.AnotherWay.geom_eq.js"></script>
+    </head>
+    <body>
+        <div id="col1">
+            <div id="col1_header">
+                Test pages:
+                <input id="quickfilter" placeholder="quick filter">
+            </div>
+            <div id="scroller">
+                <table id="testtable">
+                </table>
+            </div>
+            <div id="run_buttons">
+                <input type="button" value=" clear " id="clear_btn" /><input type="button" value=" run all " id="run_all" /><input type="button" value=" run selected " id="run_selected" /><input type="button" value=" unselect all " id="unselect_all" />
+            </div>
+            <div id="running-time">
+            </div>
+            <input type="checkbox" id="dont_close_test_windows" /> do not close windows opened by tests
+            <div id="error">
+            </div>
+            <div id="record_div">
+                <p id="record_not_supported" style="display:none">
+                </p>
+                <p>
+                    Record mouse input for the page:
+                </p>
+                <p>
+                    <input type="radio" name="record_choose" value="select" checked="checked" />
+                    <select id="record_select">
+                        <option selected="selected">-- select a page: --</option>
+                    </select>
+                </p>
+                <p>
+                    <input type="radio" name="record_choose" value="input" /> or enter page url: <input type="text" id="record_input" />
+                </p>
+                <p>
+                    <input type="button" value=" record " id="record_start" />
+                </p>
+            </div>
+        </div>
+        <div id="col2">
+            <div id="right_header">
+                <span id="results_count">Results: <span id="total"></span></span>
+                <span id="results_tab" class="active_tab" style="visibility:hidden">Results</span>
+                <span id="debug_tab" class="inactive_tab" style="visibility:hidden">Debug</span>
+            </div>
+            <div id="right_frame">
+                <div id="results">
+                </div>
+                <div id="debug">
+                </div>
+            </div>
+        </div>
+        <span style="display:none">
+            <iframe name="list_iframe" onload="Test.AnotherWay._list_iframe_onload();">
+            </iframe>
+            <iframe name="test_iframe" onload="Test.AnotherWay._test_page_onload();">
+            </iframe>
+            <!-- record_control div is to be imported into other documents, so all its styles are inline -->-
+            <div id="record_control" style="position:absolute;bottom:0;left:0;margin:0;padding:0.5em;width:22em;height:22em;border:1px solid;background:#ffd;font: normal normal 8pt sans-serif; color:#000; text-align: left">
+                <p style="margin:0 0 0 0; padding:0">
+                     <span style="display:none;font-weight:bold;color:#408" id="record_indicator">recording. <span style="font-weight:normal">time: <span id="record_time"></span></span><span id="record_pause_indicator">paused</span></span>
+                </p>
+                <div id="record_cursor_over" style="margin:0;padding:2px;width:14em;height:1.1em;overflow:hidden;float:right;border:1px solid #777;background:#fff;font: normal normal 8pt sans-serif;position:relative;top:3px;color:#000;text-align:left;">
+                     
+                </div>
+                <p style="margin:2px 0 0 0; padding:0">
+                    cursor is over
+                </p>
+                <p style="margin:8px 0 0 0; padding:0;">
+                    keyboard control: press<span id="record_ctrl_key" style="border:1px solid #226;background:#adf;padding:0 0.5em">ctrl</span>
+                    -<span id="record_shift_key" style="border:1px solid #226;background:#adf;padding:0 0.5em">shift</span>
+                    -
+                </p>
+                <p style="margin:4px 0 0 0; padding:0">
+                    <span id="record_s" style="border:1px solid #226;background:#adf;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">s</span>
+                    <span id="record_on">to <b>start</b> recording</span>
+                    <span id="record_off" style="display:none">to <b>stop</b> recording</span>
+                </p>
+                <p style="margin:4px 0 0 0; padding:0">
+                    <span id="record_h" style="border:1px solid #226;background:#adf;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">h</span>
+                    <span>to <b>hide/show</b> this window</span>
+                </p>
+                <p style="margin:4px 0 0 0; padding:0">
+                    <span id="record_m" style="border:1px solid #226;background:#adf;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">m</span>
+                    <span id="record_include_mousemove">to <b>record</b> mousemove</span>
+                    <span id="record_omit_mousemove" style="display:none">to <b>omit</b> mousemove</span>
+                </p>
+                <p style="margin:4px 0 0 0; padding:0">
+                    <span id="record_p" style="border:1px solid #226;background:#aaa;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">p</span>
+                    <span id="record_pause_on">to <b>pause</b> recording</span>
+                    <span id="record_pause_off" style="display:none">to <b>continue</b> recording</span>
+                </p>
+                <p style="margin:4px 0 0 0; padding:0">
+                    <span id="record_c" style="border:1px solid #226;background:#aaa;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">c</span>
+                    <span>to add checkpoint</span>
+                </p>
+                <p style="margin:6px 0 0 0; padding:0">
+                    checkpoints:
+                </p>
+                <div id="record_checkpoints" style="position:relative;width:100%;height:6em;overflow:auto;font: normal normal 8pt sans-serif; color:#000; text-align: left">
+                </div>
+            </div>
+        </span>
+        <script>
+            if (/noscroll/.test(location.href)) {
+                document.getElementById('scroller').style.height = 'auto';
+                document.getElementById('right_frame').style.height = 'auto';
             }
-            node.appendChild(clone);
-	}
-	return Test.AnotherWay._g_html_eq_span.innerHTML;
-}
-Test.AnotherWay._html_eq_path_msg=function( path )
-{
-	var msg="";
-	for( var i=0; i<path.length; ++i ) {
-		msg+=" [node "+path[i].node;
-		if( path[i].id!=null && path[i].id!="" ) {
-			msg+=" id "+path[i].id;
-		}else if( path[i].index!=null ) {
-			msg+=" at index "+path[i].index;
-		}
-		msg+="] "
-	}
-	return msg;
-}
-Test.AnotherWay._html_eq_fail_msg=function( path, what, expected, got )
-{
-	return Test.AnotherWay._html_eq_path_msg( path )+": "+what+" differ: got "+got+", but expected "+expected;
-}
-Test.AnotherWay._html_eq_remove_blank=function( text )
-{
-	if( text==null ) {
-		return "";
-	}else if( text.match( "^(\\s*)(.*\\S)(\\s*)$" ) ) {
-		return RegExp.$2;
-	}else if( text.match( "\s*" ) ) {
-		return "";
-	}
-	return text;
-}
-Test.AnotherWay._html_eq_remove_blank_nodes=function( node )
-{
-	var to_remove=[];
-	for( var child=node.firstChild; child!=null; child=child.nextSibling ) {
-		if( child.nodeType==3 ) {
-			var value=Test.AnotherWay._html_eq_remove_blank( child.nodeValue );
-			if( value=="" ) {
-				to_remove.push( child );
-			}else {
-				child.nodeValue=value;
-			}
-		}
-	}
-	for( var i=0; i<to_remove.length; ++i ) {
-		node.removeChild( to_remove[i] );
-	}
-}
-Test.AnotherWay._html_node_type_text=function( node_type )
-{
-	if( node_type==1 ) {
-		return "1 (html element)";
-	}else if( node_type==3 ) {
-		return "3 (text)";
-	}else {
-		return node_type;
-	}
-}
-Test.AnotherWay._html_eq_node=function( expected, got, path, msg, expected_loc_base, got_loc_base )
-{
-	if( expected.nodeType!=got.nodeType ) {
-		msg.msg=Test.AnotherWay._html_eq_fail_msg( path, "node types", Test.AnotherWay._html_node_type_text( expected.nodeType ), Test.AnotherWay._html_node_type_text( got.nodeType ) );
-		return false;
-	}else if( expected.nodeType==3 ) {
-		if( expected.nodeValue!=got.nodeValue ) {
-			msg.msg=Test.AnotherWay._html_eq_fail_msg( path, "text", expected.nodeValue, got.nodeValue );
-			return false;
-		}
-	}else if( expected.nodeType==1 ) {
-		if( expected.nodeName!=got.nodeName ) {
-			msg.msg=Test.AnotherWay._html_eq_fail_msg( path, "node names", expected.nodeName, got.nodeName );
-			return false;
-		}
-		// compare attributes
-		var expected_attrs={};
-		var got_attrs={};
-		var i;
-		var a;
-		for( i=0; i<expected.attributes.length; ++i ) {
-			a=expected.attributes[i];
-			if( a.specified ) {
-				expected_attrs[a.name]=1;
-			}
-		}
-		for( i=0; i<got.attributes.length; ++i ) {
-			a=got.attributes[i];
-			if( a.specified ) {
-				got_attrs[a.name]=1;
-			}
-		}
-		for( a in expected_attrs ) {
-			if( ! (a in got_attrs) ) {
-				msg.msg=Test.AnotherWay._html_eq_path_msg( path )+": attribute sets differ: expected attribute "+a+" is missing";
-				return false;
-			}
-		}
-		for( a in got_attrs ) {
-			if( ! (a in expected_attrs) ) {
-				msg.msg=Test.AnotherWay._html_eq_path_msg( path )+": attribute sets differ: got extra attribute "+a;
-				return false;
-			}
-		}
-		for( a in expected_attrs ) {
-			var expected_value=expected.getAttribute( a );
-			var got_value=got.getAttribute( a );
-			if( typeof( expected_value )=="string" && typeof( got_value )=="string" ) {
-				expected_value=Test.AnotherWay._html_eq_remove_blank( expected_value );
-				got_value=Test.AnotherWay._html_eq_remove_blank( got_value );
-				var ok=expected_value==got_value;
-				if( !ok && (a=="href" || a=="HREF" )  ) { // try relative hrefs
-					var expected_relative_value=expected_value;
-					if( expected_loc_base!=null && expected_value.substring( 0, expected_loc_base.length )==expected_loc_base ) {
-						expected_relative_value=expected_value.substring( expected_loc_base.length );
-					}
-					var got_relative_value=got_value;
-					if( got_loc_base!=null && got_value.substring( 0, got_loc_base.length )==got_loc_base ) {
-						got_relative_value=got_value.substring( got_loc_base.length );
-					}
-					ok=expected_relative_value==got_relative_value;
-				}
-				if( !ok ) {
-					msg.msg=Test.AnotherWay._html_eq_fail_msg( path, "attribute "+a+" values", expected_value, got_value );
-					return false;
-				}
-			}else if( typeof( expected_value )=="function" && typeof( got_value )=="function" ) {
-				expected_value=expected_value.toString();
-				got_value=got_value.toString();
-				if( expected_value!=got_value ) {
-					msg.msg=Test.AnotherWay._html_eq_fail_msg( path, "attribute "+a+" values", expected_value, got_value );
-					return false;
-				}
-			}else {
-				var value_msg={};
-				if( !Test.AnotherWay._thing_eq( expected_value, got_value, "", value_msg ) ) {
-					msg.msg=Test.AnotherWay._html_eq_path_msg( path )+": attribute "+a+" values differ: "+value_msg.msg;
-					return false;
-				}
-			}
-		}
-		// compare child nodes
-		Test.AnotherWay._html_eq_remove_blank_nodes( expected );
-		Test.AnotherWay._html_eq_remove_blank_nodes( got );
-		var expected_length=expected.childNodes.length;
-		var got_length=got.childNodes.length;
-		if( expected_length<got_length ) {
-			msg.msg=Test.AnotherWay._html_eq_path_msg( path )+": got "+(got_length-expected_length)+" extra child nodes";
-			return false;
-		}else if( expected_length>got_length ) {
-			msg.msg=Test.AnotherWay._html_eq_path_msg( path )+": expected "+(expected_length-got_length)+" more child nodes";
-			return false;
-		}else {
-			for( i=0; i<expected_length; ++i ) {
-				var expected_node=expected.childNodes[i];
-				path.push( { node: expected_node.nodeName, id: expected_node.id, index: i } );
-				var eq=Test.AnotherWay._html_eq_node( expected_node, got.childNodes[i], path, msg, expected_loc_base, got_loc_base );
-				path.pop();
-				if( !eq ) {
-					return false;
-				}
-			}
-		}
-	}
-	return true;
-}
-Test.AnotherWay._html_eq_get_loc_base=function( node )
-{
-	var loc_base=document.location;
-	if( node.ownerDocument!=null ) {
-		loc_base=node.ownerDocument.location;
-	}
-	if( loc_base!=null ) {
-		loc_base=loc_base.href;
-		var slash_pos=loc_base.lastIndexOf( "/" );
-		if( slash_pos!=-1 ) {
-			loc_base=loc_base.substring( 0, slash_pos+1 );
-		}
-	}
-	return loc_base;
-}
-Test.AnotherWay._test_object_t.prototype.html_eq=function( got, expected, name )
-{
-	var msg={};
-	var expected_node=Test.AnotherWay._html_eq_string_to_node( expected, "expected", msg );
-	if( msg.msg!=null ) {
-		this.fail( name+" html_eq: "+msg.msg );
-	}else {
-		var got_node=Test.AnotherWay._html_eq_string_to_node( got, "got", msg );
-		if( msg.msg!=null ) {
-			this.fail( name+" html_eq: "+msg.msg );
-		}else {
-			var expected_loc_base=Test.AnotherWay._html_eq_get_loc_base( expected );
-			var got_loc_base=Test.AnotherWay._html_eq_get_loc_base( got );
-			if( Test.AnotherWay._html_eq_node( expected_node, got_node, [], msg, expected_loc_base, got_loc_base ) ) {
-				this.ok( 1, name );
-			}else {
-				var msg=name+" html_eq "+msg.msg;
-				var expected_str=Test.AnotherWay._html_eq_node_to_string( expected_node );
-				var got_str=Test.AnotherWay._html_eq_node_to_string( got_node );
-				msg+=".\n got html: "+got_str;
-				msg+=".\n expected html: "+expected_str;
-				this.fail( msg );
-			}
-		}
-	}
-}
-Test.AnotherWay._debug_pane_print=function( msg )
-{
-	var d=new Date();
-	var p=document.createElement( "p" );
-	p.appendChild( document.createTextNode( d.toLocaleTimeString()+" "+msg ) );
-	var debug_pane=document.getElementById( "debug" );
-	debug_pane.appendChild( p );
-	var debug_tab=document.getElementById( "debug_tab" );
-	var results_tab=document.getElementById( "results_tab" );
-	debug_tab.style.visibility="visible";
-	results_tab.style.visibility="visible";
-}
-Test.AnotherWay._test_object_t.prototype.debug_print=function( msg )
-{
-	Test.AnotherWay._debug_pane_print( this.name+": "+msg );
-}
-Test.AnotherWay._test_object_t.prototype.delay_call=function()
-{
-	var timeout_ms=200;
-	for( var i=0; i<arguments.length; ++i ) {
-		if( typeof( arguments[i] )!="function" ) {
-			timeout_ms=1000*arguments[i];
-		}else {
-			var action={ action_kind: "call", call_delay_milliseconds: timeout_ms, call_fn: arguments[i] };
-			this.delay_total_milliseconds_left+=Test.AnotherWay._action_estimate_milliseconds( action );
-			this.delay_actions.push( action );
-		}
-	}
-}
-Test.AnotherWay._test_object_t.prototype.open_window=function( url, fn, timeout_seconds )
-{
-	if( timeout_seconds==null ) {
-		timeout_seconds=4;
-	}
-	var no_close=document.getElementById( "dont_close_test_windows" );
-	var action={ action_kind: "window", wnd_url: url.toString() + (window.location.search || ""), wnd_wnd: null, wnd_fn: fn, wnd_timeout_milliseconds: timeout_seconds*1000, wnd_no_close: no_close.checked };
-	this.delay_total_milliseconds_left+=Test.AnotherWay._action_estimate_milliseconds( action );
-	this.delay_actions.push( action );
-}
-Test.AnotherWay._test_object_t.prototype.replay_events=function( wnd, events )
-{
-	if( Test.AnotherWay._g_no_record_msg!=null ) {
-		this.fail( "replay_events: "+Test.AnotherWay._g_no_record_msg );
-	}else {
-		var action={ action_kind: "replay", replay_wnd: wnd, replay_events: events.events, replay_event_i: null, replay_checkpoints: events.checkpoints };
-		this.delay_total_milliseconds_left+=Test.AnotherWay._action_estimate_milliseconds( action );
-		this.delay_actions.push( action );
-	}
-}
-Test.AnotherWay._action_estimate_milliseconds=function( action )
-{
-	var ms=0;
-	if( action.action_kind=="call" ) {
-		ms=action.call_delay_milliseconds;
-	}else if( action.action_kind=="window" ) {
-		ms=0;
-	}else if( action.action_kind=="replay" ) {
-		ms=0;
-		for( var i=0; i<action.replay_events.length; ++i ) {
-			ms+=action.replay_events[i]["time"]-0;
-		}
-	}
-	return ms;
-}
-
-Test.AnotherWay._g_timeout_granularity=200;
-Test.AnotherWay._g_tests_queue=[]; // vector of { url: string, test_objects : array of test_object_t, test_object_i: int, wait_msg: <p> object, loading_timeout_milliseconds: int, timeout_id: id }
-
-// load one html page, schedule further processing
-Test.AnotherWay._run_test_page=function( id, called_from_outside )
-{
-	if( id.match( /^test(\d+)/ ) ) {
-		id=RegExp.$1;
-		Test.AnotherWay._g_tests_queue.push( {
-			url: Test.AnotherWay._g_test_page_urls[id].url,
-			convention: Test.AnotherWay._g_test_page_urls[id].convention,
-			test_objects: []
-			} );
-		if( Test.AnotherWay._g_tests_queue.length==1 ) {
-			if( !called_from_outside ) {
-				// Crap. Be careful stepping around.
-				// For Mozilla and Opera, when this file is included into the frameset page that is in another directory (and _g_outside_path_correction!=null)
-				// but the test pages are started from within it (by "run" buttons), then:
-				// depending on whether the page is the first one loaded into the test frame or not,
-				// the base url for relative test pages differs.
-				// Crap, like I said.
-				Test.AnotherWay._g_tests_queue[0].suppress_outside_path_correction=true;
-			}
-			Test.AnotherWay._start_loading_page();
-		}
-	}
-}
-Test.AnotherWay._load_next_page=function()
-{
-	Test.AnotherWay._g_tests_queue.splice( 0, 1 );
-	if( Test.AnotherWay._g_tests_queue.length>0 ) {
-		Test.AnotherWay._start_loading_page();
-	}else {
-		if( !Test.AnotherWay._g_test_frame_no_clear ) {
-			Test.AnotherWay._g_test_iframe.location.replace( "about:blank" );
-		}
-	}
-}
-Test.AnotherWay._g_opera_path_correction=null; // ugly wart to support opera
-Test.AnotherWay._g_outside_path_correction=null; // ugly wart to accomodate Opera and Mozilla, where relative url relates to the directory where the page that calls this function is located
-Test.AnotherWay._set_iframe_location=function( iframe, loc, outside_path_correction )
-{
-	// allow to load only locations with the same origin
-	var proto_end=loc.indexOf( "://" );
-	if( proto_end!=-1 ) { // otherwise, it's safe to assume (for Opera, Mozilla and IE ) that loc will be treated as relative
-		var main_loc=window.location.href;
-		var host_end=loc.substring( proto_end+3 ).indexOf( "/" );
-		var ok=false;
-		if( host_end!=-1 ) {
-			var loc_origin=loc.substring( 0, proto_end+3+host_end+1 );
-			if( main_loc.length>=loc_origin.length && main_loc.substring( 0, loc_origin.length )==loc_origin ) {
-				ok=true;
-			}
-		}
-		if( !ok ) {
-			return { msg: "test pages may have only urls with the same origin as "+main_loc };
-		}
-	}
-	// opera cannot handle urls relative to file:// without assistance
-	if( window.opera!=null && window.location.protocol=="file:" && loc.indexOf( ":" )==-1 ) {
-		var base=window.location.href;
-		var q_pos=base.indexOf( "?" );
-		if( q_pos!=-1 ) {
-			base=base.substring( 0, q_pos );
-		}
-		var slash_pos=base.lastIndexOf( "/" );
-		if( slash_pos!=-1 ) {
-			base=base.substring( 0, slash_pos+1 );
-			Test.AnotherWay._g_opera_path_correction=base;
-			loc=base+loc;
-		}
-	}
-	// if this function is called from another page, and if that page is in another directory, correction is needed
-	if( outside_path_correction!=null ) {
-		var pos=loc.indexOf( outside_path_correction );
-		if( pos==0 ) {
-			loc=loc.substring( outside_path_correction.length+1 );
-		}
-	}
-	if( iframe.location!=null ) {
-		iframe.location.replace( loc );
-	}else {
-		iframe.src=loc;
-	}
-	return {};
-}
-Test.AnotherWay._start_loading_page=function()
-{
-	var test_page=Test.AnotherWay._g_tests_queue[0];
-	test_page.loading_timeout_milliseconds=12000;
-	test_page.timeout_id=setTimeout( Test.AnotherWay._loading_timeout, Test.AnotherWay._g_timeout_granularity );
-	test_page.wait_msg=Test.AnotherWay._print_counter_result( test_page.url, "loading...", test_page.loading_timeout_milliseconds, "loading" );
-	if( test_page.convention=="jsan" ) {
-		// the tests in that page will run when it's loading, so the test object must be ready
-		Test.AnotherWay._g_test_object_for_jsan=new Test.AnotherWay._test_object_t( test_page.url );
-	}
-	var outside_path_correction=null;
-	if( Test.AnotherWay._g_outside_path_correction!=null && !test_page.suppress_outside_path_correction ) {
-		outside_path_correction=Test.AnotherWay._g_outside_path_correction;
-	}
-	var result=Test.AnotherWay._set_iframe_location( Test.AnotherWay._g_test_iframe, test_page.url, outside_path_correction );
-	if( result.msg!=null ) {
-		Test.AnotherWay._unprint_result( test_page.wait_msg );
-		Test.AnotherWay._print_result( test_page.url, result.msg, "badtest", null );
-		Test.AnotherWay._load_next_page();
-	}
-}
-
-Test.AnotherWay._loading_timeout=function()
-{
-	var test_page=Test.AnotherWay._g_tests_queue[0];
-	test_page.loading_timeout_milliseconds-=Test.AnotherWay._g_timeout_granularity;
-	if( test_page.loading_timeout_milliseconds>0 ) {
-		Test.AnotherWay._update_msg_counter( test_page.wait_msg, (test_page.loading_timeout_milliseconds/1000).toFixed() );
-		test_page.timeout_id=setTimeout( Test.AnotherWay._loading_timeout, Test.AnotherWay._g_timeout_granularity );
-	}else {
-		Test.AnotherWay._unprint_result( test_page.wait_msg );
-		Test.AnotherWay._print_result( test_page.url, "Unable to load test page. Timeout expired", "badtest", null );
-		Test.AnotherWay._load_next_page();
-	}
-}
-
-Test.AnotherWay._strip_query_and_hash=function( s )
-{
-	var i=s.lastIndexOf( "#" );
-	if( i!=-1 ) {
-		s=s.substring( 0, i );
-	}
-	i=s.lastIndexOf( "?" );
-	if( i!=-1 ) {
-		s=s.substring( 0, i );
-	}
-	return s;
-}
-Test.AnotherWay._is_url_loaded=function( url, wnd )
-{
-	var loaded=false;
-	if( wnd!=null && wnd.location!=null ) {
-		// after some popup blocker interference, location may behave strange..
-		var location_s="";
-		location_s+=wnd.location;
-		if( location_s!="" ) {
-			var pathname=wnd.location.pathname;
-			var expected_url=url;
-			var i=expected_url.lastIndexOf( "#" );
-			if( i!=-1 ) {
-				expected_url=expected_url.substring( 0, i );
-			}
-			i=expected_url.lastIndexOf( "?" );
-			if( i!=-1 ) {
-				expected_url=expected_url.substring( 0, i );
-			}
-			i=expected_url.lastIndexOf( "/" );
-			if( i!=-1 && i!=expected_url.length-1 ) {
-				expected_url=expected_url.substring( i+1 );
-			}
-			i=pathname.indexOf( expected_url )
-			if( wnd.location.href==url || (i!=-1 && i==pathname.length-expected_url.length) ) {
-				if( /*window.opera==null*/wnd.document.readyState==null || wnd.document.readyState=="complete" ) { // for opera (and IE?), getElementById does not work until..
-					loaded=true;
-				}
-			}
-		}
-	}
-	return loaded;
-}
-// find and run all test functions in the g_cur_page html page.
-Test.AnotherWay._test_page_onload=function()
-{
-	if( Test.AnotherWay._g_tests_queue.length==0 ) {
-		return;
-	}
-	var test_page=Test.AnotherWay._g_tests_queue[0];
-	if( !Test.AnotherWay._is_url_loaded( test_page.url, Test.AnotherWay._g_test_iframe ) ) {
-		return;
-	}
-	clearTimeout( test_page.timeout_id );
-	Test.AnotherWay._unprint_result( test_page.wait_msg );
-
-	if( test_page.convention=="anotherway" ) {
-		// get test function names (those beginning with "test")
-		if( typeof( Test.AnotherWay._g_test_iframe.document.scripts )!='undefined' ) { // IE
-			for( var i=0; i<Test.AnotherWay._g_test_iframe.document.scripts.length; ++i ) {
-				var script_text=Test.AnotherWay._g_test_iframe.document.scripts[i].text;
-				var fun_sig="function test";
-				var fun_start=script_text.indexOf( fun_sig );
-
-				while( fun_start!=-1 ) {
-					script_text=script_text.substring( fun_start, script_text.length );
-					var fun_end=script_text.indexOf( '(' );
-					var fun_name=script_text.substring( "function ".length,  fun_end );
-                                        var whitespace = fun_name.indexOf( ' ' );
-                                        if (whitespace >= 0)
-                                            fun_name = fun_name.substring( 0, whitespace );
-					test_page.test_objects.push( new Test.AnotherWay._test_object_t( fun_name ) );
-					script_text=script_text.substring( fun_end, script_text.length );
-					fun_start=script_text.indexOf( fun_sig  );
-				}
-			}
-		}else { // otherwise (not IE) it ought to work like this
-			for( var i in Test.AnotherWay._g_test_iframe) {
-				// Hack to prevent failure in FF3.0b1 (innerWidth/innerHeight) and FF>=3.5 (sessionStorage)
-                if (i == "innerWidth" || i == "innerHeight" || i == "sessionStorage") { continue; }
-                if( typeof( Test.AnotherWay._g_test_iframe[i] )=='function' ) {
-					if( i.substring( 0, 4 )=="test" ) {
-						test_page.test_objects.push( new Test.AnotherWay._test_object_t( i ) );
-					}
-				}
-			}
-		}
-	}else if( test_page.convention=="jsan" ) {
-		// the test object is already filled with results
-		test_page.test_objects.push( Test.AnotherWay._g_test_object_for_jsan );
-	}
-
-	if( test_page.test_objects.length==0 ) {
-		Test.AnotherWay._print_result( test_page.url,  "No test functions defined in the page", "badtest", null );
-		Test.AnotherWay._load_next_page();
-		return;
-	}
-
-	test_page.wait_msg=Test.AnotherWay._print_result( test_page.url, "running tests..<span class=\"counter\">"+test_page.test_objects.length+"</span>", "running", null );
-
-	test_page.test_object_i=0;
-	Test.AnotherWay._run_more_tests();
-}
-
-Test.AnotherWay._handle_exception=function( o, e, title )
-{
-	var s=title+": "+typeof( e )+": ";
-	if( e.message!=null ) {
-		s+=e.message;
-	}else if( e.description!=null ) {
-		s+=e.description;
-	}else {
-		s+=e.toString();
-	}
-//	if( e.location!=null ) {  // XXX figure out how to display exception location if it's present (like in mozilla)
-//		s+=" location: "+e.location.toString();
-//	}
-	o.exception=s;
-	s=[];
-	if( e.stack ) {
-		var lines=e.stack.split( "\n" );
-		for( var i=0; i<lines.length; ++i ) {
-			// format of the line: func_name(args)@file_name:line_no
-			if( lines[i].match( /(\w*)\(([^\)]*)\)@(.*):([^:]*)$/ ) ) {
-				var func_name=RegExp.$1;
-				if( func_name.length==0 ) {
-					func_name="<anonymous>";
-				}
-				s.push( "in "+func_name+"( "+RegExp.$2+") at "+RegExp.$3+" line "+RegExp.$4+"\n" );
-			}
-		}
-	}
-	o.exception_stack=s;
-}
-
-Test.AnotherWay._run_more_tests=function()
-{
-	var test_page=Test.AnotherWay._g_tests_queue[0];
-	while( test_page.test_object_i<test_page.test_objects.length ) {
-		Test.AnotherWay._update_msg_counter( test_page.wait_msg, (1+test_page.test_object_i)+"/"+test_page.test_objects.length );
-		var o=test_page.test_objects[test_page.test_object_i];
-		if( test_page.convention=="anotherway" ) {
-			try {
-				Test.AnotherWay._g_test_iframe[o.name]( o );
-			}catch( e ) {
-				Test.AnotherWay._handle_exception( o, e, "" );
-			}
-		} // for "jsan" convention, test has run already
-		if( o.delay_actions.length>0 || o.wait_result_milliseconds>0 ) {
-			o.delay_total_milliseconds_left+=o.wait_result_milliseconds;
-			Test.AnotherWay._delay_actions_timeout();
-			return;
-		}
-		++test_page.test_object_i;
-	}
-	Test.AnotherWay._unprint_result( test_page.wait_msg );
-	Test.AnotherWay._print_result( test_page.url, null, null, test_page.test_objects );
-	Test.AnotherWay._load_next_page();
-}
-
-Test.AnotherWay._delay_actions_timeout=function()
-{
-	var test_page=Test.AnotherWay._g_tests_queue[0];
-	var test_object=test_page.test_objects[test_page.test_object_i];
-	var finished=true;
-	if( test_object.delay_action_i==null ) {
-		// set up to start first action
-		test_object.delay_action_i=-1;
-	}else {
-		// perform current action
-		var milliseconds_passed=(new Date()).getTime()-test_object.delay_prev_timer_time;
-		test_object.delay_current_milliseconds_left-=milliseconds_passed;
-		test_object.delay_total_milliseconds_left-=milliseconds_passed;
-		finished=Test.AnotherWay._delay_continue_action( test_object, milliseconds_passed );
-	}
-	while( finished && test_object.delay_action_i<test_object.delay_actions.length ) {
-		++test_object.delay_action_i; // start next action
-		finished=Test.AnotherWay._delay_start_action( test_object );
-	}
-	if( test_object.delay_action_i<=test_object.delay_actions.length ) { // any more actions left ?
-		test_object.delay_prev_timer_time=(new Date()).getTime();
-		var next_timeout=Test.AnotherWay._g_timeout_granularity;
-		if( test_object.delay_current_milliseconds_left<next_timeout ) {
-			next_timeout=test_object.delay_current_milliseconds_left;
-		}
-		if( test_object.second_wait_msg!=null ) {
-			Test.AnotherWay._update_msg_counter( test_object.second_wait_msg, (test_object.delay_total_milliseconds_left/1000).toFixed() );
-		}
-		setTimeout( Test.AnotherWay._delay_actions_timeout, next_timeout );
-	}else { // no more actions left. run the next test.
-		if( test_object.second_wait_msg!=null ) {
-			Test.AnotherWay._unprint_result( test_object.second_wait_msg );
-			test_object.second_wait_msg=null;
-		}
-		++test_page.test_object_i;
-		Test.AnotherWay._run_more_tests();
-	}
-}
-Test.AnotherWay._delay_start_action=function( test_object )
-{
-	var finished=false;
-	var wait_msg="";
-	if( test_object.delay_action_i==test_object.delay_actions.length ) {
-		if( test_object.wait_result_milliseconds>0 ) {
-			test_object.delay_current_milliseconds_left=test_object.wait_result_milliseconds; // wait for result
-			wait_msg="waiting for results..";
-		}else {
-			++test_object.delay_action_i; // dont wait for result
-		}
-	}else {
-		var action=test_object.delay_actions[test_object.delay_action_i];
-		if( action.action_kind=="call" ) {
-			test_object.delay_current_milliseconds_left=action.call_delay_milliseconds;
-			wait_msg="performing delayed calls..";
-		}else if( action.action_kind=="window" ) {
-			if( Test.AnotherWay._g_opera_path_correction!=null && action.wnd_url.indexOf( ":" )==-1 ) {
-				action.wnd_url=Test.AnotherWay._g_opera_path_correction+action.wnd_url;
-			}
-			action.wnd_wnd=window.open( action.wnd_url, "_blank" );
-			if( action.wnd_wnd==null ) {
-				finished=true;
-				test_object.fail( "unable to open window for "+action.wnd_url );
-			}else {
-				test_object.delay_current_milliseconds_left=action.wnd_timeout_milliseconds;
-				wait_msg="opening window..";
-			}
-		}else if( action.action_kind=="replay" ) {
-			if( action.replay_events.length==0 ) {
-				finished=true;
-			}else {
-				action.replay_event_i=0;
-				test_object.delay_current_milliseconds_left=action.replay_events[0]["time"];
-				wait_msg="replaying events..";
-			}
-		}
-	}
-	if( test_object.second_wait_msg!=null ) {
-		Test.AnotherWay._unprint_result( test_object.second_wait_msg );
-	}
-	if( wait_msg!="" ) {
-		var test_page=Test.AnotherWay._g_tests_queue[0];
-		test_object.second_wait_msg=Test.AnotherWay._print_counter_result( test_page.url, wait_msg, test_object.delay_total_milliseconds_left, "waiting" );
-	}else {
-		test_object.second_wait_msg=null;
-	}
-	return finished;
-}
-Test.AnotherWay._delay_continue_action=function( test_object, milliseconds_passed )
-{
-	var finished=test_object.delay_current_milliseconds_left<=0;
-	if( test_object.delay_action_i==test_object.delay_actions.length ) { // action is "waiting for results"
-		if( test_object.n_plan!=null && test_object.n_plan==test_object.n_ok+test_object.n_fail ) {
-			finished=true; // if all assertions results are recorded, don't wait any more
-		}
-		if( finished ) {
-			++test_object.delay_action_i; // move on to the next test
-		}
-	}else {
-		var action=test_object.delay_actions[test_object.delay_action_i];
-		if( action.action_kind=="call" ) {
-			if( finished ) {
-				try {
-					action.call_fn();
-				}catch( e ) {
-					Test.AnotherWay._handle_exception( test_object, e, "in delay_call" );
-				}
-			}
-		}else if( action.action_kind=="window" ) {
-			test_object.delay_total_milliseconds_left+=milliseconds_passed; // for "window", the countdown is suspended since it's unknown how long it will take
-			if( Test.AnotherWay._is_url_loaded( action.wnd_url, action.wnd_wnd ) ) {
-				try {
-					action.wnd_fn( action.wnd_wnd );
-				}catch( e ) {
-					Test.AnotherWay._handle_exception( test_object, e, "in open_window function call" );
-				}
-				finished=true;
-			}else if( finished ) {
-				test_object.fail(  "unable to open window for url '"+action.wnd_url+"'. timeout expired" );
-			}
-		}else if( action.action_kind=="replay" ) {
-			if( finished ) {
-//				try {
-					Test.AnotherWay._delay_replay_event( test_object, action.replay_wnd, action.replay_events[action.replay_event_i], action.replay_checkpoints );
-//				}catch( e ) { // disabled, until I know how to gel location info from an exception
-//					Test.AnotherWay._handle_exception( test_object, e, "while replaying event" );
-//				}
-				++action.replay_event_i;
-				finished=action.replay_event_i==action.replay_events.length;
-				if( !finished ) {
-					test_object.delay_current_milliseconds_left=action.replay_events[action.replay_event_i]["time"];
-				}
-			}
-		}
-	}
-	return finished;
-}
-Test.AnotherWay._delay_replay_event=function( test_object, wnd, event, checkpoints )
-{
-	if( event.type=="_checkpoint" ) {
-		var checkpoint_n=event.which;
-		var prev_n_fail=test_object.n_fail;
-		checkpoints[checkpoint_n]( test_object, wnd );
-		var flash_color= prev_n_fail==test_object.n_fail ? "#2f2" : "#f22" ;
-		Test.AnotherWay._record_flash_border( flash_color );
-	}else if( event.type=="click" || event.type=="mouseover" || event.type=="mouseout" || event.type=="mousemove" || event.type=="mousedown" || event.type=="mouseup" ) {
-		var target=Test.AnotherWay._record_node_path_to_node( event["target"], wnd.document );
-		if( target!=null ) {
-			Test.AnotherWay._record_control_update_highlight( target, "ball", event );
-			var e=wnd.document.createEvent( "MouseEvents" );
-			var related_target=Test.AnotherWay._record_node_path_to_node( event["relatedTarget"], wnd.document );
-			e.initMouseEvent(
-				event["type"],
-				event["cancelable"],
-				event["bubbles"],
-				wnd.document.defaultView,
-				event["detail"],
-				event["screenX"],
-				event["screenY"],
-				event["clientX"],
-				event["clientY"],
-				event["ctrlKey"],
-				event["altKey"],
-				event["shiftKey"],
-				event["metaKey"],
-				event["button"],
-				Test.AnotherWay._record_node_path_to_node( event["relatedTarget"], wnd.document )
-			);
-			// Firefox 1.0.6 somehow loses relatedTarget somewhere on the way. Pass through our own, for those who choose to care.
-			e.passThroughRelatedTarget=related_target;
-			target.dispatchEvent( e );
-		}
-	}else if( event.type=="keyup" || event.type=="keydown" || event.type=="keypress" ) {
-		var e=wnd.document.createEvent( "KeyboardEvents" ); // forget it. Apparently it's not supported neither by mozilla nor by opera.
-		e.initKeyboardEvent(
-				event["type"],
-				event["cancelable"],
-				event["bubbles"],
-				wnd.document.defaultView,
-				event["which"],
-				event["which"],
-				event["ctrlKey"],
-				event["altKey"],
-				event["shiftKey"],
-				event["metaKey"],
-				false
-		);
-		wnd.document.dispatchEvent( e );
-	}
-}
-
-Test.AnotherWay._print_counter_result=function( url, msg, milliseconds, style )
-{
-	return Test.AnotherWay._print_result( url, msg+"<span class=\"counter\">"+(milliseconds/1000).toFixed()+"</span>", style, null );
-}
-
-Test.AnotherWay._g_result_count=0; // for assigning unique ids to result paragraphs
-
-// number of pages tested
-Test.AnotherWay._g_ok_pages=0;
-Test.AnotherWay._g_fail_pages=0;
-
-Test.AnotherWay._print_result=function( url, msg, style, test_objects )
-{
-	var results=document.getElementById( "results" );
-	var r=results.appendChild( document.createElement( "p" ) );
-	r.id="result"+Test.AnotherWay._g_result_count;
-	++Test.AnotherWay._g_result_count;
-	r.onclick=Test.AnotherWay._toggle_detail;
-	var text="<span class=\"bullet\">   </span> ";
-	if( url!="" ) {
-		text+=url+":  ";
-	}
-	if( msg!=null ) {
-		text+=msg;
-	}
-	if( test_objects!=null ) {
-		// compose summary and detail texts
-		var total_ok=0;
-		var total_detail_ok=0;
-		var total_fail=0;
-		var total_detail_fail=0;
-		var no_plan=0;
-
-		var detail=results.appendChild( document.createElement( "div" ) );
-
-		if( r.id.match( /^result(\d+)$/ ) ) {
-			detail.id="result_detail"+RegExp.$1;
-		}
-
-		for( var i=0; i<test_objects.length; ++i ) {
-			var o=test_objects[i];
-			var p;
-			var p_text;
-			p=document.createElement( "P" );
-			Test.AnotherWay._set_css_class( p, "result_detail" );
-			p_text=o.name;
-			if( o.n_fail>0 || o.exception || (o.n_plan!=null && o.n_plan!=o.n_ok+o.n_fail) || (o.n_plan==null && o.n_ok==0 && o.n_fail==0)) {
-				++total_fail;
-				p_text+=" <span class=\"fail\">";
-				if( o.n_plan!=null && o.n_plan!=o.n_ok+o.n_fail) {
-					p_text+="planned "+o.n_plan+" assertions but got "+(o.n_ok+o.n_fail)+"; ";
-				}
-				if(o.n_plan==null && o.n_ok==0 && o.n_fail==0) {
-					p_text+="test did not output anything";
-				}else {
-					p_text+=" fail "+o.n_fail;
-				}
-				p_text+="</span>";
-			}else {
-				++total_ok;
-			}
-			p_text+=" ok "+o.n_ok;
-			if( o.n_plan==null ) {
-				no_plan=1;
-				p_text+=" <span class=\"warning\">no plan</span>";
-			}
-			p.innerHTML=p_text;
-			detail.appendChild( p );
-			if( o.exception ) {
-				p=document.createElement( "P" );
-				Test.AnotherWay._set_css_class( p, "result_exception_detail" );
-				p.innerHTML="<span class=\"fail\">exception:</span> "+o.exception;
-				detail.appendChild( p );
-				p=document.createElement( "P" );
-				Test.AnotherWay._set_css_class( p, "result_exception_stack_detail" );
-				p.innerHTML=o.exception_stack.join( "<br/>" );
-				detail.appendChild( p );
-			}
-			for( var ii=0; ii<o.assertions.length; ++ii ) {
-				var oo=o.assertions[ii];
-				var status=oo.ok ? "ok" : "<span class=\"fail\">fail</span>";
-				p=document.createElement( "P" );
-				Test.AnotherWay._set_css_class( p, "result_micro_detail" );
-				p.innerHTML=status;
-				p.appendChild( document.createTextNode( " "+oo.name ) );
-				detail.appendChild( p );
-			}
-			total_detail_ok+=o.n_ok;
-			total_detail_fail+=o.n_fail;
-		}
-		if( total_fail || total_detail_fail ) {
-			text+=" fail "+total_fail;
-		}
-		text+=" ok "+total_ok+" (detailed:";
-		if( total_fail || total_detail_fail ) {
-			text+=" fail "+total_detail_fail;
-		}
-		text+=" ok "+total_detail_ok+")";
-		if( no_plan ) {
-			text+=" <span class=\"warning\">no plan</span>";
-		}
-		style= total_fail==0 ? "ok" : "fail";
-		detail.style.display= style=="fail" ? "block" : "none";
-		detail.style.cursor="text";
-	}
-	if( style!=null ) {
-		Test.AnotherWay._set_css_class( r, style );
-		if( style=="ok" ) {
-			++Test.AnotherWay._g_ok_pages;
-		}else if( style=="fail" || style=="badtest" ) {
-			++Test.AnotherWay._g_fail_pages;
-		}
-		var pages_total="";
-		if( Test.AnotherWay._g_fail_pages>0 ) {
-			pages_total+=" fail "+Test.AnotherWay._g_fail_pages;
-		}
-		pages_total+=" ok "+Test.AnotherWay._g_ok_pages;
-		Test.AnotherWay._update_results_total( pages_total );
-	}
-	r.innerHTML=text;
-	if( results.scrollHeight!=null && results.scrollTop!=null && results.offsetHeight!=null ) {
-		results.scrollTop=results.scrollHeight-results.offsetHeight;
-	}
-	// when test_objects is not null, the results are final - good time to clean up
-	if( test_objects!=null ) {
-		for( var i=0; i<test_objects.length; ++i ) {
-			var actions=test_objects[i].delay_actions;
-			for( var action_i=0; action_i<actions.length; ++action_i ) {
-				var action=actions[action_i];
-				if( action.action_kind=="window" && action.wnd_wnd!=null && !action.wnd_no_close ) {
-					action.wnd_wnd.close();
-					action.wnd_wnd=null;
-				}
-			}
-		}
-	}
-	return r;
-}
-Test.AnotherWay._unprint_result=function( child )
-{
-	var results=document.getElementById( "results" );
-	results.removeChild( child );
-}
-Test.AnotherWay._toggle_detail=function()
-{
-	if( this.id.match( /^result(\d+)$/ ) ) {
-		var detail=document.getElementById( "result_detail"+RegExp.$1 );
-		if( detail!=null ) {
-			if( detail.style.display=="none" ) {
-				detail.style.display="block";
-			}else if( detail.style.display=="block" ) {
-				detail.style.display="none";
-			}
-		}
-	}
-}
-Test.AnotherWay._update_msg_counter=function( msg, text )
-{
-	for( var i=0; i<msg.childNodes.length; ++i ) {
-		var item=msg.childNodes[i];
-		if( item.nodeName=="SPAN" && Test.AnotherWay._get_css_class( item )=="counter" ) {
-			item.innerHTML=text;
-		}
-	}
-}
-Test.AnotherWay._update_results_total=function( msg )
-{
-	var total=document.getElementById( "total" );
-	if( total ) {
-		total.innerHTML=msg;
-	}
-}
-Test.AnotherWay._results_clear_onclick=function()
-{
-	var results=document.getElementById( "results" );
-	results.innerHTML="";
-	Test.AnotherWay._update_results_total( "" );
-	Test.AnotherWay._g_ok_pages=0;
-	Test.AnotherWay._g_fail_pages=0;
-	var debug=document.getElementById( "debug" );
-	debug.innerHTML="";
-}
-
-Test.AnotherWay._get_css_class=function( o )
-{
-	var c=o.getAttribute( "className" );
-	if( c==null || c=="" ) {
-		c=o.getAttribute( "class" );
-	}
-	return c;
-}
-Test.AnotherWay._set_css_class=function( o, css_class )
-{
-	o.setAttribute( "className", css_class );
-	o.setAttribute( "class", css_class );
-}
-
-Test.AnotherWay._tab_onclick=function()
-{
-	var tab=this;
-	var tabs=[ document.getElementById( "debug_tab" ), document.getElementById( "results_tab" ) ];
-	var panes=[ document.getElementById( "debug" ), document.getElementById( "results" ) ];
-	for( var i=0; i<tabs.length; ++i ) {
-		if( tab==tabs[i] ) {
-			Test.AnotherWay._set_css_class( tabs[i], "active_tab" );
-			panes[i].style.display="block";
-		}else {
-			Test.AnotherWay._set_css_class( tabs[i], "inactive_tab" );
-			panes[i].style.display="none";
-		}
-	}
-}
-Test.AnotherWay._tab_mouseover=function()
-{
-	if( Test.AnotherWay._get_css_class( this )=="inactive_tab" ) {
-		Test.AnotherWay._set_css_class( this, "inactive_mouseover_tab" );
-	}
-}
-Test.AnotherWay._tab_mouseout=function()
-{
-	if( Test.AnotherWay._get_css_class( this )=="inactive_mouseover_tab" ) {
-		Test.AnotherWay._set_css_class( this, "inactive_tab" );
-	}
-}
-
-// recording mouse input
-Test.AnotherWay._record_check_onfocus=function()
-{
-	var o=this;
-	var check_select=o.type!="text";
-	var div=document.getElementById( "record_div" );
-	var inputs=div.getElementsByTagName( "input" );
-	for( var i=0; i<inputs.length; ++i ) {
-		var input=inputs[i];
-		if( input.type=="radio" ) {
-			if( input.value=="select" ) {
-				input.checked=check_select;
-			}else if( input.value=="input" ) {
-				input.checked=!check_select;
-			}
-		}
-	}
-}
-
-Test.AnotherWay._g_no_record_msg=null; // not null - recording is unavailable
-Test.AnotherWay._g_record_timeout_cnt=0; // opening window for a page for recording
-Test.AnotherWay._g_record_url=null;
-Test.AnotherWay._g_record_wnd=null;
-Test.AnotherWay._g_record_random_id=null; // added to element ids of record_control div so that they do not clash with ids already in the page for which input is recorded
-Test.AnotherWay._g_record_keydown=null; // recording control - which key is down
-Test.AnotherWay._g_record_ctrl_keydown=false;
-Test.AnotherWay._g_record_shift_keydown=false;
-Test.AnotherWay._g_record_control_visible=true; // recording control ui state
-Test.AnotherWay._g_record_started;
-Test.AnotherWay._g_record_paused;
-Test.AnotherWay._g_record_include_mousemove=false;
-Test.AnotherWay._g_record_start_time; // for time references
-Test.AnotherWay._g_record_pause_start_time;
-Test.AnotherWay._g_record_update_time_interval; // showing time in the control ui
-Test.AnotherWay._g_record_waiting_for_results=false; // waiting for results window to open
-Test.AnotherWay._g_record_events; // recorded events
-Test.AnotherWay._g_record_under_cursor; // track element under cursor
-Test.AnotherWay._g_record_checkpoint_count; // for checkpoint numbering
-Test.AnotherWay._g_record_mouse_over_record_control; // for avoiding record control highlight on mouseover
-Test.AnotherWay._g_record_highlighted_element={ element: null, x: null, y: null };
-
-Test.AnotherWay._record_control_get_element=function( id )
-{
-	if( Test.AnotherWay._g_record_wnd!=null && Test.AnotherWay._g_record_wnd.document!=null ) {
-		return Test.AnotherWay._g_record_wnd.document.getElementById( id+Test.AnotherWay._g_record_random_id );
-	}else {
-		return null;
-	}
-}
-Test.AnotherWay._record_start_onclick=function() // "record" button on the run_tests.html: open a window for a page for which input is recorded
-{
-	if( Test.AnotherWay._g_no_record_msg!=null ) {
-		alert( Test.AnotherWay._g_no_record_msg );
-		return;
-	}
-	if( Test.AnotherWay._g_record_timeout_cnt>0
-	    || (Test.AnotherWay._g_record_wnd!=null && (Test.AnotherWay._g_record_wnd.closed!=null && !Test.AnotherWay._g_record_wnd.closed)) ) { // in opera, closed is null.
-		alert( "there is already window opened for recording input for a page "+Test.AnotherWay._g_record_url );
-		return;
-	}
-	var div=document.getElementById( "record_div" );
-	var inputs=div.getElementsByTagName( "input" );
-	var url=null;
-	for( var i=0; i<inputs.length; ++i ) {
-		var input=inputs[i];
-		if( input.type=="radio" ) {
-			if( input.value=="select" && input.checked ) {
-				var index=document.getElementById( "record_select" ).selectedIndex;
-				if( index>0 ) {
-					url=Test.AnotherWay._g_test_page_urls[index-1].url;
-				}
-			}else if( input.value=="input" && input.checked ) {
-				url=document.getElementById( "record_input" ).value;
-			}
-		}
-	}
-	if( url!=null ) {
-		Test.AnotherWay._g_record_url=url;
-		Test.AnotherWay._g_record_wnd=window.open( url, "_blank" );
-		if( Test.AnotherWay._g_record_wnd==null ) {
-			alert( "unable to open new window for a page: "+url );
-		}else {
-			Test.AnotherWay._g_record_timeout_cnt=50;
-			setTimeout( Test.AnotherWay._record_window_timeout, 100 );
-		}
-	}
-}
-Test.AnotherWay._record_window_timeout=function()
-{
-	if( Test.AnotherWay._is_url_loaded( Test.AnotherWay._g_record_url, Test.AnotherWay._g_record_wnd ) ) {
-		Test.AnotherWay._record_window_setup( Test.AnotherWay._g_record_wnd );
-	}else {
-		if( --Test.AnotherWay._g_record_timeout_cnt>0 ) {
-			setTimeout( Test.AnotherWay._record_window_timeout, 100 );
-		}else {
-			alert( "timeout expired while opening new window for a page: "+Test.AnotherWay._g_record_url );
-			Test.AnotherWay._g_record_wnd=null;
-			Test.AnotherWay._g_record_url=null;
-			Test.AnotherWay._g_record_timeout_cnt=0;
-		}
-	}
-}
-Test.AnotherWay._record_control_randomize_id=function( e, r )
-{
-	if( e.id!="" ) {
-		e.id=e.id+r;
-	}
-	for( var c=e.firstChild; c!=null; c=c.nextSibling ) {
-		Test.AnotherWay._record_control_randomize_id( c, r );
-	}
-}
-Test.AnotherWay._record_window_setup=function( wnd ) // insert recording control into the page for which input is recorded
-{
-	Test.AnotherWay._g_record_timeout_cnt=0;
-	var this_div=document.getElementById( "record_control" );
-	var record_control=wnd.document.importNode( this_div, true );
-	Test.AnotherWay._g_record_random_id=(1000*Math.random()).toFixed();
-	Test.AnotherWay._record_control_randomize_id( record_control, Test.AnotherWay._g_record_random_id );
-	Test.AnotherWay._g_record_control_visible=true;
-	Test.AnotherWay._g_record_started=false;
-	Test.AnotherWay._g_record_paused=false;
-	Test.AnotherWay._g_record_checkpoint_count=0;
-	Test.AnotherWay._g_record_mouse_over_record_control=false;
-	var doc=wnd.document;
-	doc.body.appendChild( record_control );
-	// opera sans-serif font is different
-	if( window.opera ) {
-		cursor_over_indicator=Test.AnotherWay._record_control_get_element( "record_cursor_over" );
-		cursor_over_indicator.style.width="18em";
-		cursor_over_indicator.style.height="2em";
-		cursor_over_indicator.style.fontSize="7pt";
-	}
-	doc.addEventListener( "keydown", Test.AnotherWay._record_control_keydown, true );
-	doc.addEventListener( "keyup", Test.AnotherWay._record_control_keyup, true );
-//	doc.addEventListener( "keypress", Test.AnotherWay._record_event, true ); // replaying is not supported by any known browser
-
-	doc.body.addEventListener( "mousemove", Test.AnotherWay._record_on_mousemove, true );
-	doc.body.addEventListener( "click", Test.AnotherWay._record_event, true );
-	doc.body.addEventListener( "mouseover", Test.AnotherWay._record_event, true );
-	doc.body.addEventListener( "mouseout", Test.AnotherWay._record_event, true );
-	doc.body.addEventListener( "mousedown", Test.AnotherWay._record_event, true );
-	doc.body.addEventListener( "mouseup", Test.AnotherWay._record_event, true );
-}
-Test.AnotherWay._record_control_key_disabled=function( k )
-{
-	if( k=="c" ) {
-		return !Test.AnotherWay._g_record_started;
-	}else if( k=="p" ) {
-		return !Test.AnotherWay._g_record_started;
-	}else if( k=="s" ) {
-		return Test.AnotherWay._g_record_waiting_for_results;
-	}else {
-		return false;
-	}
-}
-
-Test.AnotherWay._record_control_update_ui=function()
-{
-	var keydown_color="#fff";
-	var disabled_color="#aaa";
-	var button_color="#adf";
-	var active_color="#fdf";
-
-	var display={};
-	display[false]="none";
-	display[true]="inline";
-
-	var s_button=Test.AnotherWay._record_control_get_element( "record_s" );
-	var record_on=Test.AnotherWay._record_control_get_element( "record_on" );
-	var record_off=Test.AnotherWay._record_control_get_element( "record_off" );
-
-	s_button.style.backgroundColor= Test.AnotherWay._record_control_key_disabled( "s" ) ? disabled_color
-		: Test.AnotherWay._g_record_keydown=="s" ? keydown_color : Test.AnotherWay._g_record_started ? active_color : button_color;
-	record_on.style.display=display[!Test.AnotherWay._g_record_started];
-	record_off.style.display=display[Test.AnotherWay._g_record_started];
-
-	var h_button=Test.AnotherWay._record_control_get_element( "record_h" );
-	h_button.style.backgroundColor= Test.AnotherWay._g_record_keydown=="h" ? keydown_color : button_color;
-
-	var p_button=Test.AnotherWay._record_control_get_element( "record_p" );
-	var record_pause_on=Test.AnotherWay._record_control_get_element( "record_pause_on" );
-	var record_pause_off=Test.AnotherWay._record_control_get_element( "record_pause_off" );
-	p_button.style.backgroundColor= Test.AnotherWay._record_control_key_disabled( "p" ) ? disabled_color
-		: Test.AnotherWay._g_record_keydown=="p" ? keydown_color : Test.AnotherWay._g_record_paused ? active_color : button_color;
-	record_pause_on.style.display=display[!Test.AnotherWay._g_record_paused];
-	record_pause_off.style.display=display[Test.AnotherWay._g_record_paused];
-
-	var m_button=Test.AnotherWay._record_control_get_element( "record_m" );
-	var record_include_mousemove=Test.AnotherWay._record_control_get_element( "record_include_mousemove" );
-	var record_omit_mousemove=Test.AnotherWay._record_control_get_element( "record_omit_mousemove" );
-	m_button.style.backgroundColor= Test.AnotherWay._g_record_keydown=="m" ? keydown_color : Test.AnotherWay._g_record_include_mousemove ? active_color : button_color;
-	record_include_mousemove.style.display=display[!Test.AnotherWay._g_record_include_mousemove];
-	record_omit_mousemove.style.display=display[Test.AnotherWay._g_record_include_mousemove];
-
-	var c_button=Test.AnotherWay._record_control_get_element( "record_c" );
-	c_button.style.backgroundColor= Test.AnotherWay._record_control_key_disabled( "c" ) ? disabled_color
-		: Test.AnotherWay._g_record_keydown=="c" ? keydown_color : button_color;
-
-	var record_indicator=Test.AnotherWay._record_control_get_element( "record_indicator" );
-	record_indicator.style.display=display[Test.AnotherWay._g_record_started];
-
-	var pause_indicator=Test.AnotherWay._record_control_get_element( "record_pause_indicator" );
-	pause_indicator.style.display=display[Test.AnotherWay._g_record_paused];
-
-	var record_control=Test.AnotherWay._record_control_get_element( "record_control" );
-	record_control.style.display= Test.AnotherWay._g_record_control_visible ? "block" : "none";
-
-	var shift_button=Test.AnotherWay._record_control_get_element( "record_shift_key" );
-	shift_button.style.backgroundColor= Test.AnotherWay._g_record_shift_keydown ? keydown_color : button_color;
-
-	var ctrl_button=Test.AnotherWay._record_control_get_element( "record_ctrl_key" );
-	ctrl_button.style.backgroundColor= Test.AnotherWay._g_record_ctrl_keydown ? keydown_color : button_color;
-}
-Test.AnotherWay._record_format_time=function( t )
-{
-	t=new Date( t );
-	var m=t.getMinutes();
-	var s=t.getSeconds();
-	var str= m==0 ? "" : m+"m ";
-	str+=s+"s.";
-	return str;
-}
-Test.AnotherWay._record_control_update_time=function()
-{
-	var time_display=Test.AnotherWay._record_control_get_element( "record_time" );
-	if( time_display!=null ) {
-		time_display.innerHTML=Test.AnotherWay._record_format_time( (new Date()).getTime()-Test.AnotherWay._g_record_start_time );
-	}
-}
-Test.AnotherWay._record_control_update_highlight=function( elem, style, event )
-{
-	if( elem==null ) {
-		Test.AnotherWay._record_highlight_border( null );
-	}else {
-		var pos=Test.AnotherWay._get_page_coords( elem );
-		if( style=="ball" || elem!=Test.AnotherWay._g_record_highlighted_element.element || pos.x!=Test.AnotherWay._g_record_highlighted_element.x || pos.y!=Test.AnotherWay._g_record_highlighted_element.y ) {
-			Test.AnotherWay._g_record_highlighted_element={ element: elem, x: pos.x, y: pos.y };
-			Test.AnotherWay._record_highlight_border( elem, style, event );
-		}
-	}
-}
-Test.AnotherWay._record_decode_key=function( event )
-{
-	var k=null;
-	if( event==null ) {
-		k=Test.AnotherWay._g_record_wnd.event.keyCode;
-	}else {
-		k=event.which;
-	}
-	if( k==83 ) {
-		return "s";
-	}else if( k==72 ) {
-		return "h";
-	}else if( k==73 ) {
-		return "i";
-	}else if( k==80 ) {
-		return "p";
-	}else if( k==67 ) {
-		return "c";
-	}else if( k==77 ) {
-		return "m";
-	}else if( k==16 ) {
-		return "shift";
-	}else if( k==17 ) {
-		return "ctrl";
-	}else if( k==18 ) {
-		return "alt";
-	}else if( k==19 ) {
-		return "pause";
-	}else if( k==123 ) {
-		return "f12";
-	}
-	return "";
-}
-Test.AnotherWay._record_control_keydown=function( event )
-{
-	var handled=false;
-	var k=Test.AnotherWay._record_decode_key( event );
-	if( k=="shift" ) {
-		Test.AnotherWay._g_record_shift_keydown=true;
-	}else if( k=="ctrl" ) {
-		Test.AnotherWay._g_record_ctrl_keydown=true;
-	}else if( k!="" && (Test.AnotherWay._g_record_keydown==null || Test.AnotherWay._g_record_keydown==k) ) {
-		if( Test.AnotherWay._g_record_ctrl_keydown && Test.AnotherWay._g_record_shift_keydown && !Test.AnotherWay._record_control_key_disabled( k ) ) {
-			Test.AnotherWay._g_record_keydown=k;
-			handled=true;
-		}
-	}else {
-		Test.AnotherWay._g_record_keydown="";
-	}
-	Test.AnotherWay._record_control_update_ui();
-	if( !handled ) {
-//		Test.AnotherWay._record_event( event ); // replaying is not supported in any known browser
-	}
-	return;
-}
-Test.AnotherWay._record_control_keyup=function( event )
-{
-	var handled=false;
-	var k=Test.AnotherWay._record_decode_key( event );
-	if( k=="shift" ) {
-		Test.AnotherWay._g_record_shift_keydown=false;
-	}else if( k=="ctrl" ) {
-		Test.AnotherWay._g_record_ctrl_keydown=false;
-	}else if( k!="" && k==Test.AnotherWay._g_record_keydown && Test.AnotherWay._g_record_ctrl_keydown && Test.AnotherWay._g_record_shift_keydown  ) {
-		if( k=="s" ) {
-			Test.AnotherWay._g_record_started=!Test.AnotherWay._g_record_started;
-			if( Test.AnotherWay._g_record_started ) {
-				Test.AnotherWay._g_record_events=[];
-				Test.AnotherWay._g_record_start_time=(new Date()).getTime();
-				Test.AnotherWay._record_control_update_time();
-				Test.AnotherWay._g_record_update_time_interval=window.setInterval( Test.AnotherWay._record_control_update_time, 200 );
-			}else {
-				Test.AnotherWay._record_control_update_highlight( null );
-				if( !Test.AnotherWay._g_record_paused ) {
-					window.clearInterval( Test.AnotherWay._g_record_update_time_interval );
-				}
-				Test.AnotherWay._g_record_waiting_for_results=true;
-				// open a new window for self, pass a parameter to dump recorded events as javascript code there
-				// (the easiest way to obtain a document from the same origin, so it's writable, is to open this same page again)
-				Test.AnotherWay._g_record_paused=false;
-				var loc=window.location;
-				loc=loc.protocol+"//"+loc.host+loc.pathname+"?recording_results="+Test.AnotherWay._g_record_random_id;
-				if( window.open( loc, "_blank" )==null ) {
-					alert( "unable to open new window for results" );
-				}
-			}
-			handled=true;
-		}else if( k=="h" ) {
-			Test.AnotherWay._g_record_control_visible=!Test.AnotherWay._g_record_control_visible;
-			handled=true;
-		}else if( k=="p" ) {
-			Test.AnotherWay._g_record_paused=!Test.AnotherWay._g_record_paused;
-			if( Test.AnotherWay._g_record_paused ) {
-				Test.AnotherWay._g_record_pause_start_time=(new Date()).getTime();
-				if( Test.AnotherWay._g_record_started ) {
-					window.clearInterval( Test.AnotherWay._g_record_update_time_interval );
-				}
-				Test.AnotherWay._record_control_update_highlight( null );
-			}else {
-				var pause_duration=(new Date()).getTime()-Test.AnotherWay._g_record_pause_start_time;
-				Test.AnotherWay._g_record_start_time+=pause_duration;
-				Test.AnotherWay._g_record_update_time_interval=window.setInterval( Test.AnotherWay._record_control_update_time, 200 );
-			}
-			handled=true;
-		}else if( k=="m" ) {
-			Test.AnotherWay._g_record_include_mousemove=!Test.AnotherWay._g_record_include_mousemove;
-			handled=true;
-		}else if( k=="c" ) {
-			var o=Test.AnotherWay._record_checkpoint();
-			Test.AnotherWay._record_display_checkpoint( o );
-			Test.AnotherWay._record_flash_border( "#24d" );
-			handled=true;
-		}
-	}
-	Test.AnotherWay._g_record_keydown=null;
-	Test.AnotherWay._record_control_update_ui();
-	if( !handled ) {
-//		Test.AnotherWay._record_event( event ); // replaying is not supported in any known browser
-	}
-	return;
-}
-Test.AnotherWay._record_html_node_path=function( node )
-{
-	if( node==null ) {
-		return null;
-	}
-	var path=[];
-	while( true ) {
-		if( node.id!=null && node.id!="" ) {
-			path.unshift( "#"+node.id+" "+node.nodeName );
-			break;
-		}else {
-			var parent_node=node.parentNode;
-			if( parent_node==null ) {
-				return []; // no BODY up the path - this node is screwed (browsers differ in what's above the body), discard
-			}else {
-				var i=0;
-				var found=false;
-				for( var child=parent_node.firstChild; child!=null; child=child.nextSibling ) {
-					if( child==node ) {
-						found=true;
-						break;
-					}
-					if( child.nodeType==1 ) { // count only HTML element nodes
-						++i;
-					}
-				}
-				if( !found ) {
-					i=-1;
-				}
-				path.unshift( i+" "+node.nodeName );
-				if( parent_node.nodeName=="BODY" || parent_node.nodeName=="body" ) {
-					break;
-				}
-				node=parent_node;
-			}
-		}
-	}
-	return path;
-}
-Test.AnotherWay._record_node_path_to_string=function( path )
-{
-	var s="";
-	if( path!=null ) {
-		for( var i=0; i<path.length; ++i ) {
-			s+= i==0 ? "" : ", ";
-			var elem=path[i].split( " " );
-			if( elem[0].charAt( 0 )=="#" ) {
-				s+=elem[1]+" "+elem[0];
-			}else {
-				s+=elem[1]+" ["+elem[0]+"]";
-			}
-		}
-	}
-	return s;
-}
-Test.AnotherWay._record_node_path_to_node=function( path_str, doc )
-{
-	if( path_str==null ) {
-		return null;
-	}
-	var path=path_str.split( "," );
-	var node=doc.body;
-	for( var i=0; i<path.length; ++i ) {
-		var node_i=path[i].split( " " )[0];
-		if( node_i.charAt( 0 )=="#" ) {
-			node=doc.getElementById( node_i.substring( 1 ) );
-		}else {
-			if( node_i<0 || node_i>=node.childNodes.length ) {
-				node=null;
-			}else {
-				node=node.firstChild;
-				while( node!=null ) {
-					if( node.nodeType==1 ) {  // count only HTML element nodes
-						if( node_i==0 ) {
-							break;
-						}
-						--node_i;
-					}
-					node=node.nextSibling;
-				}
-			}
-		}
-		if( node==null ) {
-			return null;
-		}
-	}
-	return node;
-}
-Test.AnotherWay._record_control_contains_id=function( s )
-{
-	return s.match( /^#record_[\w_]+/ ) && s.match( Test.AnotherWay._g_record_random_id );
-}
-Test.AnotherWay._record_checkpoint=function()
-{
-	var o={ type: "_checkpoint", time: (new Date()).getTime()-Test.AnotherWay._g_record_start_time, which: Test.AnotherWay._g_record_checkpoint_count++,
-			target: Test.AnotherWay._record_html_node_path( Test.AnotherWay._g_record_under_cursor ) };
-	Test.AnotherWay._g_record_events.push( o );
-	return o;
-}
-Test.AnotherWay._record_event=function( event )
-{
-	var unneeded=["rangeOffset","eventPhase","timeStamp","isTrusted","popupWindowFeatures","rangeOffset"];
-	if( Test.AnotherWay._g_record_started && !Test.AnotherWay._g_record_paused ) {
-		var o={};
-		for( var n in event ) {
-			var needed=!n.match( /^[A-Z0-9_]+$/ );
-			if( needed ) {
-				for( var ui=0; ui<unneeded.length; ++ui ) {
-					if( unneeded[ui]==n ) {
-						needed=false;
-						break;
-					}
-				}
-				if( needed ) {
-					var value=event[n];
-					if( typeof( value )!="object" && typeof( value )!="function" ) {
-						o[n]=value;
-					}else if( n=="target" || n=="relatedTarget" ) {
-						o[n]=Test.AnotherWay._record_html_node_path( value );
-					}
-				}
-			}
-		}
-		o["time"]=(new Date()).getTime()-Test.AnotherWay._g_record_start_time;
-		var over_record_control= o["target"]!=null && o["target"][0]!=null && Test.AnotherWay._record_control_contains_id( o["target"][0] );
-		if( !over_record_control ) {
-			Test.AnotherWay._g_record_events.push( o );
-		}
-	}
-	return true;
-}
-Test.AnotherWay._record_on_mousemove=function( event )
-{
-	var path=Test.AnotherWay._record_html_node_path( event.target );
-	var new_mouse_over_record_control= path!=null && path[0]!=null && Test.AnotherWay._record_control_contains_id( path[0] );
-	if( new_mouse_over_record_control!=Test.AnotherWay._g_record_mouse_over_record_control ) {
-		Test.AnotherWay._g_record_mouse_over_record_control=new_mouse_over_record_control;
-		Test.AnotherWay._record_control_update_ui();
-	}
-	if( event.target!=null && event.target!=Test.AnotherWay._g_record_under_cursor ) {
-		Test.AnotherWay._g_record_under_cursor=event.target;
-		var s="";
-		if( path==null || path[0]==null || !Test.AnotherWay._record_control_contains_id( path[0] ) ) {
-			s=Test.AnotherWay._record_node_path_to_string( path );
-		}
-		if( s=="" ) {
-			s=" ";
-		}
-		var cursor_over_indicator=Test.AnotherWay._record_control_get_element( "record_cursor_over" );
-		cursor_over_indicator.innerHTML=s;
-	}
-
-	var highlight_element=null;
-	if( !Test.AnotherWay._g_record_mouse_over_record_control && Test.AnotherWay._g_record_started && !Test.AnotherWay._g_record_paused ) {
-		highlight_element=event.target;
-	}
-	// highlight border disabled on recording - it causes page to scroll, issuing spurious mouseover/mouseout event
-	//Test.AnotherWay._record_control_update_highlight( highlight_element, "border" );
-
-	if( Test.AnotherWay._g_record_include_mousemove ) {
-		Test.AnotherWay._record_event( event );
-	}
-	return true;
-}
-Test.AnotherWay._record_display_checkpoint=function( o )
-{
-	var checkpoints_div=Test.AnotherWay._record_control_get_element( "record_checkpoints" );
-	var p=checkpoints_div.appendChild( checkpoints_div.ownerDocument.createElement( "div" ) );
-	p.style.marginTop="3px";
-	p.style.font="normal normal 8pt sans-serif";
-	p.style.color="#000";
-	p.style.textAligh="left";
-	p.style.position="relative";
-	p.style.width="100%";
-	var checkpoint_text="";
-	checkpoint_text+="#"+(o.which+1);
-	checkpoint_text+="  "+Test.AnotherWay._record_format_time( o.time );
-	if( o.target!=null ) {
-		checkpoint_text+=Test.AnotherWay._record_node_path_to_string( o.target );
-	}
-	p.appendChild( p.ownerDocument.createTextNode( checkpoint_text ) );
-}
-Test.AnotherWay._record_save_results=function( doc )
-{
-	// strange, but DOM-style append does not work here in opera 8.
-	var append=function( s ) { doc.write( "<div>"+s+"</div>" ); };
-	append( "/* paste this data into your javascript and pass it as an argument to replay_events method */" );
-	append( "{ checkpoints: [" );
-	var first_checkpoint=true;
-	for( var i=0; i<Test.AnotherWay._g_record_events.length; ++i ) {
-		var o=Test.AnotherWay._g_record_events[i];
-		if( o.type=="_checkpoint" ) {
-			var str= first_checkpoint ? "" : "}, ";
-			str+="function( tst, wnd ) { // #"+o.which+" time "+Test.AnotherWay._record_format_time( o.time )+" cursor was over "+Test.AnotherWay._record_node_path_to_string( o.target );
-			append( str );
-			first_checkpoint=false;
-		}
-	}
-	if( !first_checkpoint ) {
-		append( "}" );
-	}
-	append( "], events: [ " );
-	var prev_time=0;
-	for( var i=0; i<Test.AnotherWay._g_record_events.length; ++i ) {
-		var o=Test.AnotherWay._g_record_events[i];
-		var s="";
-		s+= "{";
-		var n_first=true;
-		for( var n in o ) {
-			if( n=="time" ) { // convert to relative time
-				var cur_time=o[n]-0;
-				o[n]=cur_time-prev_time;
-				prev_time=cur_time;
-			}
-			s+=n_first ? n : ", "+n;
-			s+=":";
-			if( o[n]==null ) {
-				s+="null";
-			}else {
-				s+="\""+o[n]+"\"";
-			}
-			n_first=false;
-		}
-		s+= i==Test.AnotherWay._g_record_events.length-1 ? "}" : "},";
-		append( s );
-	}
-	append( "] }" );
-	append( ";" );
-}
-
-Test.AnotherWay._g_record_border; // border highlighting element under cursor
-Test.AnotherWay._g_record_border_flashes=[]; // array of { color: color, timeout: milliseconds }
-Test.AnotherWay._g_record_border_flashing=false;
-Test.AnotherWay._g_record_border_normal_color="#d4b";
-Test.AnotherWay._record_flash_border_timeout=function()
-{
-	var color=Test.AnotherWay._g_record_border_normal_color;
-	var timeout=null;
-	if( Test.AnotherWay._g_record_border_flashes.length!=0 ) {
-		color=Test.AnotherWay._g_record_border_flashes[0].color;
-		timeout=Test.AnotherWay._g_record_border_flashes[0].timeout;
-		Test.AnotherWay._g_record_border_flashes.splice( 0, 1 );
-	}
-	if( Test.AnotherWay._g_record_border!=null ) {
-		for( var i=0; i<Test.AnotherWay._g_record_border.length; ++i ) {
-			Test.AnotherWay._g_record_border[i].style.backgroundColor=color;
-		}
-	}
-	if( timeout!=null ) {
-		setTimeout( Test.AnotherWay._record_flash_border_timeout, timeout );
-	}else {
-		Test.AnotherWay._g_record_border_flashing=false;
-	}
-}
-Test.AnotherWay._get_page_coords=function( elm )
-{
-	var point = { x: 0, y: 0 };
-	while( elm )  {
-		point.x+=elm.offsetLeft;
-		point.y+=elm.offsetTop;
-		elm=elm.offsetParent;
-	 }
-	return point;
-}
-Test.AnotherWay._set_page_coords=function( elm, x, y )
-{
-	var parent_coords={ x: 0, y: 0 };
-	if( elm.offsetParent )  {
-		parent_coords=Test.AnotherWay._get_page_coords( elm.offsetParent );
-	}
-	var new_x=x-parent_coords.x;
-	if( new_x<0 ) {
-		new_x=0;
-	}
-	elm.style.left=new_x+'px';
-	var new_y=y-parent_coords.y;
-	if( new_y<0 ) {
-		new_y=0;
-	}
-	elm.style.top=new_y+'px';
-}
-Test.AnotherWay._record_setup_highlight_positions=function( element, style, coords, positions )
-{
-	if( style=="border" ) {
-		var width=element.clientWidth;
-		var height=element.clientHeight;
-		var step=0;
-		var thickness=2;
-		var fudge_expand=4;
-		positions.push( { x: coords.x-step-thickness, y: coords.y-step-thickness, width: width+2*step+2*thickness+fudge_expand, height: thickness } );
-		positions.push( { x: coords.x+width+step+fudge_expand, y: coords.y-step-thickness, width: thickness, height: height+2*step+2*thickness+fudge_expand } );
-		positions.push( { x:positions[0].x, y:positions[0].y, width:positions[0].width, height:positions[0].height } );
-		positions.push( { x:positions[1].x, y:positions[1].y, width:positions[1].width, height:positions[1].height } );
-		positions[2].y+=height+thickness+2*step+fudge_expand;
-		positions[3].x-=width+thickness+2*step+fudge_expand;
-	}else if( style=="ball" ) {
-		positions.push( { x: coords.x+2, y: coords.y, width: 2, height: 6 } );
-		positions.push( { x: coords.x, y: coords.y+2, width: 6, height: 2 } );
-		positions.push( { x: coords.x+1, y: coords.y+1, width: 4, height: 4 } );
-	}
-}
-Test.AnotherWay._record_highlight_border=function( element, style, event ) // null - hide border
-{
-	if( element!=null ) {
-		if( Test.AnotherWay._g_record_border==null || Test.AnotherWay._g_record_border[0].ownerDocument!=element.ownerDocument ) {
-			Test.AnotherWay._g_record_border=[];
-			var n= style=="border" ? 4 : style=="ball" ? 3 : 0;
-			for( var i=0; i<4; ++i ) {
-				var b=element.ownerDocument.createElement( "div" );
-				b.style.position="absolute";
-				b.style.zIndex="1";
-				b.style.backgroundColor=Test.AnotherWay._g_record_border_normal_color;
-				element.ownerDocument.body.appendChild( b );
-				Test.AnotherWay._g_record_border.push( b );
-			}
-		}
-		var coords=null;
-		if( style=="border" ) {
-			coords=Test.AnotherWay._get_page_coords( element );
-		}else if( style=="ball" ) {
-			if( event!=null ) {
-				if( event.pageX!=null && event.pageY!=null ) {
-					coords={ x: event.pageX-0, y: event.pageY-0 };
-				}else if( event.clientX!=null && event.clientY!=null ) {
-					var doc=element.ownerDocument;
-					if( doc!=null ) {
-						coords={ x: (event.clientX-0)+doc.body.scrollLeft, y: (event.clientY-0)+doc.body.scrollTop };
-					}
-				}
-			}
-		}
-		if( coords!=null && element.clientWidth!=null && element.clientHeight!=null ) {
-			var positions=[];
-			Test.AnotherWay._record_setup_highlight_positions( element, style, coords, positions );
-			for( var i=0; i<positions.length; ++i ) {
-				var b=Test.AnotherWay._g_record_border[i];
-				var p=positions[i];
-				Test.AnotherWay._set_page_coords( b, p.x, p.y );
-				b.style.width=p.width+"px";
-				b.style.height=p.height+"px";
-				b.style.display="block";
-			}
-		}
-	}else {
-		if( Test.AnotherWay._g_record_border!=null ) {
-			for( var i=0; i<Test.AnotherWay._g_record_border.length; ++i ) {
-				Test.AnotherWay._g_record_border[i].style.display="none";
-			}
-		}
-	}
-}
-Test.AnotherWay._record_flash_border=function( color )
-{
-	if( Test.AnotherWay._g_record_border_flashing ) { //already
-		Test.AnotherWay._g_record_border_flashes.push( { color: Test.AnotherWay._g_record_border_normal_color, timeout:300 } );
-		Test.AnotherWay._g_record_border_flashes.push( { color: color, timeout:600 } );
-	}else {
-		Test.AnotherWay._g_record_border_flashing=true;
-		Test.AnotherWay._g_record_border_flashes.push( { color: color, timeout:600 } );
-		Test.AnotherWay._record_flash_border_timeout();
-	}
-}
-Test.AnotherWay._record_prepare_doc_for_results=function()
-{
-	document.open();
-	document.write( "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">" );
-	document.write( "<html><head><title> Input recording results</title>" );
-	document.write( "<style type=\"text/css\">" );
-	document.write( "body { font: normal normal smaller sans-serif; }" );
-	document.write( "div { margin-top: 3px; }" );
-	document.write( "</style></head><body>" );
-	// opera and mozilla disagree over who the opener is.
-	if( typeof( window.opener.Test )!="undefined" && typeof( window.opener.Test.AnotherWay )!="undefined" ) {
-		window.opener.Test.AnotherWay._record_save_results( document );
-		window.opener.Test.AnotherWay._g_record_waiting_for_results=false;
-		window.opener.Test.AnotherWay._record_control_update_ui();
-	}else if( typeof( window.opener.opener.Test  )!="undefined" && typeof( window.opener.opener.Test.AnotherWay )!="undefined" ) {
-		window.opener.opener.Test.AnotherWay._record_save_results( document );
-		window.opener.opener.Test.AnotherWay._g_record_waiting_for_results=false;
-		window.opener.opener.Test.AnotherWay._record_control_update_ui();
-	}
-	document.write( "</body>" );
-	document.close();
-}
-
-// global initialization
-onload=function()
-{
-	if( window.opera ) {
-		var good_opera=typeof( window.opera.version )=="function";
-		good_opera=good_opera && window.opera.version().match( /^\s*(\d+)/ );
-		good_opera=good_opera && RegExp.$1>=8;
-	}
-	var span=document.createElement( "SPAN" );
-	span.innerHTML="<!--[if IE]><br /><![endif]-"+"->";
-	var is_ie=span.getElementsByTagName( "BR" ).length>0;
-
-	Test.AnotherWay._g_test_iframe=window.frames.test_iframe;
-
-	var query_str=window.location.search;
-	if( query_str.charAt( 0 )=="?" ) {
-		query_str=query_str.substring( 1 );
-	}
-	var testlist_page="list-tests.html";
-	var auto_run=false;
-	if( query_str!="" ) {
-		var params=[query_str];
-		if( query_str.indexOf( ";" )!=-1 ) {
-			params=query_str.split( ";" );
-		}else if( query_str.indexOf( "&" )!=-1 ) {
-			params=query_str.split( "&" );
-		}
-		for( var param_i=0; param_i<params.length; ++param_i ) {
-			var param=params[param_i].split( "=" );
-			if( param[0]=="recording_results" ) {
-				if( window.opener!=null ) {
-					// we were told to show recording results - replace everything in the document with the results
-					Test.AnotherWay._record_prepare_doc_for_results();
-					return;
-				}
-			}else if( param[0]=="testpage" ) {
-				Test.AnotherWay._add_test_page_url( decodeURIComponent( param[1] ), "anotherway" );
-			}else if( param[0]=="jsantestpage" ) {
-				Test.AnotherWay._add_test_page_url( decodeURIComponent( param[1] ), "jsan" );
-			}else if( param[0]=="testlist" ) {
-				testlist_page=decodeURIComponent( param[1] );
-			}else if( param[0]=="testframe" ) {
-				if( window.opera && !good_opera ) {
-					Test.AnotherWay._show_error( "testframe parameter does not work in versions of Opera prior to 8.0. Sorry (pathches are welcome)." );
-					// Opera 7 barfs on attempt to access frame.frameElement.
-					// if someone knows a way to assign onload handler to that iframe in Opera 7
-					// without disrupting code that works in other browsers, patches are welcome.
-				}else {
-					var frame_path=param[1].split( "." );
-					var frame=top;
-					for( var frame_path_i=0; frame_path_i<frame_path.length; ++frame_path_i ) {
-						frame=frame[frame_path[frame_path_i]];
-					}
-					if( frame==null ) {
-						Test.AnotherWay._show_error( "unable to find frame specified for loading test pages: "+param[1] );
-					}else {
-						if( frame.frameElement!=null ) { // for the following assignement to onload to work, frameElement is required
-							frame=frame.frameElement;
-						}
-						Test.AnotherWay._g_test_iframe=frame;
-					}
-				}
-			}else if( param[0]=="testframe_no_clear" ) {
-				Test.AnotherWay._g_test_frame_no_clear=true;
-			}else if( param[0]=="windows" ) {
-                if (param[1] == "none") {
-                    Test.AnotherWay._test_object_t.prototype.open_window=null;
-                }
-			}else if( param[0]=="run" ) {
-				auto_run=true;
-				if( param[1]=="all" ) {
-					Test.AnotherWay._g_pages_to_run="all";
-				}else {
-					if( Test.AnotherWay._g_pages_to_run==null || Test.AnotherWay._g_pages_to_run=="all" ) {
-						Test.AnotherWay._g_pages_to_run=[];
-					}
-					var pages=param[1].split( "," );
-					for( var i=0; i<pages.length; ++i ) {
-						Test.AnotherWay._g_pages_to_run.push( pages[i] );
-					}
-				}
-			}
-		}
-	}
-	if( Test.AnotherWay._g_test_page_urls.length==0 ) {  // if no individual pages were given on the command line, load the list
-		var result=Test.AnotherWay._set_iframe_location( window.frames["list_iframe"], testlist_page );
-		if( result.msg!=null ) {
-			Test.AnotherWay._show_error( result.msg );
-		}
-		Test.AnotherWay._g_run_on_list_load=auto_run;
-	}else {
-		Test.AnotherWay._g_run_on_main_load=auto_run;
-	}
-
-	var f=Test.AnotherWay._g_test_iframe;
-	try {
-		if( f.attachEvent!=null ) {
-			f.attachEvent( "onload", Test.AnotherWay._test_page_onload );
-		}else {
-			f.onload=Test.AnotherWay._test_page_onload;
-		}
-		if( Test.AnotherWay._g_test_iframe.nodeType!=null && Test.AnotherWay._g_test_iframe.contentWindow!=null ) { // it's iframe element, not the iframe. we need iframe.
-			Test.AnotherWay._g_test_iframe=Test.AnotherWay._g_test_iframe.contentWindow;
-		}
-	}catch(e) {
-		// ignore stupid opera error if the frame has onload handler assigned in the inline html
-	}
-	var handlers={
-		"run_all": { "onclick": Test.AnotherWay._run_all_onclick },
-		"run_selected": { "onclick": Test.AnotherWay._run_selected_onclick },
-		"unselect_all": { "onclick": Test.AnotherWay._unselect_all_onclick },
-		"record_select": { "onfocus": Test.AnotherWay._record_check_onfocus },
-		"record_input": { "onfocus": Test.AnotherWay._record_check_onfocus },
-		"record_start": { "onclick": Test.AnotherWay._record_start_onclick },
-		"clear_btn": { "onclick": Test.AnotherWay._results_clear_onclick },
-		"results_tab": { "onclick": Test.AnotherWay._tab_onclick, "onmouseover": Test.AnotherWay._tab_mouseover, "onmouseout": Test.AnotherWay._tab_mouseout },
-		"debug_tab": { "onclick": Test.AnotherWay._tab_onclick, "onmouseover": Test.AnotherWay._tab_mouseover, "onmouseout": Test.AnotherWay._tab_mouseout }
-	};
-	for( var hs in handlers ) {
-		var o=document.getElementById( hs );
-		if( o!=null ) {
-			for( var h in handlers[hs] ) {
-				o[h]=handlers[hs][h];
-			}
-		}else {
-			Test.AnotherWay._show_error( "unable to set "+h+" handler: id "+hs+" not found" );
-		}
-	}
-
-	if( window.opera && !good_opera ) {
-		Test.AnotherWay._g_no_record_msg="Input events recording and replaying is not available in opera versions prior to 8.0.";
-	}
-	if( is_ie ) {
-		Test.AnotherWay._g_no_record_msg="Input events recording and replaying is not available in internet explorer.";
-	}
- 	if( Test.AnotherWay._g_no_record_msg!=null ) {
-		var no_record_p=document.getElementById( "record_not_supported" );
-		no_record_p.style.display="block";
-		no_record_p.appendChild( document.createTextNode( Test.AnotherWay._g_no_record_msg ) );
-	}
-
-	Test.AnotherWay._g_main_loaded=true;
-	if( Test.AnotherWay._g_run_on_main_load ) {
-		Test.AnotherWay._g_run_on_main_load=false;
-		Test.AnotherWay._run_pages_to_run();
-	}
-}
-// -->
-</script>
-<script type="text/javascript" src="xml_eq.js"></script>
-<script type="text/javascript" src="geom_eq.js"></script>
-</head><body>
-
-<div id="col1">
-<div id="col1_header">Test pages:</div>
-<div id="scroller">
-<table id="testtable">
-</table>
-</div>
-<div id="run_buttons">
-<input type="button" value=" clear " id="clear_btn" />
-<input type="button" value=" run all " id="run_all" />
-<input type="button" value=" run selected " id="run_selected" />
-<input type="button" value=" unselect all " id="unselect_all" />
-</div>
-<input type="checkbox" id="dont_close_test_windows" /> do not close windows opened by tests
-<div id="error"></div>
-<div id="record_div">
-<p id="record_not_supported" style="display:none"></p>
-<p>Record mouse input for the page:</p>
-<p><input type="radio" name="record_choose" value="select" checked="checked" /> <select id="record_select"><option selected="selected">-- select a page: --</option></select></p>
-<p><input type="radio" name="record_choose" value="input" /> or enter page url: <input type="text" id="record_input" /></p>
-<p><input type="button" value=" record " id="record_start" /></p>
-</div>
-</div>
-
-<div id="col2">
-<div id="right_header">
-<span id="results_count">Results: <span id="total"></span></span>
-<span id="results_tab" class="active_tab" style="visibility:hidden">Results</span>
-<span id="debug_tab" class="inactive_tab" style="visibility:hidden">Debug</span>
-</div>
-<div id="right_frame">
-<div id="results"></div>
-<div id="debug"></div>
-</div>
-</div>
-
-<span style="display:none">
-<iframe name="list_iframe" onload="Test.AnotherWay._list_iframe_onload();"></iframe>
-<iframe name="test_iframe" onload="Test.AnotherWay._test_page_onload();"></iframe>
-
-<!-- record_control div is to be imported into other documents, so all its styles are inline -->
--<div id="record_control" style="position:absolute;bottom:0;left:0;margin:0;padding:0.5em;width:22em;height:22em;border:1px solid;background:#ffd;font: normal normal 8pt sans-serif; color:#000; text-align: left">
-
-<p style="margin:0 0 0 0; padding:0">
- 
-<span style="display:none;font-weight:bold;color:#408" id="record_indicator">
-recording. <span style="font-weight:normal">time: <span id="record_time"></span></span><span id="record_pause_indicator"> paused</span>
-</span>
-</p>
-
-<div id="record_cursor_over" style="margin:0;padding:2px;width:14em;height:1.1em;overflow:hidden;float:right;border:1px solid #777;background:#fff;font: normal normal 8pt sans-serif;position:relative;top:3px;color:#000;text-align:left;"> </div>
-<p style="margin:2px 0 0 0; padding:0">
-cursor is over
-</p>
-
-<p style="margin:8px 0 0 0; padding:0;">
- keyboard control: press
- <span id="record_ctrl_key" style="border:1px solid #226;background:#adf;padding:0 0.5em">ctrl</span> -
- <span id="record_shift_key" style="border:1px solid #226;background:#adf;padding:0 0.5em">shift</span> -
-</p>
-
-<p style="margin:4px 0 0 0; padding:0">
-<span id="record_s" style="border:1px solid #226;background:#adf;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">s</span>
-<span id="record_on">to <b>start</b> recording</span>
-<span id="record_off" style="display:none">to <b>stop</b> recording</span>
-</p>
-
-<p style="margin:4px 0 0 0; padding:0">
-<span id="record_h" style="border:1px solid #226;background:#adf;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">h</span>
-<span>to <b>hide/show</b> this window</span>
-</p>
-
-<p style="margin:4px 0 0 0; padding:0">
-<span id="record_m" style="border:1px solid #226;background:#adf;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">m</span>
-<span id="record_include_mousemove">to <b> record</b> mousemove</span>
-<span id="record_omit_mousemove" style="display:none">to <b>omit</b> mousemove</span>
-</p>
-
-<p style="margin:4px 0 0 0; padding:0">
-<span id="record_p" style="border:1px solid #226;background:#aaa;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">p</span>
-<span id="record_pause_on">to <b> pause</b> recording</span>
-<span id="record_pause_off" style="display:none">to <b>continue</b> recording</span>
-</p>
-
-<p style="margin:4px 0 0 0; padding:0">
-<span id="record_c" style="border:1px solid #226;background:#aaa;width:1.2em;float:left;font-weight:bold;text-align:center;margin-right:0.5em">c</span>
-<span>to add checkpoint</span>
-</p>
-
-<p style="margin:6px 0 0 0; padding:0">
-checkpoints:
-</p>
-<div id="record_checkpoints" style="position:relative;width:100%;height:6em;overflow:auto;font: normal normal 8pt sans-serif; color:#000; text-align: left">
-</div>
-</div>
-
-</span>
-<script>
-    if (/noscroll/.test(location.href)) {
-        document.getElementById('scroller').style.height='auto';
-        document.getElementById('right_frame').style.height='auto';
-    }
-</script>
-</body></html>
+        </script>
+    </body>
+</html>
diff --git a/tests/xml_eq.js b/tests/xml_eq.js
deleted file mode 100644
index 47084cd..0000000
--- a/tests/xml_eq.js
+++ /dev/null
@@ -1,311 +0,0 @@
-/**
- * File: xml_eq.js
- * Adds a xml_eq method to AnotherWay test objects.
- *
- */
-
-(function() {
-
-    /**
-     * Function: createNode
-     * Given a string, try to create an XML DOM node.  Throws string messages
-     *     on failure.
-     * 
-     * Parameters:
-     * text - {String} An XML string.
-     *
-     * Returns:
-     * {DOMElement} An element node.
-     */
-    function createNode(text) {
-        
-        var index = text.indexOf('<');
-        if(index > 0) {
-            text = text.substring(index);
-        }
-        
-        var doc;
-        if(window.ActiveXObject && !this.xmldom) {
-            doc = new ActiveXObject("Microsoft.XMLDOM");
-            try {
-                doc.loadXML(text);
-            } catch(err) {
-                throw "ActiveXObject loadXML failed: " + err;
-            }
-        } else if(window.DOMParser) {
-            try {
-                doc = new DOMParser().parseFromString(text, 'text/xml');
-            } catch(err) {
-                throw "DOMParser.parseFromString failed";
-            }
-            if(doc.documentElement && doc.documentElement.nodeName == "parsererror") {
-                throw "DOMParser.parseFromString returned parsererror";
-            }
-        } else {
-            var req = new XMLHttpRequest();
-            req.open("GET", "data:text/xml;charset=utf-8," +
-                     encodeURIComponent(text), false);
-            if(req.overrideMimeType) {
-                req.overrideMimeType("text/xml");
-            }
-            req.send(null);
-            doc = req.responseXML;
-        }
-        
-        var root = doc.documentElement;
-        if(!root) {
-            throw "no documentElement";
-        }
-        return root;
-    }
-    
-    /**
-     * Function assertEqual
-     * Test two objects for equivalence (based on ==).  Throw an exception
-     *     if not equivalent.
-     * 
-     * Parameters:
-     * got - {Object}
-     * expected - {Object}
-     * msg - {String} The message to be thrown.  This message will be appended
-     *     with ": got {got} but expected {expected}" where got and expected are
-     *     replaced with string representations of the above arguments.
-     */
-    function assertEqual(got, expected, msg) {
-        if(got === undefined) {
-            got = "undefined";
-        } else if (got === null) {
-            got = "null";
-        }
-        if(expected === undefined) {
-            expected = "undefined";
-        } else if (expected === null) {
-            expected = "null";
-        }
-        if(got != expected) {
-            throw msg + ": got '" + got + "' but expected '" + expected + "'";
-        }
-    }
-    
-    /**
-     * Function assertElementNodesEqual
-     * Test two element nodes for equivalence.  Nodes are considered equivalent
-     *     if they are of the same type, have the same name, have the same
-     *     namespace prefix and uri, and if all child nodes are equivalent.
-     *     Throws a message as exception if not equivalent.
-     * 
-     * Parameters:
-     * got - {DOMElement}
-     * expected - {DOMElement}
-     * options - {Object} Optional object for configuring test options.
-     *
-     * Valid options:
-     * prefix - {Boolean} Compare element and attribute
-     *     prefixes (namespace uri always tested).  Default is false.
-     * includeWhiteSpace - {Boolean} Include whitespace only nodes when
-     *     comparing child nodes.  Default is false.
-     */
-    function assertElementNodesEqual(got, expected, options) {
-        var testPrefix = (options && options.prefix === true);
-        
-        // compare types
-        assertEqual(got.nodeType, expected.nodeType, "Node type mismatch");
-        
-        // compare names
-        var gotName = testPrefix ?
-            got.nodeName : got.nodeName.split(":").pop();
-        var expName = testPrefix ?
-            expected.nodeName : expected.nodeName.split(":").pop();
-        assertEqual(gotName, expName, "Node name mismatch");
-        
-        // for text nodes compare value
-        if(got.nodeType == 3) {
-            assertEqual(
-                got.nodeValue, expected.nodeValue, "Node value mismatch"
-            );
-        }
-        // for element type nodes compare namespace, attributes, and children
-        else if(got.nodeType == 1) {
-            
-            // test namespace alias and uri
-            if(got.prefix || expected.prefix) {
-                if(testPrefix) {
-                    assertEqual(
-                        got.prefix, expected.prefix,
-                        "Bad prefix for " + got.nodeName
-                    );
-                }
-            }
-            if(got.namespaceURI || expected.namespaceURI) {
-                assertEqual(
-                    got.namespaceURI, expected.namespaceURI,
-                    "Bad namespaceURI for " + got.nodeName
-                );
-            }
-            
-            // compare attributes - disregard xmlns given namespace handling above
-            var gotAttrLen = 0;
-            var gotAttr = {};
-            var expAttrLen = 0;
-            var expAttr = {};
-            var ga, ea, gn, en;
-            for(var i=0; i<got.attributes.length; ++i) {
-                ga = got.attributes[i];
-                if(ga.specified === undefined || ga.specified === true) {
-                    if(ga.name.split(":").shift() != "xmlns") {
-                        gn = testPrefix ? ga.name : ga.name.split(":").pop();
-                        gotAttr[gn] = ga;
-                        ++gotAttrLen;
-                    }
-                }
-            }
-            for(var i=0; i<expected.attributes.length; ++i) {
-                ea = expected.attributes[i];
-                if(ea.specified === undefined || ea.specified === true) {
-                    if(ea.name.split(":").shift() != "xmlns") {
-                        en = testPrefix ? ea.name : ea.name.split(":").pop();
-                        expAttr[en] = ea;
-                        ++expAttrLen;
-                    }
-                }
-            }
-            assertEqual(
-                gotAttrLen, expAttrLen,
-                "Attributes length mismatch for " + got.nodeName
-            );
-            var gv, ev;
-            for(var name in gotAttr) {
-                if(expAttr[name] == undefined) {
-                    throw "Attribute name " + gotAttr[name].name + " expected for element " + got.nodeName;
-                }
-                // test attribute namespace
-                assertEqual(
-                    gotAttr[name].namespaceURI, expAttr[name].namespaceURI,
-                    "Attribute namespace mismatch for element " +
-                    got.nodeName + " attribute name " + gotAttr[name].name
-                );
-                // test attribute value
-                assertEqual(
-                    gotAttr[name].value, expAttr[name].value,
-                    "Attribute value mismatch for element " + got.nodeName +
-                    " attribute name " + gotAttr[name].name
-                );
-            }
-            
-            // compare children
-            var gotChildNodes = getChildNodes(got, options);
-            var expChildNodes = getChildNodes(expected, options);
-
-            assertEqual(
-                gotChildNodes.length, expChildNodes.length,
-                "Children length mismatch for " + got.nodeName
-            );
-            for(var j=0; j<gotChildNodes.length; ++j) {
-                try {
-                    assertElementNodesEqual(
-                        gotChildNodes[j], expChildNodes[j], options
-                    );
-                } catch(err) {
-                    throw "Bad child " + j + " for element " + got.nodeName + ": " + err;
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Function getChildNodes
-     * Returns the child nodes of the specified nodes. By default this method
-     *     will ignore child text nodes which are made up of whitespace content.
-     *     The 'includeWhiteSpace' option is used to control this behaviour.
-     * 
-     * Parameters:
-     * node - {DOMElement}
-     * options - {Object} Optional object for test configuration.
-     * 
-     * Valid options:
-     * includeWhiteSpace - {Boolean} Include whitespace only nodes when
-     *     comparing child nodes.  Default is false.
-     * 
-     * Returns:
-     * {Array} of {DOMElement}
-     */
-    function getChildNodes(node, options) {
-        //check whitespace
-        if (options && options.includeWhiteSpace) {
-            return node.childNodes;
-        }
-        else {
-           nodes = [];
-           for (var i = 0; i < node.childNodes.length; i++ ) {
-              var child = node.childNodes[i];
-              if (child.nodeType == 1) {
-                 //element node, add it 
-                 nodes.push(child);
-              }
-              else if (child.nodeType == 3) {
-                 //text node, add if non empty
-                 if (child.nodeValue && 
-                       child.nodeValue.replace(/^\s*(.*?)\s*$/, "$1") != "" ) { 
-
-                    nodes.push(child);
-                 }
-              }
-           }
-  
-           return nodes;
-        }
-    } 
-    
-    /**
-     * Function: Test.AnotherWay._test_object_t.xml_eq
-     * Test if two XML nodes are equivalent.  Tests for same node types, same
-     *     node names, same namespace URI, same attributes, and recursively
-     *     tests child nodes for same criteria.
-     *
-     * (code)
-     * t.xml_eq(got, expected, message);
-     * (end)
-     * 
-     * Parameters:
-     * got - {DOMElement | String} A DOM node or XML string to test.
-     * expected - {DOMElement | String} The expected DOM node or XML string.
-     * msg - {String} A message to print with test output.
-     * options - {Object} Optional object for configuring test.
-     *
-     * Valid options:
-     * prefix - {Boolean} Compare element and attribute
-     *     prefixes (namespace uri always tested).  Default is false.
-     * includeWhiteSpace - {Boolean} Include whitespace only nodes when
-     *     comparing child nodes.  Default is false.
-     */
-    var proto = Test.AnotherWay._test_object_t.prototype;
-    proto.xml_eq = function(got, expected, msg, options) {
-        // convert arguments to nodes if string
-        if(typeof got == "string") {
-            try {
-                got = createNode(got);
-            } catch(err) {
-                this.fail(msg + ": got argument could not be converted to an XML node: " + err);
-                return;
-            }
-        }
-        if(typeof expected == "string") {
-            try {
-                expected = createNode(expected);
-            } catch(err) {
-                this.fail(msg + ": expected argument could not be converted to an XML node: " + err);
-                return;
-            }
-        }
-        
-        // test nodes for equivalence
-        try {
-            assertElementNodesEqual(got, expected, options);
-            this.ok(true, msg);
-        } catch(err) {
-            this.fail(msg + ": " + err);
-        }
-    }
-    
-})();
diff --git a/theme/default/framedCloud.css b/theme/default/framedCloud.css
deleted file mode 100644
index e69de29..0000000
diff --git a/theme/default/style.css b/theme/default/style.css
index 3aeac29..8e0abb7 100644
--- a/theme/default/style.css
+++ b/theme/default/style.css
@@ -23,16 +23,16 @@ div.olLayerDiv {
 }
 .olLayerGooglePoweredBy {
     left: 2px;
-    bottom: 15px;   
+    bottom: 15px;
 }
 .olLayerGoogleV3.olLayerGooglePoweredBy {
     bottom: 15px !important;
 }
 .olControlAttribution {
-    font-size: smaller; 
-    right: 3px; 
-    bottom: 4.5em; 
-    position: absolute; 
+    font-size: smaller;
+    right: 3px;
+    bottom: 4.5em;
+    position: absolute;
     display: block;
 }
 .olControlScale {
@@ -67,10 +67,10 @@ div.olLayerDiv {
     display: block;
     position: absolute;
     font-size: smaller;
-} 
+}
 
 div.olControlMousePosition {
-    bottom: 0em;
+    bottom: 0;
     right: 3px;
     display: block;
     position: absolute;
@@ -90,13 +90,10 @@ div.olControlMousePosition {
     -moz-border-radius: 1em 0 0 0;
 }
 
-.olControlOverviewMapMinimizeButton {
-    right: 0;
-    bottom: 80px;
-    cursor: pointer;
-}    
-
+.olControlOverviewMapMinimizeButton,
 .olControlOverviewMapMaximizeButton {
+    height: 18px;
+    width: 18px;
     right: 0;
     bottom: 80px;
     cursor: pointer;
@@ -136,7 +133,7 @@ div.olControlMousePosition {
 .olPopupContent {
     padding:5px;
     overflow: auto;
-}    
+}
 
 .olControlNavigationHistory {
    background-image: url("img/navigation_history.png");
@@ -145,25 +142,25 @@ div.olControlMousePosition {
    height: 24px;
 
 }
-.olControlNavigationHistoryPreviousItemActive { 
+.olControlNavigationHistoryPreviousItemActive {
   background-position: 0 0;
 }
-.olControlNavigationHistoryPreviousItemInactive { 
+.olControlNavigationHistoryPreviousItemInactive {
    background-position: 0 -24px;
 }
-.olControlNavigationHistoryNextItemActive { 
+.olControlNavigationHistoryNextItemActive {
    background-position: -24px 0;
 }
-.olControlNavigationHistoryNextItemInactive { 
+.olControlNavigationHistoryNextItemInactive {
    background-position: -24px -24px;
 }
 
-div.olControlSaveFeaturesItemActive { 
+div.olControlSaveFeaturesItemActive {
     background-image: url(img/save_features_on.png);
     background-repeat: no-repeat;
     background-position: 0 1px;
 }
-div.olControlSaveFeaturesItemInactive { 
+div.olControlSaveFeaturesItemInactive {
     background-image: url(img/save_features_off.png);
     background-repeat: no-repeat;
     background-position: 0 1px;
@@ -184,12 +181,12 @@ div.olControlSaveFeaturesItemInactive {
     opacity: 0.50;
     font-size: 1px;
     filter: alpha(opacity=50);
-}   
+}
 
 .olControlPanPanel {
     top: 10px;
     left: 5px;
-}  
+}
 
 .olControlPanPanel div {
     background-image: url(img/pan-panel.png);
@@ -224,7 +221,7 @@ div.olControlSaveFeaturesItemInactive {
 .olControlZoomPanel {
     top: 71px;
     left: 14px;
-} 
+}
 
 .olControlZoomPanel div {
     background-image: url(img/zoom-panel.png);
@@ -252,9 +249,9 @@ div.olControlSaveFeaturesItemInactive {
     background-position: 0 18px;
 }
 
-/* 
+/*
  * When a potential text is bigger than the image it move the image
- * with some headers (closes #3154) 
+ * with some headers (closes #3154)
  */
 .olControlPanZoomBar div {
     font-size: 1px;
@@ -323,10 +320,8 @@ div.olControlSaveFeaturesItemInactive {
     padding-top: 5px;
     padding-left: 10px;
     padding-bottom: 5px;
-    padding-right: 75px;
+    padding-right: 10px;
     background-color: darkblue;
-    width: 100%;
-    height: 100%;
 }
 
 .olControlLayerSwitcher .layersDiv .baseLbl,
@@ -343,6 +338,8 @@ div.olControlSaveFeaturesItemInactive {
 
 .olControlLayerSwitcher .maximizeDiv,
 .olControlLayerSwitcher .minimizeDiv {
+    width: 18px;
+    height: 18px;
     top: 5px;
     right: 0;
     cursor: pointer;
@@ -431,3 +428,57 @@ span.olGoogleAttribution.hybrid a, span.olGoogleAttribution.satellite a {
 .olControlEditingToolbar .olControlDrawFeaturePolygonItemActive {
     background-position: -26px -24px;
 }
+
+div.olControlZoom {
+    position: absolute;
+    top: 8px;
+    left: 8px;
+    background: rgba(255,255,255,0.4);
+    border-radius: 4px;
+    padding: 2px;
+}
+div.olControlZoom a {
+    display: block;
+    margin: 1px;
+    padding: 0;
+    color: white;
+    font-size: 18px;
+    font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif;
+    font-weight: bold;
+    text-decoration: none;
+    text-align: center;
+    height: 22px;
+    width:22px;
+    line-height: 19px;
+    background: #130085; /* fallback for IE - IE6 requires background shorthand*/
+    background: rgba(0, 60, 136, 0.5);
+    filter: alpha(opacity=80);
+}
+div.olControlZoom a:hover {
+    background: #130085; /* fallback for IE */
+    background: rgba(0, 60, 136, 0.7);
+    filter: alpha(opacity=100);
+}
+ at media only screen and (max-width: 600px) {
+    div.olControlZoom a:hover {
+        background: rgba(0, 60, 136, 0.5);
+    }
+}
+a.olControlZoomIn {
+    border-radius: 4px 4px 0 0;
+}
+a.olControlZoomOut {
+    border-radius: 0 0 4px 4px;
+}
+
+
+/**
+ * Animations
+ */
+
+.olLayerGrid .olTileImage {
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+}
diff --git a/theme/default/style.mobile.css b/theme/default/style.mobile.css
new file mode 100644
index 0000000..2d4d392
--- /dev/null
+++ b/theme/default/style.mobile.css
@@ -0,0 +1,63 @@
+div.olControlZoom {
+    position: absolute;
+    top: 8px;
+    left: 8px;
+    background: rgba(255,255,255,0.4);
+    border-radius: 4px;
+    padding: 2px;
+}
+* {
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+div.olControlZoom a {
+    display: block;
+    margin: 1px;
+    padding: 0;
+    color: white;
+    font-size: 28px;
+    font-family: sans-serif;
+    font-weight: bold;
+    text-decoration: none;
+    text-align: center;
+    height: 32px;
+    width: 32px;
+    line-height: 28px;
+    text-shadow: 0 0 3px rgba(0,0,0,0.8);
+    background: #130085; /* fallback for IE - IE6 requires background shorthand*/
+    background: rgba(0, 60, 136, 0.5);
+    filter: alpha(opacity=80);
+}
+a.olControlZoomIn {
+    border-radius: 4px 4px 0 0;
+}
+a.olControlZoomOut {
+    border-radius: 0 0 4px 4px;
+}
+div.olControlZoom a:hover {
+    background: #130085; /* fallback for IE */
+    background: rgba(0, 60, 136, 0.7);
+    filter: alpha(opacity=100);
+}
+ at media only screen and (max-width: 600px) {
+    div.olControlZoom a:hover {
+        background: rgba(0, 60, 136, 0.5);
+    }
+}
+.olLayerGrid .olTileImage {
+    -webkit-transition: opacity 0.2s linear;
+    -moz-transition: opacity 0.2s linear;
+    -o-transition: opacity 0.2s linear;
+    transition: opacity 0.2s linear;
+}
+/* Enable 3d acceleration when operating on tiles, this is
+   known to yield better performance on IOS Safari.
+   http://osgeo-org.1803224.n2.nabble.com/Harware-accelerated-CSS3-animations-for-iOS-td6255560.html
+
+   It also prevents tile blinking effects in iOS 5.
+   See https://github.com/openlayers/openlayers/issues/511
+*/
+ at media (-webkit-transform-3d) {
+img.olTileImage {
+    -webkit-transform: translate3d(0, 0, 0);
+}
+}
diff --git a/theme/default/style.mobile.tidy.css b/theme/default/style.mobile.tidy.css
new file mode 100644
index 0000000..10b8bff
--- /dev/null
+++ b/theme/default/style.mobile.tidy.css
@@ -0,0 +1 @@
+div.olControlZoom{position:absolute;top:8px;left:8px;background:rgba(255,255,255,0.4);border-radius:4px;padding:2px;}*{-webkit-tap-highlight-color:rgba(0,0,0,0);}div.olControlZoom a{display:block;color:#FFF;font-size:28px;font-family:sans-serif;font-weight:700;text-decoration:none;text-align:center;height:32px;width:32px;line-height:28px;text-shadow:0 0 3px rgba(0,0,0,0.8);background:rgba(0,60,136,0.5);filter:alpha(opacity=80);margin:1px;padding:0;}a.olControlZoomIn{border-radius:4px 4px [...]
\ No newline at end of file
diff --git a/theme/default/style.tidy.css b/theme/default/style.tidy.css
index b3a73b3..0368055 100644
--- a/theme/default/style.tidy.css
+++ b/theme/default/style.tidy.css
@@ -1 +1 @@
-div.olMap{z-index:0;cursor:default;margin:0!important;padding:0!important;}div.olMapViewport{text-align:left;}.olLayerGoogleCopyright{left:2px;bottom:2px;}.olLayerGoogleV3.olLayerGoogleCopyright{right:auto!important;}.olLayerGooglePoweredBy{left:2px;bottom:15px;}.olLayerGoogleV3.olLayerGooglePoweredBy{bottom:15px!important;}.olControlAttribution{font-size:smaller;right:3px;bottom:4.5em;position:absolute;display:block;}.olControlScale{right:3px;bottom:3em;display:block;position:absolute;f [...]
\ No newline at end of file
+div.olMap{z-index:0;cursor:default;margin:0!important;padding:0!important;}div.olMapViewport{text-align:left;}.olLayerGoogleCopyright{left:2px;bottom:2px;}.olLayerGoogleV3.olLayerGoogleCopyright{right:auto!important;}.olLayerGooglePoweredBy{left:2px;bottom:15px;}.olLayerGoogleV3.olLayerGooglePoweredBy{bottom:15px!important;}.olControlAttribution{font-size:smaller;right:3px;bottom:4.5em;position:absolute;display:block;}.olControlScale{right:3px;bottom:3em;display:block;position:absolute;f [...]
\ No newline at end of file
diff --git a/tools/branch.sh b/tools/branch.sh
deleted file mode 100755
index ec07d02..0000000
--- a/tools/branch.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-RELEASE=$1
-
-svn copy -m "Branching for the $RELEASE release" http://svn.openlayers.org/trunk/openlayers http://svn.openlayers.org/branches/openlayers/$RELEASE
diff --git a/tools/closure.py b/tools/closure.py
deleted file mode 100644
index ab60be7..0000000
--- a/tools/closure.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import sys
-import os
-import tempfile
-
-path = "../tools/closure-compiler.jar"
-if not os.path.exists(path):
-    raise Exception("No closure-compiler.jar at %s; read README.txt!" % path)
-
-def minimize(code):
-    ntf = tempfile.NamedTemporaryFile(delete=False)
-    ntf.write(code)
-    ntf.flush()
-
-    ntf2 = tempfile.NamedTemporaryFile(delete=False)
-    ntf.close()
-    ntf2.close()
-
-    os.system("java -jar %s --js %s --js_output_file %s" % (path, ntf.name, ntf2.name))
-    data = open(ntf2.name).read()
-    os.unlink(ntf.name)
-    os.unlink(ntf2.name)
-    return data
diff --git a/tools/closure_library_jscompiler.py b/tools/closure_library_jscompiler.py
new file mode 100644
index 0000000..fd1882f
--- /dev/null
+++ b/tools/closure_library_jscompiler.py
@@ -0,0 +1,71 @@
+# Copyright 2010 The Closure Library Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS-IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Utility to use the Closure Compiler CLI from Python."""
+
+import distutils.version
+import logging
+import re
+import subprocess
+
+
+# Pulls a version number from the first line of 'java -version'
+# See http://java.sun.com/j2se/versioning_naming.html to learn more about the
+# command's output format.
+_VERSION_REGEX = re.compile('"([0-9][.0-9]*)')
+
+
+def _GetJavaVersion():
+  """Returns the string for the current version of Java installed."""
+  proc = subprocess.Popen(['java', '-version'], stderr=subprocess.PIPE)
+  unused_stdoutdata, stderrdata = proc.communicate()
+  version_line = stderrdata.splitlines()[0]
+  return _VERSION_REGEX.search(version_line).group(1)
+
+
+def Compile(compiler_jar_path, source_paths, flags=None):
+  """Prepares command-line call to Closure Compiler.
+
+  Args:
+    compiler_jar_path: Path to the Closure compiler .jar file.
+    source_paths: Source paths to build, in order.
+    flags: A list of additional flags to pass on to Closure Compiler.
+
+  Returns:
+    The compiled source, as a string, or None if compilation failed.
+  """
+
+  # User friendly version check.
+  if not (distutils.version.LooseVersion(_GetJavaVersion()) >=
+          distutils.version.LooseVersion('1.6')):
+    logging.error('Closure Compiler requires Java 1.6 or higher. '
+                  'Please visit http://www.java.com/getjava')
+    return
+
+  args = ['java', '-jar', compiler_jar_path]
+  for path in source_paths:
+    args += ['--js', path]
+
+  if flags:
+    args += flags
+
+  logging.info('Compiling with the following command: %s', ' '.join(args))
+
+  proc = subprocess.Popen(args, stdout=subprocess.PIPE)
+  stdoutdata, unused_stderrdata = proc.communicate()
+
+  if proc.returncode != 0:
+    return
+
+  return stdoutdata
diff --git a/tools/mergejs.py b/tools/mergejs.py
index 6403072..a0b7566 100755
--- a/tools/mergejs.py
+++ b/tools/mergejs.py
@@ -31,7 +31,7 @@
 #
 # Note: This is a very rough initial version of this code.
 #
-# -- Copyright 2005-2011 OpenLayers contributors / OpenLayers project --
+# -- Copyright 2005-2012 OpenLayers contributors / OpenLayers project --
 #
 
 # TODO: Allow files to be excluded. e.g. `Crossbrowser/DebugMode.js`?
@@ -43,7 +43,7 @@ import sys
 
 SUFFIX_JAVASCRIPT = ".js"
 
-RE_REQUIRE = "@requires?:? (.*)\n" # TODO: Ensure in comment?
+RE_REQUIRE = "@requires?:?\s+(\S*)\s*\n" # TODO: Ensure in comment?
 
 class MissingImport(Exception):
     """Exception raised when a listed import is not found in the lib."""
@@ -53,12 +53,21 @@ class SourceFile:
     Represents a Javascript source code file.
     """
 
-    def __init__(self, filepath, source):
+    def __init__(self, filepath, source, cfgExclude):
         """
         """
         self.filepath = filepath
         self.source = source
 
+        self.excludedFiles = [] 
+        self.requiredFiles = [] 
+        auxReq = re.findall(RE_REQUIRE, self.source) 
+        for filename in auxReq: 
+            if undesired(filename, cfgExclude): 
+                self.excludedFiles.append(filename) 
+            else: 
+                self.requiredFiles.append(filename) 
+
         self.requiredBy = []
 
 
@@ -67,8 +76,7 @@ class SourceFile:
         Extracts the dependencies specified in the source code and returns
         a list of them.
         """
-        # TODO: Cache?
-        return re.findall(RE_REQUIRE, self.source)
+        return self.requiredFiles
 
     requires = property(fget=_getRequirements, doc="")
 
@@ -139,9 +147,14 @@ def undesired(filepath, excludes):
                 exclude = True
                 break
     return exclude
+
+
+def getNames (sourceDirectory, configFile = None):
+    return run(sourceDirectory, None, configFile, True)
             
 
-def run (sourceDirectory, outputFilename = None, configFile = None):
+def run (sourceDirectory, outputFilename = None, configFile = None,
+                                                returnAsListOfNames = False):
     cfg = None
     if configFile:
         cfg = Config(configFile)
@@ -171,7 +184,7 @@ def run (sourceDirectory, outputFilename = None, configFile = None):
         print "Importing: %s" % filepath
         fullpath = os.path.join(sourceDirectory, filepath).strip()
         content = open(fullpath, "U").read() # TODO: Ensure end of line @ EOF?
-        files[filepath] = SourceFile(filepath, content) # TODO: Chop path?
+        files[filepath] = SourceFile(filepath, content, cfg.exclude) # TODO: Chop path?
 
     print
 
@@ -195,7 +208,7 @@ def run (sourceDirectory, outputFilename = None, configFile = None):
                     if os.path.exists(fullpath):
                         print "Importing: %s" % path
                         content = open(fullpath, "U").read() # TODO: Ensure end of line @ EOF?
-                        files[path] = SourceFile(path, content) # TODO: Chop path?
+                        files[path] = SourceFile(path, content, cfg.exclude) # TODO: Chop path?
                     else:
                         raise MissingImport("File '%s' not found (required by '%s')." % (path, filepath))
         
@@ -219,9 +232,24 @@ def run (sourceDirectory, outputFilename = None, configFile = None):
     ## Output the files in the determined order
     result = []
 
+    # Return as a list of filenames
+    if returnAsListOfNames:
+        for fp in order:
+            fName = os.path.normpath(os.path.join(sourceDirectory, fp)).replace("\\","/")
+            print "Append: ", fName
+            f = files[fp]
+            for fExclude in f.excludedFiles: 
+                print "  Required file \"%s\" is excluded." % fExclude 
+            result.append(fName)
+        print "\nTotal files: %d " % len(result)
+        return result
+        
+    # Return as merged source code
     for fp in order:
         f = files[fp]
         print "Exporting: ", f.filepath
+        for fExclude in f.excludedFiles: 
+            print "  Required file \"%s\" is excluded." % fExclude 
         result.append(HEADER % f.filepath)
         source = f.source
         result.append(source)
diff --git a/tools/mkrelease.sh b/tools/mkrelease.sh
deleted file mode 100755
index 8680c9c..0000000
--- a/tools/mkrelease.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/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/
-
diff --git a/tools/rc.sh b/tools/rc.sh
deleted file mode 100755
index 73b1835..0000000
--- a/tools/rc.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-RELEASE=$1
-RC=$2
-
-svn co http://svn.openlayers.org/branches/openlayers/$RELEASE
-cd $RELEASE
-sed -i -e "s/OpenLayers.VERSION_NUMBER=.*/OpenLayers.VERSION_NUMBER=\"Release $1-$2\";/" lib/OpenLayers.js 
-sed -i -e "s/VERSION_NUMBER: .*,/VERSION_NUMBER: \"Release $1-$2\",/" lib/OpenLayers/SingleFile.js
-svn diff;
-sleep 10;
-svn ci -m "Updating version numbers for $1-$2".
-svn cp -m "Tagging the $1-$2 release." http://svn.openlayers.org/branches/openlayers/$1 http://svn.openlayers.org/tags/openlayers/release-$1-$2
diff --git a/tools/release.sh b/tools/release.sh
index 85124e8..5465766 100755
--- a/tools/release.sh
+++ b/tools/release.sh
@@ -9,7 +9,13 @@ svn export http://svn.openlayers.org/tags/openlayers/release-$VERSION OpenLayers
 cd OpenLayers-$VERSION/build
 mv ../../compiler.jar ../tools/closure-compiler.jar
 ./build.py -c closure full
+./build.py -c closure mobile OpenLayers.mobile.js
+./build.py -c closure light OpenLayers.light.js
+./build.py -c none full OpenLayers.debug.js
+./build.py -c none mobile OpenLayers.mobile.debug.js
+./build.py -c none light OpenLayers.light.debug.js
 cp OpenLayers.js ..
+cp OpenLayers.*.js ..
 rm ../tools/closure-compiler.jar
 
 cd ..

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/openlayers.git



More information about the Pkg-grass-devel mailing list