Project

General

Profile

1
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
2
<html>
3
<head>
4
<title>
5
<a href='http://mapbuilder.sourceforge.net'>Community Map Builder</a> 27 Apr 2008 Overview
6
</title>
7
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
8
<script>
9
function asd() {
10
	
11
		parent.document.title="Util.js Overview";
12
	
13
}
14
</script>
15
</head>
16
<body bgcolor="white" onload="asd();">
17

    
18
<!-- ========== START OF NAVBAR ========== -->
19
<a name="navbar_top"><!-- --></a>
20
<table border="0" width="100%" cellpadding="1" cellspacing="0">
21
<tr>
22
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
23
<a name="navbar_top_firstrow"><!-- --></a>
24
<table border="0" cellpadding="0" cellspacing="3">
25
  <tr align="center" valign="top">
26
  
27
  
28
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
29
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
30
  
31

    
32
  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
33
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
34
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
35
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
36
  </tr>
37
</table>
38
</td>
39
<td bgcolor="#EEEEFF" align="right" valign="top">
40
<em>
41
<b><a href='http://mapbuilder.sourceforge.net'>Community Map Builder</a> 27 Apr 2008</b></em>
42
</td>
43
</tr>
44

    
45
<tr>
46
<td bgcolor="white" class="NavBarCell2"><font size="-2">
47
&nbsp;PREV&nbsp;
48
&nbsp;NEXT</font></td>
49
<td bgcolor="white" class="NavBarCell2"><font size="-2">
50
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
51
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
52
&nbsp;&nbsp;
53
<script>
54
  <!--
55
  if(window==top) {
56
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
57
  }
58
  //-->
59
</script>
60
<noscript>
61
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
62
</noscript>
63
</font></td>
64
</tr>
65
</table>
66
<!-- =========== END OF NAVBAR =========== -->
67

    
68
<hr>
69
<center>
70
	
71
	   <h2>Util.js</h2>
72
	
73
</center>
74

    
75
	
76

    
77

    
78
<h4>Summary</h4>
79
<p>
80
	
81
		No overview generated for 'Util.js'<BR/><BR/>
82
	
83
</p>
84

    
85
<hr>
86

    
87

    
88
    <table border="1" cellpadding="3" cellspacing="0" width="100%">
89
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
90
    <td colspan=2><font size="+2">
91
    
92
        <b>Class Summary</b>
93
    
94
    </font></td>
95
    </tr>
96
    
97
    <tr bgcolor="white" class="TableRowColor">
98
    <td width="15%"><b><a href="XslProcessor.html">XslProcessor</a></b></td>
99
    <td>&nbsp;</td>
100
    </tr>
101
    
102
    </table>
103
    <hr/> 
104

    
105

    
106
<!-- ========== METHOD SUMMARY =========== -->
107

    
108
	<a name="method_summary"><!-- --></a>
109
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
110
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
111
			<td colspan=2>
112
				<font size="+2">
113
					<b>Method Summary</b>
114
				</font>
115
			</td>
116
		</tr>
117
	
118
		
119
		   <tr bgcolor="white" class="TableRowColor">
120
		      <td align="right" valign="top" width="1%">
121
			 <font size="-1">
122
			    <code>static&nbsp;void</code>
123
			 </font>
124
		      </td>
125
		      <td>
126
			 <code>
127
			    <b>
128
			       <a href="GLOBALS.html#addEvent">addEvent</a></b>(elementObject, eventName, functionObject)
129
			 </code>
130
			 <br>
131
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
132
			 attach an event to an element.
133
		      </td>
134
		   </tr>
135
		
136
		   <tr bgcolor="white" class="TableRowColor">
137
		      <td align="right" valign="top" width="1%">
138
			 <font size="-1">
139
			    <code>static&nbsp;void</code>
140
			 </font>
141
		      </td>
142
		      <td>
143
			 <code>
144
			    <b>
145
			       <a href="GLOBALS.html#debug">debug</a></b>(output)
146
			 </code>
147
			 <br>
148
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
149
			 write debugging info to a textbox onscreen.
150
		      </td>
151
		   </tr>
152
		
153
		   <tr bgcolor="white" class="TableRowColor">
154
		      <td align="right" valign="top" width="1%">
155
			 <font size="-1">
156
			    <code>static&nbsp;Object</code>
157
			 </font>
158
		      </td>
159
		      <td>
160
			 <code>
161
			    <b>
162
			       <a href="GLOBALS.html#getAbsPos">getAbsPos</a></b>(elt,which)
163
			 </code>
164
			 <br>
165
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
166
			 TBD: Comment me.
167
		      </td>
168
		   </tr>
169
		
170
		   <tr bgcolor="white" class="TableRowColor">
171
		      <td align="right" valign="top" width="1%">
172
			 <font size="-1">
173
			    <code>static&nbsp;Object</code>
174
			 </font>
175
		      </td>
176
		      <td>
177
			 <code>
178
			    <b>
179
			       <a href="GLOBALS.html#getAbsX">getAbsX</a></b>(elt)
180
			 </code>
181
			 <br>
182
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
183
			 
184
		      </td>
185
		   </tr>
186
		
187
		   <tr bgcolor="white" class="TableRowColor">
188
		      <td align="right" valign="top" width="1%">
189
			 <font size="-1">
190
			    <code>static&nbsp;Object</code>
191
			 </font>
192
		      </td>
193
		      <td>
194
			 <code>
195
			    <b>
196
			       <a href="GLOBALS.html#getAbsY">getAbsY</a></b>(elt)
197
			 </code>
198
			 <br>
199
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
200
			 get the absolute position of HTML element NS4, IE4/5 & NS6, even if it's in a table.
201
		      </td>
202
		   </tr>
203
		
204
		   <tr bgcolor="white" class="TableRowColor">
205
		      <td align="right" valign="top" width="1%">
206
			 <font size="-1">
207
			    <code>static&nbsp;Object</code>
208
			 </font>
209
		      </td>
210
		      <td>
211
			 <code>
212
			    <b>
213
			       <a href="GLOBALS.html#getArgs">getArgs</a></b>()
214
			 </code>
215
			 <br>
216
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
217
			 parse comma-separated name=value argument pairs from the query string of the URL; the function stores name=value pairs in properties of an object and returns that object.
218
		      </td>
219
		   </tr>
220
		
221
		   <tr bgcolor="white" class="TableRowColor">
222
		      <td align="right" valign="top" width="1%">
223
			 <font size="-1">
224
			    <code>static&nbsp;Object</code>
225
			 </font>
226
		      </td>
227
		      <td>
228
			 <code>
229
			    <b>
230
			       <a href="GLOBALS.html#getGeoCoordX">getGeoCoordX</a></b>(context, xCooord)
231
			 </code>
232
			 <br>
233
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
234
			 convert screen x coordinate to geographic coordinate.
235
		      </td>
236
		   </tr>
237
		
238
		   <tr bgcolor="white" class="TableRowColor">
239
		      <td align="right" valign="top" width="1%">
240
			 <font size="-1">
241
			    <code>static&nbsp;Object</code>
242
			 </font>
243
		      </td>
244
		      <td>
245
			 <code>
246
			    <b>
247
			       <a href="GLOBALS.html#getGeoCoordY">getGeoCoordY</a></b>(yCoord)
248
			 </code>
249
			 <br>
250
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
251
			 convert screen coordinate to screen coordinate.
252
		      </td>
253
		   </tr>
254
		
255
		   <tr bgcolor="white" class="TableRowColor">
256
		      <td align="right" valign="top" width="1%">
257
			 <font size="-1">
258
			    <code>static&nbsp;Object</code>
259
			 </font>
260
		      </td>
261
		      <td>
262
			 <code>
263
			    <b>
264
			       <a href="GLOBALS.html#getNodeValue">getNodeValue</a></b>(sResult)
265
			 </code>
266
			 <br>
267
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
268
			 getNodevalue return value of node
269
 it as OpenLayers style
270
		      </td>
271
		   </tr>
272
		
273
		   <tr bgcolor="white" class="TableRowColor">
274
		      <td align="right" valign="top" width="1%">
275
			 <font size="-1">
276
			    <code>static&nbsp;Object</code>
277
			 </font>
278
		      </td>
279
		      <td>
280
			 <code>
281
			    <b>
282
			       <a href="GLOBALS.html#getPageX">getPageX</a></b>(e)
283
			 </code>
284
			 <br>
285
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
286
			 get the absolute position of a user event (e.g., a mousedown).
287
		      </td>
288
		   </tr>
