Commit d649bc4f7a3b4b8b3a76dd53a2bca6314098348e

Authored by Edmar Moretti
1 parent 73e4c672

--no commit message

ferramentas/ol3panel/Class.js
@@ -1,163 +0,0 @@ @@ -1,163 +0,0 @@
1 -/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for  
2 - * full list of contributors). Published under the Clear BSD license.  
3 - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the  
4 - * full text of the license. */  
5 -  
6 -/**  
7 - * @requires OpenLayers/SingleFile.js  
8 - */  
9 -  
10 -/**  
11 - * Constructor: OpenLayers.Class  
12 - * Base class used to construct all other classes. Includes support for  
13 - * multiple inheritance.  
14 - *  
15 - * This constructor is new in OpenLayers 2.5. At OpenLayers 3.0, the old  
16 - * syntax for creating classes and dealing with inheritance  
17 - * will be removed.  
18 - *  
19 - * To create a new OpenLayers-style class, use the following syntax:  
20 - * (code)  
21 - * var MyClass = OpenLayers.Class(prototype);  
22 - * (end)  
23 - *  
24 - * To create a new OpenLayers-style class with multiple inheritance, use the  
25 - * following syntax:  
26 - * (code)  
27 - * var MyClass = OpenLayers.Class(Class1, Class2, prototype);  
28 - * (end)  
29 - *  
30 - * Note that instanceof reflection will only reveal Class1 as superclass.  
31 - *  
32 - */  
33 -OpenLayers.Class = function() {  
34 - var len = arguments.length;  
35 - var P = arguments[0];  
36 - var F = arguments[len-1];  
37 -  
38 - var C = typeof F.initialize == "function" ?  
39 - F.initialize :  
40 - function(){ P.prototype.initialize.apply(this, arguments); };  
41 -  
42 - if (len > 1) {  
43 - var newArgs = [C, P].concat(  
44 - Array.prototype.slice.call(arguments).slice(1, len-1), F);  
45 - OpenLayers.inherit.apply(null, newArgs);  
46 - } else {  
47 - C.prototype = F;  
48 - }  
49 - return C;  
50 -};  
51 -  
52 -/**  
53 - * Property: isPrototype  
54 - * *Deprecated*. This is no longer needed and will be removed at 3.0.  
55 - */  
56 -OpenLayers.Class.isPrototype = function () {};  
57 -  
58 -/**  
59 - * APIFunction: OpenLayers.create  
60 - * *Deprecated*. Old method to create an OpenLayers style class. Use the  
61 - * <OpenLayers.Class> constructor instead.  
62 - *  
63 - * Returns:  
64 - * An OpenLayers class  
65 - */  
66 -OpenLayers.Class.create = function() {  
67 - return function() {  
68 - if (arguments && arguments[0] != OpenLayers.Class.isPrototype) {  
69 - this.initialize.apply(this, arguments);  
70 - }  
71 - };  
72 -};  
73 -  
74 -/**  
75 - * APIFunction: inherit  
76 - * *Deprecated*. Old method to inherit from one or more OpenLayers style  
77 - * classes. Use the <OpenLayers.Class> constructor instead.  
78 - *  
79 - * Parameters:  
80 - * class - One or more classes can be provided as arguments  
81 - *  
82 - * Returns:  
83 - * An object prototype  
84 - */  
85 -OpenLayers.Class.inherit = function (P) {  
86 - var C = function() {  
87 - P.call(this);  
88 - };  
89 - var newArgs = [C].concat(Array.prototype.slice.call(arguments));  
90 - OpenLayers.inherit.apply(null, newArgs);  
91 - return C.prototype;  
92 -};  
93 -  
94 -/**  
95 - * Function: OpenLayers.inherit  
96 - *  
97 - * Parameters:  
98 - * C - {Object} the class that inherits  
99 - * P - {Object} the superclass to inherit from  
100 - *  
101 - * In addition to the mandatory C and P parameters, an arbitrary number of  
102 - * objects can be passed, which will extend C.  
103 - */  
104 -OpenLayers.inherit = function(C, P) {  
105 - var F = function() {};  
106 - F.prototype = P.prototype;  
107 - C.prototype = new F;  
108 - var i, l, o;  
109 - for(i=2, l=arguments.length; i<l; i++) {  
110 - o = arguments[i];  
111 - if(typeof o === "function") {  
112 - o = o.prototype;  
113 - }  
114 - OpenLayers.Util.extend(C.prototype, o);  
115 - }  
116 -};  
117 -  
118 -/**  
119 - * APIFunction: extend  
120 - * Copy all properties of a source object to a destination object. Modifies  
121 - * the passed in destination object. Any properties on the source object  
122 - * that are set to undefined will not be (re)set on the destination object.  
123 - *  
124 - * Parameters:  
125 - * destination - {Object} The object that will be modified  
126 - * source - {Object} The object with properties to be set on the destination  
127 - *  
128 - * Returns:  
129 - * {Object} The destination object.  
130 - */  
131 -OpenLayers.Util = OpenLayers.Util || {};  
132 -OpenLayers.Util.extend = function(destination, source) {  
133 - destination = destination || {};  
134 - if (source) {  
135 - for (var property in source) {  
136 - var value = source[property];  
137 - if (value !== undefined) {  
138 - destination[property] = value;  
139 - }  
140 - }  
141 -  
142 - /**  
143 - * IE doesn't include the toString property when iterating over an object's  
144 - * properties with the for(property in object) syntax. Explicitly check if  
145 - * the source has its own toString property.  
146 - */  
147 -  
148 - /*  
149 - * FF/Windows < 2.0.0.13 reports "Illegal operation on WrappedNative  
150 - * prototype object" when calling hawOwnProperty if the source object  
151 - * is an instance of window.Event.  
152 - */  
153 -  
154 - var sourceIsEvt = typeof window.Event == "function"  
155 - && source instanceof window.Event;  
156 -  
157 - if (!sourceIsEvt  
158 - && source.hasOwnProperty && source.hasOwnProperty("toString")) {  
159 - destination.toString = source.toString;  
160 - }  
161 - }  
162 - return destination;  
163 -};  
ferramentas/ol3panel/Control.js
@@ -1,372 +0,0 @@ @@ -1,372 +0,0 @@
1 -/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for  
2 - * full list of contributors). Published under the Clear BSD license.  
3 - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the  
4 - * full text of the license. */  
5 -  
6 -/**  
7 - * @requires OpenLayers/BaseTypes/Class.js  
8 - * @requires OpenLayers/Console.js  
9 - */  
10 -  
11 -/**  
12 - * Class: OpenLayers.Control  
13 - * Controls affect the display or behavior of the map. They allow everything  
14 - * from panning and zooming to displaying a scale indicator. Controls by  
15 - * default are added to the map they are contained within however it is  
16 - * possible to add a control to an external div by passing the div in the  
17 - * options parameter.  
18 - *  
19 - * Example:  
20 - * The following example shows how to add many of the common controls  
21 - * to a map.  
22 - *  
23 - * > var map = new OpenLayers.Map('map', { controls: [] });  
24 - * >  
25 - * > map.addControl(new OpenLayers.Control.PanZoomBar());  
26 - * > map.addControl(new OpenLayers.Control.MouseToolbar());  
27 - * > map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));  
28 - * > map.addControl(new OpenLayers.Control.Permalink());  
29 - * > map.addControl(new OpenLayers.Control.Permalink('permalink'));  
30 - * > map.addControl(new OpenLayers.Control.MousePosition());  
31 - * > map.addControl(new OpenLayers.Control.OverviewMap());  
32 - * > map.addControl(new OpenLayers.Control.KeyboardDefaults());  
33 - *  
34 - * The next code fragment is a quick example of how to intercept  
35 - * shift-mouse click to display the extent of the bounding box  
36 - * dragged out by the user. Usually controls are not created  
37 - * in exactly this manner. See the source for a more complete  
38 - * example:  
39 - *  
40 - * > var control = new OpenLayers.Control();  
41 - * > OpenLayers.Util.extend(control, {  
42 - * > draw: function () {  
43 - * > // this Handler.Box will intercept the shift-mousedown  
44 - * > // before Control.MouseDefault gets to see it  
45 - * > this.box = new OpenLayers.Handler.Box( control,  
46 - * > {"done": this.notice},  
47 - * > {keyMask: OpenLayers.Handler.MOD_SHIFT});  
48 - * > this.box.activate();  
49 - * > },  
50 - * >  
51 - * > notice: function (bounds) {  
52 - * > OpenLayers.Console.userError(bounds);  
53 - * > }  
54 - * > });  
55 - * > map.addControl(control);  
56 - *  
57 - */  
58 -OpenLayers.Control = OpenLayers.Class({  
59 -  
60 - /**  
61 - * Property: id  
62 - * {String}  
63 - */  
64 - id: null,  
65 -  
66 - /**  
67 - * Property: map  
68 - * {<OpenLayers.Map>} this gets set in the addControl() function in  
69 - * OpenLayers.Map  
70 - */  
71 - map: null,  
72 -  
73 - /**  
74 - * APIProperty: div  
75 - * {DOMElement} The element that contains the control, if not present the  
76 - * control is placed inside the map.  
77 - */  
78 - div: null,  
79 -  
80 - /**  
81 - * APIProperty: type  
82 - * {Number} Controls can have a 'type'. The type determines the type of  
83 - * interactions which are possible with them when they are placed in an  
84 - * <OpenLayers.Control.Panel>.  
85 - */  
86 - type: null,  
87 -  
88 - /**  
89 - * Property: allowSelection  
90 - * {Boolean} By deafault, controls do not allow selection, because  
91 - * it may interfere with map dragging. If this is true, OpenLayers  
92 - * will not prevent selection of the control.  
93 - * Default is false.  
94 - */  
95 - allowSelection: false,  
96 -  
97 - /**  
98 - * Property: displayClass  
99 - * {string} This property is used for CSS related to the drawing of the  
100 - * Control.  
101 - */  
102 - displayClass: "",  
103 -  
104 - /**  
105 - * APIProperty: title  
106 - * {string} This property is used for showing a tooltip over the  
107 - * Control.  
108 - */  
109 - title: "",  
110 -  
111 - /**  
112 - * APIProperty: autoActivate  
113 - * {Boolean} Activate the control when it is added to a map. Default is  
114 - * false.  
115 - */  
116 - autoActivate: false,  
117 -  
118 - /**  
119 - * APIProperty: active  
120 - * {Boolean} The control is active (read-only). Use <activate> and  
121 - * <deactivate> to change control state.  
122 - */  
123 - active: null,  
124 -  
125 - /**  
126 - * Property: handler  
127 - * {<OpenLayers.Handler>} null  
128 - */  
129 - handler: null,  
130 -  
131 - /**  
132 - * APIProperty: eventListeners  
133 - * {Object} If set as an option at construction, the eventListeners  
134 - * object will be registered with <OpenLayers.Events.on>. Object  
135 - * structure must be a listeners object as shown in the example for  
136 - * the events.on method.  
137 - */  
138 - eventListeners: null,  
139 -  
140 - /**  
141 - * APIProperty: events  
142 - * {<OpenLayers.Events>} Events instance for listeners and triggering  
143 - * control specific events.  
144 - */  
145 - events: null,  
146 -  
147 - /**  
148 - * Constant: EVENT_TYPES  
149 - * {Array(String)} Supported application event types. Register a listener  
150 - * for a particular event with the following syntax:  
151 - * (code)  
152 - * control.events.register(type, obj, listener);  
153 - * (end)  
154 - *  
155 - * Listeners will be called with a reference to an event object. The  
156 - * properties of this event depends on exactly what happened.  
157 - *  
158 - * All event objects have at least the following properties:  
159 - * object - {Object} A reference to control.events.object (a reference  
160 - * to the control).  
161 - * element - {DOMElement} A reference to control.events.element (which  
162 - * will be null unless documented otherwise).  
163 - *  
164 - * Supported map event types:  
165 - * activate - Triggered when activated.  
166 - * deactivate - Triggered when deactivated.  
167 - */  
168 - EVENT_TYPES: ["activate", "deactivate"],  
169 -  
170 - /**  
171 - * Constructor: OpenLayers.Control  
172 - * Create an OpenLayers Control. The options passed as a parameter  
173 - * directly extend the control. For example passing the following:  
174 - *  
175 - * > var control = new OpenLayers.Control({div: myDiv});  
176 - *  
177 - * Overrides the default div attribute value of null.  
178 - *  
179 - * Parameters:  
180 - * options - {Object}  
181 - */  
182 - initialize: function (options) {  
183 - // We do this before the extend so that instances can override  
184 - // className in options.  
185 - this.displayClass =  
186 - this.CLASS_NAME.replace("OpenLayers.", "ol").replace(/\./g, "");  
187 -  
188 - OpenLayers.Util.extend(this, options);  
189 -  
190 - this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES);  
191 - if(this.eventListeners instanceof Object) {  
192 - this.events.on(this.eventListeners);  
193 - }  
194 - if (this.id == null) {  
195 - this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");  
196 - }  
197 - },  
198 -  
199 - /**  
200 - * Method: destroy  
201 - * The destroy method is used to perform any clean up before the control  
202 - * is dereferenced. Typically this is where event listeners are removed  
203 - * to prevent memory leaks.  
204 - */  
205 - destroy: function () {  
206 - if(this.events) {  
207 - if(this.eventListeners) {  
208 - this.events.un(this.eventListeners);  
209 - }  
210 - this.events.destroy();  
211 - this.events = null;  
212 - }  
213 - this.eventListeners = null;  
214 -  
215 - // eliminate circular references  
216 - if (this.handler) {  
217 - this.handler.destroy();  
218 - this.handler = null;  
219 - }  
220 - if(this.handlers) {  
221 - for(var key in this.handlers) {  
222 - if(this.handlers.hasOwnProperty(key) &&  
223 - typeof this.handlers[key].destroy == "function") {  
224 - this.handlers[key].destroy();  
225 - }  
226 - }  
227 - this.handlers = null;  
228 - }  
229 - if (this.map) {  
230 - this.map.removeControl(this);  
231 - this.map = null;  
232 - }  
233 - this.div = null;  
234 - },  
235 -  
236 - /**  
237 - * Method: setMap  
238 - * Set the map property for the control. This is done through an accessor  
239 - * so that subclasses can override this and take special action once  
240 - * they have their map variable set.  
241 - *  
242 - * Parameters:  
243 - * map - {<OpenLayers.Map>}  
244 - */  
245 - setMap: function(map) {  
246 - this.map = map;  
247 - if (this.handler) {  
248 - this.handler.setMap(map);  
249 - }  
250 - },  
251 -  
252 - /**  
253 - * Method: draw  
254 - * The draw method is called when the control is ready to be displayed  
255 - * on the page. If a div has not been created one is created. Controls  
256 - * with a visual component will almost always want to override this method  
257 - * to customize the look of control.  
258 - *  
259 - * Parameters:  
260 - * px - {<OpenLayers.Pixel>} The top-left pixel position of the control  
261 - * or null.  
262 - *  
263 - * Returns:  
264 - * {DOMElement} A reference to the DIV DOMElement containing the control  
265 - */  
266 - draw: function (px) {  
267 - if (this.div == null) {  
268 - this.div = OpenLayers.Util.createDiv(this.id);  
269 - this.div.className = this.displayClass;  
270 - if (!this.allowSelection) {  
271 - this.div.className += " olControlNoSelect";  
272 - this.div.setAttribute("unselectable", "on", 0);  
273 - this.div.onselectstart = OpenLayers.Function.False;  
274 - }  
275 - if (this.title != "") {  
276 - this.div.title = this.title;  
277 - }  
278 - }  
279 - if (px != null) {  
280 - this.position = px.clone();  
281 - }  
282 - this.moveTo(this.position);  
283 - return this.div;  
284 - },  
285 -  
286 - /**  
287 - * Method: moveTo  
288 - * Sets the left and top style attributes to the passed in pixel  
289 - * coordinates.  
290 - *  
291 - * Parameters:  
292 - * px - {<OpenLayers.Pixel>}  
293 - */  
294 - moveTo: function (px) {  
295 - if ((px != null) && (this.div != null)) {  
296 - this.div.style.left = px.x + "px";  
297 - this.div.style.top = px.y + "px";  
298 - }  
299 - },  
300 -  
301 - /**  
302 - * APIMethod: activate  
303 - * Explicitly activates a control and it's associated  
304 - * handler if one has been set. Controls can be  
305 - * deactivated by calling the deactivate() method.  
306 - *  
307 - * Returns:  
308 - * {Boolean} True if the control was successfully activated or  
309 - * false if the control was already active.  
310 - */  
311 - activate: function () {  
312 - if (this.active) {  
313 - return false;  
314 - }  
315 - if (this.handler) {  
316 - this.handler.activate();  
317 - }  
318 - this.active = true;  
319 - if(this.map) {  
320 - OpenLayers.Element.addClass(  
321 - this.map.viewPortDiv,  
322 - this.displayClass.replace(/ /g, "") + "Active"  
323 - );  
324 - }  
325 - this.events.triggerEvent("activate");  
326 - return true;  
327 - },  
328 -  
329 - /**  
330 - * APIMethod: deactivate  
331 - * Deactivates a control and it's associated handler if any. The exact  
332 - * effect of this depends on the control itself.  
333 - *  
334 - * Returns:  
335 - * {Boolean} True if the control was effectively deactivated or false  
336 - * if the control was already inactive.  
337 - */  
338 - deactivate: function () {  
339 - if (this.active) {  
340 - if (this.handler) {  
341 - this.handler.deactivate();  
342 - }  
343 - this.active = false;  
344 - if(this.map) {  
345 - OpenLayers.Element.removeClass(  
346 - this.map.viewPortDiv,  
347 - this.displayClass.replace(/ /g, "") + "Active"  
348 - );  
349 - }  
350 - this.events.triggerEvent("deactivate");  
351 - return true;  
352 - }  
353 - return false;  
354 - },  
355 -  
356 - CLASS_NAME: "OpenLayers.Control"  
357 -});  
358 -  
359 -/**  
360 - * Constant: OpenLayers.Control.TYPE_BUTTON  
361 - */  
362 -OpenLayers.Control.TYPE_BUTTON = 1;  
363 -  
364 -/**  
365 - * Constant: OpenLayers.Control.TYPE_TOGGLE  
366 - */  
367 -OpenLayers.Control.TYPE_TOGGLE = 2;  
368 -  
369 -/**  
370 - * Constant: OpenLayers.Control.TYPE_TOOL  
371 - */  
372 -OpenLayers.Control.TYPE_TOOL = 3;  
ferramentas/ol3panel/Panel.js
@@ -1,392 +0,0 @@ @@ -1,392 +0,0 @@
1 -/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for  
2 - * full list of contributors). Published under the Clear BSD license.  
3 - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the  
4 - * full text of the license. */  
5 -  
6 -/**  
7 - * @requires OpenLayers/Control.js  
8 - */  
9 -  
10 -/**  
11 - * Class: OpenLayers.Control.Panel  
12 - * The Panel control is a container for other controls. With it toolbars  
13 - * may be composed.  
14 - *  
15 - * Inherits from:  
16 - * - <OpenLayers.Control>  
17 - */  
18 -OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {  
19 - /**  
20 - * Property: controls  
21 - * {Array(<OpenLayers.Control>)}  
22 - */  
23 - controls: null,  
24 -  
25 - /**  
26 - * APIProperty: autoActivate  
27 - * {Boolean} Activate the control when it is added to a map. Default is  
28 - * true.  
29 - */  
30 - autoActivate: true,  
31 -  
32 - /**  
33 - * APIProperty: defaultControl  
34 - * {<OpenLayers.Control>} The control which is activated when the control is  
35 - * activated (turned on), which also happens at instantiation.  
36 - * If <saveState> is true, <defaultControl> will be nullified after the  
37 - * first activation of the panel.  
38 - */  
39 - defaultControl: null,  
40 -  
41 - /**  
42 - * APIProperty: saveState  
43 - * {Boolean} If set to true, the active state of this panel's controls will  
44 - * be stored on panel deactivation, and restored on reactivation. Default  
45 - * is false.  
46 - */  
47 - saveState: false,  
48 -  
49 - /**  
50 - * APIProperty: allowDepress  
51 - * {Boolean} If is true the <OpenLayers.Control.TYPE_TOOL> controls can  
52 - * be deactivated by clicking the icon that represents them. Default  
53 - * is false.  
54 - */  
55 - allowDepress: false,  
56 -  
57 - /**  
58 - * Property: activeState  
59 - * {Object} stores the active state of this panel's controls.  
60 - */  
61 - activeState: null,  
62 -  
63 - /**  
64 - * Constructor: OpenLayers.Control.Panel  
65 - * Create a new control panel.  
66 - *  
67 - * Each control in the panel is represented by an icon. When clicking  
68 - * on an icon, the <activateControl> method is called.  
69 - *  
70 - * Specific properties for controls on a panel:  
71 - * type - {Number} One of <OpenLayers.Control.TYPE_TOOL>,  
72 - * <OpenLayers.Control.TYPE_TOGGLE>, <OpenLayers.Control.TYPE_BUTTON>.  
73 - * If not provided, <OpenLayers.Control.TYPE_TOOL> is assumed.  
74 - * title - {string} Text displayed when mouse is over the icon that  
75 - * represents the control.  
76 - *  
77 - * The <OpenLayers.Control.type> of a control determines the behavior when  
78 - * clicking its icon:  
79 - * <OpenLayers.Control.TYPE_TOOL> - The control is activated and other  
80 - * controls of this type in the same panel are deactivated. This is  
81 - * the default type.  
82 - * <OpenLayers.Control.TYPE_TOGGLE> - The active state of the control is  
83 - * toggled.  
84 - * <OpenLayers.Control.TYPE_BUTTON> - The  
85 - * <OpenLayers.Control.Button.trigger> method of the control is called,  
86 - * but its active state is not changed.  
87 - *  
88 - * If a control is <OpenLayers.Control.active>, it will be drawn with the  
89 - * olControl[Name]ItemActive class, otherwise with the  
90 - * olControl[Name]ItemInactive class.  
91 - *  
92 - * Parameters:  
93 - * options - {Object} An optional object whose properties will be used  
94 - * to extend the control.  
95 - */  
96 - initialize: function(options) {  
97 - OpenLayers.Control.prototype.initialize.apply(this, [options]);  
98 - this.controls = [];  
99 - this.activeState = {};  
100 - },  
101 -  
102 - /**  
103 - * APIMethod: destroy  
104 - */  
105 - destroy: function() {  
106 - OpenLayers.Control.prototype.destroy.apply(this, arguments);  
107 - for (var ctl, i = this.controls.length - 1; i >= 0; i--) {  
108 - ctl = this.controls[i];  
109 - if (ctl.events) {  
110 - ctl.events.un({  
111 - activate: this.iconOn,  
112 - deactivate: this.iconOff  
113 - });  
114 - }  
115 - OpenLayers.Event.stopObservingElement(ctl.panel_div);  
116 - ctl.panel_div = null;  
117 - }  
118 - this.activeState = null;  
119 - },  
120 -  
121 - /**  
122 - * APIMethod: activate  
123 - */  
124 - activate: function() {  
125 - if (OpenLayers.Control.prototype.activate.apply(this, arguments)) {  
126 - var control;  
127 - for (var i=0, len=this.controls.length; i<len; i++) {  
128 - control = this.controls[i];  
129 - if (control === this.defaultControl ||  
130 - (this.saveState && this.activeState[control.id])) {  
131 - control.activate();  
132 - }  
133 - }  
134 - if (this.saveState === true) {  
135 - this.defaultControl = null;  
136 - }  
137 - this.redraw();  
138 - return true;  
139 - } else {  
140 - return false;  
141 - }  
142 - },  
143 -  
144 - /**  
145 - * APIMethod: deactivate  
146 - */  
147 - deactivate: function() {  
148 - if (OpenLayers.Control.prototype.deactivate.apply(this, arguments)) {  
149 - var control;  
150 - for (var i=0, len=this.controls.length; i<len; i++) {  
151 - control = this.controls[i];  
152 - this.activeState[control.id] = control.deactivate();  
153 - }  
154 - this.redraw();  
155 - return true;  
156 - } else {  
157 - return false;  
158 - }  
159 - },  
160 -  
161 - /**  
162 - * Method: draw  
163 - *  
164 - * Returns:  
165 - * {DOMElement}  
166 - */  
167 - draw: function() {  
168 - OpenLayers.Control.prototype.draw.apply(this, arguments);  
169 - this.addControlsToMap(this.controls);  
170 - return this.div;  
171 - },  
172 -  
173 - /**  
174 - * Method: redraw  
175 - */  
176 - redraw: function() {  
177 - for (var l=this.div.childNodes.length, i=l-1; i>=0; i--) {  
178 - this.div.removeChild(this.div.childNodes[i]);  
179 - }  
180 - this.div.innerHTML = "";  
181 - if (this.active) {  
182 - for (var i=0, len=this.controls.length; i<len; i++) {  
183 - this.div.appendChild(this.controls[i].panel_div);  
184 - }  
185 - }  
186 - },  
187 -  
188 - /**  
189 - * APIMethod: activateControl  
190 - * This method is called when the user click on the icon representing a  
191 - * control in the panel.  
192 - *  
193 - * Parameters:  
194 - * control - {<OpenLayers.Control>}  
195 - */  
196 - activateControl: function (control) {  
197 - if (!this.active) { return false; }  
198 - if (control.type == OpenLayers.Control.TYPE_BUTTON) {  
199 - control.trigger();  
200 - return;  
201 - }  
202 - if (control.type == OpenLayers.Control.TYPE_TOGGLE) {  
203 - if (control.active) {  
204 - control.deactivate();  
205 - } else {  
206 - control.activate();  
207 - }  
208 - return;  
209 - }  
210 - if (this.allowDepress && control.active) {  
211 - control.deactivate();  
212 - } else {  
213 - var c;  
214 - for (var i=0, len=this.controls.length; i<len; i++) {  
215 - c = this.controls[i];  
216 - if (c != control &&  
217 - (c.type === OpenLayers.Control.TYPE_TOOL || c.type == null)) {  
218 - c.deactivate();  
219 - }  
220 - }  
221 - control.activate();  
222 - }  
223 - },  
224 -  
225 - /**  
226 - * APIMethod: addControls  
227 - * To build a toolbar, you add a set of controls to it. addControls  
228 - * lets you add a single control or a list of controls to the  
229 - * Control Panel.  
230 - *  
231 - * Parameters:  
232 - * controls - {<OpenLayers.Control>} Controls to add in the panel.  
233 - */  
234 - addControls: function(controls) {  
235 - if (!(OpenLayers.Util.isArray(controls))) {  
236 - controls = [controls];  
237 - }  
238 - this.controls = this.controls.concat(controls);  
239 -  
240 - // Give each control a panel_div which will be used later.  
241 - // Access to this div is via the panel_div attribute of the  
242 - // control added to the panel.  
243 - // Also, stop mousedowns and clicks, but don't stop mouseup,  
244 - // since they need to pass through.  
245 - for (var i=0, len=controls.length; i<len; i++) {  
246 - var element = document.createElement("div");  
247 - element.className = controls[i].displayClass + "ItemInactive";  
248 - controls[i].panel_div = element;  
249 - if (controls[i].title != "") {  
250 - controls[i].panel_div.title = controls[i].title;  
251 - }  
252 - OpenLayers.Event.observe(controls[i].panel_div, "click",  
253 - OpenLayers.Function.bind(this.onClick, this, controls[i]));  
254 - OpenLayers.Event.observe(controls[i].panel_div, "dblclick",  
255 - OpenLayers.Function.bind(this.onDoubleClick, this, controls[i]));  
256 - OpenLayers.Event.observe(controls[i].panel_div, "mousedown",  
257 - OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop));  
258 - }  
259 -  
260 - if (this.map) { // map.addControl() has already been called on the panel  
261 - this.addControlsToMap(controls);  
262 - this.redraw();  
263 - }  
264 - },  
265 -  
266 - /**  
267 - * Method: addControlsToMap  
268 - * Only for internal use in draw() and addControls() methods.  
269 - *  
270 - * Parameters:  
271 - * controls - {Array(<OpenLayers.Control>)} Controls to add into map.  
272 - */  
273 - addControlsToMap: function (controls) {  
274 - var control;  
275 - for (var i=0, len=controls.length; i<len; i++) {  
276 - control = controls[i];  
277 - if (control.autoActivate === true) {  
278 - control.autoActivate = false;  
279 - this.map.addControl(control);  
280 - control.autoActivate = true;  
281 - } else {  
282 - this.map.addControl(control);  
283 - control.deactivate();  
284 - }  
285 - control.events.on({  
286 - activate: this.iconOn,  
287 - deactivate: this.iconOff  
288 - });  
289 - }  
290 - },  
291 -  
292 - /**  
293 - * Method: iconOn  
294 - * Internal use, for use only with "controls[i].events.on/un".  
295 - */  
296 - iconOn: function() {  
297 - var d = this.panel_div; // "this" refers to a control on panel!  
298 - d.className = d.className.replace(/ItemInactive$/, "ItemActive");  
299 - },  
300 -  
301 - /**  
302 - * Method: iconOff  
303 - * Internal use, for use only with "controls[i].events.on/un".  
304 - */  
305 - iconOff: function() {  
306 - var d = this.panel_div; // "this" refers to a control on panel!  
307 - d.className = d.className.replace(/ItemActive$/, "ItemInactive");  
308 - },  
309 -  
310 - /**  
311 - * Method: onClick  
312 - */  
313 - onClick: function (ctrl, evt) {  
314 - OpenLayers.Event.stop(evt ? evt : window.event);  
315 - this.activateControl(ctrl);  
316 - },  
317 -  
318 - /**  
319 - * Method: onDoubleClick  
320 - */  
321 - onDoubleClick: function(ctrl, evt) {  
322 - OpenLayers.Event.stop(evt ? evt : window.event);  
323 - },  
324 -  
325 - /**  
326 - * APIMethod: getControlsBy  
327 - * Get a list of controls with properties matching the given criteria.  
328 - *  
329 - * Parameter:  
330 - * property - {String} A control property to be matched.  
331 - * match - {String | Object} A string to match. Can also be a regular  
332 - * expression literal or object. In addition, it can be any object  
333 - * with a method named test. For reqular expressions or other, if  
334 - * match.test(control[property]) evaluates to true, the control will be  
335 - * included in the array returned. If no controls are found, an empty  
336 - * array is returned.  
337 - *  
338 - * Returns:  
339 - * {Array(<OpenLayers.Control>)} A list of controls matching the given criteria.  
340 - * An empty array is returned if no matches are found.  
341 - */  
342 - getControlsBy: function(property, match) {  
343 - var test = (typeof match.test == "function");  
344 - var found = OpenLayers.Array.filter(this.controls, function(item) {  
345 - return item[property] == match || (test && match.test(item[property]));  
346 - });  
347 - return found;  
348 - },  
349 -  
350 - /**  
351 - * APIMethod: getControlsByName  
352 - * Get a list of contorls with names matching the given name.  
353 - *  
354 - * Parameter:  
355 - * match - {String | Object} A control name. The name can also be a regular  
356 - * expression literal or object. In addition, it can be any object  
357 - * with a method named test. For reqular expressions or other, if  
358 - * name.test(control.name) evaluates to true, the control will be included  
359 - * in the list of controls returned. If no controls are found, an empty  
360 - * array is returned.  
361 - *  
362 - * Returns:  
363 - * {Array(<OpenLayers.Control>)} A list of controls matching the given name.  
364 - * An empty array is returned if no matches are found.  
365 - */  
366 - getControlsByName: function(match) {  
367 - return this.getControlsBy("name", match);  
368 - },  
369 -  
370 - /**  
371 - * APIMethod: getControlsByClass  
372 - * Get a list of controls of a given type (CLASS_NAME).  
373 - *  
374 - * Parameter:  
375 - * match - {String | Object} A control class name. The type can also be a  
376 - * regular expression literal or object. In addition, it can be any  
377 - * object with a method named test. For reqular expressions or other,  
378 - * if type.test(control.CLASS_NAME) evaluates to true, the control will  
379 - * be included in the list of controls returned. If no controls are  
380 - * found, an empty array is returned.  
381 - *  
382 - * Returns:  
383 - * {Array(<OpenLayers.Control>)} A list of controls matching the given type.  
384 - * An empty array is returned if no matches are found.  
385 - */  
386 - getControlsByClass: function(match) {  
387 - return this.getControlsBy("CLASS_NAME", match);  
388 - },  
389 -  
390 - CLASS_NAME: "OpenLayers.Control.Panel"  
391 -});  
392 -  
ferramentas/ol3panel/Util.js
@@ -1,1839 +0,0 @@ @@ -1,1839 +0,0 @@
1 -/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for  
2 - * full list of contributors). Published under the Clear BSD license.  
3 - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the  
4 - * full text of the license. */  
5 -  
6 -/**  
7 - * @requires OpenLayers/BaseTypes.js  
8 - * @requires OpenLayers/BaseTypes/Bounds.js  
9 - * @requires OpenLayers/BaseTypes/Element.js  
10 - * @requires OpenLayers/BaseTypes/LonLat.js  
11 - * @requires OpenLayers/BaseTypes/Pixel.js  
12 - * @requires OpenLayers/BaseTypes/Size.js  
13 - * @requires OpenLayers/Console.js  
14 - * @requires OpenLayers/Lang.js  
15 - */  
16 -  
17 -/**  
18 - * Namespace: Util  
19 - */  
20 -OpenLayers.Util = OpenLayers.Util || {};  
21 -  
22 -/**  
23 - * Function: getElement  
24 - * This is the old $() from prototype  
25 - *  
26 - * Parameters:  
27 - * e - {String or DOMElement or Window}  
28 - * Return:  
29 - * {Array(DOMElement)}  
30 - */  
31 -OpenLayers.Util.getElement = function() {  
32 - var elements = [];  
33 -  
34 - for (var i=0, len=arguments.length; i<len; i++) {  
35 - var element = arguments[i];  
36 - if (typeof element == 'string') {  
37 - element = document.getElementById(element);  
38 - }  
39 - if (arguments.length == 1) {  
40 - return element;  
41 - }  
42 - elements.push(element);  
43 - }  
44 - return elements;  
45 -};  
46 -  
47 -/**  
48 - * Function: isElement  
49 - * A cross-browser implementation of "e instanceof Element".  
50 - *  
51 - * Parameters:  
52 - * o - {Object} The object to test.  
53 - *  
54 - * Returns:  
55 - * {Boolean}  
56 - */  
57 -OpenLayers.Util.isElement = function(o) {  
58 - return !!(o && o.nodeType === 1);  
59 -};  
60 -  
61 -/**  
62 - * Function: isArray  
63 - * Tests that the provided object is an array.  
64 - * This test handles the cross-IFRAME case not caught  
65 - * by "a instanceof Array" and should be used instead.  
66 - *  
67 - * Parameters:  
68 - * a - {Object} the object test.  
69 - *  
70 - * Returns  
71 - * {Boolean} true if the object is an array.  
72 - */  
73 -OpenLayers.Util.isArray = function(a) {  
74 - return (Object.prototype.toString.call(a) === '[object Array]');  
75 -};  
76 -  
77 -/**  
78 - * Maintain existing definition of $.  
79 - */  
80 -if(typeof window.$ === "undefined") {  
81 - window.$ = OpenLayers.Util.getElement;  
82 -}  
83 -  
84 -/**  
85 - * Function: removeItem  
86 - * Remove an object from an array. Iterates through the array  
87 - * to find the item, then removes it.  
88 - *  
89 - * Parameters:  
90 - * array - {Array}  
91 - * item - {Object}  
92 - *  
93 - * Return  
94 - * {Array} A reference to the array  
95 - */  
96 -OpenLayers.Util.removeItem = function(array, item) {  
97 - for(var i = array.length - 1; i >= 0; i--) {  
98 - if(array[i] == item) {  
99 - array.splice(i,1);  
100 - //break;more than once??  
101 - }  
102 - }  
103 - return array;  
104 -};  
105 -  
106 -/**  
107 - * Function: clearArray  
108 - * *Deprecated*. This function will disappear in 3.0.  
109 - * Please use "array.length = 0" instead.  
110 - *  
111 - * Parameters:  
112 - * array - {Array}  
113 - */  
114 -OpenLayers.Util.clearArray = function(array) {  
115 - OpenLayers.Console.warn(  
116 - OpenLayers.i18n(  
117 - "methodDeprecated", {'newMethod': 'array = []'}  
118 - )  
119 - );  
120 - array.length = 0;  
121 -};  
122 -  
123 -/**  
124 - * Function: indexOf  
125 - * Seems to exist already in FF, but not in MOZ.  
126 - *  
127 - * Parameters:  
128 - * array - {Array}  
129 - * obj - {*}  
130 - *  
131 - * Returns:  
132 - * {Integer} The index at, which the first object was found in the array.  
133 - * If not found, returns -1.  
134 - */  
135 -OpenLayers.Util.indexOf = function(array, obj) {  
136 - // use the build-in function if available.  
137 - if (typeof array.indexOf == "function") {  
138 - return array.indexOf(obj);  
139 - } else {  
140 - for (var i = 0, len = array.length; i < len; i++) {  
141 - if (array[i] == obj) {  
142 - return i;  
143 - }  
144 - }  
145 - return -1;  
146 - }  
147 -};  
148 -  
149 -  
150 -  
151 -/**  
152 - * Function: modifyDOMElement  
153 - *  
154 - * Modifies many properties of a DOM element all at once. Passing in  
155 - * null to an individual parameter will avoid setting the attribute.  
156 - *  
157 - * Parameters:  
158 - * element - {DOMElement} DOM element to modify.  
159 - * id - {String} The element id attribute to set.  
160 - * px - {<OpenLayers.Pixel>} The left and top style position.  
161 - * sz - {<OpenLayers.Size>} The width and height style attributes.  
162 - * position - {String} The position attribute. eg: absolute,  
163 - * relative, etc.  
164 - * border - {String} The style.border attribute. eg:  
165 - * solid black 2px  
166 - * overflow - {String} The style.overview attribute.  
167 - * opacity - {Float} Fractional value (0.0 - 1.0)  
168 - */  
169 -OpenLayers.Util.modifyDOMElement = function(element, id, px, sz, position,  
170 - border, overflow, opacity) {  
171 -  
172 - if (id) {  
173 - element.id = id;  
174 - }  
175 - if (px) {  
176 - element.style.left = px.x + "px";  
177 - element.style.top = px.y + "px";  
178 - }  
179 - if (sz) {  
180 - element.style.width = sz.w + "px";  
181 - element.style.height = sz.h + "px";  
182 - }  
183 - if (position) {  
184 - element.style.position = position;  
185 - }  
186 - if (border) {  
187 - element.style.border = border;  
188 - }  
189 - if (overflow) {  
190 - element.style.overflow = overflow;  
191 - }  
192 - if (parseFloat(opacity) >= 0.0 && parseFloat(opacity) < 1.0) {  
193 - element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';  
194 - element.style.opacity = opacity;  
195 - } else if (parseFloat(opacity) == 1.0) {  
196 - element.style.filter = '';  
197 - element.style.opacity = '';  
198 - }  
199 -};  
200 -  
201 -/**  
202 - * Function: createDiv  
203 - * Creates a new div and optionally set some standard attributes.  
204 - * Null may be passed to each parameter if you do not wish to  
205 - * set a particular attribute.  
206 - * Note - zIndex is NOT set on the resulting div.  
207 - *  
208 - * Parameters:  
209 - * id - {String} An identifier for this element. If no id is  
210 - * passed an identifier will be created  
211 - * automatically.  
212 - * px - {<OpenLayers.Pixel>} The element left and top position.  
213 - * sz - {<OpenLayers.Size>} The element width and height.  
214 - * imgURL - {String} A url pointing to an image to use as a  
215 - * background image.  
216 - * position - {String} The style.position value. eg: absolute,  
217 - * relative etc.  
218 - * border - {String} The the style.border value.  
219 - * eg: 2px solid black  
220 - * overflow - {String} The style.overflow value. Eg. hidden  
221 - * opacity - {Float} Fractional value (0.0 - 1.0)  
222 - *  
223 - * Returns:  
224 - * {DOMElement} A DOM Div created with the specified attributes.  
225 - */  
226 -OpenLayers.Util.createDiv = function(id, px, sz, imgURL, position,  
227 - border, overflow, opacity) {  
228 -  
229 - var dom = document.createElement('div');  
230 -  
231 - if (imgURL) {  
232 - dom.style.backgroundImage = 'url(' + imgURL + ')';  
233 - }  
234 -  
235 - //set generic properties  
236 - if (!id) {  
237 - id = OpenLayers.Util.createUniqueID("OpenLayersDiv");  
238 - }  
239 - if (!position) {  
240 - position = "absolute";  
241 - }  
242 - OpenLayers.Util.modifyDOMElement(dom, id, px, sz, position,  
243 - border, overflow, opacity);  
244 -  
245 - return dom;  
246 -};  
247 -  
248 -/**  
249 - * Function: createImage  
250 - * Creates an img element with specific attribute values.  
251 - *  
252 - * Parameters:  
253 - * id - {String} The id field for the img. If none assigned one will be  
254 - * automatically generated.  
255 - * px - {<OpenLayers.Pixel>} The left and top positions.  
256 - * sz - {<OpenLayers.Size>} The style.width and style.height values.  
257 - * imgURL - {String} The url to use as the image source.  
258 - * position - {String} The style.position value.  
259 - * border - {String} The border to place around the image.  
260 - * opacity - {Float} Fractional value (0.0 - 1.0)  
261 - * delayDisplay - {Boolean} If true waits until the image has been  
262 - * loaded.  
263 - *  
264 - * Returns:  
265 - * {DOMElement} A DOM Image created with the specified attributes.  
266 - */  
267 -OpenLayers.Util.createImage = function(id, px, sz, imgURL, position, border,  
268 - opacity, delayDisplay) {  
269 -  
270 - var image = document.createElement("img");  
271 -  
272 - //set generic properties  
273 - if (!id) {  
274 - id = OpenLayers.Util.createUniqueID("OpenLayersDiv");  
275 - }  
276 - if (!position) {  
277 - position = "relative";  
278 - }  
279 - OpenLayers.Util.modifyDOMElement(image, id, px, sz, position,  
280 - border, null, opacity);  
281 -  
282 - if(delayDisplay) {  
283 - image.style.display = "none";  
284 - OpenLayers.Event.observe(image, "load",  
285 - OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, image));  
286 - OpenLayers.Event.observe(image, "error",  
287 - OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, image));  
288 -  
289 - }  
290 -  
291 - //set special properties  
292 - image.style.alt = id;  
293 - image.galleryImg = "no";  
294 - if (imgURL) {  
295 - image.src = imgURL;  
296 - }  
297 -  
298 -  
299 -  
300 - return image;  
301 -};  
302 -  
303 -/**  
304 - * Function: setOpacity  
305 - * *Deprecated*. This function has been deprecated. Instead, please use  
306 - * <OpenLayers.Util.modifyDOMElement>  
307 - * or  
308 - * <OpenLayers.Util.modifyAlphaImageDiv>  
309 - *  
310 - * Set the opacity of a DOM Element  
311 - * Note that for this function to work in IE, elements must "have layout"  
312 - * according to:  
313 - * http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/haslayout.asp  
314 - *  
315 - * Parameters:  
316 - * element - {DOMElement} Set the opacity on this DOM element  
317 - * opacity - {Float} Opacity value (0.0 - 1.0)  
318 - */  
319 -OpenLayers.Util.setOpacity = function(element, opacity) {  
320 - OpenLayers.Util.modifyDOMElement(element, null, null, null,  
321 - null, null, null, opacity);  
322 -};  
323 -  
324 -/**  
325 - * Function: onImageLoad  
326 - * Bound to image load events. For all images created with <createImage> or  
327 - * <createAlphaImageDiv>, this function will be bound to the load event.  
328 - */  
329 -OpenLayers.Util.onImageLoad = function() {  
330 - // The complex check here is to solve issues described in #480.  
331 - // Every time a map view changes, it increments the 'viewRequestID'  
332 - // property. As the requests for the images for the new map view are sent  
333 - // out, they are tagged with this unique viewRequestID.  
334 - //  
335 - // If an image has no viewRequestID property set, we display it regardless,  
336 - // but if it does have a viewRequestID property, we check that it matches  
337 - // the viewRequestID set on the map.  
338 - //  
339 - // If the viewRequestID on the map has changed, that means that the user  
340 - // has changed the map view since this specific request was sent out, and  
341 - // therefore this tile does not need to be displayed (so we do not execute  
342 - // this code that turns its display on).  
343 - //  
344 - if (!this.viewRequestID ||  
345 - (this.map && this.viewRequestID == this.map.viewRequestID)) {  
346 - this.style.display = "";  
347 - }  
348 - OpenLayers.Element.removeClass(this, "olImageLoadError");  
349 -};  
350 -  
351 -/**  
352 - * Property: IMAGE_RELOAD_ATTEMPTS  
353 - * {Integer} How many times should we try to reload an image before giving up?  
354 - * Default is 0  
355 - */  
356 -OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0;  
357 -  
358 -/**  
359 - * Function: onImageLoadError  
360 - */  
361 -OpenLayers.Util.onImageLoadError = function() {  
362 - this._attempts = (this._attempts) ? (this._attempts + 1) : 1;  
363 - if (this._attempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS) {  
364 - var urls = this.urls;  
365 - if (urls && OpenLayers.Util.isArray(urls) && urls.length > 1){  
366 - var src = this.src.toString();  
367 - var current_url, k;  
368 - for (k = 0; current_url = urls[k]; k++){  
369 - if(src.indexOf(current_url) != -1){  
370 - break;  
371 - }  
372 - }  
373 - var guess = Math.floor(urls.length * Math.random());  
374 - var new_url = urls[guess];  
375 - k = 0;  
376 - while(new_url == current_url && k++ < 4){  
377 - guess = Math.floor(urls.length * Math.random());  
378 - new_url = urls[guess];  
379 - }  
380 - this.src = src.replace(current_url, new_url);  
381 - } else {  
382 - this.src = this.src;  
383 - }  
384 - } else {  
385 - OpenLayers.Element.addClass(this, "olImageLoadError");  
386 - }  
387 - this.style.display = "";  
388 -};  
389 -  
390 -/**  
391 - * Property: alphaHackNeeded  
392 - * {Boolean} true if the png alpha hack is necessary and possible, false otherwise.  
393 - */  
394 -OpenLayers.Util.alphaHackNeeded = null;  
395 -  
396 -/**  
397 - * Function: alphaHack  
398 - * Checks whether it's necessary (and possible) to use the png alpha  
399 - * hack which allows alpha transparency for png images under Internet  
400 - * Explorer.  
401 - *  
402 - * Returns:  
403 - * {Boolean} true if the png alpha hack is necessary and possible, false otherwise.  
404 - */  
405 -OpenLayers.Util.alphaHack = function() {  
406 - if (OpenLayers.Util.alphaHackNeeded == null) {  
407 - var arVersion = navigator.appVersion.split("MSIE");  
408 - var version = parseFloat(arVersion[1]);  
409 - var filter = false;  
410 -  
411 - // IEs4Lin dies when trying to access document.body.filters, because  
412 - // the property is there, but requires a DLL that can't be provided. This  
413 - // means that we need to wrap this in a try/catch so that this can  
414 - // continue.  
415 -  
416 - try {  
417 - filter = !!(document.body.filters);  
418 - } catch (e) {}  
419 -  
420 - OpenLayers.Util.alphaHackNeeded = (filter &&  
421 - (version >= 5.5) && (version < 7));  
422 - }  
423 - return OpenLayers.Util.alphaHackNeeded;  
424 -};  
425 -  
426 -/**  
427 - * Function: modifyAlphaImageDiv  
428 - *  
429 - * Parameters:  
430 - * div - {DOMElement} Div containing Alpha-adjusted Image  
431 - * id - {String}  
432 - * px - {<OpenLayers.Pixel>}  
433 - * sz - {<OpenLayers.Size>}  
434 - * imgURL - {String}  
435 - * position - {String}  
436 - * border - {String}  
437 - * sizing - {String} 'crop', 'scale', or 'image'. Default is "scale"  
438 - * opacity - {Float} Fractional value (0.0 - 1.0)  
439 - */  
440 -OpenLayers.Util.modifyAlphaImageDiv = function(div, id, px, sz, imgURL,  
441 - position, border, sizing,  
442 - opacity) {  
443 -  
444 - OpenLayers.Util.modifyDOMElement(div, id, px, sz, position,  
445 - null, null, opacity);  
446 -  
447 - var img = div.childNodes[0];  
448 -  
449 - if (imgURL) {  
450 - img.src = imgURL;  
451 - }  
452 - OpenLayers.Util.modifyDOMElement(img, div.id + "_innerImage", null, sz,  
453 - "relative", border);  
454 -  
455 - if (OpenLayers.Util.alphaHack()) {  
456 - if(div.style.display != "none") {  
457 - div.style.display = "inline-block";  
458 - }  
459 - if (sizing == null) {  
460 - sizing = "scale";  
461 - }  
462 -  
463 - div.style.filter = "progid:DXImageTransform.Microsoft" +  
464 - ".AlphaImageLoader(src='" + img.src + "', " +  
465 - "sizingMethod='" + sizing + "')";  
466 - if (parseFloat(div.style.opacity) >= 0.0 &&  
467 - parseFloat(div.style.opacity) < 1.0) {  
468 - div.style.filter += " alpha(opacity=" + div.style.opacity * 100 + ")";  
469 - }  
470 -  
471 - img.style.filter = "alpha(opacity=0)";  
472 - }  
473 -};  
474 -  
475 -/**  
476 - * Function: createAlphaImageDiv  
477 - *  
478 - * Parameters:  
479 - * id - {String}  
480 - * px - {<OpenLayers.Pixel>}  
481 - * sz - {<OpenLayers.Size>}  
482 - * imgURL - {String}  
483 - * position - {String}  
484 - * border - {String}  
485 - * sizing - {String} 'crop', 'scale', or 'image'. Default is "scale"  
486 - * opacity - {Float} Fractional value (0.0 - 1.0)  
487 - * delayDisplay - {Boolean} If true waits until the image has been  
488 - * loaded.  
489 - *  
490 - * Returns:  
491 - * {DOMElement} A DOM Div created with a DOM Image inside it. If the hack is  
492 - * needed for transparency in IE, it is added.  
493 - */  
494 -OpenLayers.Util.createAlphaImageDiv = function(id, px, sz, imgURL,  
495 - position, border, sizing,  
496 - opacity, delayDisplay) {  
497 -  
498 - var div = OpenLayers.Util.createDiv();  
499 - var img = OpenLayers.Util.createImage(null, null, null, null, null, null,  
500 - null, false);  
501 - div.appendChild(img);  
502 -  
503 - if (delayDisplay) {  
504 - img.style.display = "none";  
505 - OpenLayers.Event.observe(img, "load",  
506 - OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, div));  
507 - OpenLayers.Event.observe(img, "error",  
508 - OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, div));  
509 - }  
510 -  
511 - OpenLayers.Util.modifyAlphaImageDiv(div, id, px, sz, imgURL, position,  
512 - border, sizing, opacity);  
513 -  
514 - return div;  
515 -};  
516 -  
517 -  
518 -/**  
519 - * Function: upperCaseObject  
520 - * Creates a new hashtable and copies over all the keys from the  
521 - * passed-in object, but storing them under an uppercased  
522 - * version of the key at which they were stored.  
523 - *  
524 - * Parameters:  
525 - * object - {Object}  
526 - *  
527 - * Returns:  
528 - * {Object} A new Object with all the same keys but uppercased  
529 - */  
530 -OpenLayers.Util.upperCaseObject = function (object) {  
531 - var uObject = {};  
532 - for (var key in object) {  
533 - uObject[key.toUpperCase()] = object[key];  
534 - }  
535 - return uObject;  
536 -};  
537 -  
538 -/**  
539 - * Function: applyDefaults  
540 - * Takes an object and copies any properties that don't exist from  
541 - * another properties, by analogy with OpenLayers.Util.extend() from  
542 - * Prototype.js.  
543 - *  
544 - * Parameters:  
545 - * to - {Object} The destination object.  
546 - * from - {Object} The source object. Any properties of this object that  
547 - * are undefined in the to object will be set on the to object.  
548 - *  
549 - * Returns:  
550 - * {Object} A reference to the to object. Note that the to argument is modified  
551 - * in place and returned by this function.  
552 - */  
553 -OpenLayers.Util.applyDefaults = function (to, from) {  
554 - to = to || {};  
555 - /*  
556 - * FF/Windows < 2.0.0.13 reports "Illegal operation on WrappedNative  
557 - * prototype object" when calling hawOwnProperty if the source object is an  
558 - * instance of window.Event.  
559 - */  
560 - var fromIsEvt = typeof window.Event == "function"  
561 - && from instanceof window.Event;  
562 -  
563 - for (var key in from) {  
564 - if (to[key] === undefined ||  
565 - (!fromIsEvt && from.hasOwnProperty  
566 - && from.hasOwnProperty(key) && !to.hasOwnProperty(key))) {  
567 - to[key] = from[key];  
568 - }  
569 - }  
570 - /**  
571 - * IE doesn't include the toString property when iterating over an object's  
572 - * properties with the for(property in object) syntax. Explicitly check if  
573 - * the source has its own toString property.  
574 - */  
575 - if(!fromIsEvt && from && from.hasOwnProperty  
576 - && from.hasOwnProperty('toString') && !to.hasOwnProperty('toString')) {  
577 - to.toString = from.toString;  
578 - }  
579 -  
580 - return to;  
581 -};  
582 -  
583 -/**  
584 - * Function: getParameterString  
585 - *  
586 - * Parameters:  
587 - * params - {Object}  
588 - *  
589 - * Returns:  
590 - * {String} A concatenation of the properties of an object in  
591 - * http parameter notation.  
592 - * (ex. <i>"key1=value1&key2=value2&key3=value3"</i>)  
593 - * If a parameter is actually a list, that parameter will then  
594 - * be set to a comma-seperated list of values (foo,bar) instead  
595 - * of being URL escaped (foo%3Abar).  
596 - */  
597 -OpenLayers.Util.getParameterString = function(params) {  
598 - var paramsArray = [];  
599 -  
600 - for (var key in params) {  
601 - var value = params[key];  
602 - if ((value != null) && (typeof value != 'function')) {  
603 - var encodedValue;  
604 - if (typeof value == 'object' && value.constructor == Array) {  
605 - /* value is an array; encode items and separate with "," */  
606 - var encodedItemArray = [];  
607 - var item;  
608 - for (var itemIndex=0, len=value.length; itemIndex<len; itemIndex++) {  
609 - item = value[itemIndex];  
610 - encodedItemArray.push(encodeURIComponent(  
611 - (item === null || item === undefined) ? "" : item)  
612 - );  
613 - }  
614 - encodedValue = encodedItemArray.join(",");  
615 - }  
616 - else {  
617 - /* value is a string; simply encode */  
618 - encodedValue = encodeURIComponent(value);  
619 - }  
620 - paramsArray.push(encodeURIComponent(key) + "=" + encodedValue);  
621 - }  
622 - }  
623 -  
624 - return paramsArray.join("&");  
625 -};  
626 -  
627 -/**  
628 - * Function: urlAppend  
629 - * Appends a parameter string to a url. This function includes the logic for  
630 - * using the appropriate character (none, & or ?) to append to the url before  
631 - * appending the param string.  
632 - *  
633 - * Parameters:  
634 - * url - {String} The url to append to  
635 - * paramStr - {String} The param string to append  
636 - *  
637 - * Returns:  
638 - * {String} The new url  
639 - */  
640 -OpenLayers.Util.urlAppend = function(url, paramStr) {  
641 - var newUrl = url;  
642 - if(paramStr) {  
643 - var parts = (url + " ").split(/[?&]/);  
644 - newUrl += (parts.pop() === " " ?  
645 - paramStr :  
646 - parts.length ? "&" + paramStr : "?" + paramStr);  
647 - }  
648 - return newUrl;  
649 -};  
650 -  
651 -/**  
652 - * Property: ImgPath  
653 - * {String} Default is ''.  
654 - */  
655 -OpenLayers.ImgPath = '';  
656 -  
657 -/**  
658 - * Function: getImagesLocation  
659 - *  
660 - * Returns:  
661 - * {String} The fully formatted image location string  
662 - */  
663 -OpenLayers.Util.getImagesLocation = function() {  
664 - return OpenLayers.ImgPath || (OpenLayers._getScriptLocation() + "img/");  
665 -};  
666 -  
667 -  
668 -/**  
669 - * Function: Try  
670 - * Execute functions until one of them doesn't throw an error.  
671 - * Capitalized because "try" is a reserved word in JavaScript.  
672 - * Taken directly from OpenLayers.Util.Try()  
673 - *  
674 - * Parameters:  
675 - * [*] - {Function} Any number of parameters may be passed to Try()  
676 - * It will attempt to execute each of them until one of them  
677 - * successfully executes.  
678 - * If none executes successfully, returns null.  
679 - *  
680 - * Returns:  
681 - * {*} The value returned by the first successfully executed function.  
682 - */  
683 -OpenLayers.Util.Try = function() {  
684 - var returnValue = null;  
685 -  
686 - for (var i=0, len=arguments.length; i<len; i++) {  
687 - var lambda = arguments[i];  
688 - try {  
689 - returnValue = lambda();  
690 - break;  
691 - } catch (e) {}  
692 - }  
693 -  
694 - return returnValue;  
695 -};  
696 -  
697 -/**  
698 - * Function: getXmlNodeValue  
699 - *  
700 - * Parameters:  
701 - * node - {XMLNode}  
702 - *  
703 - * Returns:  
704 - * {String} The text value of the given node, without breaking in firefox or IE  
705 - */  
706 -OpenLayers.Util.getXmlNodeValue = function(node) {  
707 - var val = null;  
708 - OpenLayers.Util.Try(  
709 - function() {  
710 - val = node.text;  
711 - if (!val) {  
712 - val = node.textContent;  
713 - }  
714 - if (!val) {  
715 - val = node.firstChild.nodeValue;  
716 - }  
717 - },  
718 - function() {  
719 - val = node.textContent;  
720 - });  
721 - return val;  
722 -};  
723 -  
724 -/**  
725 - * Function: mouseLeft  
726 - *  
727 - * Parameters:  
728 - * evt - {Event}  
729 - * div - {HTMLDivElement}  
730 - *  
731 - * Returns:  
732 - * {Boolean}  
733 - */  
734 -OpenLayers.Util.mouseLeft = function (evt, div) {  
735 - // start with the element to which the mouse has moved  
736 - var target = (evt.relatedTarget) ? evt.relatedTarget : evt.toElement;  
737 - // walk up the DOM tree.  
738 - while (target != div && target != null) {  
739 - target = target.parentNode;  
740 - }  
741 - // if the target we stop at isn't the div, then we've left the div.  
742 - return (target != div);  
743 -};  
744 -  
745 -/**  
746 - * Property: precision  
747 - * {Number} The number of significant digits to retain to avoid  
748 - * floating point precision errors.  
749 - *  
750 - * We use 14 as a "safe" default because, although IEEE 754 double floats  
751 - * (standard on most modern operating systems) support up to about 16  
752 - * significant digits, 14 significant digits are sufficient to represent  
753 - * sub-millimeter accuracy in any coordinate system that anyone is likely to  
754 - * use with OpenLayers.  
755 - *  
756 - * If DEFAULT_PRECISION is set to 0, the original non-truncating behavior  
757 - * of OpenLayers <2.8 is preserved. Be aware that this will cause problems  
758 - * with certain projections, e.g. spherical Mercator.  
759 - *  
760 - */  
761 -OpenLayers.Util.DEFAULT_PRECISION = 14;  
762 -  
763 -/**  
764 - * Function: toFloat  
765 - * Convenience method to cast an object to a Number, rounded to the  
766 - * desired floating point precision.  
767 - *  
768 - * Parameters:  
769 - * number - {Number} The number to cast and round.  
770 - * precision - {Number} An integer suitable for use with  
771 - * Number.toPrecision(). Defaults to OpenLayers.Util.DEFAULT_PRECISION.  
772 - * If set to 0, no rounding is performed.  
773 - *  
774 - * Returns:  
775 - * {Number} The cast, rounded number.  
776 - */  
777 -OpenLayers.Util.toFloat = function (number, precision) {  
778 - if (precision == null) {  
779 - precision = OpenLayers.Util.DEFAULT_PRECISION;  
780 - }  
781 - if (typeof number !== "number") {  
782 - number = parseFloat(number);  
783 - }  
784 - return precision === 0 ? number :  
785 - parseFloat(number.toPrecision(precision));  
786 -};  
787 -  
788 -/**  
789 - * Function: rad  
790 - *  
791 - * Parameters:  
792 - * x - {Float}  
793 - *  
794 - * Returns:  
795 - * {Float}  
796 - */  
797 -OpenLayers.Util.rad = function(x) {return x*Math.PI/180;};  
798 -  
799 -/**  
800 - * Function: deg  
801 - *  
802 - * Parameters:  
803 - * x - {Float}  
804 - *  
805 - * Returns:  
806 - * {Float}  
807 - */  
808 -OpenLayers.Util.deg = function(x) {return x*180/Math.PI;};  
809 -  
810 -/**  
811 - * Property: VincentyConstants  
812 - * {Object} Constants for Vincenty functions.  
813 - */  
814 -OpenLayers.Util.VincentyConstants = {  
815 - a: 6378137,  
816 - b: 6356752.3142,  
817 - f: 1/298.257223563  
818 -};  
819 -  
820 -/**  
821 - * APIFunction: distVincenty  
822 - * Given two objects representing points with geographic coordinates, this  
823 - * calculates the distance between those points on the surface of an  
824 - * ellipsoid.  
825 - *  
826 - * Parameters:  
827 - * p1 - {<OpenLayers.LonLat>} (or any object with both .lat, .lon properties)  
828 - * p2 - {<OpenLayers.LonLat>} (or any object with both .lat, .lon properties)  
829 - *  
830 - * Returns:  
831 - * {Float} The distance (in km) between the two input points as measured on an  
832 - * ellipsoid. Note that the input point objects must be in geographic  
833 - * coordinates (decimal degrees) and the return distance is in kilometers.  
834 - */  
835 -OpenLayers.Util.distVincenty = function(p1, p2) {  
836 - var ct = OpenLayers.Util.VincentyConstants;  
837 - var a = ct.a, b = ct.b, f = ct.f;  
838 -  
839 - var L = OpenLayers.Util.rad(p2.lon - p1.lon);  
840 - var U1 = Math.atan((1-f) * Math.tan(OpenLayers.Util.rad(p1.lat)));  
841 - var U2 = Math.atan((1-f) * Math.tan(OpenLayers.Util.rad(p2.lat)));  
842 - var sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);  
843 - var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2);  
844 - var lambda = L, lambdaP = 2*Math.PI;  
845 - var iterLimit = 20;  
846 - while (Math.abs(lambda-lambdaP) > 1e-12 && --iterLimit>0) {  
847 - var sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda);  
848 - var sinSigma = Math.sqrt((cosU2*sinLambda) * (cosU2*sinLambda) +  
849 - (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda));  
850 - if (sinSigma==0) {  
851 - return 0; // co-incident points  
852 - }  
853 - var cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda;  
854 - var sigma = Math.atan2(sinSigma, cosSigma);  
855 - var alpha = Math.asin(cosU1 * cosU2 * sinLambda / sinSigma);  
856 - var cosSqAlpha = Math.cos(alpha) * Math.cos(alpha);  
857 - var cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha;  
858 - var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));  
859 - lambdaP = lambda;  
860 - lambda = L + (1-C) * f * Math.sin(alpha) *  
861 - (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));  
862 - }  
863 - if (iterLimit==0) {  
864 - return NaN; // formula failed to converge  
865 - }  
866 - var uSq = cosSqAlpha * (a*a - b*b) / (b*b);  
867 - var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));  
868 - var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));  
869 - var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-  
870 - B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));  
871 - var s = b*A*(sigma-deltaSigma);  
872 - var d = s.toFixed(3)/1000; // round to 1mm precision  
873 - return d;  
874 -};  
875 -  
876 -/**  
877 - * APIFunction: destinationVincenty  
878 - * Calculate destination point given start point lat/long (numeric degrees),  
879 - * bearing (numeric degrees) & distance (in m).  
880 - * Adapted from Chris Veness work, see  
881 - * http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html  
882 - *  
883 - * Parameters:  
884 - * lonlat - {<OpenLayers.LonLat>} (or any object with both .lat, .lon  
885 - * properties) The start point.  
886 - * brng - {Float} The bearing (degrees).  
887 - * dist - {Float} The ground distance (meters).  
888 - *  
889 - * Returns:  
890 - * {<OpenLayers.LonLat>} The destination point.  
891 - */  
892 -OpenLayers.Util.destinationVincenty = function(lonlat, brng, dist) {  
893 - var u = OpenLayers.Util;  
894 - var ct = u.VincentyConstants;  
895 - var a = ct.a, b = ct.b, f = ct.f;  
896 -  
897 - var lon1 = lonlat.lon;  
898 - var lat1 = lonlat.lat;  
899 -  
900 - var s = dist;  
901 - var alpha1 = u.rad(brng);  
902 - var sinAlpha1 = Math.sin(alpha1);  
903 - var cosAlpha1 = Math.cos(alpha1);  
904 -  
905 - var tanU1 = (1-f) * Math.tan(u.rad(lat1));  
906 - var cosU1 = 1 / Math.sqrt((1 + tanU1*tanU1)), sinU1 = tanU1*cosU1;  
907 - var sigma1 = Math.atan2(tanU1, cosAlpha1);  
908 - var sinAlpha = cosU1 * sinAlpha1;  
909 - var cosSqAlpha = 1 - sinAlpha*sinAlpha;  
910 - var uSq = cosSqAlpha * (a*a - b*b) / (b*b);  
911 - var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));  
912 - var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));  
913 -  
914 - var sigma = s / (b*A), sigmaP = 2*Math.PI;  
915 - while (Math.abs(sigma-sigmaP) > 1e-12) {  
916 - var cos2SigmaM = Math.cos(2*sigma1 + sigma);  
917 - var sinSigma = Math.sin(sigma);  
918 - var cosSigma = Math.cos(sigma);  
919 - var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-  
920 - B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));  
921 - sigmaP = sigma;  
922 - sigma = s / (b*A) + deltaSigma;  
923 - }  
924 -  
925 - var tmp = sinU1*sinSigma - cosU1*cosSigma*cosAlpha1;  
926 - var lat2 = Math.atan2(sinU1*cosSigma + cosU1*sinSigma*cosAlpha1,  
927 - (1-f)*Math.sqrt(sinAlpha*sinAlpha + tmp*tmp));  
928 - var lambda = Math.atan2(sinSigma*sinAlpha1, cosU1*cosSigma - sinU1*sinSigma*cosAlpha1);  
929 - var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));  
930 - var L = lambda - (1-C) * f * sinAlpha *  
931 - (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));  
932 -  
933 - var revAz = Math.atan2(sinAlpha, -tmp); // final bearing  
934 -  
935 - return new OpenLayers.LonLat(lon1+u.deg(L), u.deg(lat2));  
936 -};  
937 -  
938 -/**  
939 - * Function: getParameters  
940 - * Parse the parameters from a URL or from the current page itself into a  
941 - * JavaScript Object. Note that parameter values with commas are separated  
942 - * out into an Array.  
943 - *  
944 - * Parameters:  
945 - * url - {String} Optional url used to extract the query string.  
946 - * If url is null or is not supplied, query string is taken  
947 - * from the page location.  
948 - *  
949 - * Returns:  
950 - * {Object} An object of key/value pairs from the query string.  
951 - */  
952 -OpenLayers.Util.getParameters = function(url) {  
953 - // if no url specified, take it from the location bar  
954 - url = (url === null || url === undefined) ? window.location.href : url;  
955 -  
956 - //parse out parameters portion of url string  
957 - var paramsString = "";  
958 - if (OpenLayers.String.contains(url, '?')) {  
959 - var start = url.indexOf('?') + 1;  
960 - var end = OpenLayers.String.contains(url, "#") ?  
961 - url.indexOf('#') : url.length;  
962 - paramsString = url.substring(start, end);  
963 - }  
964 -  
965 - var parameters = {};  
966 - var pairs = paramsString.split(/[&;]/);  
967 - for(var i=0, len=pairs.length; i<len; ++i) {  
968 - var keyValue = pairs[i].split('=');  
969 - if (keyValue[0]) {  
970 -  
971 - var key = keyValue[0];  
972 - try {  
973 - key = decodeURIComponent(key);  
974 - } catch (err) {  
975 - key = unescape(key);  
976 - }  
977 -  
978 - // being liberal by replacing "+" with " "  
979 - var value = (keyValue[1] || '').replace(/\+/g, " ");  
980 -  
981 - try {  
982 - value = decodeURIComponent(value);  
983 - } catch (err) {  
984 - value = unescape(value);  
985 - }  
986 -  
987 - // follow OGC convention of comma delimited values  
988 - value = value.split(",");  
989 -  
990 - //if there's only one value, do not return as array  
991 - if (value.length == 1) {  
992 - value = value[0];  
993 - }  
994 -  
995 - parameters[key] = value;  
996 - }  
997 - }  
998 - return parameters;  
999 -};  
1000 -  
1001 -/**  
1002 - * Function: getArgs  
1003 - * *Deprecated*. Will be removed in 3.0. Please use instead  
1004 - * <OpenLayers.Util.getParameters>  
1005 - *  
1006 - * Parameters:  
1007 - * url - {String} Optional url used to extract the query string.  
1008 - * If null, query string is taken from page location.  
1009 - *  
1010 - * Returns:  
1011 - * {Object} An object of key/value pairs from the query string.  
1012 - */  
1013 -OpenLayers.Util.getArgs = function(url) {  
1014 - OpenLayers.Console.warn(  
1015 - OpenLayers.i18n(  
1016 - "methodDeprecated", {'newMethod': 'OpenLayers.Util.getParameters'}  
1017 - )  
1018 - );  
1019 - return OpenLayers.Util.getParameters(url);  
1020 -};  
1021 -  
1022 -/**  
1023 - * Property: lastSeqID  
1024 - * {Integer} The ever-incrementing count variable.  
1025 - * Used for generating unique ids.  
1026 - */  
1027 -OpenLayers.Util.lastSeqID = 0;  
1028 -  
1029 -/**  
1030 - * Function: createUniqueID  
1031 - * Create a unique identifier for this session. Each time this function  
1032 - * is called, a counter is incremented. The return will be the optional  
1033 - * prefix (defaults to "id_") appended with the counter value.  
1034 - *  
1035 - * Parameters:  
1036 - * prefix {String} Optionsal string to prefix unique id. Default is "id_".  
1037 - *  
1038 - * Returns:  
1039 - * {String} A unique id string, built on the passed in prefix.  
1040 - */  
1041 -OpenLayers.Util.createUniqueID = function(prefix) {  
1042 - if (prefix == null) {  
1043 - prefix = "id_";  
1044 - }  
1045 - OpenLayers.Util.lastSeqID += 1;  
1046 - return prefix + OpenLayers.Util.lastSeqID;  
1047 -};  
1048 -  
1049 -/**  
1050 - * Constant: INCHES_PER_UNIT  
1051 - * {Object} Constant inches per unit -- borrowed from MapServer mapscale.c  
1052 - * derivation of nautical miles from http://en.wikipedia.org/wiki/Nautical_mile  
1053 - * Includes the full set of units supported by CS-MAP (http://trac.osgeo.org/csmap/)  
1054 - * and PROJ.4 (http://trac.osgeo.org/proj/)  
1055 - * The hardcoded table is maintain in a CS-MAP source code module named CSdataU.c  
1056 - * The hardcoded table of PROJ.4 units are in pj_units.c.  
1057 - */  
1058 -OpenLayers.INCHES_PER_UNIT = {  
1059 - 'inches': 1.0,  
1060 - 'ft': 12.0,  
1061 - 'mi': 63360.0,  
1062 - 'm': 39.3701,  
1063 - 'km': 39370.1,  
1064 - 'dd': 4374754,  
1065 - 'yd': 36  
1066 -};  
1067 -OpenLayers.INCHES_PER_UNIT["in"]= OpenLayers.INCHES_PER_UNIT.inches;  
1068 -OpenLayers.INCHES_PER_UNIT["degrees"] = OpenLayers.INCHES_PER_UNIT.dd;  
1069 -OpenLayers.INCHES_PER_UNIT["nmi"] = 1852 * OpenLayers.INCHES_PER_UNIT.m;  
1070 -  
1071 -// Units from CS-Map  
1072 -OpenLayers.METERS_PER_INCH = 0.02540005080010160020;  
1073 -OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, {  
1074 - "Inch": OpenLayers.INCHES_PER_UNIT.inches,  
1075 - "Meter": 1.0 / OpenLayers.METERS_PER_INCH, //EPSG:9001  
1076 - "Foot": 0.30480060960121920243 / OpenLayers.METERS_PER_INCH, //EPSG:9003  
1077 - "IFoot": 0.30480000000000000000 / OpenLayers.METERS_PER_INCH, //EPSG:9002  
1078 - "ClarkeFoot": 0.3047972651151 / OpenLayers.METERS_PER_INCH, //EPSG:9005  
1079 - "SearsFoot": 0.30479947153867624624 / OpenLayers.METERS_PER_INCH, //EPSG:9041  
1080 - "GoldCoastFoot": 0.30479971018150881758 / OpenLayers.METERS_PER_INCH, //EPSG:9094  
1081 - "IInch": 0.02540000000000000000 / OpenLayers.METERS_PER_INCH,  
1082 - "MicroInch": 0.00002540000000000000 / OpenLayers.METERS_PER_INCH,  
1083 - "Mil": 0.00000002540000000000 / OpenLayers.METERS_PER_INCH,  
1084 - "Centimeter": 0.01000000000000000000 / OpenLayers.METERS_PER_INCH,  
1085 - "Kilometer": 1000.00000000000000000000 / OpenLayers.METERS_PER_INCH, //EPSG:9036  
1086 - "Yard": 0.91440182880365760731 / OpenLayers.METERS_PER_INCH,  
1087 - "SearsYard": 0.914398414616029 / OpenLayers.METERS_PER_INCH, //EPSG:9040  
1088 - "IndianYard": 0.91439853074444079983 / OpenLayers.METERS_PER_INCH, //EPSG:9084  
1089 - "IndianYd37": 0.91439523 / OpenLayers.METERS_PER_INCH, //EPSG:9085  
1090 - "IndianYd62": 0.9143988 / OpenLayers.METERS_PER_INCH, //EPSG:9086  
1091 - "IndianYd75": 0.9143985 / OpenLayers.METERS_PER_INCH, //EPSG:9087  
1092 - "IndianFoot": 0.30479951 / OpenLayers.METERS_PER_INCH, //EPSG:9080  
1093 - "IndianFt37": 0.30479841 / OpenLayers.METERS_PER_INCH, //EPSG:9081  
1094 - "IndianFt62": 0.3047996 / OpenLayers.METERS_PER_INCH, //EPSG:9082  
1095 - "IndianFt75": 0.3047995 / OpenLayers.METERS_PER_INCH, //EPSG:9083  
1096 - "Mile": 1609.34721869443738887477 / OpenLayers.METERS_PER_INCH,  
1097 - "IYard": 0.91440000000000000000 / OpenLayers.METERS_PER_INCH, //EPSG:9096  
1098 - "IMile": 1609.34400000000000000000 / OpenLayers.METERS_PER_INCH, //EPSG:9093  
1099 - "NautM": 1852.00000000000000000000 / OpenLayers.METERS_PER_INCH, //EPSG:9030  
1100 - "Lat-66": 110943.316488932731 / OpenLayers.METERS_PER_INCH,  
1101 - "Lat-83": 110946.25736872234125 / OpenLayers.METERS_PER_INCH,  
1102 - "Decimeter": 0.10000000000000000000 / OpenLayers.METERS_PER_INCH,  
1103 - "Millimeter": 0.00100000000000000000 / OpenLayers.METERS_PER_INCH,  
1104 - "Dekameter": 10.00000000000000000000 / OpenLayers.METERS_PER_INCH,  
1105 - "Decameter": 10.00000000000000000000 / OpenLayers.METERS_PER_INCH,  
1106 - "Hectometer": 100.00000000000000000000 / OpenLayers.METERS_PER_INCH,  
1107 - "GermanMeter": 1.0000135965 / OpenLayers.METERS_PER_INCH, //EPSG:9031  
1108 - "CaGrid": 0.999738 / OpenLayers.METERS_PER_INCH,  
1109 - "ClarkeChain": 20.1166194976 / OpenLayers.METERS_PER_INCH, //EPSG:9038  
1110 - "GunterChain": 20.11684023368047 / OpenLayers.METERS_PER_INCH, //EPSG:9033  
1111 - "BenoitChain": 20.116782494375872 / OpenLayers.METERS_PER_INCH, //EPSG:9062  
1112 - "SearsChain": 20.11676512155 / OpenLayers.METERS_PER_INCH, //EPSG:9042  
1113 - "ClarkeLink": 0.201166194976 / OpenLayers.METERS_PER_INCH, //EPSG:9039  
1114 - "GunterLink": 0.2011684023368047 / OpenLayers.METERS_PER_INCH, //EPSG:9034  
1115 - "BenoitLink": 0.20116782494375872 / OpenLayers.METERS_PER_INCH, //EPSG:9063  
1116 - "SearsLink": 0.2011676512155 / OpenLayers.METERS_PER_INCH, //EPSG:9043  
1117 - "Rod": 5.02921005842012 / OpenLayers.METERS_PER_INCH,  
1118 - "IntnlChain": 20.1168 / OpenLayers.METERS_PER_INCH, //EPSG:9097  
1119 - "IntnlLink": 0.201168 / OpenLayers.METERS_PER_INCH, //EPSG:9098  
1120 - "Perch": 5.02921005842012 / OpenLayers.METERS_PER_INCH,  
1121 - "Pole": 5.02921005842012 / OpenLayers.METERS_PER_INCH,  
1122 - "Furlong": 201.1684023368046 / OpenLayers.METERS_PER_INCH,  
1123 - "Rood": 3.778266898 / OpenLayers.METERS_PER_INCH,  
1124 - "CapeFoot": 0.3047972615 / OpenLayers.METERS_PER_INCH,  
1125 - "Brealey": 375.00000000000000000000 / OpenLayers.METERS_PER_INCH,  
1126 - "ModAmFt": 0.304812252984505969011938 / OpenLayers.METERS_PER_INCH,  
1127 - "Fathom": 1.8288 / OpenLayers.METERS_PER_INCH,  
1128 - "NautM-UK": 1853.184 / OpenLayers.METERS_PER_INCH,  
1129 - "50kilometers": 50000.0 / OpenLayers.METERS_PER_INCH,  
1130 - "150kilometers": 150000.0 / OpenLayers.METERS_PER_INCH  
1131 -});  
1132 -  
1133 -//unit abbreviations supported by PROJ.4  
1134 -OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, {  
1135 - "mm": OpenLayers.INCHES_PER_UNIT["Meter"] / 1000.0,  
1136 - "cm": OpenLayers.INCHES_PER_UNIT["Meter"] / 100.0,  
1137 - "dm": OpenLayers.INCHES_PER_UNIT["Meter"] * 100.0,  
1138 - "km": OpenLayers.INCHES_PER_UNIT["Meter"] * 1000.0,  
1139 - "kmi": OpenLayers.INCHES_PER_UNIT["nmi"], //International Nautical Mile  
1140 - "fath": OpenLayers.INCHES_PER_UNIT["Fathom"], //International Fathom  
1141 - "ch": OpenLayers.INCHES_PER_UNIT["IntnlChain"], //International Chain  
1142 - "link": OpenLayers.INCHES_PER_UNIT["IntnlLink"], //International Link  
1143 - "us-in": OpenLayers.INCHES_PER_UNIT["inches"], //U.S. Surveyor's Inch  
1144 - "us-ft": OpenLayers.INCHES_PER_UNIT["Foot"], //U.S. Surveyor's Foot  
1145 - "us-yd": OpenLayers.INCHES_PER_UNIT["Yard"], //U.S. Surveyor's Yard  
1146 - "us-ch": OpenLayers.INCHES_PER_UNIT["GunterChain"], //U.S. Surveyor's Chain  
1147 - "us-mi": OpenLayers.INCHES_PER_UNIT["Mile"], //U.S. Surveyor's Statute Mile  
1148 - "ind-yd": OpenLayers.INCHES_PER_UNIT["IndianYd37"], //Indian Yard  
1149 - "ind-ft": OpenLayers.INCHES_PER_UNIT["IndianFt37"], //Indian Foot  
1150 - "ind-ch": 20.11669506 / OpenLayers.METERS_PER_INCH //Indian Chain  
1151 -});  
1152 -  
1153 -/**  
1154 - * Constant: DOTS_PER_INCH  
1155 - * {Integer} 72 (A sensible default)  
1156 - */  
1157 -OpenLayers.DOTS_PER_INCH = 72;  
1158 -  
1159 -/**  
1160 - * Function: normalizeScale  
1161 - *  
1162 - * Parameters:  
1163 - * scale - {float}  
1164 - *  
1165 - * Returns:  
1166 - * {Float} A normalized scale value, in 1 / X format.  
1167 - * This means that if a value less than one ( already 1/x) is passed  
1168 - * in, it just returns scale directly. Otherwise, it returns  
1169 - * 1 / scale  
1170 - */  
1171 -OpenLayers.Util.normalizeScale = function (scale) {  
1172 - var normScale = (scale > 1.0) ? (1.0 / scale)  
1173 - : scale;  
1174 - return normScale;  
1175 -};  
1176 -  
1177 -/**  
1178 - * Function: getResolutionFromScale  
1179 - *  
1180 - * Parameters:  
1181 - * scale - {Float}  
1182 - * units - {String} Index into OpenLayers.INCHES_PER_UNIT hashtable.  
1183 - * Default is degrees  
1184 - *  
1185 - * Returns:  
1186 - * {Float} The corresponding resolution given passed-in scale and unit  
1187 - * parameters. If the given scale is falsey, the returned resolution will  
1188 - * be undefined.  
1189 - */  
1190 -OpenLayers.Util.getResolutionFromScale = function (scale, units) {  
1191 - var resolution;  
1192 - if (scale) {  
1193 - if (units == null) {  
1194 - units = "degrees";  
1195 - }  
1196 - var normScale = OpenLayers.Util.normalizeScale(scale);  
1197 - resolution = 1 / (normScale * OpenLayers.INCHES_PER_UNIT[units]  
1198 - * OpenLayers.DOTS_PER_INCH);  
1199 - }  
1200 - return resolution;  
1201 -};  
1202 -  
1203 -/**  
1204 - * Function: getScaleFromResolution  
1205 - *  
1206 - * Parameters:  
1207 - * resolution - {Float}  
1208 - * units - {String} Index into OpenLayers.INCHES_PER_UNIT hashtable.  
1209 - * Default is degrees  
1210 - *  
1211 - * Returns:  
1212 - * {Float} The corresponding scale given passed-in resolution and unit  
1213 - * parameters.  
1214 - */  
1215 -OpenLayers.Util.getScaleFromResolution = function (resolution, units) {  
1216 -  
1217 - if (units == null) {  
1218 - units = "degrees";  
1219 - }  
1220 -  
1221 - var scale = resolution * OpenLayers.INCHES_PER_UNIT[units] *  
1222 - OpenLayers.DOTS_PER_INCH;  
1223 - return scale;  
1224 -};  
1225 -  
1226 -/**  
1227 - * Function: safeStopPropagation  
1228 - * *Deprecated*. This function has been deprecated. Please use directly  
1229 - * <OpenLayers.Event.stop> passing 'true' as the 2nd  
1230 - * argument (preventDefault)  
1231 - *  
1232 - * Safely stop the propagation of an event *without* preventing  
1233 - * the default browser action from occurring.  
1234 - *  
1235 - * Parameter:  
1236 - * evt - {Event}  
1237 - */  
1238 -OpenLayers.Util.safeStopPropagation = function(evt) {  
1239 - OpenLayers.Event.stop(evt, true);  
1240 -};  
1241 -  
1242 -/**  
1243 - * Function: pagePosition  
1244 - * Calculates the position of an element on the page (see  
1245 - * http://code.google.com/p/doctype/wiki/ArticlePageOffset)  
1246 - *  
1247 - * OpenLayers.Util.pagePosition is based on Yahoo's getXY method, which is  
1248 - * Copyright (c) 2006, Yahoo! Inc.  
1249 - * All rights reserved.  
1250 - *  
1251 - * Redistribution and use of this software in source and binary forms, with or  
1252 - * without modification, are permitted provided that the following conditions  
1253 - * are met:  
1254 - *  
1255 - * * Redistributions of source code must retain the above copyright notice,  
1256 - * this list of conditions and the following disclaimer.  
1257 - *  
1258 - * * Redistributions in binary form must reproduce the above copyright notice,  
1259 - * this list of conditions and the following disclaimer in the documentation  
1260 - * and/or other materials provided with the distribution.  
1261 - *  
1262 - * * Neither the name of Yahoo! Inc. nor the names of its contributors may be  
1263 - * used to endorse or promote products derived from this software without  
1264 - * specific prior written permission of Yahoo! Inc.  
1265 - *  
1266 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"  
1267 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  
1268 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  
1269 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE  
1270 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  
1271 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF  
1272 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
1273 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
1274 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)  
1275 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  
1276 - * POSSIBILITY OF SUCH DAMAGE.  
1277 - *  
1278 - * Parameters:  
1279 - * forElement - {DOMElement}  
1280 - *  
1281 - * Returns:  
1282 - * {Array} two item array, Left value then Top value.  
1283 - */  
1284 -OpenLayers.Util.pagePosition = function(forElement) {  
1285 - // NOTE: If element is hidden (display none or disconnected or any the  
1286 - // ancestors are hidden) we get (0,0) by default but we still do the  
1287 - // accumulation of scroll position.  
1288 -  
1289 - var pos = [0, 0];  
1290 - var viewportElement = OpenLayers.Util.getViewportElement();  
1291 - if (!forElement || forElement == window || forElement == viewportElement) {  
1292 - // viewport is always at 0,0 as that defined the coordinate system for  
1293 - // this function - this avoids special case checks in the code below  
1294 - return pos;  
1295 - }  
1296 -  
1297 - // Gecko browsers normally use getBoxObjectFor to calculate the position.  
1298 - // When invoked for an element with an implicit absolute position though it  
1299 - // can be off by one. Therefore the recursive implementation is used in  
1300 - // those (relatively rare) cases.  
1301 - var BUGGY_GECKO_BOX_OBJECT =  
1302 - OpenLayers.IS_GECKO && document.getBoxObjectFor &&  
1303 - OpenLayers.Element.getStyle(forElement, 'position') == 'absolute' &&  
1304 - (forElement.style.top == '' || forElement.style.left == '');  
1305 -  
1306 - var parent = null;  
1307 - var box;  
1308 -  
1309 - if (forElement.getBoundingClientRect) { // IE  
1310 - box = forElement.getBoundingClientRect();  
1311 - var scrollTop = viewportElement.scrollTop;  
1312 - var scrollLeft = viewportElement.scrollLeft;  
1313 -  
1314 - pos[0] = box.left + scrollLeft;  
1315 - pos[1] = box.top + scrollTop;  
1316 -  
1317 - } else if (document.getBoxObjectFor && !BUGGY_GECKO_BOX_OBJECT) { // gecko  
1318 - // Gecko ignores the scroll values for ancestors, up to 1.9. See:  
1319 - // https://bugzilla.mozilla.org/show_bug.cgi?id=328881 and  
1320 - // https://bugzilla.mozilla.org/show_bug.cgi?id=330619  
1321 -  
1322 - box = document.getBoxObjectFor(forElement);  
1323 - var vpBox = document.getBoxObjectFor(viewportElement);  
1324 - pos[0] = box.screenX - vpBox.screenX;  
1325 - pos[1] = box.screenY - vpBox.screenY;  
1326 -  
1327 - } else { // safari/opera  
1328 - pos[0] = forElement.offsetLeft;  
1329 - pos[1] = forElement.offsetTop;  
1330 - parent = forElement.offsetParent;  
1331 - if (parent != forElement) {  
1332 - while (parent) {  
1333 - pos[0] += parent.offsetLeft;  
1334 - pos[1] += parent.offsetTop;  
1335 - parent = parent.offsetParent;  
1336 - }  
1337 - }  
1338 -  
1339 - var browser = OpenLayers.BROWSER_NAME;  
1340 -  
1341 - // opera & (safari absolute) incorrectly account for body offsetTop  
1342 - if (browser == "opera" || (browser == "safari" &&  
1343 - OpenLayers.Element.getStyle(forElement, 'position') == 'absolute')) {  
1344 - pos[1] -= document.body.offsetTop;  
1345 - }  
1346 -  
1347 - // accumulate the scroll positions for everything but the body element  
1348 - parent = forElement.offsetParent;  
1349 - while (parent && parent != document.body) {  
1350 - pos[0] -= parent.scrollLeft;  
1351 - // see https://bugs.opera.com/show_bug.cgi?id=249965  
1352 - if (browser != "opera" || parent.tagName != 'TR') {  
1353 - pos[1] -= parent.scrollTop;  
1354 - }  
1355 - parent = parent.offsetParent;  
1356 - }  
1357 - }  
1358 -  
1359 - return pos;  
1360 -};  
1361 -  
1362 -/**  
1363 - * Function: getViewportElement  
1364 - * Returns die viewport element of the document. The viewport element is  
1365 - * usually document.documentElement, except in IE,where it is either  
1366 - * document.body or document.documentElement, depending on the document's  
1367 - * compatibility mode (see  
1368 - * http://code.google.com/p/doctype/wiki/ArticleClientViewportElement)  
1369 - */  
1370 -OpenLayers.Util.getViewportElement = function() {  
1371 - var viewportElement = arguments.callee.viewportElement;  
1372 - if (viewportElement == undefined) {  
1373 - viewportElement = (OpenLayers.BROWSER_NAME == "msie" &&  
1374 - document.compatMode != 'CSS1Compat') ? document.body :  
1375 - document.documentElement;  
1376 - arguments.callee.viewportElement = viewportElement;  
1377 - }  
1378 - return viewportElement;  
1379 -};  
1380 -  
1381 -/**  
1382 - * Function: isEquivalentUrl  
1383 - * Test two URLs for equivalence.  
1384 - *  
1385 - * Setting 'ignoreCase' allows for case-independent comparison.  
1386 - *  
1387 - * Comparison is based on:  
1388 - * - Protocol  
1389 - * - Host (evaluated without the port)  
1390 - * - Port (set 'ignorePort80' to ignore "80" values)  
1391 - * - Hash ( set 'ignoreHash' to disable)  
1392 - * - Pathname (for relative <-> absolute comparison)  
1393 - * - Arguments (so they can be out of order)  
1394 - *  
1395 - * Parameters:  
1396 - * url1 - {String}  
1397 - * url2 - {String}  
1398 - * options - {Object} Allows for customization of comparison:  
1399 - * 'ignoreCase' - Default is True  
1400 - * 'ignorePort80' - Default is True  
1401 - * 'ignoreHash' - Default is True  
1402 - *  
1403 - * Returns:  
1404 - * {Boolean} Whether or not the two URLs are equivalent  
1405 - */  
1406 -OpenLayers.Util.isEquivalentUrl = function(url1, url2, options) {  
1407 - options = options || {};  
1408 -  
1409 - OpenLayers.Util.applyDefaults(options, {  
1410 - ignoreCase: true,  
1411 - ignorePort80: true,  
1412 - ignoreHash: true  
1413 - });  
1414 -  
1415 - var urlObj1 = OpenLayers.Util.createUrlObject(url1, options);  
1416 - var urlObj2 = OpenLayers.Util.createUrlObject(url2, options);  
1417 -  
1418 - //compare all keys except for "args" (treated below)  
1419 - for(var key in urlObj1) {  
1420 - if(key !== "args") {  
1421 - if(urlObj1[key] != urlObj2[key]) {  
1422 - return false;  
1423 - }  
1424 - }  
1425 - }  
1426 -  
1427 - // compare search args - irrespective of order  
1428 - for(var key in urlObj1.args) {  
1429 - if(urlObj1.args[key] != urlObj2.args[key]) {  
1430 - return false;  
1431 - }  
1432 - delete urlObj2.args[key];  
1433 - }  
1434 - // urlObj2 shouldn't have any args left  
1435 - for(var key in urlObj2.args) {  
1436 - return false;  
1437 - }  
1438 -  
1439 - return true;  
1440 -};  
1441 -  
1442 -/**  
1443 - * Function: createUrlObject  
1444 - *  
1445 - * Parameters:  
1446 - * url - {String}  
1447 - * options - {Object} A hash of options. Can be one of:  
1448 - * ignoreCase: lowercase url,  
1449 - * ignorePort80: don't include explicit port if port is 80,  
1450 - * ignoreHash: Don't include part of url after the hash (#).  
1451 - *  
1452 - * Returns:  
1453 - * {Object} An object with separate url, a, port, host, and args parsed out  
1454 - * and ready for comparison  
1455 - */  
1456 -OpenLayers.Util.createUrlObject = function(url, options) {  
1457 - options = options || {};  
1458 -  
1459 - // deal with relative urls first  
1460 - if(!(/^\w+:\/\//).test(url)) {  
1461 - var loc = window.location;  
1462 - var port = loc.port ? ":" + loc.port : "";  
1463 - var fullUrl = loc.protocol + "//" + loc.host.split(":").shift() + port;  
1464 - if(url.indexOf("/") === 0) {  
1465 - // full pathname  
1466 - url = fullUrl + url;  
1467 - } else {  
1468 - // relative to current path  
1469 - var parts = loc.pathname.split("/");  
1470 - parts.pop();  
1471 - url = fullUrl + parts.join("/") + "/" + url;  
1472 - }  
1473 - }  
1474 -  
1475 - if (options.ignoreCase) {  
1476 - url = url.toLowerCase();  
1477 - }  
1478 -  
1479 - var a = document.createElement('a');  
1480 - a.href = url;  
1481 -  
1482 - var urlObject = {};  
1483 -  
1484 - //host (without port)  
1485 - urlObject.host = a.host.split(":").shift();  
1486 -  
1487 - //protocol  
1488 - urlObject.protocol = a.protocol;  
1489 -  
1490 - //port (get uniform browser behavior with port 80 here)  
1491 - if(options.ignorePort80) {  
1492 - urlObject.port = (a.port == "80" || a.port == "0") ? "" : a.port;  
1493 - } else {  
1494 - urlObject.port = (a.port == "" || a.port == "0") ? "80" : a.port;  
1495 - }  
1496 -  
1497 - //hash  
1498 - urlObject.hash = (options.ignoreHash || a.hash === "#") ? "" : a.hash;  
1499 -  
1500 - //args  
1501 - var queryString = a.search;  
1502 - if (!queryString) {  
1503 - var qMark = url.indexOf("?");  
1504 - queryString = (qMark != -1) ? url.substr(qMark) : "";  
1505 - }  
1506 - urlObject.args = OpenLayers.Util.getParameters(queryString);  
1507 -  
1508 - //pathname (uniform browser behavior with leading "/")  
1509 - urlObject.pathname = (a.pathname.charAt(0) == "/") ? a.pathname : "/" + a.pathname;  
1510 -  
1511 - return urlObject;  
1512 -};  
1513 -  
1514 -/**  
1515 - * Function: removeTail  
1516 - * Takes a url and removes everything after the ? and #  
1517 - *  
1518 - * Parameters:  
1519 - * url - {String} The url to process  
1520 - *  
1521 - * Returns:  
1522 - * {String} The string with all queryString and Hash removed  
1523 - */  
1524 -OpenLayers.Util.removeTail = function(url) {  
1525 - var head = null;  
1526 -  
1527 - var qMark = url.indexOf("?");  
1528 - var hashMark = url.indexOf("#");  
1529 -  
1530 - if (qMark == -1) {  
1531 - head = (hashMark != -1) ? url.substr(0,hashMark) : url;  
1532 - } else {  
1533 - head = (hashMark != -1) ? url.substr(0,Math.min(qMark, hashMark))  
1534 - : url.substr(0, qMark);  
1535 - }  
1536 - return head;  
1537 -};  
1538 -  
1539 -/**  
1540 - * Constant: IS_GECKO  
1541 - * {Boolean} True if the userAgent reports the browser to use the Gecko engine  
1542 - */  
1543 -OpenLayers.IS_GECKO = (function() {  
1544 - var ua = navigator.userAgent.toLowerCase();  
1545 - return ua.indexOf("webkit") == -1 && ua.indexOf("gecko") != -1;  
1546 -})();  
1547 -  
1548 -/**  
1549 - * Constant: BROWSER_NAME  
1550 - * {String}  
1551 - * A substring of the navigator.userAgent property. Depending on the userAgent  
1552 - * property, this will be the empty string or one of the following:  
1553 - * * "opera" -- Opera  
1554 - * * "msie" -- Internet Explorer  
1555 - * * "safari" -- Safari  
1556 - * * "firefox" -- Firefox  
1557 - * * "mozilla" -- Mozilla  
1558 - */  
1559 -OpenLayers.BROWSER_NAME = (function() {  
1560 - var name = "";  
1561 - var ua = navigator.userAgent.toLowerCase();  
1562 - if (ua.indexOf("opera") != -1) {  
1563 - name = "opera";  
1564 - } else if (ua.indexOf("msie") != -1) {  
1565 - name = "msie";  
1566 - } else if (ua.indexOf("safari") != -1) {  
1567 - name = "safari";  
1568 - } else if (ua.indexOf("mozilla") != -1) {  
1569 - if (ua.indexOf("firefox") != -1) {  
1570 - name = "firefox";  
1571 - } else {  
1572 - name = "mozilla";  
1573 - }  
1574 - }  
1575 - return name;  
1576 -})();  
1577 -  
1578 -/**  
1579 - * Function: getBrowserName  
1580 - *  
1581 - * Returns:  
1582 - * {String} A string which specifies which is the current  
1583 - * browser in which we are running.  
1584 - *  
1585 - * Currently-supported browser detection and codes:  
1586 - * * 'opera' -- Opera  
1587 - * * 'msie' -- Internet Explorer  
1588 - * * 'safari' -- Safari  
1589 - * * 'firefox' -- Firefox  
1590 - * * 'mozilla' -- Mozilla  
1591 - *  
1592 - * If we are unable to property identify the browser, we  
1593 - * return an empty string.  
1594 - */  
1595 -OpenLayers.Util.getBrowserName = function() {  
1596 - return OpenLayers.BROWSER_NAME;  
1597 -};  
1598 -  
1599 -/**  
1600 - * Method: getRenderedDimensions  
1601 - * Renders the contentHTML offscreen to determine actual dimensions for  
1602 - * popup sizing. As we need layout to determine dimensions the content  
1603 - * is rendered -9999px to the left and absolute to ensure the  
1604 - * scrollbars do not flicker  
1605 - *  
1606 - * Parameters:  
1607 - * contentHTML  
1608 - * size - {<OpenLayers.Size>} If either the 'w' or 'h' properties is  
1609 - * specified, we fix that dimension of the div to be measured. This is  
1610 - * useful in the case where we have a limit in one dimension and must  
1611 - * therefore meaure the flow in the other dimension.  
1612 - * options - {Object}  
1613 - *  
1614 - * Allowed Options:  
1615 - * displayClass - {String} Optional parameter. A CSS class name(s) string  
1616 - * to provide the CSS context of the rendered content.  
1617 - * containerElement - {DOMElement} Optional parameter. Insert the HTML to  
1618 - * this node instead of the body root when calculating dimensions.  
1619 - *  
1620 - * Returns:  
1621 - * {OpenLayers.Size}  
1622 - */  
1623 -OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {  
1624 -  
1625 - var w, h;  
1626 -  
1627 - // create temp container div with restricted size  
1628 - var container = document.createElement("div");  
1629 - container.style.visibility = "hidden";  
1630 -  
1631 - var containerElement = (options && options.containerElement)  
1632 - ? options.containerElement : document.body;  
1633 -  
1634 - //fix a dimension, if specified.  
1635 - if (size) {  
1636 - if (size.w) {  
1637 - w = size.w;  
1638 - container.style.width = w + "px";  
1639 - } else if (size.h) {  
1640 - h = size.h;  
1641 - container.style.height = h + "px";  
1642 - }  
1643 - }  
1644 -  
1645 - //add css classes, if specified  
1646 - if (options && options.displayClass) {  
1647 - container.className = options.displayClass;  
1648 - }  
1649 -  
1650 - // create temp content div and assign content  
1651 - var content = document.createElement("div");  
1652 - content.innerHTML = contentHTML;  
1653 -  
1654 - // we need overflow visible when calculating the size  
1655 - content.style.overflow = "visible";  
1656 - if (content.childNodes) {  
1657 - for (var i=0, l=content.childNodes.length; i<l; i++) {  
1658 - if (!content.childNodes[i].style) continue;  
1659 - content.childNodes[i].style.overflow = "visible";  
1660 - }  
1661 - }  
1662 -  
1663 - // add content to restricted container  
1664 - container.appendChild(content);  
1665 -  
1666 - // append container to body for rendering  
1667 - containerElement.appendChild(container);  
1668 -  
1669 - // Opera and IE7 can't handle a node with position:aboslute if it inherits  
1670 - // position:absolute from a parent.  
1671 - var parentHasPositionAbsolute = false;  
1672 - var parent = container.parentNode;  
1673 - while (parent && parent.tagName.toLowerCase()!="body") {  
1674 - var parentPosition = OpenLayers.Element.getStyle(parent, "position");  
1675 - if(parentPosition == "absolute") {  
1676 - parentHasPositionAbsolute = true;  
1677 - break;  
1678 - } else if (parentPosition && parentPosition != "static") {  
1679 - break;  
1680 - }  
1681 - parent = parent.parentNode;  
1682 - }  
1683 -  
1684 - if(!parentHasPositionAbsolute) {  
1685 - container.style.position = "absolute";  
1686 - }  
1687 -  
1688 - // calculate scroll width of content and add corners and shadow width  
1689 - if (!w) {  
1690 - w = parseInt(content.scrollWidth);  
1691 -  
1692 - // update container width to allow height to adjust  
1693 - container.style.width = w + "px";  
1694 - }  
1695 - // capture height and add shadow and corner image widths  
1696 - if (!h) {  
1697 - h = parseInt(content.scrollHeight);  
1698 - }  
1699 -  
1700 - // remove elements  
1701 - container.removeChild(content);  
1702 - containerElement.removeChild(container);  
1703 -  
1704 - return new OpenLayers.Size(w, h);  
1705 -};  
1706 -  
1707 -/**  
1708 - * APIFunction: getScrollbarWidth  
1709 - * This function has been modified by the OpenLayers from the original version,  
1710 - * written by Matthew Eernisse and released under the Apache 2  
1711 - * license here:  
1712 - *  
1713 - * http://www.fleegix.org/articles/2006/05/30/getting-the-scrollbar-width-in-pixels  
1714 - *  
1715 - * It has been modified simply to cache its value, since it is physically  
1716 - * impossible that this code could ever run in more than one browser at  
1717 - * once.  
1718 - *  
1719 - * Returns:  
1720 - * {Integer}  
1721 - */  
1722 -OpenLayers.Util.getScrollbarWidth = function() {  
1723 -  
1724 - var scrollbarWidth = OpenLayers.Util._scrollbarWidth;  
1725 -  
1726 - if (scrollbarWidth == null) {  
1727 - var scr = null;  
1728 - var inn = null;  
1729 - var wNoScroll = 0;  
1730 - var wScroll = 0;  
1731 -  
1732 - // Outer scrolling div  
1733 - scr = document.createElement('div');  
1734 - scr.style.position = 'absolute';  
1735 - scr.style.top = '-1000px';  
1736 - scr.style.left = '-1000px';  
1737 - scr.style.width = '100px';  
1738 - scr.style.height = '50px';  
1739 - // Start with no scrollbar  
1740 - scr.style.overflow = 'hidden';  
1741 -  
1742 - // Inner content div  
1743 - inn = document.createElement('div');  
1744 - inn.style.width = '100%';  
1745 - inn.style.height = '200px';  
1746 -  
1747 - // Put the inner div in the scrolling div  
1748 - scr.appendChild(inn);  
1749 - // Append the scrolling div to the doc  
1750 - document.body.appendChild(scr);  
1751 -  
1752 - // Width of the inner div sans scrollbar  
1753 - wNoScroll = inn.offsetWidth;  
1754 -  
1755 - // Add the scrollbar  
1756 - scr.style.overflow = 'scroll';  
1757 - // Width of the inner div width scrollbar  
1758 - wScroll = inn.offsetWidth;  
1759 -  
1760 - // Remove the scrolling div from the doc  
1761 - document.body.removeChild(document.body.lastChild);  
1762 -  
1763 - // Pixel width of the scroller  
1764 - OpenLayers.Util._scrollbarWidth = (wNoScroll - wScroll);  
1765 - scrollbarWidth = OpenLayers.Util._scrollbarWidth;  
1766 - }  
1767 -  
1768 - return scrollbarWidth;  
1769 -};  
1770 -  
1771 -/**  
1772 - * APIFunction: getFormattedLonLat  
1773 - * This function will return latitude or longitude value formatted as  
1774 - *  
1775 - * Parameters:  
1776 - * coordinate - {Float} the coordinate value to be formatted  
1777 - * axis - {String} value of either 'lat' or 'lon' to indicate which axis is to  
1778 - * to be formatted (default = lat)  
1779 - * dmsOption - {String} specify the precision of the output can be one of:  
1780 - * 'dms' show degrees minutes and seconds  
1781 - * 'dm' show only degrees and minutes  
1782 - * 'd' show only degrees  
1783 - *  
1784 - * Returns:  
1785 - * {String} the coordinate value formatted as a string  
1786 - */  
1787 -OpenLayers.Util.getFormattedLonLat = function(coordinate, axis, dmsOption) {  
1788 - if (!dmsOption) {  
1789 - dmsOption = 'dms'; //default to show degree, minutes, seconds  
1790 - }  
1791 -  
1792 - coordinate = (coordinate+540)%360 - 180; // normalize for sphere being round  
1793 -  
1794 - var abscoordinate = Math.abs(coordinate);  
1795 - var coordinatedegrees = Math.floor(abscoordinate);  
1796 -  
1797 - var coordinateminutes = (abscoordinate - coordinatedegrees)/(1/60);  
1798 - var tempcoordinateminutes = coordinateminutes;  
1799 - coordinateminutes = Math.floor(coordinateminutes);  
1800 - var coordinateseconds = (tempcoordinateminutes - coordinateminutes)/(1/60);  
1801 - coordinateseconds = Math.round(coordinateseconds*10);  
1802 - coordinateseconds /= 10;  
1803 -  
1804 - if( coordinateseconds >= 60) {  
1805 - coordinateseconds -= 60;  
1806 - coordinateminutes += 1;  
1807 - if( coordinateminutes >= 60) {  
1808 - coordinateminutes -= 60;  
1809 - coordinatedegrees += 1;  
1810 - }  
1811 - }  
1812 -  
1813 - if( coordinatedegrees < 10 ) {  
1814 - coordinatedegrees = "0" + coordinatedegrees;  
1815 - }  
1816 - var str = coordinatedegrees + "\u00B0";  
1817 -  
1818 - if (dmsOption.indexOf('dm') >= 0) {  
1819 - if( coordinateminutes < 10 ) {  
1820 - coordinateminutes = "0" + coordinateminutes;  
1821 - }  
1822 - str += coordinateminutes + "'";  
1823 -  
1824 - if (dmsOption.indexOf('dms') >= 0) {  
1825 - if( coordinateseconds < 10 ) {  
1826 - coordinateseconds = "0" + coordinateseconds;  
1827 - }  
1828 - str += coordinateseconds + '"';  
1829 - }  
1830 - }  
1831 -  
1832 - if (axis == "lon") {  
1833 - str += coordinate < 0 ? OpenLayers.i18n("W") : OpenLayers.i18n("E");  
1834 - } else {  
1835 - str += coordinate < 0 ? OpenLayers.i18n("S") : OpenLayers.i18n("N");  
1836 - }  
1837 - return str;  
1838 -};  
1839 -  
ferramentas/ol3panel/ol3Panel.php
@@ -1,97 +0,0 @@ @@ -1,97 +0,0 @@
1 -var OpenLayers={  
2 - VERSION_NUMBER:"Release 2.11",  
3 - singleFile:true,  
4 - _getScriptLocation:(  
5 - function(){  
6 - var r=new RegExp("(^|(.*?\\/))(OpenLayers\.js)(\\?|$)"),  
7 - s=document.getElementsByTagName('script'),  
8 - src,  
9 - m,  
10 - l="";  
11 - for(var i=0,len=s.length;i<len;i++){  
12 - src=s[i].getAttribute('src');  
13 - if(src){  
14 - var m=src.match(r);  
15 - if(m){  
16 - l=m[1];  
17 - break;  
18 - }  
19 - }  
20 - }  
21 - return(  
22 - function(){  
23 - return l;  
24 - }  
25 - );  
26 - }  
27 - )()  
28 -};  
29 -OpenLayers.Util = OpenLayers.Util || {};  
30 -OpenLayers.Util.lastSeqID = 0;  
31 -OpenLayers.Util.isArray = function(a) {  
32 - return (Object.prototype.toString.call(a) === '[object Array]');  
33 -};  
34 -OpenLayers.Util.createUniqueID = function(prefix) {  
35 - if (prefix == null) {  
36 - prefix = "id_";  
37 - }  
38 - OpenLayers.Util.lastSeqID += 1;  
39 - return prefix + OpenLayers.Util.lastSeqID;  
40 -};  
41 -OpenLayers.Util.createDiv = function(id, px, sz, imgURL, position,  
42 - border, overflow, opacity) {  
43 -  
44 - var dom = document.createElement('div');  
45 -  
46 - if (imgURL) {  
47 - dom.style.backgroundImage = 'url(' + imgURL + ')';  
48 - }  
49 -  
50 - //set generic properties  
51 - if (!id) {  
52 - id = OpenLayers.Util.createUniqueID("OpenLayersDiv");  
53 - }  
54 - if (!position) {  
55 - position = "absolute";  
56 - }  
57 - OpenLayers.Util.modifyDOMElement(dom, id, px, sz, position,  
58 - border, overflow, opacity);  
59 -  
60 - return dom;  
61 -};  
62 -OpenLayers.Util.modifyDOMElement = function(element, id, px, sz, position,  
63 - border, overflow, opacity) {  
64 -  
65 - if (id) {  
66 - element.id = id;  
67 - }  
68 - if (px) {  
69 - element.style.left = px.x + "px";  
70 - element.style.top = px.y + "px";  
71 - }  
72 - if (sz) {  
73 - element.style.width = sz.w + "px";  
74 - element.style.height = sz.h + "px";  
75 - }  
76 - if (position) {  
77 - element.style.position = position;  
78 - }  
79 - if (border) {  
80 - element.style.border = border;  
81 - }  
82 - if (overflow) {  
83 - element.style.overflow = overflow;  
84 - }  
85 - if (parseFloat(opacity) >= 0.0 && parseFloat(opacity) < 1.0) {  
86 - element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';  
87 - element.style.opacity = opacity;  
88 - } else if (parseFloat(opacity) == 1.0) {  
89 - element.style.filter = '';  
90 - element.style.opacity = '';  
91 - }  
92 -};  
93 -<?php  
94 -include("Class.js");  
95 -include("Panel.js");  
96 -include("Control.js");  
97 -?>