diff --git a/lib/OpenLayers.js b/lib/OpenLayers.js
index 1b9f75d59d..3c5caf954b 100644
--- a/lib/OpenLayers.js
+++ b/lib/OpenLayers.js
@@ -51,6 +51,7 @@ if (typeof(_OPENLAYERS_SFL_) == "undefined") {
"Prototype.js",
"Rico/Corner.js",
"Rico/Color.js",
+ "OpenLayers/BaseTypes.js",
"OpenLayers/Util.js",
"OpenLayers/Ajax.js",
"OpenLayers/Events.js",
diff --git a/lib/OpenLayers/BaseTypes.js b/lib/OpenLayers/BaseTypes.js
new file mode 100644
index 0000000000..aa89a4ec15
--- /dev/null
+++ b/lib/OpenLayers/BaseTypes.js
@@ -0,0 +1,749 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full
+ * text of the license. */
+
+
+/*********************
+ * *
+ * PIXEL *
+ * *
+ *********************/
+
+
+/**
+ * @class This class represents a screen coordinate, in x and y coordinates
+ */
+OpenLayers.Pixel = Class.create();
+OpenLayers.Pixel.prototype = {
+
+ /** @type float */
+ x: 0.0,
+
+ /** @type float */
+ y: 0.0,
+
+ /**
+ * @constructor
+ *
+ * @param {float} x
+ * @param {float} y
+ */
+ initialize: function(x, y) {
+ this.x = x;
+ this.y = y;
+ },
+
+ /**
+ * @return string representation of Pixel. ex: "x=200.4,y=242.2"
+ * @type str
+ */
+ toString:function() {
+ return ("x=" + this.x + ",y=" + this.y);
+ },
+
+ /**
+ * @deprecated
+ *
+ * @type OpenLayers.Pixel
+ */
+ copyOf:function() {
+ return this.clone();
+ },
+
+ /**
+ * @type OpenLayers.Pixel
+ */
+ clone:function() {
+ return new OpenLayers.Pixel(this.x, this.y);
+ },
+
+ /**
+ * @param {OpenLayers.Pixel} px
+ *
+ * @return whether or not the point passed in as parameter is equal to this
+ * note that if px passed in is null, returns false
+ * @type bool
+ */
+ equals:function(px) {
+ var equals = false;
+ if (px != null) {
+ equals = ((this.x == px.x && this.y == px.y) ||
+ (isNaN(this.x) && isNaN(this.y) && isNaN(px.x) && isNaN(px.y)));
+ }
+ return equals;
+ },
+
+ /**
+ * @param {int} x
+ * @param {int} y
+ *
+ * @return a new Pixel with this pixel's x&y augmented by the
+ * values passed in.
+ * @type OpenLayers.Pixel
+ */
+ add:function(x, y) {
+ return new OpenLayers.Pixel(this.x + x, this.y + y);
+ },
+
+ /**
+ * @param {OpenLayers.Pixel} px
+ *
+ * @return a new Pixel with this pixel's x&y augmented by the
+ * x&y values of the pixel passed in.
+ * @type OpenLayers.Pixel
+ */
+ offset:function(px) {
+ return this.add(px.x, px.y);
+ },
+
+ /** @final @type str */
+ CLASS_NAME: "OpenLayers.Pixel"
+};
+
+
+/*********************
+ * *
+ * SIZE *
+ * *
+ *********************/
+
+
+/**
+* @class This class represents a width and height pair
+*/
+OpenLayers.Size = Class.create();
+OpenLayers.Size.prototype = {
+
+ /** @type float */
+ w: 0.0,
+
+ /** @type float */
+ h: 0.0,
+
+
+ /**
+ * @constructor
+ *
+ * @param {float} w
+ * @param {float} h
+ */
+ initialize: function(w, h) {
+ this.w = w;
+ this.h = h;
+ },
+
+ /**
+ * @return String representation of OpenLayers.Size object.
+ * (ex. "w=55,h=66")
+ * @type String
+ */
+ toString:function() {
+ return ("w=" + this.w + ",h=" + this.h);
+ },
+
+ /**
+ * @deprecated
+ *
+ * @return New OpenLayers.Size object with the same w and h values
+ * @type OpenLayers.Size
+ */
+ copyOf:function() {
+ return this.clone();
+ },
+
+ /**
+ * @return New OpenLayers.Size object with the same w and h values
+ * @type OpenLayers.Size
+ */
+ clone:function() {
+ return new OpenLayers.Size(this.w, this.h);
+ },
+
+ /**
+ * @param {OpenLayers.Size} sz
+ * @returns Boolean value indicating whether the passed-in OpenLayers.Size
+ * object has the same w and h components as this
+ * note that if sz passed in is null, returns false
+ *
+ * @type bool
+ */
+ 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;
+ },
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.Size"
+};
+
+/*********************
+ * *
+ * LONLAT *
+ * *
+ *********************/
+
+
+/**
+* @class This class represents a longitude and latitude pair
+*/
+OpenLayers.LonLat = Class.create();
+OpenLayers.LonLat.prototype = {
+
+ /** @type float */
+ lon: 0.0,
+
+ /** @type float */
+ lat: 0.0,
+
+ /**
+ * @constructor
+ *
+ * @param {float} lon
+ * @param {float} lat
+ */
+ initialize: function(lon, lat) {
+ this.lon = lon;
+ this.lat = lat;
+ },
+
+ /**
+ * @return String representation of OpenLayers.LonLat object.
+ * (ex. "lon=5,lat=42")
+ * @type String
+ */
+ toString:function() {
+ return ("lon=" + this.lon + ",lat=" + this.lat);
+ },
+
+ /**
+ * @return Shortened String representation of OpenLayers.LonLat object.
+ * (ex. "5, 42")
+ * @type String
+ */
+ toShortString:function() {
+ return (this.lon + ", " + this.lat);
+ },
+
+ /**
+ * @deprecated
+ *
+ * @return New OpenLayers.LonLat object with the same lon and lat values
+ * @type OpenLayers.LonLat
+ */
+ copyOf:function() {
+ return this.clone();
+ },
+
+ /**
+ * @return New OpenLayers.LonLat object with the same lon and lat values
+ * @type OpenLayers.LonLat
+ */
+ clone:function() {
+ return new OpenLayers.LonLat(this.lon, this.lat);
+ },
+
+ /**
+ * @param {float} lon
+ * @param {float} lat
+ *
+ * @return A new OpenLayers.LonLat object with the lon and lat passed-in
+ * added to this's.
+ * @type OpenLayers.LonLat
+ */
+ add:function(lon, lat) {
+ return new OpenLayers.LonLat(this.lon + lon, this.lat + lat);
+ },
+
+ /**
+ * @param {OpenLayers.LonLat} ll
+ * @returns Boolean value indicating whether the passed-in OpenLayers.LonLat
+ * object has the same lon and lat components as this
+ * note that if ll passed in is null, returns false
+ *
+ * @type bool
+ */
+ 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;
+ },
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.LonLat"
+};
+
+/** Alternative constructor that builds a new OpenLayers.LonLat from a
+* parameter string
+*
+* @constructor
+*
+* @param {String} str Comma-separated Lon,Lat coordinate string.
+* (ex. "5,40")
+*
+* @returns New OpenLayers.LonLat object built from the passed-in String.
+* @type OpenLayers.LonLat
+*/
+OpenLayers.LonLat.fromString = function(str) {
+ var pair = str.split(",");
+ return new OpenLayers.LonLat(parseFloat(pair[0]),
+ parseFloat(pair[1]));
+};
+
+
+
+/*********************
+ * *
+ * BOUNDS *
+ * *
+ *********************/
+
+
+
+
+/**
+* @class This class represents a bounding box.
+* Data stored as left, bottom, right, top floats
+*/
+OpenLayers.Bounds = Class.create();
+OpenLayers.Bounds.prototype = {
+
+ /** @type float */
+ left: 0.0,
+
+ /** @type float */
+ bottom: 0.0,
+
+ /** @type float */
+ right: 0.0,
+
+ /** @type float */
+ top: 0.0,
+
+ /**
+ * @constructor
+ *
+ * @param {float} left
+ * @param {float} bottom
+ * @param {float} right
+ * @param {float} top
+ *
+ */
+ initialize: function(left, bottom, right, top) {
+ this.left = left;
+ this.bottom = bottom;
+ this.right = right;
+ this.top = top;
+ },
+
+ /**
+ * @deprecated
+ *
+ * @returns A fresh copy of the bounds
+ * @type OpenLayers.Bounds
+ */
+ copyOf:function() {
+ return this.clone();
+ },
+
+ /**
+ * @returns A fresh copy of the bounds
+ * @type OpenLayers.Bounds
+ */
+ clone:function() {
+ return new OpenLayers.Bounds(this.left, this.bottom,
+ this.right, this.top);
+ },
+
+ /**
+ * @param {OpenLayers.Bounds} bounds
+ * @returns Boolean value indicating whether the passed-in OpenLayers.Bounds
+ * object has the same left, right, top, bottom components as this
+ * note that if bounds passed in is null, returns false
+ *
+ * @type bool
+ */
+ 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;
+ },
+
+ /**
+ * @return String representation of OpenLayers.Bounds object.
+ * (ex."left-bottom=(5,42) right-top=(10,45)")
+ * @type String
+ */
+ toString:function(){
+ return ( "left-bottom=(" + this.left + "," + this.bottom + ")"
+ + " right-top=(" + this.right + "," + this.top + ")" );
+ },
+
+ /**
+ * @return Simple String representation of OpenLayers.Bounds object.
+ * (ex. "5,42,10,45")
+ * @type String
+ */
+ toBBOX:function() {
+ return (this.left + "," + this.bottom + ","
+ + this.right + "," + this.top);
+ },
+
+ /**
+ * @returns The width of the bounds
+ * @type float
+ */
+ getWidth:function() {
+ return (this.right - this.left);
+ },
+
+ /**
+ * @returns The height of the bounds
+ * @type float
+ */
+ getHeight:function() {
+ return (this.top - this.bottom);
+ },
+
+ /**
+ * @returns An OpenLayers.Size which represents the size of the box
+ * @type OpenLayers.Size
+ */
+ getSize:function() {
+ return new OpenLayers.Size(this.getWidth(), this.getHeight());
+ },
+
+ /**
+ * @returns An OpenLayers.Pixel which represents the center of the bounds
+ * @type OpenLayers.Pixel
+ */
+ getCenterPixel:function() {
+ return new OpenLayers.Pixel( (this.left + this.right) / 2,
+ (this.bottom + this.top) / 2);
+ },
+
+ /**
+ * @returns An OpenLayers.LonLat which represents the center of the bounds
+ * @type OpenLayers.LonLat
+ */
+ getCenterLonLat:function() {
+ return new OpenLayers.LonLat( (this.left + this.right) / 2,
+ (this.bottom + this.top) / 2);
+ },
+
+ /**
+ * @param {float} x
+ * @param {float} y
+ *
+ * @returns A new OpenLayers.Bounds whose coordinates are the same as this,
+ * but shifted by the passed-in x and y values
+ * @type OpenLayers.Bounds
+ */
+ add:function(x, y){
+ return new OpenLayers.Box(this.left + x, this.bottom + y,
+ this.right + x, this.top + y);
+ },
+
+ /**
+ * @param {float} x
+ * @param {float} y
+ * @param {Boolean} inclusive Whether or not to include the border.
+ * Default is true
+ *
+ * @return Whether or not the passed-in coordinates are within this bounds
+ * @type Boolean
+ */
+ contains:function(x, y, inclusive) {
+
+ //set default
+ if (inclusive == null) {
+ inclusive = true;
+ }
+
+ 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;
+ },
+
+ /**
+ * @param {OpenLayers.Bounds} bounds
+ * @param {Boolean} partial If true, only part of passed-in
+ * OpenLayers.Bounds needs be within this bounds.
+ * If false, the entire passed-in bounds must be
+ * within. Default is false
+ * @param {Boolean} inclusive Whether or not to include the border.
+ * Default is true
+ *
+ * @return Whether or not the passed-in OpenLayers.Bounds object is
+ * contained within this bounds.
+ * @type Boolean
+ */
+ containsBounds:function(bounds, partial, inclusive) {
+
+ //set defaults
+ if (partial == null) {
+ partial = false;
+ }
+ if (inclusive == null) {
+ inclusive = true;
+ }
+
+ var inLeft;
+ var inTop;
+ var inRight;
+ var inBottom;
+
+ if (inclusive) {
+ inLeft = (bounds.left >= this.left) && (bounds.left <= this.right);
+ inTop = (bounds.top >= this.bottom) && (bounds.top <= this.top);
+ inRight= (bounds.right >= this.left) && (bounds.right <= this.right);
+ inBottom = (bounds.bottom >= this.bottom) && (bounds.bottom <= this.top);
+ } else {
+ inLeft = (bounds.left > this.left) && (bounds.left < this.right);
+ inTop = (bounds.top > this.bottom) && (bounds.top < this.top);
+ inRight= (bounds.right > this.left) && (bounds.right < this.right);
+ inBottom = (bounds.bottom > this.bottom) && (bounds.bottom < this.top);
+ }
+
+ return (partial) ? (inTop || inBottom) && (inLeft || inRight )
+ : (inTop && inLeft && inBottom && inRight);
+ },
+
+ /**
+ * @param {OpenLayers.LonLat} lonlat
+ *
+ * @returns The quadrant ("br" "tr" "tl" "bl") of the bounds in which
+ * the coordinate lies.
+ * @type String
+ */
+ determineQuadrant: function(lonlat) {
+
+ var quadrant = "";
+ var center = this.getCenterLonLat();
+
+ quadrant += (lonlat.lat < center.lat) ? "b" : "t";
+ quadrant += (lonlat.lon < center.lon) ? "l" : "r";
+
+ return quadrant;
+ },
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.Bounds"
+};
+
+/** Alternative constructor that builds a new OpenLayers.Bounds from a
+* parameter string
+*
+* @constructor
+*
+* @param {String} str Comma-separated bounds string. (ex. "5,42,10,45")
+*
+* @returns New OpenLayers.Bounds object built from the passed-in String.
+* @type OpenLayers.Bounds
+*/
+OpenLayers.Bounds.fromString = function(str) {
+ var bounds = str.split(",");
+ return OpenLayers.Bounds.fromArray(bounds);
+};
+
+/** Alternative constructor that builds a new OpenLayers.Bounds
+* from an array
+*
+* @constructor
+*
+* @param {Array} bbox Array of bounds values (ex. [5,42,10,45])
+*
+* @returns New OpenLayers.Bounds object built from the passed-in Array.
+* @type OpenLayers.Bounds
+*/
+OpenLayers.Bounds.fromArray = function(bbox) {
+ return new OpenLayers.Bounds(parseFloat(bbox[0]),
+ parseFloat(bbox[1]),
+ parseFloat(bbox[2]),
+ parseFloat(bbox[3]));
+};
+
+/** Alternative constructor that builds a new OpenLayers.Bounds
+* from an OpenLayers.Size
+*
+* @constructor
+*
+* @param {OpenLayers.Size} size
+*
+* @returns New OpenLayers.Bounds object built with top and left set to 0 and
+* bottom right taken from the passed-in OpenLayers.Size.
+* @type OpenLayers.Bounds
+*/
+OpenLayers.Bounds.fromSize = function(size) {
+ return new OpenLayers.Bounds(0,
+ size.h,
+ size.w,
+ 0);
+};
+/**
+ * @param {String} quadrant
+ *
+ * @returns The opposing quadrant ("br" "tr" "tl" "bl"). For Example, if
+ * you pass in "bl" it returns "tr", if you pass in "br" it
+ * returns "tl", etc.
+ * @type String
+ */
+OpenLayers.Bounds.oppositeQuadrant = function(quadrant) {
+ var opp = "";
+
+ opp += (quadrant.charAt(0) == 't') ? 'b' : 't';
+ opp += (quadrant.charAt(1) == 'l') ? 'r' : 'l';
+
+ return opp;
+};
+
+
+
+
+/*********************
+ * *
+ * STRING *
+ * *
+ *********************/
+
+
+
+/**
+* @param {String} sStart
+*
+* @returns Whether or not this string starts with the string passed in.
+* @type Boolean
+*/
+String.prototype.startsWith = function(sStart){
+ return (this.substr(0,sStart.length) == sStart);
+};
+
+/**
+* @param {String} str
+*
+* @returns Whether or not this string contains with the string passed in.
+* @type Boolean
+*/
+String.prototype.contains = function(str){
+ return (this.indexOf(str) != -1);
+};
+
+/**
+* @returns A trimmed version of the string - all leading and
+* trailing spaces removed
+* @type String
+*/
+String.prototype.trim = function() {
+
+ var b = 0;
+ while(this.substr(b,1) == " ") {
+ b++;
+ }
+
+ var e = this.length - 1;
+ while(this.substr(e,1) == " ") {
+ e--;
+ }
+
+ return this.substring(b, e+1);
+};
+
+
+
+
+/*********************
+ * *
+ * ARRAY *
+ * *
+ *********************/
+
+
+
+/** Remove an object from an array. Iterates through the array
+* to find the item, then removes it.
+*
+* @param {Object} item
+*
+* @returns A reference to the array
+* @type Array
+*/
+Array.prototype.remove = function(item) {
+ for(var i=0; i < this.length; i++) {
+ if(this[i] == item) {
+ this.splice(i,1);
+ //break;more than once??
+ }
+ }
+ return this;
+}
+
+/**
+ * @deprecated
+ *
+ * @returns A fresh copy of the array
+ * @type Array
+ */
+Array.prototype.copyOf = function() {
+ return this.clone();
+};
+
+/**
+* @returns A fresh copy of the array
+* @type Array
+*/
+Array.prototype.clone = function() {
+ var clone = new Array();
+ for (var i = 0; i < this.length; i++) {
+ clone[i] = this[i];
+ }
+ return clone;
+};
+
+/**
+*/
+Array.prototype.clear = function() {
+ this.length = 0;
+};
+
+
+/*********************
+ * *
+ * NUMBER *
+ * *
+ *********************/
+
+
+
+/** NOTE: Works only with integer values does *not* work with floats!
+ *
+ * @param {int} sig
+ *
+ * @returns The number, rounded to the specified number of significant digits.
+ * If null, 0, or negaive value passed in, returns 0
+ * @type int
+ */
+Number.prototype.limitSigDigs = function(sig) {
+ var number = (sig > 0) ? this.toString() : 0;
+ if (sig < number.length) {
+ var exp = number.length - sig;
+ number = Math.round( this / Math.pow(10, exp)) * Math.pow(10, exp);
+ }
+ return parseInt(number);
+}
diff --git a/lib/OpenLayers/Feature.js b/lib/OpenLayers/Feature.js
index 199e0cb7d8..1268ecc3e1 100644
--- a/lib/OpenLayers/Feature.js
+++ b/lib/OpenLayers/Feature.js
@@ -6,7 +6,7 @@
/**
* @class
- * @require: OpenLayers/Util.js
+ * @requires OpenLayers/Util.js
*/
OpenLayers.Feature = Class.create();
OpenLayers.Feature.prototype= {
diff --git a/lib/OpenLayers/Layer/Grid.js b/lib/OpenLayers/Layer/Grid.js
index a271bb1800..54355b64ef 100644
--- a/lib/OpenLayers/Layer/Grid.js
+++ b/lib/OpenLayers/Layer/Grid.js
@@ -3,7 +3,6 @@
* text of the license. */
// @require: OpenLayers/Layer/HTTPRequest.js
-// @require: OpenLayers/Util.js
/**
* @class
diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js
index 60c8cc20b6..97e6271f86 100644
--- a/lib/OpenLayers/Layer/HTTPRequest.js
+++ b/lib/OpenLayers/Layer/HTTPRequest.js
@@ -1,8 +1,8 @@
/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the full
* text of the license. */
+
// @require: OpenLayers/Layer.js
-// @require: OpenLayers/Util.js
/**
* @class
diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js
index 6d8ee717d5..60fcc82275 100644
--- a/lib/OpenLayers/Map.js
+++ b/lib/OpenLayers/Map.js
@@ -3,6 +3,7 @@
* text of the license. */
// @require: OpenLayers/Util.js
+// @require: OpenLayers/Events.js
/**
* @class
diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js
index b748d84118..82d5861aeb 100644
--- a/lib/OpenLayers/Util.js
+++ b/lib/OpenLayers/Util.js
@@ -7,694 +7,6 @@
*/
OpenLayers.Util = new Object();
-/**
-* @class This class represents a screen coordinate, in x and y coordinates
-*/
-OpenLayers.Pixel = Class.create();
-OpenLayers.Pixel.prototype = {
-
- /** @type float */
- x: 0.0,
-
- /** @type float */
- y: 0.0,
-
- /**
- * @constructor
- *
- * @param {float} x
- * @param {float} y
- */
- initialize: function(x, y) {
- this.x = x;
- this.y = y;
- },
-
- /**
- * @return string representation of Pixel. ex: "x=200.4,y=242.2"
- * @type str
- */
- toString:function() {
- return ("x=" + this.x + ",y=" + this.y);
- },
-
- /**
- * @deprecated
- *
- * @type OpenLayers.Pixel
- */
- copyOf:function() {
- return this.clone();
- },
-
- /**
- * @type OpenLayers.Pixel
- */
- clone:function() {
- return new OpenLayers.Pixel(this.x, this.y);
- },
-
- /**
- * @param {OpenLayers.Pixel} px
- *
- * @return whether or not the point passed in as parameter is equal to this
- * note that if px passed in is null, returns false
- * @type bool
- */
- equals:function(px) {
- var equals = false;
- if (px != null) {
- equals = ((this.x == px.x && this.y == px.y) ||
- (isNaN(this.x) && isNaN(this.y) && isNaN(px.x) && isNaN(px.y)));
- }
- return equals;
- },
-
- /**
- * @param {int} x
- * @param {int} y
- *
- * @return a new Pixel with this pixel's x&y augmented by the
- * values passed in.
- * @type OpenLayers.Pixel
- */
- add:function(x, y) {
- return new OpenLayers.Pixel(this.x + x, this.y + y);
- },
-
- /**
- * @param {OpenLayers.Pixel} px
- *
- * @return a new Pixel with this pixel's x&y augmented by the
- * x&y values of the pixel passed in.
- * @type OpenLayers.Pixel
- */
- offset:function(px) {
- return this.add(px.x, px.y);
- },
-
- /** @final @type str */
- CLASS_NAME: "OpenLayers.Pixel"
-};
-
-
-/**
-* @class This class represents a width and height pair
-*/
-OpenLayers.Size = Class.create();
-OpenLayers.Size.prototype = {
-
- /** @type float */
- w: 0.0,
-
- /** @type float */
- h: 0.0,
-
-
- /**
- * @constructor
- *
- * @param {float} w
- * @param {float} h
- */
- initialize: function(w, h) {
- this.w = w;
- this.h = h;
- },
-
- /**
- * @return String representation of OpenLayers.Size object.
- * (ex. "w=55,h=66")
- * @type String
- */
- toString:function() {
- return ("w=" + this.w + ",h=" + this.h);
- },
-
- /**
- * @deprecated
- *
- * @return New OpenLayers.Size object with the same w and h values
- * @type OpenLayers.Size
- */
- copyOf:function() {
- return this.clone();
- },
-
- /**
- * @return New OpenLayers.Size object with the same w and h values
- * @type OpenLayers.Size
- */
- clone:function() {
- return new OpenLayers.Size(this.w, this.h);
- },
-
- /**
- * @param {OpenLayers.Size} sz
- * @returns Boolean value indicating whether the passed-in OpenLayers.Size
- * object has the same w and h components as this
- * note that if sz passed in is null, returns false
- *
- * @type bool
- */
- 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;
- },
-
- /** @final @type String */
- CLASS_NAME: "OpenLayers.Size"
-};
-
-/**
-* @class This class represents a longitude and latitude pair
-*/
-OpenLayers.LonLat = Class.create();
-OpenLayers.LonLat.prototype = {
-
- /** @type float */
- lon: 0.0,
-
- /** @type float */
- lat: 0.0,
-
- /**
- * @constructor
- *
- * @param {float} lon
- * @param {float} lat
- */
- initialize: function(lon, lat) {
- this.lon = lon;
- this.lat = lat;
- },
-
- /**
- * @return String representation of OpenLayers.LonLat object.
- * (ex. "lon=5,lat=42")
- * @type String
- */
- toString:function() {
- return ("lon=" + this.lon + ",lat=" + this.lat);
- },
-
- /**
- * @return Shortened String representation of OpenLayers.LonLat object.
- * (ex. "5, 42")
- * @type String
- */
- toShortString:function() {
- return (this.lon + ", " + this.lat);
- },
-
- /**
- * @deprecated
- *
- * @return New OpenLayers.LonLat object with the same lon and lat values
- * @type OpenLayers.LonLat
- */
- copyOf:function() {
- return this.clone();
- },
-
- /**
- * @return New OpenLayers.LonLat object with the same lon and lat values
- * @type OpenLayers.LonLat
- */
- clone:function() {
- return new OpenLayers.LonLat(this.lon, this.lat);
- },
-
- /**
- * @param {float} lon
- * @param {float} lat
- *
- * @return A new OpenLayers.LonLat object with the lon and lat passed-in
- * added to this's.
- * @type OpenLayers.LonLat
- */
- add:function(lon, lat) {
- return new OpenLayers.LonLat(this.lon + lon, this.lat + lat);
- },
-
- /**
- * @param {OpenLayers.LonLat} ll
- * @returns Boolean value indicating whether the passed-in OpenLayers.LonLat
- * object has the same lon and lat components as this
- * note that if ll passed in is null, returns false
- *
- * @type bool
- */
- 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;
- },
-
- /** @final @type String */
- CLASS_NAME: "OpenLayers.LonLat"
-};
-
-/** Alternative constructor that builds a new OpenLayers.LonLat from a
-* parameter string
-*
-* @constructor
-*
-* @param {String} str Comma-separated Lon,Lat coordinate string.
-* (ex. "5,40")
-*
-* @returns New OpenLayers.LonLat object built from the passed-in String.
-* @type OpenLayers.LonLat
-*/
-OpenLayers.LonLat.fromString = function(str) {
- var pair = str.split(",");
- return new OpenLayers.LonLat(parseFloat(pair[0]),
- parseFloat(pair[1]));
-};
-
-
-
-
-/**
-* @class This class represents a bounding box.
-* Data stored as left, bottom, right, top floats
-*/
-OpenLayers.Bounds = Class.create();
-OpenLayers.Bounds.prototype = {
-
- /** @type float */
- left: 0.0,
-
- /** @type float */
- bottom: 0.0,
-
- /** @type float */
- right: 0.0,
-
- /** @type float */
- top: 0.0,
-
- /**
- * @constructor
- *
- * @param {float} left
- * @param {float} bottom
- * @param {float} right
- * @param {float} top
- *
- */
- initialize: function(left, bottom, right, top) {
- this.left = left;
- this.bottom = bottom;
- this.right = right;
- this.top = top;
- },
-
- /**
- * @deprecated
- *
- * @returns A fresh copy of the bounds
- * @type OpenLayers.Bounds
- */
- copyOf:function() {
- return this.clone();
- },
-
- /**
- * @returns A fresh copy of the bounds
- * @type OpenLayers.Bounds
- */
- clone:function() {
- return new OpenLayers.Bounds(this.left, this.bottom,
- this.right, this.top);
- },
-
- /**
- * @param {OpenLayers.Bounds} bounds
- * @returns Boolean value indicating whether the passed-in OpenLayers.Bounds
- * object has the same left, right, top, bottom components as this
- * note that if bounds passed in is null, returns false
- *
- * @type bool
- */
- 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;
- },
-
- /**
- * @return String representation of OpenLayers.Bounds object.
- * (ex."left-bottom=(5,42) right-top=(10,45)")
- * @type String
- */
- toString:function(){
- return ( "left-bottom=(" + this.left + "," + this.bottom + ")"
- + " right-top=(" + this.right + "," + this.top + ")" );
- },
-
- /**
- * @return Simple String representation of OpenLayers.Bounds object.
- * (ex. "5,42,10,45")
- * @type String
- */
- toBBOX:function() {
- return (this.left + "," + this.bottom + ","
- + this.right + "," + this.top);
- },
-
- /**
- * @returns The width of the bounds
- * @type float
- */
- getWidth:function() {
- return (this.right - this.left);
- },
-
- /**
- * @returns The height of the bounds
- * @type float
- */
- getHeight:function() {
- return (this.top - this.bottom);
- },
-
- /**
- * @returns An OpenLayers.Size which represents the size of the box
- * @type OpenLayers.Size
- */
- getSize:function() {
- return new OpenLayers.Size(this.getWidth(), this.getHeight());
- },
-
- /**
- * @returns An OpenLayers.Pixel which represents the center of the bounds
- * @type OpenLayers.Pixel
- */
- getCenterPixel:function() {
- return new OpenLayers.Pixel( (this.left + this.right) / 2,
- (this.bottom + this.top) / 2);
- },
-
- /**
- * @returns An OpenLayers.LonLat which represents the center of the bounds
- * @type OpenLayers.LonLat
- */
- getCenterLonLat:function() {
- return new OpenLayers.LonLat( (this.left + this.right) / 2,
- (this.bottom + this.top) / 2);
- },
-
- /**
- * @param {float} x
- * @param {float} y
- *
- * @returns A new OpenLayers.Bounds whose coordinates are the same as this,
- * but shifted by the passed-in x and y values
- * @type OpenLayers.Bounds
- */
- add:function(x, y){
- return new OpenLayers.Box(this.left + x, this.bottom + y,
- this.right + x, this.top + y);
- },
-
- /**
- * @param {float} x
- * @param {float} y
- * @param {Boolean} inclusive Whether or not to include the border.
- * Default is true
- *
- * @return Whether or not the passed-in coordinates are within this bounds
- * @type Boolean
- */
- contains:function(x, y, inclusive) {
-
- //set default
- if (inclusive == null) {
- inclusive = true;
- }
-
- 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;
- },
-
- /**
- * @param {OpenLayers.Bounds} bounds
- * @param {Boolean} partial If true, only part of passed-in
- * OpenLayers.Bounds needs be within this bounds.
- * If false, the entire passed-in bounds must be
- * within. Default is false
- * @param {Boolean} inclusive Whether or not to include the border.
- * Default is true
- *
- * @return Whether or not the passed-in OpenLayers.Bounds object is
- * contained within this bounds.
- * @type Boolean
- */
- containsBounds:function(bounds, partial, inclusive) {
-
- //set defaults
- if (partial == null) {
- partial = false;
- }
- if (inclusive == null) {
- inclusive = true;
- }
-
- var inLeft;
- var inTop;
- var inRight;
- var inBottom;
-
- if (inclusive) {
- inLeft = (bounds.left >= this.left) && (bounds.left <= this.right);
- inTop = (bounds.top >= this.bottom) && (bounds.top <= this.top);
- inRight= (bounds.right >= this.left) && (bounds.right <= this.right);
- inBottom = (bounds.bottom >= this.bottom) && (bounds.bottom <= this.top);
- } else {
- inLeft = (bounds.left > this.left) && (bounds.left < this.right);
- inTop = (bounds.top > this.bottom) && (bounds.top < this.top);
- inRight= (bounds.right > this.left) && (bounds.right < this.right);
- inBottom = (bounds.bottom > this.bottom) && (bounds.bottom < this.top);
- }
-
- return (partial) ? (inTop || inBottom) && (inLeft || inRight )
- : (inTop && inLeft && inBottom && inRight);
- },
-
- /**
- * @param {OpenLayers.LonLat} lonlat
- *
- * @returns The quadrant ("br" "tr" "tl" "bl") of the bounds in which
- * the coordinate lies.
- * @type String
- */
- determineQuadrant: function(lonlat) {
-
- var quadrant = "";
- var center = this.getCenterLonLat();
-
- quadrant += (lonlat.lat < center.lat) ? "b" : "t";
- quadrant += (lonlat.lon < center.lon) ? "l" : "r";
-
- return quadrant;
- },
-
- /** @final @type String */
- CLASS_NAME: "OpenLayers.Bounds"
-};
-
-/** Alternative constructor that builds a new OpenLayers.Bounds from a
-* parameter string
-*
-* @constructor
-*
-* @param {String} str Comma-separated bounds string. (ex. "5,42,10,45")
-*
-* @returns New OpenLayers.Bounds object built from the passed-in String.
-* @type OpenLayers.Bounds
-*/
-OpenLayers.Bounds.fromString = function(str) {
- var bounds = str.split(",");
- return OpenLayers.Bounds.fromArray(bounds);
-};
-
-/** Alternative constructor that builds a new OpenLayers.Bounds
-* from an array
-*
-* @constructor
-*
-* @param {Array} bbox Array of bounds values (ex. [5,42,10,45])
-*
-* @returns New OpenLayers.Bounds object built from the passed-in Array.
-* @type OpenLayers.Bounds
-*/
-OpenLayers.Bounds.fromArray = function(bbox) {
- return new OpenLayers.Bounds(parseFloat(bbox[0]),
- parseFloat(bbox[1]),
- parseFloat(bbox[2]),
- parseFloat(bbox[3]));
-};
-
-/** Alternative constructor that builds a new OpenLayers.Bounds
-* from an OpenLayers.Size
-*
-* @constructor
-*
-* @param {OpenLayers.Size} size
-*
-* @returns New OpenLayers.Bounds object built with top and left set to 0 and
-* bottom right taken from the passed-in OpenLayers.Size.
-* @type OpenLayers.Bounds
-*/
-OpenLayers.Bounds.fromSize = function(size) {
- return new OpenLayers.Bounds(0,
- size.h,
- size.w,
- 0);
-};
-/**
- * @param {String} quadrant
- *
- * @returns The opposing quadrant ("br" "tr" "tl" "bl"). For Example, if
- * you pass in "bl" it returns "tr", if you pass in "br" it
- * returns "tl", etc.
- * @type String
- */
-OpenLayers.Bounds.oppositeQuadrant = function(quadrant) {
- var opp = "";
-
- opp += (quadrant.charAt(0) == 't') ? 'b' : 't';
- opp += (quadrant.charAt(1) == 'l') ? 'r' : 'l';
-
- return opp;
-};
-
-// Some other helpful things
-
-/**
-* @param {String} sStart
-*
-* @returns Whether or not this string starts with the string passed in.
-* @type Boolean
-*/
-String.prototype.startsWith = function(sStart){
- return (this.substr(0,sStart.length) == sStart);
-};
-
-/**
-* @param {String} str
-*
-* @returns Whether or not this string contains with the string passed in.
-* @type Boolean
-*/
-String.prototype.contains = function(str){
- return (this.indexOf(str) != -1);
-};
-
-/**
-* @returns A trimmed version of the string - all leading and
-* trailing spaces removed
-* @type String
-*/
-String.prototype.trim = function() {
-
- var b = 0;
- while(this.substr(b,1) == " ") {
- b++;
- }
-
- var e = this.length - 1;
- while(this.substr(e,1) == " ") {
- e--;
- }
-
- return this.substring(b, e+1);
-};
-
-/** Remove an object from an array. Iterates through the array
-* to find the item, then removes it.
-*
-* @param {Object} item
-*
-* @returns A reference to the array
-* @type Array
-*/
-Array.prototype.remove = function(item) {
- for(var i=0; i < this.length; i++) {
- if(this[i] == item) {
- this.splice(i,1);
- //break;more than once??
- }
- }
- return this;
-}
-
-/**
- * @deprecated
- *
- * @returns A fresh copy of the array
- * @type Array
- */
-Array.prototype.copyOf = function() {
- return this.clone();
-};
-
-/**
-* @returns A fresh copy of the array
-* @type Array
-*/
-Array.prototype.clone = function() {
- var clone = new Array();
- for (var i = 0; i < this.length; i++) {
- clone[i] = this[i];
- }
- return clone;
-};
-
-/**
-*/
-Array.prototype.clear = function() {
- this.length = 0;
-};
-
-
-/** NOTE: Works only with integer values does *not* work with floats!
- *
- * @param {int} sig
- *
- * @returns The number, rounded to the specified number of significant digits.
- * If null, 0, or negaive value passed in, returns 0
- * @type int
- */
-Number.prototype.limitSigDigs = function(sig) {
- var number = (sig > 0) ? this.toString() : 0;
- if (sig < number.length) {
- var exp = number.length - sig;
- number = Math.round( this / Math.pow(10, exp)) * Math.pow(10, exp);
- }
- return parseInt(number);
-}
-
/**
* @param {String} id
* @param {OpenLayers.Pixel} px