289
		
290
		   <tr bgcolor="white" class="TableRowColor">
291
		      <td align="right" valign="top" width="1%">
292
			 <font size="-1">
293
			    <code>static&nbsp;Object</code>
294
			 </font>
295
		      </td>
296
		      <td>
297
			 <code>
298
			    <b>
299
			       <a href="GLOBALS.html#getPageY">getPageY</a></b>(e)
300
			 </code>
301
			 <br>
302
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
303
			 get the absolute position of a user event (e.g., a mousedown).
304
		      </td>
305
		   </tr>
306
		
307
		   <tr bgcolor="white" class="TableRowColor">
308
		      <td align="right" valign="top" width="1%">
309
			 <font size="-1">
310
			    <code>static&nbsp;Object</code>
311
			 </font>
312
		      </td>
313
		      <td>
314
			 <code>
315
			    <b>
316
			       <a href="GLOBALS.html#getProxyPlusUrl">getProxyPlusUrl</a></b>(url)
317
			 </code>
318
			 <br>
319
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
320
			 If URL is local, then return URL unchanged,
321
 else return URL of http://proxy?url=URL , or null if proxy not defined.
322
		      </td>
323
		   </tr>
324
		
325
		   <tr bgcolor="white" class="TableRowColor">
326
		      <td align="right" valign="top" width="1%">
327
			 <font size="-1">
328
			    <code>static&nbsp;Object</code>
329
			 </font>
330
		      </td>
331
		      <td>
332
			 <code>
333
			    <b>
334
			       <a href="GLOBALS.html#getScreenX">getScreenX</a></b>(context, xCoord)
335
			 </code>
336
			 <br>
337
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
338
			 convert geographic x coordinate to screen coordinate.
339
		      </td>
340
		   </tr>
341
		
342
		   <tr bgcolor="white" class="TableRowColor">
343
		      <td align="right" valign="top" width="1%">
344
			 <font size="-1">
345
			    <code>static&nbsp;Object</code>
346
			 </font>
347
		      </td>
348
		      <td>
349
			 <code>
350
			    <b>
351
			       <a href="GLOBALS.html#getScreenY">getScreenY</a></b>(context, yCoord)
352
			 </code>
353
			 <br>
354
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
355
			 convert geographic y coordinate to screen coordinate.
356
		      </td>
357
		   </tr>
358
		
359
		   <tr bgcolor="white" class="TableRowColor">
360
		      <td align="right" valign="top" width="1%">
361
			 <font size="-1">
362
			    <code>static&nbsp;void</code>
363
			 </font>
364
		      </td>
365
		      <td>
366
			 <code>
367
			    <b>
368
			       <a href="GLOBALS.html#handleEventWithObject">handleEventWithObject</a></b>(evt)
369
			 </code>
370
			 <br>
371
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
372
			 handle event attached to an object.
373
		      </td>
374
		   </tr>
375
		
376
		   <tr bgcolor="white" class="TableRowColor">
377
		      <td align="right" valign="top" width="1%">
378
			 <font size="-1">
379
			    <code>static&nbsp;void</code>
380
			 </font>
381
		      </td>
382
		      <td>
383
			 <code>
384
			    <b>
385
			       <a href="GLOBALS.html#loadCss">loadCss</a></b>(cssFileName)
386
			 </code>
387
			 <br>
388
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
389
			 Dynamically loads a stylesheet into the html page.
390
		      </td>
391
		   </tr>
392
		
393
		   <tr bgcolor="white" class="TableRowColor">
394
		      <td align="right" valign="top" width="1%">
395
			 <font size="-1">
396
			    <code>static&nbsp;Object</code>
397
			 </font>
398
		      </td>
399
		      <td>
400
			 <code>
401
			    <b>
402
			       <a href="GLOBALS.html#makeElt">makeElt</a></b>(type)
403
			 </code>
404
			 <br>
405
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
406
			 create an element and append it to the document body element.
407
		      </td>
408
		   </tr>
409
		
410
		   <tr bgcolor="white" class="TableRowColor">
411
		      <td align="right" valign="top" width="1%">
412
			 <font size="-1">
413
			    <code>static&nbsp;void</code>
414
			 </font>
415
		      </td>
416
		      <td>
417
			 <code>
418
			    <b>
419
			       <a href="GLOBALS.html#mbDebugMessage">mbDebugMessage</a></b>(object, message)
420
			 </code>
421
			 <br>
422
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
423
			 Show a message if the debug property of the object has been set.
424
		      </td>
425
		   </tr>
426
		
427
		   <tr bgcolor="white" class="TableRowColor">
428
		      <td align="right" valign="top" width="1%">
429
			 <font size="-1">
430
			    <code>static&nbsp;Object</code>
431
			 </font>
432
		      </td>
433
		      <td>
434
			 <code>
435
			    <b>
436
			       <a href="GLOBALS.html#mbFormatMessage">mbFormatMessage</a></b>(messageFormat)
437
			 </code>
438
			 <br>
439
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
440
			 Format a message with the extra arguments.
441
		      </td>
442
		   </tr>
443
		
444
		   <tr bgcolor="white" class="TableRowColor">
445
		      <td align="right" valign="top" width="1%">
446
			 <font size="-1">
447
			    <code>static&nbsp;Object</code>
448
			 </font>
449
		      </td>
450
		      <td>
451
			 <code>
452
			    <b>
453
			       <a href="GLOBALS.html#mbGetMessage">mbGetMessage</a></b>(messageKey)
454
			 </code>
455
			 <br>
456
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
457
			 Get a message from the <code>widgetText</code> file and format it if extra
458
 arguments are passed.
459
		      </td>
460
		   </tr>
461
		
462
		   <tr bgcolor="white" class="TableRowColor">
463
		      <td align="right" valign="top" width="1%">
464
			 <font size="-1">
465
			    <code>static&nbsp;Object</code>
466
			 </font>
467
		      </td>
468
		      <td>
469
			 <code>
470
			    <b>
471
			       <a href="GLOBALS.html#openPopup">openPopup</a></b>(url, width, height)
472
			 </code>
473
			 <br>
474
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
475
			 open a popup window, adapted from http://www.quirksmode.org/js/croswin.html
476
		      </td>
477
		   </tr>
478
		
479
		   <tr bgcolor="white" class="TableRowColor">
480
		      <td align="right" valign="top" width="1%">
481
			 <font size="-1">
482
			    <code>static&nbsp;Object</code>
483
			 </font>
484
		      </td>
485
		      <td>
486
			 <code>
487
			    <b>
488
			       <a href="GLOBALS.html#postGetLoad">postGetLoad</a></b>(sUri, docToSend, contentType , dir, fileName)
489
			 </code>
490
			 <br>
491
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
492
			 A more flexible interface for loading docs that allows POST et GET param for save model
493
		      </td>
494
		   </tr>
495
		
496
		   <tr bgcolor="white" class="TableRowColor">
497
		      <td align="right" valign="top" width="1%">
498
			 <font size="-1">
499
			    <code>static&nbsp;Object</code>
500
			 </font>
501
		      </td>
502
		      <td>
503
			 <code>
504
			    <b>
505
			       <a href="GLOBALS.html#postLoad">postLoad</a></b>(sUri, docToSend, contentType )
506
			 </code>
507
			 <br>
508
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
509
			 A more flexible interface for loading docs that allows POST and async loading
510
		      </td>
511
		   </tr>
512
		
513
		   <tr bgcolor="white" class="TableRowColor">
514
		      <td align="right" valign="top" width="1%">
515
			 <font size="-1">
516
			    <code>static&nbsp;Object</code>
517
			 </font>
518
		      </td>
519
		      <td>
520
			 <code>
521
			    <b>
522
			       <a href="GLOBALS.html#returnTarget">returnTarget</a></b>(evt)
523
			 </code>
524
			 <br>
525
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
526
			 determine and return the target element of an event.
527
		      </td>
528
		   </tr>
529
		
530
		   <tr bgcolor="white" class="TableRowColor">
531
		      <td align="right" valign="top" width="1%">
532
			 <font size="-1">
533
			    <code>static&nbsp;Object</code>
534
			 </font>
535
		      </td>
536
		      <td>
537
			 <code>
538
			    <b>
539
			       <a href="GLOBALS.html#sld2OlStyle">sld2OlStyle</a></b>(node)
540
			 </code>
541
			 <br>
542
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
543
			 extract a style from a SLD node of an XML doc and return
544
 it as OpenLayers style
545
		      </td>
546
		   </tr>
547
		
548
		   <tr bgcolor="white" class="TableRowColor">
549
		      <td align="right" valign="top" width="1%">
550
			 <font size="-1">
551
			    <code>static&nbsp;Object</code>
552
			 </font>
553
		      </td>
554
		      <td>
555
			 <code>
556
			    <b>
557
			       <a href="GLOBALS.html#sld2UrlParam">sld2UrlParam</a></b>(node)
558
			 </code>
559
			 <br>
560
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
561
			 extract a style from a SLD node of an XML doc and return
562
 it as url parameter for a WMS request
563
		      </td>
564
		   </tr>
565
		
566
	
567
	</table>
568
    <p>
569

    
570
<!-- ========== END METHOD SUMMARY =========== -->
571

    
572

    
573
        <pre class="sourceview"><span class="comment">/*
574
License:      LGPL as per: http://www.gnu.org/copyleft/lesser.html
575
Dependancies: Sarissa
576

    
577
$Id: Util.js 3961 2008-04-01 12:45:02Z ahocevar $
578
*/</span>
579
<span class="comment">
580
// some basic browser detection</span>
581
var MB_IS_MOZ = (document.implementation &amp;&amp; document.implementation.createDocument)?true:false;
582

    
583
<span class="comment">/**
584
Transform an XML document using the provided XSL and use the results to build
585
a web page.
586
<span class="attrib">@constructor</span>
587
<span class="attrib">@param</span> xslUrl The URL of an XSL stylesheet.
588
<span class="attrib">@author</span> Cameron Shorter - Cameron AT Shorter.net
589
*/</span>
590
<span class="reserved">function</span> XslProcessor(xslUrl,docNSUri) {
591
<span class="comment">  // override Sarissa configurations to prefer MSXML3, because</span>
592
<span class="comment">  // MSXML6 does not work well with IE6SP2</span>
593
  <span class="reserved">if</span> (!MB_IS_MOZ) {
594
    _SARISSA_DOM_PROGID = Sarissa.pickRecentProgID([<span class="literal">"Msxml2.DOMDocument.3.0"</span>, <span class="literal">"Msxml2.DOMDocument.6.0"</span>], [[<span class="literal">"SELECT_NODES"</span>, 2],[<span class="literal">"TRANSFORM_NODE"</span>, 2]]);
595
    _SARISSA_XMLHTTP_PROGID = Sarissa.pickRecentProgID([<span class="literal">"Msxml2.XMLHTTP.3.0"</span>, <span class="literal">"MSXML2.XMLHTTP.6.0"</span>], [[<span class="literal">"XMLHTTP"</span>, 4]]);
596
    _SARISSA_THREADEDDOM_PROGID = Sarissa.pickRecentProgID([<span class="literal">"Msxml2.FreeThreadedDOMDocument.3.0"</span>, <span class="literal">"MSXML2.FreeThreadedDOMDocument.6.0"</span>]);
597
    _SARISSA_XSLTEMPLATE_PROGID = Sarissa.pickRecentProgID([<span class="literal">"Msxml2.XSLTemplate.3.0"</span>, <span class="literal">"MSXML2.XSLTemplate.6.0"</span>], [[<span class="literal">"XSLTPROC"</span>, 2]]);
598
  }
599
<span class="comment">  // get the stylesheet document</span>
600
  <span class="reserved">this</span>.xslUrl=xslUrl;
601
  <span class="reserved">this</span>.xslDom = Sarissa.getDomDocument();
602
  <span class="reserved">this</span>.xslDom.async = false;
603
<span class="comment">  // fix some issues in IE</span>
604
  <span class="reserved">if</span> (!MB_IS_MOZ) {
605
    try {
606
<span class="comment">      // IE6 SP2 parsing bug</span>
607
      <span class="reserved">this</span>.xslDom.validateOnParse=false;
608
<span class="comment">      // Prevent "Access denied" with external documents</span>
609
      <span class="reserved">this</span>.xslDom.setProperty(<span class="literal">"AllowDocumentFunction"</span>, true);
610
      <span class="reserved">this</span>.xslDom.resolveExternals = true;
611
    }
612
    catch (e) {
613
<span class="comment">      // do nothing here, we won't get far anyway.</span>
614
    }
615
  }
616
  <span class="reserved">if</span>(typeof(inlineXSL)!=<span class="literal">"undefined"</span>) {
617
    xmlString = inlineXSL[_1];
618
    xmlString = xmlString.replace(/DOUBLE_QUOTE/g,<span class="literal">"\"</span><span class="literal">");
619
    this.xslDom = (new DOMParser()).parseFromString(xmlString, "</span>text/xml<span class="literal">");
620
  }
621
  else {
622
    if(_SARISSA_IS_SAFARI){
623
        var xmlhttp = new XMLHttpRequest();
624
        xmlhttp.open("</span>GET<span class="literal">", xslUrl, false);
625
        xmlhttp.send(null);
626
        this.xslDom = xmlhttp.responseXML;
627
    }else
628
    {
629
      this.xslDom.load(xslUrl);
630
    }
631
  }
632
  if ( Sarissa.getParseErrorText(this.xslDom) != Sarissa.PARSED_OK )
633
    alert(mbGetMessage("</span>errorLoadingStylesheet<span class="literal">", xslUrl));
634

    
635
  this.processor = new XSLTProcessor();
636
  this.processor.importStylesheet(this.xslDom);
637
  
638
  this.docNSUri = docNSUri;
639

    
640
  /**
641
   * Transforms XML in the provided xml node according to this XSL.
642
   * @param xmlNode The XML node to be transformed.
643
   * @return The transformed String.
644
   */
645
  this.transformNodeToString = function(xmlNode) {
646
    try {
647
      // transform and build a web page with result
648
      //MAP-427 Quick hack to transform an XMLElement to XMLDocument in IE
649
     
650
      if (_SARISSA_IS_IE){
651
	      var str = (new XMLSerializer()).serializeToString(xmlNode);
652
	      var xmlNode = (new DOMParser()).parseFromString(str, "</span>text/xml<span class="literal">");
653
	  }
654
      var newDoc = this.transformNodeToObject(xmlNode);
655
      var s = (new XMLSerializer()).serializeToString(newDoc);
656
      if(_SARISSA_IS_OPERA)
657
      	s =  s.replace(/.*\?\&gt;/,"</span><span class="literal">");//hack for opera to delete &lt;?xml ... ?&gt;
658
      return s;
659
    } catch(e){
660
      alert(mbGetMessage("</span>exceptionTransformingDoc<span class="literal">", this.xslUrl));
661
      alert("</span>XSL=<span class="literal">"+(new XMLSerializer()).serializeToString(this.xslDom));
662
      alert("</span>XML=<span class="literal">"+(new XMLSerializer()).serializeToString(xmlNode));
663
    }
664
  }
665

    
666
  /**
667
   * Transforms XML in the provided xml node according to this XSL.
668
   * @param xmlNode The XML node to be transformed.
669
   * @return a DOM document object
670
   */
671
  this.transformNodeToObject=function(xmlNode) {
672
    if(_SARISSA_IS_SAFARI){
673
      var oResult = new DOMParser().parseFromString("</span>&lt;xsltresult&gt;&lt;/xsltresult&gt;<span class="literal">", "</span>text/xml<span class="literal">");
674
      var newFragment = this.processor.transformToFragment(xmlNode, oResult);
675
      var str = (new XMLSerializer()).serializeToString(newFragment);
676
      str.replace(/\s/g,"</span><span class="literal">");
677
    }else{
678
       var newFragment = this.processor.transformToDocument(xmlNode);
679
    }
680
    return newFragment;
681
  }
682

    
683
  /**
684
   * Set XSL parameter.
685
   */
686
  this.setParameter=function(paramName, paramValue, nsUri) {
687
    //if ( typeof paramValue == "</span>string<span class="literal">" || typeof paramValue == "</span>number<span class="literal">") paramValue="</span><span class="literal">'"+paramValue+"'</span><span class="literal">";
688
    if (!paramValue) {
689
      //alert("</span>null value <span class="reserved">for</span> stylesheet param:<span class="literal">"+paramName+"</span>:<span class="literal">"+paramValue);
690
      return;
691
    }
692
    this.processor.setParameter( null, paramName, paramValue);
693
  }
694
}
695

    
696
/**
697
 * A more flexible interface for loading docs that allows POST and async loading
698
 */
699
function postLoad(sUri, docToSend, contentType ) {
700
   var xmlHttp = new XMLHttpRequest();
701
   if ( sUri.indexOf("</span>http://<span class="literal">")==0 || sUri.indexOf("</span>https://<span class="literal">")==0 ) {
702
     xmlHttp.open("</span>POST<span class="literal">", config.proxyUrl, false);
703
     xmlHttp.setRequestHeader("</span>serverUrl<span class="literal">",sUri);//escape(sUri).replace(/\+/g, '%2C').replace(/\"</span>/g,<span class="literal">'%22'</span>).replace(/\<span class="literal">'/g, '</span>%27<span class="literal">'));
704
   } else {
705
     xmlHttp.open("POST", sUri, false);
706
   }
707
   xmlHttp.setRequestHeader("content-type","text/xml");
708
   if (contentType) xmlHttp.setRequestHeader("content-type",contentType);
709
   //alert("sending:"+docToSend.xml);
710
   xmlHttp.send( docToSend );
711
/*
712
   if (_SARISSA_IS_IE) {
713
alert("before");
714
    xmlHttp.status = xmlHttp.Status;
715
alert("after");
716
    xmlHttp.statusText = xmlHttp.StatusText;
717
    xmlHttp.responseText = xmlHttp.ResponseText;
718
   }
719
*/
720
   if (xmlHttp.status &gt;= 400) {   //http errors status start at 400
721
      alert(mbGetMessage("errorLoadingDocument", sUri, xmlHttp.statusText, xmlHttp.responseText));
722
      var outDoc = Sarissa.getDomDocument();
723
      outDoc.parseError = -1;
724
      return outDoc;
725
   } else {
726
     //alert(xmlHttp.getResponseHeader("Content-Type"));
727
     if ( null==xmlHttp.responseXML ) alert(mbGetMessage("nullXmlResponse", xmlHttp.responseText));
728
     return xmlHttp.responseXML;
729
   }
730
}
731

    
732

    
733
/**
734
 * A more flexible interface for loading docs that allows POST et GET param for save model
735
 */
736

    
737
function postGetLoad(sUri, docToSend, contentType , dir, fileName) {
738

    
739
   var xmlHttp = new XMLHttpRequest();
740
   var appendChar = sUri.indexOf("?") == -1 ? "?" : "&amp;";
741
   if(dir &amp;&amp; fileName)
742
       	sUri=sUri+appendChar+"dir="+dir+"&amp;fileName="+fileName;
743
   else if(dir)
744
   		sUri=sUri+appendChar+"dir="+dir;
745
   else if(fileName)
746
   		sUri=sUri+appendChar+"fileName="+fileName;
747
   		
748
   if ( sUri.indexOf("http://")==0 || sUri.indexOf("https://")==0 )
749
   {
750
       xmlHttp.open("POST", config.proxyUrl, false);       
751
       xmlHttp.setRequestHeader("serverUrl",sUri);
752
   }
753
   else
754
   {
755
       xmlHttp.open("POST", sUri, false);
756
   }
757
   xmlHttp.setRequestHeader("content-type","text/xml");
758
   if (contentType) xmlHttp.setRequestHeader("content-type",contentType);
759
   xmlHttp.send( docToSend );
760

    
761
   if (xmlHttp.status &gt;= 400)
762
   {   //http errors status start at 400
763
        alert(mbGetMessage("errorLoadingDocument", sUri, xmlHttp.statusText, xmlHttp.responseText));
764
        var outDoc = Sarissa.getDomDocument();
765
        outDoc.parseError = -1;
766
        return outDoc;
767
   }
768
   else
769
   {
770
       if ( null==xmlHttp.responseXML ) alert(mbGetMessage("nullXmlResponse", xmlHttp.responseText));
771
       return xmlHttp.responseXML;
772
   }
773
}
774

    
775

    
776

    
777
  /**
778
   * If URL is local, then return URL unchanged,
779
   * else return URL of http://proxy?url=URL , or null if proxy not defined.
780
   * @param url Url of the file to access.
781
   * @return Url of the proxy and service in the form http://host/proxy?url=service
782
   */
783
function getProxyPlusUrl(url) {
784
  if ( url.indexOf("http://")==0 || url.indexOf("https://")==0 ) {
785
    if ( config.proxyUrl ) {
786
      url=config.proxyUrl+"?url="+escape(url).replace(/\+/g, '</span>%2C<span class="literal">').replace(/\"/g,'</span>%22<span class="literal">').replace(/\'</span>/g, <span class="literal">'%27'</span>);
787
    } <span class="reserved">else</span> {
788
      alert(mbGetMessage(<span class="literal">"unableToLoadDoc"</span>, url));
789
      url=null;
790
    }
791
  }
792
  <span class="reserved">return</span> url;
793
}
794

    
795
  <span class="comment">/**
796
   * Browser independant version of createElementNS()
797
   * <span class="attrib">@param</span> doc the owner document for the new element
798
   * <span class="attrib">@param</span> name for the new element
799
   * <span class="attrib">@param</span> ns the URL for the namespace (without a prefix)
800
   * <span class="attrib">@return</span> element in the document with the specified namespace
801
   */</span>
802
<span class="reserved">function</span> createElementWithNS(doc,name,nsUri) {
803
  <span class="reserved">if</span> (_SARISSA_IS_IE) {
804
    <span class="reserved">return</span> doc.createNode(1, name, nsUri);
805
  } <span class="reserved">else</span> {
806
    <span class="reserved">return</span> doc.createElementNS(nsUri,name);
807
  }
808
}
809

    
810
<span class="comment">/**
811
 * Create a unique Id which can be used for classes to link themselves to HTML
812
 * Ids.
813
 * <span class="attrib">@constructor</span>
814
 */</span>
815
<span class="reserved">function</span> UniqueId(){
816
  <span class="reserved">this</span>.lastId=0;
817

    
818
  <span class="comment">/** Return a numeric unique Id. */</span>
819
  <span class="reserved">this</span>.getId=<span class="reserved">function</span>() {
820
    <span class="reserved">this</span>.lastId++;
821
    <span class="reserved">return</span> <span class="reserved">this</span>.lastId;
822
  }
823
}
824
<span class="comment">//use this global object to generate a unique ID via the getId function</span>
825
var mbIds = new UniqueId();
826

    
827
<span class="reserved">function</span> setISODate(isoDateStr) {
828
  var parts = isoDateStr.match(/(\d{4})-?(\d{2})?-?(\d{2})?T?(\d{2})?:?(\d{2})?:?(\d{2})?\.?(\d{0,3})?(Z)?/);
829
  var res = null;
830
  <span class="reserved">for</span> (var i=1;i&lt;parts.length;++i){
831
    <span class="reserved">if</span> (!parts[i]) {
832
      parts[i] = (i==3)?1:0; //months start with day number 1, not 0
833
      <span class="reserved">if</span> (!res) res = i;
834
    }
835
  }
836
  var isoDate = new Date();
837
  isoDate.setFullYear(parseInt(parts[1],10));
838
  isoDate.setMonth(parseInt(parts[2],10)-1,parseInt(parts[3],10));
839
  isoDate.setDate(parseInt(parts[3],10));
840
  isoDate.setHours(parseInt(parts[4],10));
841
  isoDate.setMinutes(parseInt(parts[5],10));
842
  isoDate.setSeconds(parseFloat(parts[6],10));
843
  <span class="reserved">if</span> (!res) res = 6;
844
  isoDate.res = res;
845
  <span class="reserved">return</span> isoDate;
846
}
847

    
848
<span class="reserved">function</span> getISODate(isoDate) {
849
  var res = isoDate.res?isoDate.res:6;
850
  var dateStr = <span class="literal">""</span>;
851
  dateStr += res&gt;=1?isoDate.getFullYear():<span class="literal">""</span>;
852
  dateStr += res&gt;=2?<span class="literal">"-"</span>+leadingZeros(isoDate.getMonth()+1,2):<span class="literal">""</span>;
853
  dateStr += res&gt;=3?<span class="literal">"-"</span>+leadingZeros(isoDate.getDate(),2):<span class="literal">""</span>;
854
  dateStr += res&gt;=4?<span class="literal">"T"</span>+leadingZeros(isoDate.getHours(),2):<span class="literal">""</span>;
855
  dateStr += res&gt;=5?<span class="literal">":"</span>+leadingZeros(isoDate.getMinutes(),2):<span class="literal">""</span>;
856
  dateStr += res&gt;=6?<span class="literal">":"</span>+leadingZeros(isoDate.getSeconds(),2):<span class="literal">""</span>;
857
  <span class="reserved">return</span> dateStr;
858
}
859

    
860
<span class="reserved">function</span> leadingZeros(num,digits) {
861
  var intNum = parseInt(num,10);
862
  var base = Math.pow(10,digits);
863
  <span class="reserved">if</span> (intNum&lt;base) intNum += base;
864
  <span class="reserved">return</span> intNum.toString().substr(1);
865
}
866
<span class="comment">
867

    
868
// Correctly handle PNG transparency in Win IE 5.5 or higher.</span>
869
<span class="comment">// this method should be set as an IMG onload handler for PNG map layers</span>
870
<span class="comment">// thanks to Caroklyn Cole for this fix.  For an explanation see:</span>
871
<span class="comment">// http://homepage.ntlworld.com/bobosola. Updated 02-March-2004</span>
872
<span class="comment">// modified to the images as visible after this has been called.</span>
873
<span class="comment">// PL-BRGM</span>
874
<span class="comment">// Add oldImage in parameter</span>
875
<span class="reserved">function</span> fixPNG(myImage,myId,oldImage) {
876
  <span class="reserved">if</span> (_SARISSA_IS_IE) {
877
<span class="comment">    // PL - BRGM</span>
878
<span class="comment">    //opacity of the image</span>
879
    <span class="reserved">if</span>(oldImage) {
880
      var valIEOpacity= oldImage.style.filter.substring(oldImage.style.filter.indexOf(<span class="literal">'opacity='</span>,0)+8,oldImage.style.filter.lastIndexOf(<span class="literal">')'</span>,0));
881
      <span class="reserved">if</span>(oldImage.style.filter.indexOf(<span class="literal">'opacity='</span>,0) ==-1){
882
        valIEOpacity = null;
883
      }
884
       var _opacity= (valIEOpacity)?valIEOpacity/100:-1;
885
     }
886
<span class="comment">  // END</span>
887
    var imgID = <span class="literal">"id='"</span> + myId + <span class="literal">"' "</span>;
888
    var imgClass = (myImage.className) ? <span class="literal">"class='"</span> + myImage.className + <span class="literal">"' "</span> : <span class="literal">""</span>
889
    var imgTitle = (myImage.title) ? <span class="literal">"title='"</span> + myImage.title + <span class="literal">"' "</span> : <span class="literal">"title='"</span> + myImage.alt + <span class="literal">"' "</span>
890
    var imgStyle = <span class="literal">"display:inline-block;"</span> + myImage.style.cssText
891
    var strNewHTML = <span class="literal">"&lt;span "</span> + imgID + imgClass + imgTitle
892

    
893
    strNewHTML += <span class="literal">" style=\"</span><span class="literal">" + "</span>width:<span class="literal">" + myImage.width + "</span>px; height:<span class="literal">" + myImage.height + "</span>px;<span class="literal">" + imgStyle + "</span>;<span class="literal">"
894
    // store the opacity in the style even not used by IE
895
    if (_opacity!=-1) strNewHTML += "</span>opacity=<span class="literal">" + _opacity + "</span>;<span class="literal">" ;
896
    // Escape some chars (don't use encode() that would escape %xx previously used in XSL)
897
    var src = myImage.src;
898
    src = src.replace(/\(/g,'%28');
899
    src = src.replace(/\)/g,'%29');
900
    src = src.replace(/'/g,'%27');
901
    // AlphaImageLoader converts '%23' in src to '#' and cuts URL on '#'
902
    src = src.replace(/%23/g,'%2523');
903
    strNewHTML += "</span>filter:progid:DXImageTransform.Microsoft.AlphaImageLoader<span class="literal">";
904
    strNewHTML += "</span>(src=\<span class="literal">'" + src + "\'</span>, sizingMethod=<span class="literal">'scale'</span>)<span class="literal">";
905

    
906
    // PL - BRGM
907
    // add the opacity
908
    if (oldImage &amp;&amp; _opacity!=-1) strNewHTML +=  "</span> alpha(opacity=<span class="literal">" + (_opacity * 100) + "</span>)<span class="literal">";
909
    strNewHTML +="</span>; \<span class="literal">"&gt;&lt;/span&gt;"</span> ;
910
<span class="comment">  // END PL - BRGM</span>
911
<span class="comment">    //myImage.outerHTML = strNewHTML;</span>
912
<span class="comment">    //alert(strNewHTML);</span>
913
    <span class="reserved">return</span> strNewHTML;
914
  }
915
}
916

    
917

    
918

    
919
<span class="comment">/**
920
 * get the absolute position of HTML element NS4, IE4/5 &amp; NS6, even if it's in a table.
921
 * <span class="attrib">@param</span> element The HTML element.
922
 * <span class="attrib">@return</span> Top left X position.
923
 */</span>
924
<span class="reserved">function</span> getAbsX(elt) {
925
        <span class="reserved">return</span> (elt.x) ? elt.x : getAbsPos(elt,<span class="literal">"Left"</span>) + 2;
926
}
927

    
928
<span class="comment">/**
929
 * get the absolute position of HTML element NS4, IE4/5 &amp; NS6, even if it's in a table.
930
 * <span class="attrib">@param</span> element The HTML element.
931
 * <span class="attrib">@return</span> Top left Y position.
932
 */</span>
933
<span class="reserved">function</span> getAbsY(elt) {
934
        <span class="reserved">return</span> (elt.y) ? elt.y : getAbsPos(elt,<span class="literal">"Top"</span>) + 2;
935
}
936

    
937
<span class="comment">/**
938
 * TBD: Comment me.
939
 * <span class="attrib">@param</span> elt TBD
940
 * <span class="attrib">@param</span> which TBD
941
 */</span>
942
<span class="reserved">function</span> getAbsPos(elt,which) {
943
 iPos = 0;
944
 <span class="reserved">while</span> (elt != null) {
945
        iPos += elt[<span class="literal">"offset"</span> + which];
946
        elt = elt.offsetParent;
947
 }
948
 <span class="reserved">return</span> iPos;
949
}
950

    
951
<span class="comment">/**
952
 * get the absolute position of a user event (e.g., a mousedown).
953
 * <span class="attrib">@param</span> e The user event.
954
 * <span class="attrib">@return</span> Left or top position.
955
 */</span>
956
<span class="reserved">function</span> getPageX(e){
957
  var posx = 0;
958
  <span class="reserved">if</span> (!e) var e = window.event;
959
  <span class="reserved">if</span> (e.pageX) {
960
    posx = e.pageX;
961
  }
962
  <span class="reserved">else</span> <span class="reserved">if</span> (e.clientX) {
963
   posx = e.clientX;
964
  }
965
  <span class="reserved">if</span> (document.body &amp;&amp; document.body.scrollLeft){
966
    posx += document.body.scrollLeft;
967
  }
968
  <span class="reserved">else</span> <span class="reserved">if</span> (document.documentElement &amp;&amp; document.documentElement.scrollLeft){
969
    posx += document.documentElement.scrollLeft;
970
  }
971
  <span class="reserved">return</span> posx;
972
}
973

    
974
<span class="comment">/**
975
 * get the absolute position of a user event (e.g., a mousedown).
976
 * <span class="attrib">@param</span> e The user event.
977
 * <span class="attrib">@return</span> Left or top position.
978
 */</span>
979
<span class="reserved">function</span> getPageY(e){
980
  var posy = 0;
981
  <span class="reserved">if</span> (!e) var e = window.event;
982
  <span class="reserved">if</span> (e.pageY) {
983
    posy = e.pageY;
984
  }
985
  <span class="reserved">else</span> <span class="reserved">if</span> (e.clientY) {
986
    posy = e.clientY;
987
  }
988
  <span class="reserved">if</span> (document.body &amp;&amp; document.body.scrollTop){
989
    posy += document.body.scrollTop;
990
  }
991
  <span class="reserved">else</span> <span class="reserved">if</span> (document.documentElement &amp;&amp; document.documentElement.scrollTop){
992
    posy += document.documentElement.scrollTop;
993
  }
994
  <span class="reserved">return</span> posy;
995
}
996

    
997
<span class="comment">/**
998
 * parse comma-separated name=value argument pairs from the query string of the URL; the function stores name=value pairs in properties of an object and returns that object.
999
 * <span class="attrib">@return</span> args Array of arguments passed to page, in form args[argname] = value.
1000
 */</span>
1001
<span class="reserved">function</span> getArgs(){
1002
  var args = new Object();
1003
  var query = location.search.substring(1);
1004
  var pairs = query.split(<span class="literal">"&amp;"</span>);
1005
  <span class="reserved">for</span>(var i = 0; i &lt; pairs.length; i++) {
1006
    var pos = pairs[i].indexOf(<span class="literal">'='</span>);
1007
    <span class="reserved">if</span> (pos == -1) continue;
1008
    var argname = pairs[i].substring(0,pos);
1009
    var value = pairs[i].substring(pos+1);
1010
    args[argname] = unescape(value.replace(/\+/g, <span class="literal">" "</span>));
1011
  }
1012
  <span class="reserved">return</span> args;
1013
}
1014
<span class="comment">//initialize the array once</span>
1015
window.cgiArgs = getArgs();
1016

    
1017
<span class="comment">/**
1018
 * convert geographic x coordinate to screen coordinate.
1019
 * <span class="attrib">@param</span> context The context object.
1020
 * <span class="attrib">@param</span> xCoord The geographic x coordinate to be converted.
1021
 * <span class="attrib">@return</span> x the converted x coordinate.
1022
 */</span>
1023
<span class="reserved">function</span> getScreenX(context, xCoord){
1024
  bbox=context.getBoundingBox();
1025
  width=context.getWindowWidth();
1026
  bbox[0]=parseFloat(bbox[0]);
1027
  bbox[2]=parseFloat(bbox[2]);
1028
  var xfac = (width/(bbox[2]-bbox[0]));
1029
  x=xfac*(xCoord-bbox[0]);
1030
  <span class="reserved">return</span> x;
1031
}
1032

    
1033
<span class="comment">/**
1034
 * convert geographic y coordinate to screen coordinate.
1035
 * <span class="attrib">@param</span> context The context object.
1036
 * <span class="attrib">@param</span> yCoord The geographic x coordinate to be converted.
1037
 * <span class="attrib">@return</span> y the converted x coordinate.
1038
 */</span>
1039
<span class="reserved">function</span> getScreenY(context, yCoord){
1040
  var bbox=context.getBoundingBox();
1041
  var height=context.getWindowHeight();
1042
  bbox[1]=parseFloat(bbox[1]);
1043
  bbox[3]=parseFloat(bbox[3]);
1044
  var yfac = (heighteight/(bbox[3]-bbox[1]));
1045
  var y=height-(yfac*(pt.y-bbox[1]));
1046
  <span class="reserved">return</span> y;
1047
}
1048

    
1049
<span class="comment">/**
1050
 * convert screen x coordinate to geographic coordinate.
1051
 * <span class="attrib">@param</span> context The context object.
1052
 * <span class="attrib">@param</span> xCoord The screen x coordinate to be converted.
1053
 * <span class="attrib">@return</span> x the converted x coordinate.
1054
 */</span>
1055
<span class="reserved">function</span> getGeoCoordX(context, xCooord) {
1056
  var bbox=context.getBoundingBox();
1057
  var width=context.getWindowWidth();
1058
  bbox[0]=parseFloat(bbox[0]);
1059
  bbox[2]=parseFloat(bbox[2]);
1060
  var xfac = ((bbox[2]-bbox[0]) / width);
1061
  var x=bbox[0] + xfac*(xCoord);
1062
  <span class="reserved">return</span> x;
1063
}
1064

    
1065
<span class="comment">/**
1066
 * convert screen coordinate to screen coordinate.
1067
 * <span class="attrib">@param</span> context The context object.
1068
 * <span class="attrib">@param</span> yCoord The geographic y coordinate to be converted.
1069
 * <span class="attrib">@return</span> y the converted y coordinate.
1070
 */</span>
1071
<span class="reserved">function</span> getGeoCoordY(yCoord){
1072
  var bbox=context.getBoundingBox();
1073
  var height=context.getWindowHeight();
1074
  bbox[1]=parseFloat(bbox[1]);
1075
  bbox[3]=parseFloat(bbox[3]);
1076
  var yfac = ((bbox[3]-bbox[1]) / height);
1077
  var y=bbox[1] + yfac*(height-yCoord);
1078
  <span class="reserved">return</span> y;
1079
}
1080

    
1081
<span class="comment">/**
1082
 * create an element and append it to the document body element.
1083
 * <span class="attrib">@param</span> type The type of element to be created.
1084
 * <span class="attrib">@return</span> node The node created and appended.
1085
 */</span>
1086
<span class="reserved">function</span> makeElt(type) {
1087
  var node=document.createElement(type);
1088
  document.getElementsByTagName(<span class="literal">"body"</span>).item(0).appendChild(node);
1089
  <span class="reserved">return</span> node;
1090
}
1091
<span class="comment">
1092
// variable needed to determine if a popup window is currently open</span>
1093
var newWindow = <span class="literal">''</span>;
1094
<span class="comment">/**
1095
 * open a popup window, adapted from http://www.quirksmode.org/js/croswin.html
1096
 * <span class="attrib">@param</span> url The url of the page to be opened.
1097
 * <span class="attrib">@param</span> width Width of the popup window, in pixels.
1098
 * <span class="attrib">@param</span> height Height of the popup window, in pixels.
1099
 */</span>
1100
<span class="reserved">function</span> openPopup(url, width, height) {
1101
  <span class="reserved">if</span>(width == null) {
1102
    width = 300;
1103
  }
1104
  <span class="reserved">if</span>(height == null) {
1105
    height = 200;
1106
  }
1107
  <span class="reserved">if</span> (!newWindow.closed &amp;&amp; newWindow.location) {
1108
    newWindow.location.href = url;
1109
  }
1110
  <span class="reserved">else</span> {
1111
    newWindow=window.open(url,<span class="literal">'name'</span>,<span class="literal">'height='</span> + height + <span class="literal">',width='</span> + width);
1112
    <span class="reserved">if</span> (!newWindow.opener) newwindow.opener = self;
1113
  }
1114
  <span class="reserved">if</span> (window.focus) {newWindow.focus()}
1115
  <span class="reserved">return</span> false;
1116
}
1117

    
1118
<span class="comment">/**
1119
 * write debugging info to a textbox onscreen.
1120
 * <span class="attrib">@param</span> output String to be output.
1121
 */</span>
1122
<span class="reserved">function</span> debug(output){
1123
  tarea=makeElt(<span class="literal">"textarea"</span>);
1124
  tarea.setAttribute(<span class="literal">"rows"</span>,<span class="literal">"3"</span>);
1125
  tarea.setAttribute(<span class="literal">"cols"</span>,<span class="literal">"40"</span>);
1126
  tnode=document.createTextNode(output);
1127
  tarea.appendChild(tnode);
1128
}
1129

    
1130
<span class="comment">/**
1131
 * determine and return the target element of an event.
1132
 * <span class="attrib">@param</span> evt The event.
1133
 * <span class="attrib">@return</span> elt The element.
1134
 */</span>
1135
<span class="reserved">function</span> returnTarget(evt){
1136
  evt = (evt) ? evt : ((window.event) ? window.event : <span class="literal">""</span>);
1137
  var elt=null;
1138
  <span class="reserved">if</span>(evt.target){
1139
    elt=evt.target;
1140
  }
1141
  <span class="reserved">else</span> <span class="reserved">if</span>(evt.srcElement){
1142
    elt=evt.srcElement;
1143
  }
1144
  <span class="reserved">return</span> elt;
1145
}
1146

    
1147
<span class="comment">/**
1148
 * attach an event to an element.
1149
 * <span class="attrib">@param</span> elementObject The object.
1150
 * <span class="attrib">@param</span> eventName The name of the event.
1151
 * <span class="attrib">@param</span> functionObject The function to be called.
1152
 */</span>
1153
<span class="reserved">function</span> addEvent(elementObject, eventName, functionObject) {
1154
  <span class="reserved">if</span>(document.addEventListener) {
1155
    elementObject.addEventListener(eventName, functionObject, false);
1156
  }
1157
  <span class="reserved">else</span> <span class="reserved">if</span>(document.attachEvent) {
1158
    elementObject.attachEvent(<span class="literal">"on"</span> + eventName, functionObject);
1159
  }
1160
}
1161

    
1162
<span class="comment">/**
1163
 * handle event attached to an object.
1164
 * <span class="attrib">@param</span> evt The event.
1165
 */</span>
1166
<span class="reserved">function</span> handleEventWithObject(evt){
1167
  var elt = returnTarget(evt);
1168
  var obj = elt.ownerObj;
1169
  <span class="reserved">if</span> (obj!=null) obj.handleEvent(evt);
1170
}
1171

    
1172
<span class="comment">/**
1173
 * Show a message if the debug property of the object has been set.
1174
 * <span class="attrib">@param</span> object  the object that possibly has the debug property set
1175
 * <span class="attrib">@param</span> message the message to show
1176
 */</span>
1177
<span class="reserved">function</span> mbDebugMessage(object, message)
1178
{
1179
  <span class="reserved">if</span> (object &amp;&amp; object.debug) {
1180
    alert(message);
1181
  }
1182
}
1183

    
1184
<span class="comment">/**
1185
 * Get a message from the &lt;code&gt;widgetText&lt;/code&gt; file and format it if extra
1186
 * arguments are passed.
1187
 * <span class="attrib">@param</span> messageKey       the message key within the message node
1188
 * <span class="attrib">@param</span> varArgs          optional extra parameters for formatting the message
1189
 * <span class="attrib">@return</span>                 &lt;code&gt;"NoMsgsFound"&lt;/code&gt; if the &lt;code&gt;widgetText&lt;/code&gt; file is not found,&lt;br/&gt;
1190
 *                         the &lt;code&gt;messageKey&lt;/code&gt; if the message key was not found within the message node,&lt;br/&gt;
1191
 *                         the (formatted) message if it was found
1192
 */</span>
1193
<span class="reserved">function</span> mbGetMessage(messageKey)
1194
{
1195
  var message = <span class="literal">"NoMsgsFound"</span>;
1196
  <span class="reserved">if</span> (config.widgetText) {
1197
    var msgKeyXpath = <span class="literal">"/mb:WidgetText/mb:messages/mb:"</span> + messageKey;
1198
    var msgKeyNodes = config.widgetText.selectNodes(msgKeyXpath);
1199
    <span class="reserved">if</span> (!msgKeyNodes || msgKeyNodes.length == 0) {
1200
<span class="comment">      // Message not found, fall back to message key</span>
1201
      message = messageKey;
1202
    }
1203
    <span class="reserved">else</span> {
1204
<span class="comment">      // Message found; pick last one so user can override messages</span>
1205
      message = getNodeValue(msgKeyNodes.item(msgKeyNodes.length-1));
1206
      <span class="reserved">if</span> (arguments[mbGetMessage.length]) {
1207
<span class="comment">        // Extra arguments, format message</span>
1208
        var varArgs = [].slice.call(arguments, mbGetMessage.length);
1209
        varArgs.unshift(message);
1210
        message = mbFormatMessage.apply(<span class="reserved">this</span>, varArgs);
1211
      }
1212
    }
1213
  }
1214
  <span class="reserved">return</span> message;
1215
}
1216

    
1217
<span class="comment">/**
1218
 * Format a message with the extra arguments. &lt;br/&gt;
1219
 * E.g. if called as: &lt;code&gt;mbFormatMessage("{1} is {0} {2}, {1}", "a good", "this", "test")&lt;/code&gt;&lt;br/&gt;
1220
 * the formatted message returned is: &lt;code&gt;"this is a good test, this"&lt;/code&gt;
1221
 * <span class="attrib">@param</span> messageFormat the message format string
1222
 * <span class="attrib">@param</span> varArgs       optional extra parameters for formatting the message
1223
 * <span class="attrib">@return</span>              the formatted message
1224
 */</span>
1225
<span class="reserved">function</span> mbFormatMessage(messageFormat)
1226
{
1227
  var message = messageFormat;
1228
  var varArgs = [].slice.call(arguments, mbFormatMessage.length);
1229
  <span class="reserved">for</span> (var i=0; i&lt;varArgs.length; i++) {
1230
    var parm = new RegExp(<span class="literal">"\\{"</span> + i + <span class="literal">"\\}"</span>, <span class="literal">"g"</span>);
1231
    message = message.replace(parm, varArgs[i]);
1232
  }
1233
  <span class="reserved">return</span> message;
1234
}
1235

    
1236
<span class="comment">/**
1237
 * extract a style from a SLD node of an XML doc and return
1238
 * it as url parameter for a WMS request
1239
 * <span class="attrib">@param</span> node XML node containing the styled layer descriptor
1240
 * <span class="attrib">@return</span> WMS-compliant SLD URL parameters as array
1241
 */</span>
1242
<span class="reserved">function</span> sld2UrlParam(node) {
1243
  var params=new Array();
1244
  <span class="reserved">if</span> (node) {
1245
    var sld = node.selectSingleNode(<span class="literal">"wmc:SLD"</span>);
1246
    var name = node.selectSingleNode(<span class="literal">"wmc:Name"</span>);
1247
    <span class="reserved">if</span>(sld) {
1248
      <span class="reserved">if</span>(sld.selectSingleNode(<span class="literal">"wmc:OnlineResource"</span>)) {	
1249
        params.sld=sld.selectSingleNode(<span class="literal">"wmc:OnlineResource"</span>).getAttribute(<span class="literal">"xlink:href"</span>);
1250
      } <span class="reserved">else</span> <span class="reserved">if</span>(sld.selectSingleNode(<span class="literal">"wmc:FeatureTypeStyle"</span>)) {
1251
        params.sld=(new XMLSerializer()).serializeToString(sld.selectSingleNode(<span class="literal">"wmc:FeatureTypeStyle"</span>));
1252
      } <span class="reserved">else</span> <span class="reserved">if</span>(sld.selectSingleNode(<span class="literal">"wmc:StyledLayerDescriptor"</span>)) { 
1253
        params.sld_body=(new XMLSerializer()).serializeToString(sld.selectSingleNode(<span class="literal">"wmc:StyledLayerDescriptor"</span>));    		
1254
      }
1255
    } <span class="reserved">else</span> <span class="reserved">if</span>(name) {
1256
      params.styles = getNodeValue(name) || <span class="literal">""</span>;	
1257
    }
1258
  }  
1259
  <span class="reserved">return</span> params;
1260
}
1261

    
1262
<span class="comment">/**
1263
 * extract a style from a SLD node of an XML doc and return
1264
 * it as OpenLayers style
1265
 * <span class="attrib">@param</span> objRef reference to the map widget that will use the style
1266
 * <span class="attrib">@param</span> node XML node containing the styled layer descriptor
1267
 * <span class="attrib">@return</span> OpenLayers style object
1268
 */</span>
1269
<span class="reserved">function</span> sld2OlStyle(node) {
1270
<span class="comment">  // OpenLayers SLD parsing</span>
1271
  <span class="reserved">if</span> (node) {
1272
    var ruleNode = node.selectSingleNode(<span class="literal">"wmc:SLD/sld:FeatureTypeStyle"</span>);
1273
    <span class="reserved">if</span> (ruleNode) {
1274
      var sld = new XMLSerializer().serializeToString(ruleNode);
1275
      var search = /&lt;([^:]*:?)StyledLayerDescriptor/;
1276
      <span class="reserved">if</span> (!search.test(sld)) {
1277
      	sld = sld.replace(/&lt;([^:]*:?)FeatureTypeStyle([^&gt;]*)&gt;(.*)$/,
1278
            <span class="literal">"&lt;$1StyledLayerDescriptor$2&gt;&lt;$1NamedLayer&gt;&lt;$1Name&gt;sld&lt;/$1Name&gt;&lt;$1UserStyle&gt;&lt;$1FeatureTypeStyle&gt;$3&lt;/$1UserStyle&gt;&lt;/$1NamedLayer&gt;&lt;/$1StyledLayerDescriptor&gt;"</span>);
1279
      }
1280
    }
1281
    var styles = new OpenLayers.Format.SLD().read(sld);
1282
    <span class="reserved">if</span> (styles) {
1283
      <span class="reserved">return</span> styles.namedLayers[<span class="literal">"sld"</span>].userStyles[0];
1284
    }
1285
  }
1286
<span class="comment">  
1287
  // fallback to native SLD parsing for older OwsContext docs</span>
1288
<span class="comment">  
1289
  // sld-conform default style</span>
1290
  var defaultStyle = {
1291
            fillColor: <span class="literal">"#808080"</span>,
1292
            fillOpacity: 1,
1293
            strokeColor: <span class="literal">"#000000"</span>,
1294
            strokeOpacity: 1,
1295
            strokeWidth: 1,
1296
            pointRadius: 6};
1297
            
1298
  var style1=OpenLayers.Util.extend(defaultStyle,OpenLayers.Feature.Vector.style[<span class="literal">"default"</span>]);
1299
  var value;
1300
  var styleSet=false;
1301

    
1302
  <span class="reserved">if</span> (node) {
1303
    value=node.selectSingleNode(<span class="literal">".//sld:ExternalGraphic/sld:OnlineResource/@xlink:href"</span>);
1304
    <span class="reserved">if</span>(value){
1305
      style1.externalGraphic=getNodeValue(value);
1306
      styleSet=true;
1307
    }
1308
    value=node.selectSingleNode(<span class="literal">".//sld:Fill/sld:CssParameter[@name='fill']"</span>);
1309
    <span class="reserved">if</span>(value){
1310
      style1.fillColor=getNodeValue(value);
1311
      styleSet=true;
1312
    }
1313
    value=node.selectSingleNode(<span class="literal">".//sld:Fill/sld:CssParameter[@name='fill-opacity']"</span>);
1314
    <span class="reserved">if</span>(value){
1315
      style1.fillOpacity=getNodeValue(value);
1316
      styleSet=true;
1317
    } <span class="reserved">else</span> {
1318
<span class="comment">      // opacity eg. for externalGraphic</span>
1319
      value=node.selectSingleNode(<span class="literal">".//sld:Opacity/sld:Literal"</span>);
1320
      <span class="reserved">if</span> (value){
1321
        style1.fillOpacity=getNodeValue(value);
1322
        styleSet=true;
1323
      }
1324
    }
1325
  
1326
    value=node.selectSingleNode(<span class="literal">".//sld:Stroke/sld:CssParameter[@name='stroke']"</span>);
1327
    <span class="reserved">if</span>(value){
1328
      style1.strokeColor=getNodeValue(value);
1329
      styleSet=true;
1330
    }
1331
    
1332
    value=node.selectSingleNode(<span class="literal">".//sld:Stroke/sld:CssParameter[@name='stroke-opacity']"</span>);
1333
    <span class="reserved">if</span>(value){
1334
      style1.strokeOpacity=getNodeValue(value);
1335
      styleSet=true;
1336
    }
1337
    
1338
    value=node.selectSingleNode(<span class="literal">".//sld:Stroke/sld:CssParameter[@name='stroke-width']"</span>);
1339
    <span class="reserved">if</span>(value){
1340
      style1.strokeWidth=getNodeValue(value);
1341
      styleSet=true;
1342
    }
1343
    
1344
    value=node.selectSingleNode(<span class="literal">".//sld:Size"</span>);
1345
    <span class="reserved">if</span>(value){
1346
      style1.pointRadius=getNodeValue(value);
1347
      styleSet=true;
1348
    }
1349
  }
1350
  
1351
  <span class="reserved">if</span>(!styleSet)style1=null;
1352
  <span class="reserved">return</span> style1;
1353
}
1354

    
1355
<span class="comment">/**
1356
 * Dynamically loads a stylesheet into the html page.
1357
 * <span class="attrib">@param</span> cssFileName name of the file to load, relative to config.skinDir
1358
 */</span>
1359
<span class="reserved">function</span> loadCss(cssFileName) {
1360
<span class="comment">  // queue the request if we do not know the skinDir yet</span>
1361
  <span class="reserved">if</span> (typeof config == <span class="literal">"undefined"</span> || typeof config.skinDir != <span class="literal">"string"</span>) {
1362
    <span class="reserved">if</span> (!mapbuilder.cssToLoad) {
1363
      mapbuilder.cssToLoad = [];
1364
    }
1365
    mapbuilder.cssToLoad.push(cssFileName);
1366
    <span class="reserved">return</span>;
1367
  }
1368
  
1369
  var id = cssFileName.match(/[^\/]*$/).toString().replace(/./, <span class="literal">'_'</span>);
1370
  <span class="reserved">if</span> (!document.getElementById(id)) {
1371
    var cssNode = document.createElement(<span class="literal">'link'</span>);
1372
    cssNode.setAttribute(<span class="literal">'id'</span>, id);
1373
    cssNode.setAttribute(<span class="literal">'rel'</span>, <span class="literal">'stylesheet'</span>);
1374
    cssNode.setAttribute(<span class="literal">'type'</span>, <span class="literal">'text/css'</span>);
1375
    cssNode.setAttribute(<span class="literal">'href'</span>, config.skinDir+<span class="literal">'/'</span>+cssFileName);
1376
    document.getElementsByTagName(<span class="literal">'head'</span>)[0].appendChild(cssNode);
1377
  }
1378
}
1379

    
1380
<span class="comment">/**
1381
 * getNodevalue return value of node
1382
 * it as OpenLayers style
1383
 * <span class="attrib">@param</span> node 
1384
 * <span class="attrib">@return</span> return node's value
1385
 */</span>
1386
<span class="reserved">function</span> getNodeValue(sResult){
1387
  <span class="reserved">if</span>(sResult.nodeType == 1) <span class="reserved">return</span> sResult.firstChild ? sResult.firstChild.nodeValue : <span class="literal">""</span>;
1388
  <span class="reserved">if</span>(sResult.nodeType &lt; 5) <span class="reserved">return</span> sResult.nodeValue;
1389
  <span class="reserved">return</span> sResult;
1390
}
1391

    
1392
<span class="comment">/**
1393
 * Convenience method that is used to parse dom nodes.
1394
 * <span class="attrib">@param</span> domNode node to find the property in
1395
 * <span class="attrib">@param</span> propertyName string of the property name (including namespace prefix)
1396
 * <span class="attrib">@param</span> defaultValue value to return if property is not found (null by default)
1397
 * <span class="attrib">@return</span> the property value
1398
 */</span>
1399
Mapbuilder.getProperty = <span class="reserved">function</span>(domNode, propertyName, defaultValue) {
1400
  <span class="reserved">if</span> (typeof defaultValue == <span class="literal">"undefined"</span>) {
1401
    defaultValue = null;
1402
  }
1403
  var property = domNode.selectSingleNode(propertyName);
1404
  <span class="reserved">return</span> property ? getNodeValue(property) : defaultValue;
1405
}
1406

    
1407
<span class="comment">/**
1408
 * Convenience method to parse a string or number as a boolean value
1409
 * <span class="attrib">@param</span> value string (true/false) or number (1/0)
1410
 * <span class="attrib">@return</span> boolean value, default false
1411
 */</span>
1412
Mapbuilder.parseBoolean = <span class="reserved">function</span>(value) {
1413
  var result = false;
1414
  <span class="reserved">if</span> (!value) {
1415
    result = false;
1416
  } <span class="reserved">else</span> <span class="reserved">if</span> (value == 0) {
1417
    result = false;
1418
  } <span class="reserved">else</span> <span class="reserved">if</span> (value == 1) {
1419
      result = true;
1420
  } <span class="reserved">else</span> <span class="reserved">if</span> (value.match(/true/i)) {
1421
    result = true;
1422
  } <span class="reserved">else</span> <span class="reserved">if</span> (value.match(/false/i)){
1423
    <span class="reserved">return</span> false;
1424
  }
1425
  <span class="reserved">return</span> result;
1426
}
1427
</pre>
1428
	<hr>
1429

    
1430

    
1431

    
1432
<!-- ========== START OF NAVBAR ========== -->
1433
<a name="navbar_top"><!-- --></a>
1434
<table border="0" width="100%" cellpadding="1" cellspacing="0">
1435
<tr>
1436
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
1437
<a name="navbar_top_firstrow"><!-- --></a>
1438
<table border="0" cellpadding="0" cellspacing="3">
1439
  <tr align="center" valign="top">
1440
  
1441
  
1442
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
1443
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
1444
  
1445

    
1446
  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
1447
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
1448
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
1449
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
1450
  </tr>
1451
</table>
1452
</td>
1453
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
1454
<b><a href='http://mapbuilder.sourceforge.net'>Community Map Builder</a> 27 Apr 2008</b></em>
1455
</td>
1456
</tr>
1457

    
1458
<tr>
1459
<td bgcolor="white" class="NavBarCell2"><font size="-2">
1460
&nbsp;PREV&nbsp;
1461
&nbsp;NEXT</font></td>
1462
<td bgcolor="white" class="NavBarCell2"><font size="-2">
1463
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
1464
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
1465
&nbsp;&nbsp;
1466
<script>
1467
  <!--
1468
  if(window==top) {
1469
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
1470
  }
1471
  //-->
1472
</script>
1473
<noscript>
1474
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
1475
</noscript>
1476
</font></td>
1477
</tr>
1478
</table>
1479
<!-- =========== END OF NAVBAR =========== -->
1480

    
1481
<hr>
1482
<font size="-1">
1483

    
1484
</font>
1485
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Sun Apr 27 20:30:54 2008</div>
1486
</body>
1487
</html>
(299-299/316)