NameSpace: SGL_Registry.htm

File SGL_Registry.htm, 81.5 kB (added by randy, 6 years ago)

SGL Registry

Line 
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 <html><head><title></title><meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
3 <style>
4         table.dBug_array,table.dBug_object,table.dBug_resource,table.dBug_resourceC,table.dBug_xml {
5                 font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:12px;
6         }
7        
8         .dBug_arrayHeader,
9         .dBug_objectHeader,
10         .dBug_resourceHeader,
11         .dBug_resourceCHeader,
12         .dBug_xmlHeader
13                 { font-weight:bold; color:#FFFFFF; }
14        
15         /* array */
16         table.dBug_array { background-color:#006600; }
17         table.dBug_array td { background-color:#FFFFFF; }
18         table.dBug_array td.dBug_arrayHeader { background-color:#009900; }
19         table.dBug_array td.dBug_arrayKey { background-color:#CCFFCC; }
20        
21         /* object */
22         table.dBug_object { background-color:#0000CC; }
23         table.dBug_object td { background-color:#FFFFFF; }
24         table.dBug_object td.dBug_objectHeader { background-color:#4444CC; }
25         table.dBug_object td.dBug_objectKey { background-color:#CCDDFF; }
26        
27         /* resource */
28         table.dBug_resourceC { background-color:#884488; }
29         table.dBug_resourceC td { background-color:#FFFFFF; }
30         table.dBug_resourceC td.dBug_resourceCHeader { background-color:#AA66AA; }
31         table.dBug_resourceC td.dBug_resourceCKey { background-color:#FFDDFF; }
32        
33         /* resource */
34         table.dBug_resource { background-color:#884488; }
35         table.dBug_resource td { background-color:#FFFFFF; }
36         table.dBug_resource td.dBug_resourceHeader { background-color:#AA66AA; }
37         table.dBug_resource td.dBug_resourceKey { background-color:#FFDDFF; }
38         table.dBug_resource td.dBug_resourceKey2 { background-color:#FFDDFF; }
39        
40         /* xml */
41         table.dBug_xml { background-color:#888888; }
42         table.dBug_xml td { background-color:#FFFFFF; }
43         table.dBug_xml td.dBug_xmlHeader { background-color:#AAAAAA; }
44         table.dBug_xml td.dBug_xmlKey { background-color:#DDDDDD; }
45 </style>
46 <script type="text/javascript">
47 /*  Prototype JavaScript framework, version 1.4.0
48  *  (c) 2005 Sam Stephenson <sam@conio.net>
49  *
50  *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
51  *  against the source tree, available from the Prototype darcs repository.
52  *
53  *  Prototype is freely distributable under the terms of an MIT-style license.
54  *
55  *  For details, see the Prototype web site: http://prototype.conio.net/
56  *
57 /*--------------------------------------------------------------------------*/
58
59 var Prototype = {
60   Version: '1.4.0',
61   ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
62
63   emptyFunction: function() {},
64   K: function(x) {return x}
65 }
66
67 var Class = {
68   create: function() {
69     return function() {
70       this.initialize.apply(this, arguments);
71     }
72   }
73 }
74
75 var Abstract = new Object();
76
77 Object.extend = function(destination, source) {
78   for (property in source) {
79     destination[property] = source[property];
80   }
81   return destination;
82 }
83
84 Object.inspect = function(object) {
85   try {
86     if (object == undefined) return 'undefined';
87     if (object == null) return 'null';
88     return object.inspect ? object.inspect() : object.toString();
89   } catch (e) {
90     if (e instanceof RangeError) return '...';
91     throw e;
92   }
93 }
94
95 Function.prototype.bind = function() {
96   var __method = this, args = $A(arguments), object = args.shift();
97   return function() {
98     return __method.apply(object, args.concat($A(arguments)));
99   }
100 }
101
102 Function.prototype.bindAsEventListener = function(object) {
103   var __method = this;
104   return function(event) {
105     return __method.call(object, event || window.event);
106   }
107 }
108
109 Object.extend(Number.prototype, {
110   toColorPart: function() {
111     var digits = this.toString(16);
112     if (this < 16) return '0' + digits;
113     return digits;
114   },
115
116   succ: function() {
117     return this + 1;
118   },
119
120   times: function(iterator) {
121     $R(0, this, true).each(iterator);
122     return this;
123   }
124 });
125
126 var Try = {
127   these: function() {
128     var returnValue;
129
130     for (var i = 0; i < arguments.length; i++) {
131       var lambda = arguments[i];
132       try {
133         returnValue = lambda();
134         break;
135       } catch (e) {}
136     }
137
138     return returnValue;
139   }
140 }
141
142 /*--------------------------------------------------------------------------*/
143
144 var PeriodicalExecuter = Class.create();
145 PeriodicalExecuter.prototype = {
146   initialize: function(callback, frequency) {
147     this.callback = callback;
148     this.frequency = frequency;
149     this.currentlyExecuting = false;
150
151     this.registerCallback();
152   },
153
154   registerCallback: function() {
155     setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
156   },
157
158   onTimerEvent: function() {
159     if (!this.currentlyExecuting) {
160       try {
161         this.currentlyExecuting = true;
162         this.callback();
163       } finally {
164         this.currentlyExecuting = false;
165       }
166     }
167   }
168 }
169
170 /*--------------------------------------------------------------------------*/
171
172 function $() {
173   var elements = new Array();
174
175   for (var i = 0; i < arguments.length; i++) {
176     var element = arguments[i];
177     if (typeof element == 'string')
178       element = document.getElementById(element);
179
180     if (arguments.length == 1)
181       return element;
182
183     elements.push(element);
184   }
185
186   return elements;
187 }
188 Object.extend(String.prototype, {
189   stripTags: function() {
190     return this.replace(/<\/?[^>]+>/gi, '');
191   },
192
193   stripScripts: function() {
194     return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
195   },
196
197   extractScripts: function() {
198     var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
199     var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
200     return (this.match(matchAll) || []).map(function(scriptTag) {
201       return (scriptTag.match(matchOne) || ['', ''])[1];
202     });
203   },
204
205   evalScripts: function() {
206     return this.extractScripts().map(eval);
207   },
208
209   escapeHTML: function() {
210     var div = document.createElement('div');
211     var text = document.createTextNode(this);
212     div.appendChild(text);
213     return div.innerHTML;
214   },
215
216   unescapeHTML: function() {
217     var div = document.createElement('div');
218     div.innerHTML = this.stripTags();
219     return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
220   },
221
222   toQueryParams: function() {
223     var pairs = this.match(/^\??(.*)$/)[1].split('&');
224     return pairs.inject({}, function(params, pairString) {
225       var pair = pairString.split('=');
226       params[pair[0]] = pair[1];
227       return params;
228     });
229   },
230
231   toArray: function() {
232     return this.split('');
233   },
234
235   camelize: function() {
236     var oStringList = this.split('-');
237     if (oStringList.length == 1) return oStringList[0];
238
239     var camelizedString = this.indexOf('-') == 0
240       ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
241       : oStringList[0];
242
243     for (var i = 1, len = oStringList.length; i < len; i++) {
244       var s = oStringList[i];
245       camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
246     }
247
248     return camelizedString;
249   },
250
251   inspect: function() {
252     return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
253   }
254 });
255
256 String.prototype.parseQuery = String.prototype.toQueryParams;
257
258 var $break    = new Object();
259 var $continue = new Object();
260
261 var Enumerable = {
262   each: function(iterator) {
263     var index = 0;
264     try {
265       this._each(function(value) {
266         try {
267           iterator(value, index++);
268         } catch (e) {
269           if (e != $continue) throw e;
270         }
271       });
272     } catch (e) {
273       if (e != $break) throw e;
274     }
275   },
276
277   all: function(iterator) {
278     var result = true;
279     this.each(function(value, index) {
280       result = result && !!(iterator || Prototype.K)(value, index);
281       if (!result) throw $break;
282     });
283     return result;
284   },
285
286   any: function(iterator) {
287     var result = true;
288     this.each(function(value, index) {
289       if (result = !!(iterator || Prototype.K)(value, index))
290         throw $break;
291     });
292     return result;
293   },
294
295   collect: function(iterator) {
296     var results = [];
297     this.each(function(value, index) {
298       results.push(iterator(value, index));
299     });
300     return results;
301   },
302
303   detect: function (iterator) {
304     var result;
305     this.each(function(value, index) {
306       if (iterator(value, index)) {
307         result = value;
308         throw $break;
309       }
310     });
311     return result;
312   },
313
314   findAll: function(iterator) {
315     var results = [];
316     this.each(function(value, index) {
317       if (iterator(value, index))
318         results.push(value);
319     });
320     return results;
321   },
322
323   grep: function(pattern, iterator) {
324     var results = [];
325     this.each(function(value, index) {
326       var stringValue = value.toString();
327       if (stringValue.match(pattern))
328         results.push((iterator || Prototype.K)(value, index));
329     })
330     return results;
331   },
332
333   include: function(object) {
334     var found = false;
335     this.each(function(value) {
336       if (value == object) {
337         found = true;
338         throw $break;
339       }
340     });
341     return found;
342   },
343
344   inject: function(memo, iterator) {
345     this.each(function(value, index) {
346       memo = iterator(memo, value, index);
347     });
348     return memo;
349   },
350
351   invoke: function(method) {
352     var args = $A(arguments).slice(1);
353     return this.collect(function(value) {
354       return value[method].apply(value, args);
355     });
356   },
357
358   max: function(iterator) {
359     var result;
360     this.each(function(value, index) {
361       value = (iterator || Prototype.K)(value, index);
362       if (value >= (result || value))
363         result = value;
364     });
365     return result;
366   },
367
368   min: function(iterator) {
369     var result;
370     this.each(function(value, index) {
371       value = (iterator || Prototype.K)(value, index);
372       if (value <= (result || value))
373         result = value;
374     });
375     return result;
376   },
377
378   partition: function(iterator) {
379     var trues = [], falses = [];
380     this.each(function(value, index) {
381       ((iterator || Prototype.K)(value, index) ?
382         trues : falses).push(value);
383     });
384     return [trues, falses];
385   },
386
387   pluck: function(property) {
388     var results = [];
389     this.each(function(value, index) {
390       results.push(value[property]);
391     });
392     return results;
393   },
394
395   reject: function(iterator) {
396     var results = [];
397     this.each(function(value, index) {
398       if (!iterator(value, index))
399         results.push(value);
400     });
401     return results;
402   },
403
404   sortBy: function(iterator) {
405     return this.collect(function(value, index) {
406       return {value: value, criteria: iterator(value, index)};
407     }).sort(function(left, right) {
408       var a = left.criteria, b = right.criteria;
409       return a < b ? -1 : a > b ? 1 : 0;
410     }).pluck('value');
411   },
412
413   toArray: function() {
414     return this.collect(Prototype.K);
415   },
416
417   zip: function() {
418     var iterator = Prototype.K, args = $A(arguments);
419     if (typeof args.last() == 'function')
420       iterator = args.pop();
421
422     var collections = [this].concat(args).map($A);
423     return this.map(function(value, index) {
424       iterator(value = collections.pluck(index));
425       return value;
426     });
427   },
428
429   inspect: function() {
430     return '#<Enumerable:' + this.toArray().inspect() + '>';
431   }
432 }
433
434 Object.extend(Enumerable, {
435   map:     Enumerable.collect,
436   find:    Enumerable.detect,
437   select:  Enumerable.findAll,
438   member:  Enumerable.include,
439   entries: Enumerable.toArray
440 });
441 var $A = Array.from = function(iterable) {
442   if (!iterable) return [];
443   if (iterable.toArray) {
444     return iterable.toArray();
445   } else {
446     var results = [];
447     for (var i = 0; i < iterable.length; i++)
448       results.push(iterable[i]);
449     return results;
450   }
451 }
452
453 Object.extend(Array.prototype, Enumerable);
454
455 Array.prototype._reverse = Array.prototype.reverse;
456
457 Object.extend(Array.prototype, {
458   _each: function(iterator) {
459     for (var i = 0; i < this.length; i++)
460       iterator(this[i]);
461   },
462
463   clear: function() {
464     this.length = 0;
465     return this;
466   },
467
468   first: function() {
469     return this[0];
470   },
471
472   last: function() {
473     return this[this.length - 1];
474   },
475
476   compact: function() {
477     return this.select(function(value) {
478       return value != undefined || value != null;
479     });
480   },
481
482   flatten: function() {
483     return this.inject([], function(array, value) {
484       return array.concat(value.constructor == Array ?
485         value.flatten() : [value]);
486     });
487   },
488
489   without: function() {
490     var values = $A(arguments);
491     return this.select(function(value) {
492       return !values.include(value);
493     });
494   },
495
496   indexOf: function(object) {
497     for (var i = 0; i < this.length; i++)
498       if (this[i] == object) return i;
499     return -1;
500   },
501
502   reverse: function(inline) {
503     return (inline !== false ? this : this.toArray())._reverse();
504   },
505
506   shift: function() {
507     var result = this[0];
508     for (var i = 0; i < this.length - 1; i++)
509       this[i] = this[i + 1];
510     this.length--;
511     return result;
512   },
513
514   inspect: function() {
515     return '[' + this.map(Object.inspect).join(', ') + ']';
516   }
517 });
518 var Hash = {
519   _each: function(iterator) {
520     for (key in this) {
521       var value = this[key];
522       if (typeof value == 'function') continue;
523
524       var pair = [key, value];
525       pair.key = key;
526       pair.value = value;
527       iterator(pair);
528     }
529   },
530
531   keys: function() {
532     return this.pluck('key');
533   },
534
535   values: function() {
536     return this.pluck('value');
537   },
538
539   merge: function(hash) {
540     return $H(hash).inject($H(this), function(mergedHash, pair) {
541       mergedHash[pair.key] = pair.value;
542       return mergedHash;
543     });
544   },
545
546   toQueryString: function() {
547     return this.map(function(pair) {
548       return pair.map(encodeURIComponent).join('=');
549     }).join('&');
550   },
551
552   inspect: function() {
553     return '#<Hash:{' + this.map(function(pair) {
554       return pair.map(Object.inspect).join(': ');
555     }).join(', ') + '}>';
556   }
557 }
558
559 function $H(object) {
560   var hash = Object.extend({}, object || {});
561   Object.extend(hash, Enumerable);
562   Object.extend(hash, Hash);
563   return hash;
564 }
565 ObjectRange = Class.create();
566 Object.extend(ObjectRange.prototype, Enumerable);
567 Object.extend(ObjectRange.prototype, {
568   initialize: function(start, end, exclusive) {
569     this.start = start;
570     this.end = end;
571     this.exclusive = exclusive;
572   },
573
574   _each: function(iterator) {
575     var value = this.start;
576     do {
577       iterator(value);
578       value = value.succ();
579     } while (this.include(value));
580   },
581
582   include: function(value) {
583     if (value < this.start)
584       return false;
585     if (this.exclusive)
586       return value < this.end;
587     return value <= this.end;
588   }
589 });
590
591 var $R = function(start, end, exclusive) {
592   return new ObjectRange(start, end, exclusive);
593 }
594
595 var Ajax = {
596   getTransport: function() {
597     return Try.these(
598       function() {return new ActiveXObject('Msxml2.XMLHTTP')},
599       function() {return new ActiveXObject('Microsoft.XMLHTTP')},
600       function() {return new XMLHttpRequest()}
601     ) || false;
602   },
603
604   activeRequestCount: 0
605 }
606
607 Ajax.Responders = {
608   responders: [],
609
610   _each: function(iterator) {
611     this.responders._each(iterator);
612   },
613
614   register: function(responderToAdd) {
615     if (!this.include(responderToAdd))
616       this.responders.push(responderToAdd);
617   },
618
619   unregister: function(responderToRemove) {
620     this.responders = this.responders.without(responderToRemove);
621   },
622
623   dispatch: function(callback, request, transport, json) {
624     this.each(function(responder) {
625       if (responder[callback] && typeof responder[callback] == 'function') {
626         try {
627           responder[callback].apply(responder, [request, transport, json]);
628         } catch (e) {}
629       }
630     });
631   }
632 };
633
634 Object.extend(Ajax.Responders, Enumerable);
635
636 Ajax.Responders.register({
637   onCreate: function() {
638     Ajax.activeRequestCount++;
639   },
640
641   onComplete: function() {
642     Ajax.activeRequestCount--;
643   }
644 });
645
646 Ajax.Base = function() {};
647 Ajax.Base.prototype = {
648   setOptions: function(options) {
649     this.options = {
650       method:       'post',
651       asynchronous: true,
652       parameters:   ''
653     }
654     Object.extend(this.options, options || {});
655   },
656
657   responseIsSuccess: function() {
658     return this.transport.status == undefined
659         || this.transport.status == 0
660         || (this.transport.status >= 200 && this.transport.status < 300);
661   },
662
663   responseIsFailure: function() {
664     return !this.responseIsSuccess();
665   }
666 }
667
668 Ajax.Request = Class.create();
669 Ajax.Request.Events =
670   ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
671
672 Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
673   initialize: function(url, options) {
674     this.transport = Ajax.getTransport();
675     this.setOptions(options);
676     this.request(url);
677   },
678
679   request: function(url) {
680     var parameters = this.options.parameters || '';
681     if (parameters.length > 0) parameters += '&_=';
682
683     try {
684       this.url = url;
685       if (this.options.method == 'get' && parameters.length > 0)
686         this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
687
688       Ajax.Responders.dispatch('onCreate', this, this.transport);
689
690       this.transport.open(this.options.method, this.url,
691         this.options.asynchronous);
692
693       if (this.options.asynchronous) {
694         this.transport.onreadystatechange = this.onStateChange.bind(this);
695         setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
696       }
697
698       this.setRequestHeaders();
699
700       var body = this.options.postBody ? this.options.postBody : parameters;
701       this.transport.send(this.options.method == 'post' ? body : null);
702
703     } catch (e) {
704       this.dispatchException(e);
705     }
706   },
707
708   setRequestHeaders: function() {
709     var requestHeaders =
710       ['X-Requested-With', 'XMLHttpRequest',
711        'X-Prototype-Version', Prototype.Version];
712
713     if (this.options.method == 'post') {
714       requestHeaders.push('Content-type',
715         'application/x-www-form-urlencoded');
716
717       /* Force "Connection: close" for Mozilla browsers to work around
718        * a bug where XMLHttpReqeuest sends an incorrect Content-length
719        * header. See Mozilla Bugzilla #246651.
720        */
721       if (this.transport.overrideMimeType)
722         requestHeaders.push('Connection', 'close');
723     }
724
725     if (this.options.requestHeaders)
726       requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
727
728     for (var i = 0; i < requestHeaders.length; i += 2)
729       this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
730   },
731
732   onStateChange: function() {
733     var readyState = this.transport.readyState;
734     if (readyState != 1)
735       this.respondToReadyState(this.transport.readyState);
736   },
737
738   header: function(name) {
739     try {
740       return this.transport.getResponseHeader(name);
741     } catch (e) {}
742   },
743
744   evalJSON: function() {
745     try {
746       return eval(this.header('X-JSON'));
747     } catch (e) {}
748   },
749
750   evalResponse: function() {
751     try {
752       return eval(this.transport.responseText);
753     } catch (e) {
754       this.dispatchException(e);
755     }
756   },
757
758   respondToReadyState: function(readyState) {
759     var event = Ajax.Request.Events[readyState];
760     var transport = this.transport, json = this.evalJSON();
761
762     if (event == 'Complete') {
763       try {
764         (this.options['on' + this.transport.status]
765          || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
766          || Prototype.emptyFunction)(transport, json);
767       } catch (e) {
768         this.dispatchException(e);
769       }
770
771       if ((this.header('Content-type') || '').match(/^text\/javascript/i))
772         this.evalResponse();
773     }
774
775     try {
776       (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
777       Ajax.Responders.dispatch('on' + event, this, transport, json);
778     } catch (e) {
779       this.dispatchException(e);
780     }
781
782     /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
783     if (event == 'Complete')
784       this.transport.onreadystatechange = Prototype.emptyFunction;
785   },
786
787   dispatchException: function(exception) {
788     (this.options.onException || Prototype.emptyFunction)(this, exception);
789     Ajax.Responders.dispatch('onException', this, exception);
790   }
791 });
792
793 Ajax.Updater = Class.create();
794
795 Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
796   initialize: function(container, url, options) {
797     this.containers = {
798       success: container.success ? $(container.success) : $(container),
799       failure: container.failure ? $(container.failure) :
800         (container.success ? null : $(container))
801     }
802
803     this.transport = Ajax.getTransport();
804     this.setOptions(options);
805
806     var onComplete = this.options.onComplete || Prototype.emptyFunction;
807     this.options.onComplete = (function(transport, object) {
808       this.updateContent();
809       onComplete(transport, object);
810     }).bind(this);
811
812     this.request(url);
813   },
814
815   updateContent: function() {
816     var receiver = this.responseIsSuccess() ?
817       this.containers.success : this.containers.failure;
818     var response = this.transport.responseText;
819
820     if (!this.options.evalScripts)
821       response = response.stripScripts();
822
823     if (receiver) {
824       if (this.options.insertion) {
825         new this.options.insertion(receiver, response);
826       } else {
827         Element.update(receiver, response);
828       }
829     }
830
831     if (this.responseIsSuccess()) {
832       if (this.onComplete)
833         setTimeout(this.onComplete.bind(this), 10);
834     }
835   }
836 });
837
838 Ajax.PeriodicalUpdater = Class.create();
839 Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
840   initialize: function(container, url, options) {
841     this.setOptions(options);
842     this.onComplete = this.options.onComplete;
843
844     this.frequency = (this.options.frequency || 2);
845     this.decay = (this.options.decay || 1);
846
847     this.updater = {};
848     this.container = container;
849     this.url = url;
850
851     this.start();
852   },
853
854   start: function() {
855     this.options.onComplete = this.updateComplete.bind(this);
856     this.onTimerEvent();
857   },
858
859   stop: function() {
860     this.updater.onComplete = undefined;
861     clearTimeout(this.timer);
862     (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
863   },
864
865   updateComplete: function(request) {
866     if (this.options.decay) {
867       this.decay = (request.responseText == this.lastText ?
868         this.decay * this.options.decay : 1);
869
870       this.lastText = request.responseText;
871     }
872     this.timer = setTimeout(this.onTimerEvent.bind(this),
873       this.decay * this.frequency * 1000);
874   },
875
876   onTimerEvent: function() {
877     this.updater = new Ajax.Updater(this.container, this.url, this.options);
878   }
879 });
880 document.getElementsByClassName = function(className, parentElement) {
881   var children = ($(parentElement) || document.body).getElementsByTagName('*');
882   return $A(children).inject([], function(elements, child) {
883     if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
884       elements.push(child);
885     return elements;
886   });
887 }
888
889 /*--------------------------------------------------------------------------*/
890
891 if (!window.Element) {
892   var Element = new Object();
893 }
894
895 Object.extend(Element, {
896   visible: function(element) {
897     return $(element).style.display != 'none';
898   },
899
900   toggle: function() {
901     for (var i = 0; i < arguments.length; i++) {
902       var element = $(arguments[i]);
903       Element[Element.visible(element) ? 'hide' : 'show'](element);
904     }
905   },
906
907   hide: function() {
908     for (var i = 0; i < arguments.length; i++) {
909       var element = $(arguments[i]);
910       element.style.display = 'none';
911     }
912   },
913
914   show: function() {
915     for (var i = 0; i < arguments.length; i++) {
916       var element = $(arguments[i]);
917       element.style.display = '';
918     }
919   },
920
921   remove: function(element) {
922     element = $(element);
923     element.parentNode.removeChild(element);
924   },
925
926   update: function(element, html) {
927     $(element).innerHTML = html.stripScripts();
928     setTimeout(function() {html.evalScripts()}, 10);
929   },
930
931   getHeight: function(element) {
932     element = $(element);
933     return element.offsetHeight;
934   },
935
936   classNames: function(element) {
937     return new Element.ClassNames(element);
938   },
939
940   hasClassName: function(element, className) {
941     if (!(element = $(element))) return;
942     return Element.classNames(element).include(className);
943   },
944
945   addClassName: function(element, className) {
946     if (!(element = $(element))) return;
947     return Element.classNames(element).add(className);
948   },
949
950   removeClassName: function(element, className) {
951     if (!(element = $(element))) return;
952     return Element.classNames(element).remove(className);
953   },
954
955   // removes whitespace-only text node children
956   cleanWhitespace: function(element) {
957     element = $(element);
958     for (var i = 0; i < element.childNodes.length; i++) {
959       var node = element.childNodes[i];
960       if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
961         Element.remove(node);
962     }
963   },
964
965   empty: function(element) {
966     return $(element).innerHTML.match(/^\s*$/);
967   },
968
969   scrollTo: function(element) {
970     element = $(element);
971     var x = element.x ? element.x : element.offsetLeft,
972         y = element.y ? element.y : element.offsetTop;
973     window.scrollTo(x, y);
974   },
975
976   getStyle: function(element, style) {
977     element = $(element);
978     var value = element.style[style.camelize()];
979     if (!value) {
980       if (document.defaultView && document.defaultView.getComputedStyle) {
981         var css = document.defaultView.getComputedStyle(element, null);
982         value = css ? css.getPropertyValue(style) : null;
983       } else if (element.currentStyle) {
984         value = element.currentStyle[style.camelize()];
985       }
986     }
987
988     if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
989       if (Element.getStyle(element, 'position') == 'static') value = 'auto';
990
991     return value == 'auto' ? null : value;
992   },
993
994   setStyle: function(element, style) {
995     element = $(element);
996     for (name in style)
997       element.style[name.camelize()] = style[name];
998   },
999
1000   getDimensions: function(element) {
1001     element = $(element);
1002     if (Element.getStyle(element, 'display') != 'none')
1003       return {width: element.offsetWidth, height: element.offsetHeight};
1004
1005     // All *Width and *Height properties give 0 on elements with display none,
1006     // so enable the element temporarily
1007     var els = element.style;
1008     var originalVisibility = els.visibility;
1009     var originalPosition = els.position;
1010     els.visibility = 'hidden';
1011     els.position = 'absolute';
1012     els.display = '';
1013     var originalWidth = element.clientWidth;
1014     var originalHeight = element.clientHeight;
1015     els.display = 'none';
1016     els.position = originalPosition;
1017     els.visibility = originalVisibility;
1018     return {width: originalWidth, height: originalHeight};
1019   },
1020
1021   makePositioned: function(element) {
1022     element = $(element);
1023     var pos = Element.getStyle(element, 'position');
1024     if (pos == 'static' || !pos) {
1025       element._madePositioned = true;
1026       element.style.position = 'relative';
1027       // Opera returns the offset relative to the positioning context, when an
1028       // element is position relative but top and left have not been defined
1029       if (window.opera) {
1030         element.style.top = 0;
1031         element.style.left = 0;
1032       }
1033     }
1034   },
1035
1036   undoPositioned: function(element) {
1037     element = $(element);
1038     if (element._madePositioned) {
1039       element._madePositioned = undefined;
1040       element.style.position =
1041         element.style.top =
1042         element.style.left =
1043         element.style.bottom =
1044         element.style.right = '';
1045     }
1046   },
1047
1048   makeClipping: function(element) {
1049     element = $(element);
1050     if (element._overflow) return;
1051     element._overflow = element.style.overflow;
1052     if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
1053       element.style.overflow = 'hidden';
1054   },
1055
1056   undoClipping: function(element) {
1057     element = $(element);
1058     if (element._overflow) return;
1059     element.style.overflow = element._overflow;
1060     element._overflow = undefined;
1061   }
1062 });
1063
1064 var Toggle = new Object();
1065 Toggle.display = Element.toggle;
1066
1067 /*--------------------------------------------------------------------------*/
1068
1069 Abstract.Insertion = function(adjacency) {
1070   this.adjacency = adjacency;
1071 }
1072
1073 Abstract.Insertion.prototype = {
1074   initialize: function(element, content) {
1075     this.element = $(element);
1076     this.content = content.stripScripts();
1077
1078     if (this.adjacency && this.element.insertAdjacentHTML) {
1079       try {
1080         this.element.insertAdjacentHTML(this.adjacency, this.content);
1081       } catch (e) {
1082         if (this.element.tagName.toLowerCase() == 'tbody') {
1083           this.insertContent(this.contentFromAnonymousTable());
1084         } else {
1085           throw e;
1086         }
1087       }
1088     } else {
1089       this.range = this.element.ownerDocument.createRange();
1090       if (this.initializeRange) this.initializeRange();
1091       this.insertContent([this.range.createContextualFragment(this.content)]);
1092     }
1093
1094     setTimeout(function() {content.evalScripts()}, 10);
1095   },
1096
1097   contentFromAnonymousTable: function() {
1098     var div = document.createElement('div');
1099     div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
1100     return $A(div.childNodes[0].childNodes[0].childNodes);
1101   }
1102 }
1103
1104 var Insertion = new Object();
1105
1106 Insertion.Before = Class.create();
1107 Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
1108   initializeRange: function() {
1109     this.range.setStartBefore(this.element);
1110   },
1111
1112   insertContent: function(fragments) {
1113     fragments.each((function(fragment) {
1114       this.element.parentNode.insertBefore(fragment, this.element);
1115     }).bind(this));
1116   }
1117 });
1118
1119 Insertion.Top = Class.create();
1120 Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
1121   initializeRange: function() {
1122     this.range.selectNodeContents(this.element);
1123     this.range.collapse(true);
1124   },
1125
1126   insertContent: function(fragments) {
1127     fragments.reverse(false).each((function(fragment) {
1128       this.element.insertBefore(fragment, this.element.firstChild);
1129     }).bind(this));
1130   }
1131 });
1132
1133 Insertion.Bottom = Class.create();
1134 Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
1135   initializeRange: function() {
1136     this.range.selectNodeContents(this.element);
1137     this.range.collapse(this.element);
1138   },
1139
1140   insertContent: function(fragments) {
1141     fragments.each((function(fragment) {
1142       this.element.appendChild(fragment);
1143     }).bind(this));
1144   }
1145 });
1146
1147 Insertion.After = Class.create();
1148 Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
1149   initializeRange: function() {
1150     this.range.setStartAfter(this.element);
1151   },
1152
1153   insertContent: function(fragments) {
1154     fragments.each((function(fragment) {
1155       this.element.parentNode.insertBefore(fragment,
1156         this.element.nextSibling);
1157     }).bind(this));
1158   }
1159 });
1160
1161 /*--------------------------------------------------------------------------*/
1162
1163 Element.ClassNames = Class.create();
1164 Element.ClassNames.prototype = {
1165   initialize: function(element) {
1166     this.element = $(element);
1167   },
1168
1169   _each: function(iterator) {
1170     this.element.className.split(/\s+/).select(function(name) {
1171       return name.length > 0;
1172     })._each(iterator);
1173   },
1174
1175   set: function(className) {
1176     this.element.className = className;
1177   },
1178
1179   add: function(classNameToAdd) {
1180     if (this.include(classNameToAdd)) return;
1181     this.set(this.toArray().concat(classNameToAdd).join(' '));
1182   },
1183
1184   remove: function(classNameToRemove) {
1185     if (!this.include(classNameToRemove)) return;
1186     this.set(this.select(function(className) {
1187       return className != classNameToRemove;
1188     }).join(' '));
1189   },
1190
1191   toString: function() {
1192     return this.toArray().join(' ');
1193   }
1194 }
1195
1196 Object.extend(Element.ClassNames.prototype, Enumerable);
1197 var Field = {
1198   clear: function() {
1199     for (var i = 0; i < arguments.length; i++)
1200       $(arguments[i]).value = '';
1201   },
1202
1203   focus: function(element) {
1204     $(element).focus();
1205   },
1206
1207   present: function() {
1208     for (var i = 0; i < arguments.length; i++)
1209       if ($(arguments[i]).value == '') return false;
1210     return true;
1211   },
1212
1213   select: function(element) {
1214     $(element).select();
1215   },
1216
1217   activate: function(element) {
1218     element = $(element);
1219     element.focus();
1220     if (element.select)
1221       element.select();
1222   }
1223 }
1224
1225 /*--------------------------------------------------------------------------*/
1226
1227 var Form = {
1228   serialize: function(form) {
1229     var elements = Form.getElements($(form));
1230     var queryComponents = new Array();
1231
1232     for (var i = 0; i < elements.length; i++) {
1233       var queryComponent = Form.Element.serialize(elements[i]);
1234       if (queryComponent)
1235         queryComponents.push(queryComponent);
1236     }
1237
1238     return queryComponents.join('&');
1239   },
1240
1241   getElements: function(form) {
1242     form = $(form);
1243     var elements = new Array();
1244
1245     for (tagName in Form.Element.Serializers) {
1246       var tagElements = form.getElementsByTagName(tagName);
1247       for (var j = 0; j < tagElements.length; j++)
1248         elements.push(tagElements[j]);
1249     }
1250     return elements;
1251   },
1252
1253   getInputs: function(form, typeName, name) {
1254     form = $(form);
1255     var inputs = form.getElementsByTagName('input');
1256
1257     if (!typeName && !name)
1258       return inputs;
1259
1260     var matchingInputs = new Array();
1261     for (var i = 0; i < inputs.length; i++) {
1262       var input = inputs[i];
1263       if ((typeName && input.type != typeName) ||
1264           (name && input.name != name))
1265         continue;
1266       matchingInputs.push(input);
1267     }
1268
1269     return matchingInputs;
1270   },
1271
1272   disable: function(form) {
1273     var elements = Form.getElements(form);
1274     for (var i = 0; i < elements.length; i++) {
1275       var element = elements[i];
1276       element.blur();
1277       element.disabled = 'true';
1278     }
1279   },
1280
1281   enable: function(form) {
1282     var elements = Form.getElements(form);
1283     for (var i = 0; i < elements.length; i++) {
1284       var element = elements[i];
1285       element.disabled = '';
1286     }
1287   },
1288
1289   findFirstElement: function(form) {
1290     return Form.getElements(form).find(function(element) {
1291       return element.type != 'hidden' && !element.disabled &&
1292         ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
1293     });
1294   },
1295
1296   focusFirstElement: function(form) {
1297     Field.activate(Form.findFirstElement(form));
1298   },
1299
1300   reset: function(form) {
1301     $(form).reset();
1302   }
1303 }
1304
1305 Form.Element = {
1306   serialize: function(element) {
1307     element = $(element);
1308     var method = element.tagName.toLowerCase();
1309     var parameter = Form.Element.Serializers[method](element);
1310
1311     if (parameter) {
1312       var key = encodeURIComponent(parameter[0]);
1313       if (key.length == 0) return;
1314
1315       if (parameter[1].constructor != Array)
1316         parameter[1] = [parameter[1]];
1317
1318       return parameter[1].map(function(value) {
1319         return key + '=' + encodeURIComponent(value);
1320       }).join('&');
1321     }
1322   },
1323
1324   getValue: function(element) {
1325     element = $(element);
1326     var method = element.tagName.toLowerCase();
1327     var parameter = Form.Element.Serializers[method](element);
1328
1329     if (parameter)
1330       return parameter[1];
1331   }
1332 }
1333
1334 Form.Element.Serializers = {
1335   input: function(element) {
1336     switch (element.type.toLowerCase()) {
1337       case 'submit':
1338       case 'hidden':
1339       case 'password':
1340       case 'text':
1341         return Form.Element.Serializers.textarea(element);
1342       case 'checkbox':
1343       case 'radio':
1344         return Form.Element.Serializers.inputSelector(element);
1345     }
1346     return false;
1347   },
1348
1349   inputSelector: function(element) {
1350     if (element.checked)
1351       return [element.name, element.value];
1352   },
1353
1354   textarea: function(element) {
1355     return [element.name, element.value];
1356   },
1357
1358   select: function(element) {
1359     return Form.Element.Serializers[element.type == 'select-one' ?
1360       'selectOne' : 'selectMany'](element);
1361   },
1362
1363   selectOne: function(element) {
1364     var value = '', opt, index = element.selectedIndex;
1365     if (index >= 0) {
1366       opt = element.options[index];
1367       value = opt.value;
1368       if (!value && !('value' in opt))
1369         value = opt.text;
1370     }
1371     return [element.name, value];
1372   },
1373
1374   selectMany: function(element) {
1375     var value = new Array();
1376     for (var i = 0; i < element.length; i++) {
1377       var opt = element.options[i];
1378       if (opt.selected) {
1379         var optValue = opt.value;
1380         if (!optValue && !('value' in opt))
1381           optValue = opt.text;
1382         value.push(optValue);
1383       }
1384     }
1385     return [element.name, value];
1386   }
1387 }
1388
1389 /*--------------------------------------------------------------------------*/
1390
1391 var $F = Form.Element.getValue;
1392
1393 /*--------------------------------------------------------------------------*/
1394
1395 Abstract.TimedObserver = function() {}
1396 Abstract.TimedObserver.prototype = {
1397   initialize: function(element, frequency, callback) {
1398     this.frequency = frequency;
1399     this.element   = $(element);
1400     this.callback  = callback;
1401
1402     this.lastValue = this.getValue();
1403     this.registerCallback();
1404   },
1405
1406   registerCallback: function() {
1407     setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
1408   },
1409
1410   onTimerEvent: function() {
1411     var value = this.getValue();
1412     if (this.lastValue != value) {
1413       this.callback(this.element, value);
1414       this.lastValue = value;
1415     }
1416   }
1417 }
1418
1419 Form.Element.Observer = Class.create();
1420 Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
1421   getValue: function() {
1422     return Form.Element.getValue(this.element);
1423   }
1424 });
1425
1426 Form.Observer = Class.create();
1427 Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
1428   getValue: function() {
1429     return Form.serialize(this.element);
1430   }
1431 });
1432
1433 /*--------------------------------------------------------------------------*/
1434
1435 Abstract.EventObserver = function() {}
1436 Abstract.EventObserver.prototype = {
1437   initialize: function(element, callback) {
1438     this.element  = $(element);
1439     this.callback = callback;
1440
1441     this.lastValue = this.getValue();
1442     if (this.element.tagName.toLowerCase() == 'form')
1443       this.registerFormCallbacks();
1444     else
1445       this.registerCallback(this.element);
1446   },
1447
1448   onElementEvent: function() {
1449     var value = this.getValue();
1450     if (this.lastValue != value) {
1451       this.callback(this.element, value);
1452       this.lastValue = value;
1453     }
1454   },
1455
1456   registerFormCallbacks: function() {
1457     var elements = Form.getElements(this.element);
1458     for (var i = 0; i < elements.length; i++)
1459       this.registerCallback(elements[i]);
1460   },
1461
1462   registerCallback: function(element) {
1463     if (element.type) {
1464       switch (element.type.toLowerCase()) {
1465         case 'checkbox':
1466         case 'radio':
1467           Event.observe(element, 'click', this.onElementEvent.bind(this));
1468           break;
1469         case 'password':
1470         case 'text':
1471         case 'textarea':
1472         case 'select-one':
1473         case 'select-multiple':
1474           Event.observe(element, 'change', this.onElementEvent.bind(this));
1475           break;
1476       }
1477     }
1478   }
1479 }
1480
1481 Form.Element.EventObserver = Class.create();
1482 Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
1483   getValue: function() {
1484     return Form.Element.getValue(this.element);
1485   }
1486 });
1487
1488 Form.EventObserver = Class.create();
1489 Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
1490   getValue: function() {
1491     return Form.serialize(this.element);
1492   }
1493 });
1494 if (!window.Event) {
1495   var Event = new Object();
1496 }
1497
1498 Object.extend(Event, {
1499   KEY_BACKSPACE: 8,
1500   KEY_TAB:       9,
1501   KEY_RETURN:   13,
1502   KEY_ESC:      27,
1503   KEY_LEFT:     37,
1504   KEY_UP:       38,
1505   KEY_RIGHT:    39,
1506   KEY_DOWN:     40,
1507   KEY_DELETE:   46,
1508
1509   element: function(event) {
1510     return event.target || event.srcElement;
1511   },
1512
1513   isLeftClick: function(event) {
1514     return (((event.which) && (event.which == 1)) ||
1515             ((event.button) && (event.button == 1)));
1516   },
1517
1518   pointerX: function(event) {
1519     return event.pageX || (event.clientX +
1520       (document.documentElement.scrollLeft || document.body.scrollLeft));
1521   },
1522
1523   pointerY: function(event) {
1524     return event.pageY || (event.clientY +
1525       (document.documentElement.scrollTop || document.body.scrollTop));
1526   },
1527
1528   stop: function(event) {
1529     if (event.preventDefault) {
1530       event.preventDefault();
1531       event.stopPropagation();
1532     } else {
1533       event.returnValue = false;
1534       event.cancelBubble = true;
1535     }
1536   },
1537
1538   // find the first node with the given tagName, starting from the
1539   // node the event was triggered on; traverses the DOM upwards
1540   findElement: function(event, tagName) {
1541     var element = Event.element(event);
1542     while (element.parentNode && (!element.tagName ||
1543         (element.tagName.toUpperCase() != tagName.toUpperCase())))
1544       element = element.parentNode;
1545     return element;
1546   },
1547
1548   observers: false,
1549
1550   _observeAndCache: function(element, name, observer, useCapture) {
1551     if (!this.observers) this.observers = [];
1552     if (element.addEventListener) {
1553       this.observers.push([element, name, observer, useCapture]);
1554       element.addEventListener(name, observer, useCapture);
1555     } else if (element.attachEvent) {
1556       this.observers.push([element, name, observer, useCapture]);
1557       element.attachEvent('on' + name, observer);
1558     }
1559   },
1560
1561   unloadCache: function() {
1562     if (!Event.observers) return;
1563     for (var i = 0; i < Event.observers.length; i++) {
1564       Event.stopObserving.apply(this, Event.observers[i]);
1565       Event.observers[i][0] = null;
1566     }
1567     Event.observers = false;
1568   },
1569
1570   observe: function(element, name, observer, useCapture) {
1571     var element = $(element);
1572     useCapture = useCapture || false;
1573
1574     if (name == 'keypress' &&
1575         (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
1576         || element.attachEvent))
1577       name = 'keydown';
1578
1579     this._observeAndCache(element, name, observer, useCapture);
1580   },
1581
1582   stopObserving: function(element, name, observer, useCapture) {
1583     var element = $(element);
1584     useCapture = useCapture || false;
1585
1586     if (name == 'keypress' &&
1587         (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
1588         || element.detachEvent))
1589       name = 'keydown';
1590
1591     if (element.removeEventListener) {
1592       element.removeEventListener(name, observer, useCapture);
1593     } else if (element.detachEvent) {
1594       element.detachEvent('on' + name, observer);
1595     }
1596   }
1597 });
1598
1599 /* prevent memory leaks in IE */
1600 Event.observe(window, 'unload', Event.unloadCache, false);
1601 var Position = {
1602   // set to true if needed, warning: firefox performance problems
1603   // NOT neeeded for page scrolling, only if draggable contained in
1604   // scrollable elements
1605   includeScrollOffsets: false,
1606
1607   // must be called before calling withinIncludingScrolloffset, every time the
1608   // page is scrolled
1609   prepare: function() {
1610     this.deltaX =  window.pageXOffset
1611                 || document.documentElement.scrollLeft
1612                 || document.body.scrollLeft
1613                 || 0;
1614     this.deltaY =  window.pageYOffset
1615                 || document.documentElement.scrollTop
1616                 || document.body.scrollTop
1617                 || 0;
1618   },
1619
1620   realOffset: function(element) {
1621     var valueT = 0, valueL = 0;
1622     do {
1623       valueT += element.scrollTop  || 0;
1624       valueL += element.scrollLeft || 0;
1625       element = element.parentNode;
1626     } while (element);
1627     return [valueL, valueT];
1628   },
1629
1630   cumulativeOffset: function(element) {
1631     var valueT = 0, valueL = 0;
1632     do {
1633       valueT += element.offsetTop  || 0;
1634       valueL += element.offsetLeft || 0;
1635       element = element.offsetParent;
1636     } while (element);
1637     return [valueL, valueT];
1638   },
1639
1640   positionedOffset: function(element) {
1641     var valueT = 0, valueL = 0;
1642     do {
1643       valueT += element.offsetTop  || 0;
1644       valueL += element.offsetLeft || 0;
1645       element = element.offsetParent;
1646       if (element) {
1647         p = Element.getStyle(element, 'position');
1648         if (p == 'relative' || p == 'absolute') break;
1649       }
1650     } while (element);
1651     return [valueL, valueT];
1652   },
1653
1654   offsetParent: function(element) {
1655     if (element.offsetParent) return element.offsetParent;
1656     if (element == document.body) return element;
1657
1658     while ((element = element.parentNode) && element != document.body)
1659       if (Element.getStyle(element, 'position') != 'static')
1660         return element;
1661
1662     return document.body;
1663   },
1664
1665   // caches x/y coordinate pair to use with overlap
1666   within: function(element, x, y) {
1667     if (this.includeScrollOffsets)
1668       return this.withinIncludingScrolloffsets(element, x, y);
1669     this.xcomp = x;
1670     this.ycomp = y;
1671     this.offset = this.cumulativeOffset(element);
1672
1673     return (y >= this.offset[1] &&
1674             y <  this.offset[1] + element.offsetHeight &&
1675             x >= this.offset[0] &&
1676             x <  this.offset[0] + element.offsetWidth);
1677   },
1678
1679   withinIncludingScrolloffsets: function(element, x, y) {
1680     var offsetcache = this.realOffset(element);
1681
1682     this.xcomp = x + offsetcache[0] - this.deltaX;
1683     this.ycomp = y + offsetcache[1] - this.deltaY;
1684     this.offset = this.cumulativeOffset(element);
1685
1686     return (this.ycomp >= this.offset[1] &&
1687             this.ycomp <  this.offset[1] + element.offsetHeight &&
1688             this.xcomp >= this.offset[0] &&
1689             this.xcomp <  this.offset[0] + element.offsetWidth);
1690   },
1691
1692   // within must be called directly before
1693   overlap: function(mode, element) {
1694     if (!mode) return 0;
1695     if (mode == 'vertical')
1696       return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
1697         element.offsetHeight;
1698     if (mode == 'horizontal')
1699       return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
1700         element.offsetWidth;
1701   },
1702
1703   clone: function(source, target) {
1704     source = $(source);
1705     target = $(target);
1706     target.style.position = 'absolute';
1707     var offsets = this.cumulativeOffset(source);
1708     target.style.top    = offsets[1] + 'px';
1709     target.style.left   = offsets[0] + 'px';
1710     target.style.width  = source.offsetWidth + 'px';
1711     target.style.height = source.offsetHeight + 'px';
1712   },
1713
1714   page: function(forElement) {
1715     var valueT = 0, valueL = 0;
1716
1717     var element = forElement;
1718     do {
1719       valueT += element.offsetTop  || 0;
1720       valueL += element.offsetLeft || 0;
1721
1722       // Safari fix
1723       if (element.offsetParent==document.body)
1724         if (Element.getStyle(element,'position')=='absolute') break;
1725
1726     } while (element = element.offsetParent);
1727
1728     element = forElement;
1729     do {
1730       valueT -= element.scrollTop  || 0;
1731       valueL -= element.scrollLeft || 0;
1732     } while (element = element.parentNode);
1733
1734     return [valueL, valueT];
1735   },
1736
1737   clone: function(source, target) {
1738     var options = Object.extend({
1739       setLeft:    true,
1740       setTop:     true,
1741       setWidth:   true,
1742       setHeight:  true,
1743       offsetTop:  0,
1744       offsetLeft: 0
1745     }, arguments[2] || {})
1746
1747     // find page position of source
1748     source = $(source);
1749     var p = Position.page(source);
1750
1751     // find coordinate system to use
1752     target = $(target);
1753     var delta = [0, 0];
1754     var parent = null;
1755     // delta [0,0] will do fine with position: fixed elements,
1756     // position:absolute needs offsetParent deltas
1757     if (Element.getStyle(target,'position') == 'absolute') {
1758       parent = Position.offsetParent(target);
1759       delta = Position.page(parent);
1760     }
1761
1762     // correct by body offsets (fixes Safari)
1763     if (parent == document.body) {
1764       delta[0] -= document.body.offsetLeft;
1765       delta[1] -= document.body.offsetTop;
1766     }
1767
1768     // set position
1769     if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
1770     if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
1771     if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
1772     if(options.setHeight) target.style.height = source.offsetHeight + 'px';
1773   },
1774
1775   absolutize: function(element) {
1776     element = $(element);
1777     if (element.style.position == 'absolute') return;
1778     Position.prepare();
1779
1780     var offsets = Position.positionedOffset(element);
1781     var top     = offsets[1];
1782     var left    = offsets[0];
1783     var width   = element.clientWidth;
1784     var height  = element.clientHeight;
1785
1786     element._originalLeft   = left - parseFloat(element.style.left  || 0);
1787     element._originalTop    = top  - parseFloat(element.style.top || 0);
1788     element._originalWidth  = element.style.width;
1789     element._originalHeight = element.style.height;
1790
1791     element.style.position = 'absolute';
1792     element.style.top    = top + 'px';;
1793     element.style.left   = left + 'px';;
1794     element.style.width  = width + 'px';;
1795     element.style.height = height + 'px';;
1796   },
1797
1798   relativize: function(element) {
1799     element = $(element);
1800     if (element.style.position == 'relative') return;
1801     Position.prepare();
1802
1803     element.style.position = 'relative';
1804     var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
1805     var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
1806
1807     element.style.top    = top + 'px';
1808     element.style.left   = left + 'px';
1809     element.style.height = element._originalHeight;
1810     element.style.width  = element._originalWidth;
1811   }
1812 }
1813
1814 // Safari returns margins on body which is incorrect if the child is absolutely
1815 // positioned.  For performance reasons, redefine Position.cumulativeOffset for
1816 // KHTML/WebKit only.
1817 if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
1818   Position.cumulativeOffset = function(element) {
1819     var valueT = 0, valueL = 0;
1820     do {
1821       valueT += element.offsetTop  || 0;
1822       valueL += element.offsetLeft || 0;
1823       if (element.offsetParent == document.body)
1824         if (Element.getStyle(element, 'position') == 'absolute') break;
1825
1826       element = element.offsetParent;
1827     } while (element);
1828
1829     return [valueL, valueT];
1830   }
1831 }
1832 </script>
1833 <script type="text/javascript">
1834 /* code modified from ColdFusion's cfdump code */
1835 /* code modified from original dBug */
1836 dBug = new Object();
1837 dBug.toggleRow = function(source) {
1838                 var source = Event.element(source);
1839                 var target=(document.all) ? source.parentElement.cells[1] : source.parentNode.lastChild
1840                 dBug.toggleTarget(target,dBug.toggleSource(source));
1841         }
1842        
1843 dBug.toggleSource = function(source) {
1844                 if (source.style.fontStyle=='italic') {
1845                         source.style.fontStyle='normal';
1846                         source.title='click to collapse';
1847                         return 'open';
1848                 } else {
1849                         source.style.fontStyle='italic';
1850                         source.title='click to expand';
1851                         return 'closed';
1852                 }
1853         }
1854
1855 dBug.toggleTarget = function(target,switchToState) {
1856                 target.style.display=(switchToState=='open') ? '' : 'none';
1857         }
1858
1859 dBug.toggleTable = function(source) {
1860                 var source = Event.element(source);
1861                 var switchToState=dBug.toggleSource(source);
1862                 if(document.all) {
1863                         var table=source.parentElement.parentElement;
1864                         for(var i=1;i<table.rows.length;i++) {
1865                                 target=table.rows[i];
1866                                 dBug.toggleTarget(target,switchToState);
1867                         }
1868                 }
1869                 else {
1870                         var table=source.parentNode.parentNode;
1871                         for (var i=1;i<table.childNodes.length;i++) {
1872                                 target=table.childNodes[i];
1873                                 if(target.style) {
1874                                         dBug.toggleTarget(target,switchToState);
1875                                 }
1876                         }
1877                 }
1878         }
1879
1880 dBug.attachHandlers = function(cls, mtd) {
1881                 $A(document.getElementsByClassName(cls)).each(
1882                         function (td) {
1883                                         Event.observe( td, 'click', mtd );
1884                                         Event.observe( td, 'mouseover',
1885                                                 function( ev ) {
1886                                                         el = Event.element(ev);
1887                                                         el.style.cursor = 'pointer';
1888                                                 }
1889                                         );
1890                                         Event.observe( td, 'mouseout',
1891                                                 function( ev ) {
1892                                                         el = Event.element(ev);
1893                                                         el.style.cursor = 'auto';
1894                                                 }
1895                                         );
1896                                 }
1897                 );
1898         }
1899
1900 dBug.initialize = function() {
1901                 $A(dBug.types).each(
1902                         function (str) {
1903                                 dBug.attachHandlers( "dBug_" + str + "Header", dBug.toggleTable );
1904                                 dBug.attachHandlers( "dBug_" + str + "Key", dBug.toggleRow );
1905                         }
1906                 );
1907         }
1908
1909 dBug.types = ['resource', 'object', 'array', 'boolean', 'gd', 'xml',
1910         'fbsql', 'mssql', 'msql', 'pgsql', 'sybase-db', 'sybase-ct', 'mysql'];
1911
1912
1913 Event.observe( window, 'load', dBug.initialize );
1914 </script>
1915 </head>
1916 <body>
1917
1918 <table class="dBug_object" cellpadding="3" cellspacing="2">
1919                                 <tbody><tr>
1920                                         <td style="cursor: auto;" class="dBug_objectHeader" colspan="2">Object id #3 (SGL_Registry)</td>
1921                                 </tr><tr>
1922                                 <td class="dBug_objectKey" valign="top">aProps</td>
1923                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
1924                                 <tbody><tr>
1925                                         <td style="cursor: auto;" class="dBug_arrayHeader" colspan="2">array (4)</td>
1926                                 </tr><tr>
1927                                 <td style="cursor: pointer;" class="dBug_arrayKey" valign="top">currentUrl</td>
1928                                 <td><table class="dBug_object" cellpadding="3" cellspacing="2">
1929                                 <tbody><tr>
1930                                         <td style="cursor: auto;" class="dBug_objectHeader" colspan="2">Object id #15 (SGL_URL)</td>
1931                                 </tr><tr>
1932                                 <td class="dBug_objectKey" valign="top">url</td>
1933                                 <td>/seagull/www/index.php</td>
1934 </tr>
1935 <tr>
1936                                 <td style="cursor: auto;" class="dBug_objectKey" valign="top">protocol</td>
1937                                 <td>http</td>
1938 </tr>
1939 <tr>
1940                                 <td class="dBug_objectKey" valign="top">username</td>
1941                                 <td>[empty]</td>
1942 </tr>
1943 <tr>
1944                                 <td class="dBug_objectKey" valign="top">password</td>
1945                                 <td>[empty]</td>
1946 </tr>
1947 <tr>
1948                                 <td class="dBug_objectKey" valign="top">host</td>
1949                                 <td>localhost</td>
1950 </tr>
1951 <tr>
1952                                 <td class="dBug_objectKey" valign="top">port</td>
1953                                 <td>80</td>
1954 </tr>
1955 <tr>
1956                                 <td class="dBug_objectKey" valign="top">path</td>
1957                                 <td>/seagull/www/</td>
1958 </tr>
1959 <tr>
1960                                 <td class="dBug_objectKey" valign="top">querystring</td>
1961                                 <td>[empty]</td>
1962 </tr>
1963 <tr>
1964                                 <td class="dBug_objectKey" valign="top">aQueryData</td>
1965                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
1966                                 <tbody><tr>
1967                                         <td class="dBug_arrayHeader" colspan="2">array (2)</td>
1968                                 </tr><tr>
1969                                 <td class="dBug_arrayKey" valign="top">moduleName</td>
1970                                 <td>default</td>
1971 </tr>
1972 <tr>
1973                                 <td class="dBug_arrayKey" valign="top">managerName</td>
1974                                 <td>default</td>
1975 </tr>
1976 </tbody></table></td>
1977 </tr>
1978 <tr>
1979                                 <td class="dBug_objectKey" valign="top">frontScriptName</td>
1980                                 <td>index.php</td>
1981 </tr>
1982 <tr>
1983                                 <td class="dBug_objectKey" valign="top">aRes</td>
1984                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
1985                                 <tbody><tr>
1986                                         <td class="dBug_arrayHeader" colspan="2">array (3)</td>
1987                                 </tr><tr>
1988                                 <td class="dBug_arrayKey" valign="top">0</td>
1989                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
1990                                 <tbody><tr>
1991                                         <td class="dBug_arrayHeader" colspan="2">array (0)</td>
1992                                 </tr></tbody></table></td>
1993 </tr>
1994 <tr>
1995                                 <td class="dBug_arrayKey" valign="top">1</td>
1996                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
1997                                 <tbody><tr>
1998                                         <td class="dBug_arrayHeader" colspan="2">array (0)</td>
1999                                 </tr></tbody></table></td>
2000 </tr>
2001 <tr>
2002                                 <td class="dBug_arrayKey" valign="top">2</td>
2003                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2004                                 <tbody><tr>
2005                                         <td class="dBug_arrayHeader" colspan="2">array (2)</td>
2006                                 </tr><tr>
2007                                 <td class="dBug_arrayKey" valign="top">moduleName</td>
2008                                 <td>default</td>
2009 </tr>
2010 <tr>
2011                                 <td class="dBug_arrayKey" valign="top">managerName</td>
2012                                 <td>default</td>
2013 </tr>
2014 </tbody></table></td>
2015 </tr>
2016 </tbody></table></td>
2017 </tr>
2018 <tr>
2019                                 <td class="dBug_objectKey" valign="top">anchor</td>
2020                                 <td>[empty]</td>
2021 </tr>
2022 <tr>
2023                                 <td class="dBug_objectKey" valign="top">useBrackets</td>
2024                                 <td>TRUE</td>
2025 </tr>
2026 <tr>
2027                                 <td class="dBug_objectKey" valign="top">user</td>
2028                                 <td>[empty]</td>
2029 </tr>
2030 <tr>
2031                                 <td class="dBug_objectKey" valign="top">pass</td>
2032                                 <td>[empty]</td>
2033 </tr>
2034 <tr>
2035                                 <td class="dBug_objectKey" valign="top">conf</td>
2036                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2037                                 <tbody><tr>
2038                                         <td class="dBug_arrayHeader" colspan="2">array (17)</td>
2039                                 </tr><tr>
2040                                 <td class="dBug_arrayKey" valign="top">db</td>
2041                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2042                                 <tbody><tr>
2043                                         <td class="dBug_arrayHeader" colspan="2">array (10)</td>
2044                                 </tr><tr>
2045                                 <td class="dBug_arrayKey" valign="top">type</td>
2046                                 <td>mysql_SGL</td>
2047 </tr>
2048 <tr>
2049                                 <td class="dBug_arrayKey" valign="top">host</td>
2050                                 <td>localhost</td>
2051 </tr>
2052 <tr>
2053                                 <td class="dBug_arrayKey" valign="top">protocol</td>
2054                                 <td>unix</td>
2055 </tr>
2056 <tr>
2057                                 <td class="dBug_arrayKey" valign="top">socket</td>
2058                                 <td>[empty string]</td>
2059 </tr>
2060 <tr>
2061                                 <td class="dBug_arrayKey" valign="top">port</td>
2062                                 <td>3306</td>
2063 </tr>
2064 <tr>
2065                                 <td class="dBug_arrayKey" valign="top">user</td>
2066                                 <td>root</td>
2067 </tr>
2068 <tr>
2069                                 <td class="dBug_arrayKey" valign="top">pass</td>
2070                                 <td>[empty string]</td>
2071 </tr>
2072 <tr>
2073                                 <td class="dBug_arrayKey" valign="top">name</td>
2074                                 <td>seagull</td>
2075 </tr>
2076 <tr>
2077                                 <td class="dBug_arrayKey" valign="top">postConnect</td>
2078                                 <td>[empty string]</td>
2079 </tr>
2080 <tr>
2081                                 <td class="dBug_arrayKey" valign="top">prefix</td>
2082                                 <td>not implemented yet</td>
2083 </tr>
2084 </tbody></table></td>
2085 </tr>
2086 <tr>
2087                                 <td class="dBug_arrayKey" valign="top">site</td>
2088                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2089                                 <tbody><tr>
2090                                         <td class="dBug_arrayHeader" colspan="2">array (28)</td>
2091                                 </tr><tr>
2092                                 <td class="dBug_arrayKey" valign="top">outputUrlHandler</td>
2093                                 <td>SGL_UrlParser_SefStrategy</td>
2094 </tr>
2095 <tr>
2096                                 <td class="dBug_arrayKey" valign="top">name</td>
2097                                 <td>Seagull Framework</td>
2098 </tr>
2099 <tr>
2100                                 <td class="dBug_arrayKey" valign="top">showLogo</td>
2101                                 <td>logo.png</td>
2102 </tr>
2103 <tr>
2104                                 <td class="dBug_arrayKey" valign="top">compression</td>
2105                                 <td>[empty string]</td>
2106 </tr>
2107 <tr>
2108                                 <td class="dBug_arrayKey" valign="top">outputBuffering</td>
2109                                 <td>[empty string]</td>
2110 </tr>
2111 <tr>
2112                                 <td class="dBug_arrayKey" valign="top">banIpEnabled</td>
2113                                 <td>[empty string]</td>
2114 </tr>
2115 <tr>
2116                                 <td class="dBug_arrayKey" valign="top">denyList</td>
2117                                 <td>[empty string]</td>
2118 </tr>
2119 <tr>
2120                                 <td class="dBug_arrayKey" valign="top">allowList</td>
2121                                 <td>[empty string]</td>
2122 </tr>
2123 <tr>
2124                                 <td class="dBug_arrayKey" valign="top">tidyhtml</td>
2125                                 <td>[empty string]</td>
2126 </tr>
2127 <tr>
2128                                 <td class="dBug_arrayKey" valign="top">blocksEnabled</td>
2129                                 <td>TRUE</td>
2130 </tr>
2131 <tr>
2132                                 <td class="dBug_arrayKey" valign="top">safeDelete</td>
2133                                 <td>1</td>
2134 </tr>
2135 <tr>
2136                                 <td class="dBug_arrayKey" valign="top">frontScriptName</td>
2137                                 <td>index.php</td>
2138 </tr>
2139 <tr>
2140                                 <td class="dBug_arrayKey" valign="top">defaultModule</td>
2141                                 <td>default</td>
2142 </tr>
2143 <tr>
2144                                 <td class="dBug_arrayKey" valign="top">defaultManager</td>
2145                                 <td>default</td>
2146 </tr>
2147 <tr>
2148                                 <td class="dBug_arrayKey" valign="top">defaultArticleViewType</td>
2149                                 <td>1</td>
2150 </tr>
2151 <tr>
2152                                 <td class="dBug_arrayKey" valign="top">defaultParams</td>
2153                                 <td>[empty string]</td>
2154 </tr>
2155 <tr>
2156                                 <td class="dBug_arrayKey" valign="top">templateEngine</td>
2157                                 <td>flexy</td>
2158 </tr>
2159 <tr>
2160                                 <td class="dBug_arrayKey" valign="top">wysiwygEditor</td>
2161                                 <td>tinyfck</td>
2162 </tr>
2163 <tr>
2164                                 <td class="dBug_arrayKey" valign="top">extendedLocale</td>
2165                                 <td>[empty string]</td>
2166 </tr>
2167 <tr>
2168                                 <td class="dBug_arrayKey" valign="top">localeCategory</td>
2169                                 <td>'LC_ALL'</td>
2170 </tr>
2171 <tr>
2172                                 <td class="dBug_arrayKey" valign="top">adminGuiTheme</td>
2173                                 <td>default_admin</td>
2174 </tr>
2175 <tr>
2176                                 <td class="dBug_arrayKey" valign="top">defaultTheme</td>
2177                                 <td>default</td>
2178 </tr>
2179 <tr>
2180                                 <td class="dBug_arrayKey" valign="top">filterChain</td>
2181                                 <td>[empty string]</td>
2182 </tr>
2183 <tr>
2184                                 <td class="dBug_arrayKey" valign="top">globalJavascriptOnload</td>
2185                                 <td>[empty string]</td>
2186 </tr>
2187 <tr>
2188                                 <td class="dBug_arrayKey" valign="top">serverTimeOffset</td>
2189                                 <td>UTC</td>
2190 </tr>
2191 <tr>
2192                                 <td class="dBug_arrayKey" valign="top">baseUrl</td>
2193                                 <td>http://localhost/seagull/www</td>
2194 </tr>
2195 <tr>
2196                                 <td class="dBug_arrayKey" valign="top">description</td>
2197                                 <td>Coming soon to a webserver near you.</td>
2198 </tr>
2199 <tr>
2200                                 <td class="dBug_arrayKey" valign="top">keywords</td>
2201                                 <td>seagull, php, framework, cms, content management</td>
2202 </tr>
2203 </tbody></table></td>
2204 </tr>
2205 <tr>
2206                                 <td class="dBug_arrayKey" valign="top">path</td>
2207                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2208                                 <tbody><tr>
2209                                         <td class="dBug_arrayHeader" colspan="2">array (5)</td>
2210                                 </tr><tr>
2211                                 <td class="dBug_arrayKey" valign="top">additionalIncludePath</td>
2212                                 <td>[empty string]</td>
2213 </tr>
2214 <tr>
2215                                 <td class="dBug_arrayKey" valign="top">moduleDirOverride</td>
2216                                 <td>[empty string]</td>
2217 </tr>
2218 <tr>
2219                                 <td class="dBug_arrayKey" valign="top">uploadDirOverride</td>
2220                                 <td>[empty string]</td>
2221 </tr>
2222 <tr>
2223                                 <td class="dBug_arrayKey" valign="top">installRoot</td>
2224                                 <td>C:\bin\xampp\htdocs\seagull</td>
2225 </tr>
2226 <tr>
2227                                 <td class="dBug_arrayKey" valign="top">webRoot</td>
2228                                 <td>C:\bin\xampp\htdocs\seagull/www</td>
2229 </tr>
2230 </tbody></table></td>
2231 </tr>
2232 <tr>
2233                                 <td class="dBug_arrayKey" valign="top">cookie</td>
2234                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2235                                 <tbody><tr>
2236                                         <td class="dBug_arrayHeader" colspan="2">array (4)</td>
2237                                 </tr><tr>
2238                                 <td class="dBug_arrayKey" valign="top">path</td>
2239                                 <td>/</td>
2240 </tr>
2241 <tr>
2242                                 <td class="dBug_arrayKey" valign="top">domain</td>
2243                                 <td>[empty string]</td>
2244 </tr>
2245 <tr>
2246                                 <td class="dBug_arrayKey" valign="top">secure</td>
2247                                 <td>[empty string]</td>
2248 </tr>
2249 <tr>
2250                                 <td class="dBug_arrayKey" valign="top">name</td>
2251                                 <td>SGLSESSID</td>
2252 </tr>
2253 </tbody></table></td>
2254 </tr>
2255 <tr>
2256                                 <td class="dBug_arrayKey" valign="top">session</td>
2257                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2258                                 <tbody><tr>
2259                                         <td class="dBug_arrayHeader" colspan="2">array (5)</td>
2260                                 </tr><tr>
2261                                 <td class="dBug_arrayKey" valign="top">maxLifetime</td>
2262                                 <td>0</td>
2263 </tr>
2264 <tr>
2265                                 <td class="dBug_arrayKey" valign="top">extended</td>
2266                                 <td>0</td>
2267 </tr>
2268 <tr>
2269                                 <td class="dBug_arrayKey" valign="top">singleUser</td>
2270                                 <td>[empty string]</td>
2271 </tr>
2272 <tr>
2273                                 <td class="dBug_arrayKey" valign="top">handler</td>
2274                                 <td>file</td>
2275 </tr>
2276 <tr>
2277                                 <td class="dBug_arrayKey" valign="top">allowedInUri</td>
2278                                 <td>1</td>
2279 </tr>
2280 </tbody></table></td>
2281 </tr>
2282 <tr>
2283                                 <td class="dBug_arrayKey" valign="top">cache</td>
2284                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2285                                 <tbody><tr>
2286                                         <td class="dBug_arrayHeader" colspan="2">array (3)</td>
2287                                 </tr><tr>
2288                                 <td class="dBug_arrayKey" valign="top">enabled</td>
2289                                 <td>[empty string]</td>
2290 </tr>
2291 <tr>
2292                                 <td class="dBug_arrayKey" valign="top">libCacheEnabled</td>
2293                                 <td>[empty string]</td>
2294 </tr>
2295 <tr>
2296                                 <td class="dBug_arrayKey" valign="top">lifetime</td>
2297                                 <td>86400</td>
2298 </tr>
2299 </tbody></table></td>
2300 </tr>
2301 <tr>
2302                                 <td class="dBug_arrayKey" valign="top">debug</td>
2303                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2304                                 <tbody><tr>
2305                                         <td class="dBug_arrayHeader" colspan="2">array (11)</td>
2306                                 </tr><tr>
2307                                 <td class="dBug_arrayKey" valign="top">authorisationEnabled</td>
2308                                 <td>1</td>
2309 </tr>
2310 <tr>
2311                                 <td class="dBug_arrayKey" valign="top">sessionDebugAllowed</td>
2312                                 <td>1</td>
2313 </tr>
2314 <tr>
2315                                 <td class="dBug_arrayKey" valign="top">customErrorHandler</td>
2316                                 <td>1</td>
2317 </tr>
2318 <tr>
2319                                 <td class="dBug_arrayKey" valign="top">production</td>
2320                                 <td>[empty string]</td>
2321 </tr>
2322 <tr>
2323                                 <td class="dBug_arrayKey" valign="top">showBacktrace</td>
2324                                 <td>[empty string]</td>
2325 </tr>
2326 <tr>
2327                                 <td class="dBug_arrayKey" valign="top">profiling</td>
2328                                 <td>[empty string]</td>
2329 </tr>
2330 <tr>
2331                                 <td class="dBug_arrayKey" valign="top">emailAdminThreshold</td>
2332                                 <td>'PEAR_LOG_EMERG'</td>
2333 </tr>
2334 <tr>
2335                                 <td class="dBug_arrayKey" valign="top">showBugReporterLink</td>
2336                                 <td>1</td>
2337 </tr>
2338 <tr>
2339                                 <td class="dBug_arrayKey" valign="top">enableDebugBlock</td>
2340                                 <td>[empty string]</td>
2341 </tr>
2342 <tr>
2343                                 <td class="dBug_arrayKey" valign="top">showUntranslated</td>
2344                                 <td>1</td>
2345 </tr>
2346 <tr>
2347                                 <td class="dBug_arrayKey" valign="top">dataObject</td>
2348                                 <td>0</td>
2349 </tr>
2350 </tbody></table></td>
2351 </tr>
2352 <tr>
2353                                 <td class="dBug_arrayKey" valign="top">translation</td>
2354                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2355                                 <tbody><tr>
2356                                         <td class="dBug_arrayHeader" colspan="2">array (4)</td>
2357                                 </tr><tr>
2358                                 <td class="dBug_arrayKey" valign="top">addMissingTrans</td>
2359                                 <td>FALSE</td>
2360 </tr>
2361 <tr>
2362                                 <td class="dBug_arrayKey" valign="top">fallbackLang</td>
2363                                 <td>en_iso_8859_15</td>
2364 </tr>
2365 <tr>
2366                                 <td class="dBug_arrayKey" valign="top">container</td>
2367                                 <td>file</td>
2368 </tr>
2369 <tr>
2370                                 <td class="dBug_arrayKey" valign="top">installedLanguages</td>
2371                                 <td>pt_br_iso_8859_1,zh_tw_big5,zh_gb2312,zh_utf_8,zh_tw_utf_8,cs_iso_8859_2,nl_iso_8859_1,en_iso_8859_15,fr_iso_8859_1,fr_utf_8,de_iso_8859_1,it_iso_8859_1,ja_euc_jp,ja_utf_8,no_iso_8859_1,pl_iso_8859_2,pt_iso_8859_1,ru_utf_8,ru_windows_1251,es_iso_8859_1,es_utf_8,sv_iso_8859_1,tr_iso_8859_9,tr_utf_8</td>
2372 </tr>
2373 </tbody></table></td>
2374 </tr>
2375 <tr>
2376                                 <td class="dBug_arrayKey" valign="top">navigation</td>
2377                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2378                                 <tbody><tr>
2379                                         <td class="dBug_arrayHeader" colspan="2">array (4)</td>
2380                                 </tr><tr>
2381                                 <td class="dBug_arrayKey" valign="top">enabled</td>
2382                                 <td>1</td>
2383 </tr>
2384 <tr>
2385                                 <td class="dBug_arrayKey" valign="top">renderer</td>
2386                                 <td>SimpleRenderer</td>
2387 </tr>
2388 <tr>
2389                                 <td class="dBug_arrayKey" valign="top">driver</td>
2390                                 <td>SimpleDriver</td>
2391 </tr>
2392 <tr>
2393                                 <td class="dBug_arrayKey" valign="top">stylesheet</td>
2394                                 <td>SglDefault_TwoLevel</td>
2395 </tr>
2396 </tbody></table></td>
2397 </tr>
2398 <tr>
2399                                 <td class="dBug_arrayKey" valign="top">log</td>
2400                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2401                                 <tbody><tr>
2402                                         <td class="dBug_arrayHeader" colspan="2">array (8)</td>
2403                                 </tr><tr>
2404                                 <td class="dBug_arrayKey" valign="top">enabled</td>
2405                                 <td>[empty string]</td>
2406 </tr>
2407 <tr>
2408                                 <td class="dBug_arrayKey" valign="top">type</td>
2409                                 <td>file</td>
2410 </tr>
2411 <tr>
2412                                 <td class="dBug_arrayKey" valign="top">name</td>
2413                                 <td>var/log/php_log.txt</td>
2414 </tr>
2415 <tr>
2416                                 <td class="dBug_arrayKey" valign="top">priority</td>
2417                                 <td>7</td>
2418 </tr>
2419 <tr>
2420                                 <td class="dBug_arrayKey" valign="top">ident</td>
2421                                 <td>Seagull</td>
2422 </tr>
2423 <tr>
2424                                 <td class="dBug_arrayKey" valign="top">ignoreRepeated</td>
2425                                 <td>[empty string]</td>
2426 </tr>
2427 <tr>
2428                                 <td class="dBug_arrayKey" valign="top">paramsUsername</td>
2429                                 <td>[empty string]</td>
2430 </tr>
2431 <tr>
2432                                 <td class="dBug_arrayKey" valign="top">paramsPassword</td>
2433                                 <td>[empty string]</td>
2434 </tr>
2435 </tbody></table></td>
2436 </tr>
2437 <tr>
2438                                 <td class="dBug_arrayKey" valign="top">mta</td>
2439                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2440                                 <tbody><tr>
2441                                         <td class="dBug_arrayHeader" colspan="2">array (9)</td>
2442                                 </tr><tr>
2443                                 <td class="dBug_arrayKey" valign="top">backend</td>
2444                                 <td>mail</td>
2445 </tr>
2446 <tr>
2447                                 <td class="dBug_arrayKey" valign="top">sendmailPath</td>
2448                                 <td>/usr/sbin/sendmail</td>
2449 </tr>
2450 <tr>
2451                                 <td class="dBug_arrayKey" valign="top">sendmailArgs</td>
2452                                 <td>-t -i</td>
2453 </tr>
2454 <tr>
2455                                 <td class="dBug_arrayKey" valign="top">smtpHost</td>
2456                                 <td>127.0.0.1</td>
2457 </tr>
2458 <tr>
2459                                 <td class="dBug_arrayKey" valign="top">smtpLocalHost</td>
2460                                 <td>seagullproject.org</td>
2461 </tr>
2462 <tr>
2463                                 <td class="dBug_arrayKey" valign="top">smtpPort</td>
2464                                 <td>25</td>
2465 </tr>
2466 <tr>
2467                                 <td class="dBug_arrayKey" valign="top">smtpAuth</td>
2468                                 <td>0</td>
2469 </tr>
2470 <tr>
2471                                 <td class="dBug_arrayKey" valign="top">smtpUsername</td>
2472                                 <td>[empty string]</td>
2473 </tr>
2474 <tr>
2475                                 <td class="dBug_arrayKey" valign="top">smtpPassword</td>
2476                                 <td>[empty string]</td>
2477 </tr>
2478 </tbody></table></td>
2479 </tr>
2480 <tr>
2481                                 <td class="dBug_arrayKey" valign="top">email</td>
2482                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2483                                 <tbody><tr>
2484                                         <td class="dBug_arrayHeader" colspan="2">array (3)</td>
2485                                 </tr><tr>
2486                                 <td class="dBug_arrayKey" valign="top">admin</td>
2487                                 <td>admin@fred.com</td>
2488 </tr>
2489 <tr>
2490                                 <td class="dBug_arrayKey" valign="top">support</td>
2491                                 <td>admin@fred.com</td>
2492 </tr>
2493 <tr>
2494                                 <td class="dBug_arrayKey" valign="top">info</td>
2495                                 <td>admin@fred.com</td>
2496 </tr>
2497 </tbody></table></td>
2498 </tr>
2499 <tr>
2500                                 <td class="dBug_arrayKey" valign="top">popup</td>
2501                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2502                                 <tbody><tr>
2503                                         <td class="dBug_arrayHeader" colspan="2">array (2)</td>
2504                                 </tr><tr>
2505                                 <td class="dBug_arrayKey" valign="top">winHeight</td>
2506                                 <td>500</td>
2507 </tr>
2508 <tr>
2509                                 <td class="dBug_arrayKey" valign="top">winWidth</td>
2510                                 <td>600</td>
2511 </tr>
2512 </tbody></table></td>
2513 </tr>
2514 <tr>
2515                                 <td class="dBug_arrayKey" valign="top">censor</td>
2516                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2517                                 <tbody><tr>
2518                                         <td class="dBug_arrayHeader" colspan="2">array (3)</td>
2519                                 </tr><tr>
2520                                 <td class="dBug_arrayKey" valign="top">mode</td>
2521                                 <td>0</td>
2522 </tr>
2523 <tr>
2524                                 <td class="dBug_arrayKey" valign="top">replaceString</td>
2525                                 <td>*censored*</td>
2526 </tr>
2527 <tr>
2528                                 <td class="dBug_arrayKey" valign="top">badWords</td>
2529                                 <td>your,bad,words,here</td>
2530 </tr>
2531 </tbody></table></td>
2532 </tr>
2533 <tr>
2534                                 <td class="dBug_arrayKey" valign="top">p3p</td>
2535                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2536                                 <tbody><tr>
2537                                         <td class="dBug_arrayHeader" colspan="2">array (3)</td>
2538                                 </tr><tr>
2539                                 <td class="dBug_arrayKey" valign="top">policies</td>
2540                                 <td>1</td>
2541 </tr>
2542 <tr>
2543                                 <td class="dBug_arrayKey" valign="top">policyLocation</td>
2544                                 <td>[empty string]</td>
2545 </tr>
2546 <tr>
2547                                 <td class="dBug_arrayKey" valign="top">compactPolicy</td>
2548                                 <td>CUR ADM OUR NOR STA NID</td>
2549 </tr>
2550 </tbody></table></td>
2551 </tr>
2552 <tr>
2553                                 <td class="dBug_arrayKey" valign="top">tuples</td>
2554                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2555                                 <tbody><tr>
2556                                         <td class="dBug_arrayHeader" colspan="2">array (1)</td>
2557                                 </tr><tr>
2558                                 <td class="dBug_arrayKey" valign="top">version</td>
2559                                 <td>0.7.0</td>
2560 </tr>
2561 </tbody></table></td>
2562 </tr>
2563 <tr>
2564                                 <td class="dBug_arrayKey" valign="top">table</td>
2565                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2566                                 <tbody><tr>
2567                                         <td class="dBug_arrayHeader" colspan="2">array (20)</td>
2568                                 </tr><tr>
2569                                 <td class="dBug_arrayKey" valign="top">block</td>
2570                                 <td>block</td>
2571 </tr>
2572 <tr>
2573                                 <td class="dBug_arrayKey" valign="top">block_role</td>
2574                                 <td>block_role</td>
2575 </tr>
2576 <tr>
2577                                 <td class="dBug_arrayKey" valign="top">block_assignment</td>
2578                                 <td>block_assignment</td>
2579 </tr>
2580 <tr>
2581                                 <td class="dBug_arrayKey" valign="top">module</td>
2582                                 <td>module</td>
2583 </tr>
2584 <tr>
2585                                 <td class="dBug_arrayKey" valign="top">sequence</td>
2586                                 <td>sequence</td>
2587 </tr>
2588 <tr>
2589                                 <td class="dBug_arrayKey" valign="top">translation</td>
2590                                 <td>translation</td>
2591 </tr>
2592 <tr>
2593                                 <td class="dBug_arrayKey" valign="top">uri_alias</td>
2594                                 <td>uri_alias</td>
2595 </tr>
2596 <tr>
2597                                 <td class="dBug_arrayKey" valign="top">section</td>
2598                                 <td>section</td>
2599 </tr>
2600 <tr>
2601                                 <td class="dBug_arrayKey" valign="top">login</td>
2602                                 <td>login</td>
2603 </tr>
2604 <tr>
2605                                 <td class="dBug_arrayKey" valign="top">organisation</td>
2606                                 <td>organisation</td>
2607 </tr>
2608 <tr>
2609                                 <td class="dBug_arrayKey" valign="top">organisation_type</td>
2610                                 <td>organisation_type</td>
2611 </tr>
2612 <tr>
2613                                 <td class="dBug_arrayKey" valign="top">org_preference</td>
2614                                 <td>org_preference</td>
2615 </tr>
2616 <tr>
2617                                 <td class="dBug_arrayKey" valign="top">permission</td>
2618                                 <td>permission</td>
2619 </tr>
2620 <tr>
2621                                 <td class="dBug_arrayKey" valign="top">preference</td>
2622                                 <td>preference</td>
2623 </tr>
2624 <tr>
2625                                 <td class="dBug_arrayKey" valign="top">role</td>
2626                                 <td>role</td>
2627 </tr>
2628 <tr>
2629                                 <td class="dBug_arrayKey" valign="top">role_permission</td>
2630                                 <td>role_permission</td>
2631 </tr>
2632 <tr>
2633                                 <td class="dBug_arrayKey" valign="top">user</td>
2634                                 <td>usr</td>
2635 </tr>
2636 <tr>
2637                                 <td class="dBug_arrayKey" valign="top">user_permission</td>
2638                                 <td>user_permission</td>
2639 </tr>
2640 <tr>
2641                                 <td class="dBug_arrayKey" valign="top">user_preference</td>
2642                                 <td>user_preference</td>
2643 </tr>
2644 <tr>
2645                                 <td class="dBug_arrayKey" valign="top">user_session</td>
2646                                 <td>user_session</td>
2647 </tr>
2648 </tbody></table></td>
2649 </tr>
2650 </tbody></table></td>
2651 </tr>
2652 <tr>
2653                                 <td class="dBug_objectKey" valign="top">SGL_URL</td>
2654                                 <td>[function]</td>
2655 </tr>
2656 <tr>
2657                                 <td class="dBug_objectKey" valign="top">__construct</td>
2658                                 <td>[function]</td>
2659 </tr>
2660 <tr>
2661                                 <td class="dBug_objectKey" valign="top">init</td>
2662                                 <td>[function]</td>
2663 </tr>
2664 <tr>
2665                                 <td class="dBug_objectKey" valign="top">singleton</td>
2666                                 <td>[function]</td>
2667 </tr>
2668 <tr>
2669                                 <td class="dBug_objectKey" valign="top">getManagerName</td>
2670                                 <td>[function]</td>
2671 </tr>
2672 <tr>
2673                                 <td class="dBug_objectKey" valign="top">getModuleName</td>
2674                                 <td>[function]</td>
2675 </tr>
2676 <tr>
2677                                 <td class="dBug_objectKey" valign="top">getQueryData</td>
2678                                 <td>[function]</td>
2679 </tr>
2680 <tr>
2681                                 <td class="dBug_objectKey" valign="top">getQueryString</td>
2682                                 <td>[function]</td>
2683 </tr>
2684 <tr>
2685                                 <td class="dBug_objectKey" valign="top">parseQueryString</td>
2686                                 <td>[function]</td>
2687 </tr>
2688 <tr>
2689                                 <td class="dBug_objectKey" valign="top">querystringArrayToHash</td>
2690                                 <td>[function]</td>
2691 </tr>
2692 <tr>
2693                                 <td class="dBug_objectKey" valign="top">getStrategiesFingerprint</td>
2694                                 <td>[function]</td>
2695 </tr>
2696 <tr>
2697                                 <td class="dBug_objectKey" valign="top">toString</td>
2698                                 <td>[function]</td>
2699 </tr>
2700 <tr>
2701                                 <td class="dBug_objectKey" valign="top">makeLink</td>
2702                                 <td>[function]</td>
2703 </tr>
2704 <tr>
2705                                 <td class="dBug_objectKey" valign="top">getStandardPort</td>
2706                                 <td>[function]</td>
2707 </tr>
2708 <tr>
2709                                 <td class="dBug_objectKey" valign="top">setProtocol</td>
2710                                 <td>[function]</td>
2711 </tr>
2712 <tr>
2713                                 <td class="dBug_objectKey" valign="top">resolveServerVars</td>
2714                                 <td>[function]</td>
2715 </tr>
2716 <tr>
2717                                 <td class="dBug_objectKey" valign="top">getHostName</td>
2718                                 <td>[function]</td>
2719 </tr>
2720 <tr>
2721                                 <td class="dBug_objectKey" valign="top">getPath</td>
2722                                 <td>[function]</td>
2723 </tr>
2724 <tr>
2725                                 <td class="dBug_objectKey" valign="top">getFrontScriptName</td>
2726                                 <td>[function]</td>
2727 </tr>
2728 <tr>
2729                                 <td class="dBug_objectKey" valign="top">toAbsolute</td>
2730                                 <td>[function]</td>
2731 </tr>
2732 <tr>
2733                                 <td class="dBug_objectKey" valign="top">getBase</td>
2734                                 <td>[function]</td>
2735 </tr>
2736 <tr>
2737                                 <td class="dBug_objectKey" valign="top">parseResourceUri</td>
2738                                 <td>[function]</td>
2739 </tr>
2740 <tr>
2741                                 <td class="dBug_objectKey" valign="top">addSessionInfo</td>
2742                                 <td>[function]</td>
2743 </tr>
2744 <tr>
2745                                 <td class="dBug_objectKey" valign="top">removeSessionInfo</td>
2746                                 <td>[function]</td>
2747 </tr>
2748 <tr>
2749                                 <td class="dBug_objectKey" valign="top">removeStrategies</td>
2750                                 <td>[function]</td>
2751 </tr>
2752 <tr>
2753                                 <td class="dBug_objectKey" valign="top">toPartialArray</td>
2754                                 <td>[function]</td>
2755 </tr>
2756 <tr>
2757                                 <td class="dBug_objectKey" valign="top">ensureWebrootSet</td>
2758                                 <td>[function]</td>
2759 </tr>
2760 </tbody></table></td>
2761 </tr>
2762 <tr>
2763                                 <td class="dBug_arrayKey" valign="top">request</td>
2764                                 <td><table class="dBug_object" cellpadding="3" cellspacing="2">
2765                                 <tbody><tr>
2766                                         <td class="dBug_objectHeader" colspan="2">Object id #10 (SGL_Request)</td>
2767                                 </tr><tr>
2768                                 <td class="dBug_objectKey" valign="top">aProps</td>
2769                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2770                                 <tbody><tr>
2771                                         <td class="dBug_arrayHeader" colspan="2">array (2)</td>
2772                                 </tr><tr>
2773                                 <td class="dBug_arrayKey" valign="top">moduleName</td>
2774                                 <td>default</td>
2775 </tr>
2776 <tr>
2777                                 <td class="dBug_arrayKey" valign="top">managerName</td>
2778                                 <td>default</td>
2779 </tr>
2780 </tbody></table></td>
2781 </tr>
2782 <tr>
2783                                 <td class="dBug_objectKey" valign="top">init</td>
2784                                 <td>[function]</td>
2785 </tr>
2786 <tr>
2787                                 <td class="dBug_objectKey" valign="top">singleton</td>
2788                                 <td>[function]</td>
2789 </tr>
2790 <tr>
2791                                 <td class="dBug_objectKey" valign="top">isEmpty</td>
2792                                 <td>[function]</td>
2793 </tr>
2794 <tr>
2795                                 <td class="dBug_objectKey" valign="top">initHttp</td>
2796                                 <td>[function]</td>
2797 </tr>
2798 <tr>
2799                                 <td class="dBug_objectKey" valign="top">initCli</td>
2800                                 <td>[function]</td>
2801 </tr>
2802 <tr>
2803                                 <td class="dBug_objectKey" valign="top">merge</td>
2804                                 <td>[function]</td>
2805 </tr>
2806 <tr>
2807                                 <td class="dBug_objectKey" valign="top">get</td>
2808                                 <td>[function]</td>
2809 </tr>
2810 <tr>
2811                                 <td class="dBug_objectKey" valign="top">set</td>
2812                                 <td>[function]</td>
2813 </tr>
2814 <tr>
2815                                 <td class="dBug_objectKey" valign="top">add</td>
2816                                 <td>[function]</td>
2817 </tr>
2818 <tr>
2819                                 <td class="dBug_objectKey" valign="top">getAll</td>
2820                                 <td>[function]</td>
2821 </tr>
2822 <tr>
2823                                 <td class="dBug_objectKey" valign="top">getModuleName</td>
2824                                 <td>[function]</td>
2825 </tr>
2826 <tr>
2827                                 <td class="dBug_objectKey" valign="top">getManagerName</td>
2828                                 <td>[function]</td>
2829 </tr>
2830 <tr>
2831                                 <td class="dBug_objectKey" valign="top">getUri</td>
2832                                 <td>[function]</td>
2833 </tr>
2834 <tr>
2835                                 <td class="dBug_objectKey" valign="top">debug</td>
2836                                 <td>[function]</td>
2837 </tr>
2838 </tbody></table></td>
2839 </tr>
2840 <tr>
2841                                 <td class="dBug_arrayKey" valign="top">manager</td>
2842                                 <td><table class="dBug_object" cellpadding="3" cellspacing="2">
2843                                 <tbody><tr>
2844                                         <td class="dBug_objectHeader" colspan="2">Object id #36 (DefaultMgr)</td>
2845                                 </tr><tr>
2846                                 <td class="dBug_objectKey" valign="top">masterTemplate</td>
2847                                 <td>master.html</td>
2848 </tr>
2849 <tr>
2850                                 <td class="dBug_objectKey" valign="top">template</td>
2851                                 <td>home.html</td>
2852 </tr>
2853 <tr>
2854                                 <td class="dBug_objectKey" valign="top">pageTitle</td>
2855                                 <td>Home</td>
2856 </tr>
2857 <tr>
2858                                 <td class="dBug_objectKey" valign="top">validated</td>
2859                                 <td>TRUE</td>
2860 </tr>
2861 <tr>
2862                                 <td class="dBug_objectKey" valign="top">sortBy</td>
2863                                 <td>[empty]</td>
2864 </tr>
2865 <tr>
2866                                 <td class="dBug_objectKey" valign="top">_aActionsMapping</td>
2867                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2868                                 <tbody><tr>
2869                                         <td class="dBug_arrayHeader" colspan="2">array (1)</td>
2870                                 </tr><tr>
2871                                 <td class="dBug_arrayKey" valign="top">list</td>
2872                                 <td><table class="dBug_array" cellpadding="3" cellspacing="2">
2873                                 <tbody><tr>
2874                                         <td class="dBug_arrayHeader" colspan="2">array (1)</td>
2875                                 </tr><tr>
2876                                 <td class="dBug_arrayKey" valign="top">0</td>
2877                                 <td>list</td>
2878 </tr>
2879 </tbody></table></td>
2880 </tr>
2881 </tbody></table></td>
2882 </tr>
2883 <tr>
2884                                 <td class="dBug_objectKey" valign="top">DefaultMgr</td>
2885                                 <td>[function]</td>
2886 </tr>
2887 <tr>
2888                                 <td class="dBug_objectKey" valign="top">validate</td>
2889                                 <td>[function]</td>
2890 </tr>
2891 <tr>
2892                                 <td class="dBug_objectKey" valign="top">_cmd_list</td>
2893                                 <td>[function]</td>
2894 </tr>
2895 <tr>
2896                                 <td class="dBug_objectKey" valign="top">SGL_Manager</td>
2897                                 <td>[function]</td>
2898 </tr>
2899 <tr>
2900                                 <td class="dBug_objectKey" valign="top">_getDb</td>
2901                                 <td>[function]</td>
2902 </tr>
2903 <tr>
2904                                 <td class="dBug_objectKey" valign="top">getConfig</td>
2905                                 <td>[function]</td>
2906 </tr>
2907 <tr>
2908                                 <td class="dBug_objectKey" valign="top">process</td>
2909                                 <td>[function]</td>
2910 </tr>
2911 <tr>
2912                                 <td class="dBug_objectKey" valign="top">_authorise</td>
2913                                 <td>[function]</td>
2914 </tr>
2915 <tr>
2916                                 <td class="dBug_objectKey" valign="top">getTemplate</td>
2917                                 <td>[function]</td>
2918 </tr>
2919 <tr>
2920                                 <td class="dBug_objectKey" valign="top">display</td>
2921                                 <td>[function]</td>
2922 </tr>
2923 <tr>
2924                                 <td class="dBug_objectKey" valign="top">isValid</td>
2925                                 <td>[function]</td>
2926 </tr>
2927 <tr>
2928                                 <td class="dBug_objectKey" valign="top">_cmd_redirectToDefault</td>
2929                                 <td>[function]</td>
2930 </tr>
2931 <tr>
2932                                 <td class="dBug_objectKey" valign="top">getDefaultPageParams</td>
2933                                 <td>[function]</td>
2934 </tr>
2935 </tbody></table></td>
2936 </tr>
2937 <tr>
2938                                 <td class="dBug_arrayKey" valign="top">session</td>
2939                                 <td><table class="dBug_object" cellpadding="3" cellspacing="2">
2940                                 <tbody><tr>
2941                                         <td class="dBug_objectHeader" colspan="2">Object id #37 (SGL_Session)</td>
2942                                 </tr><tr>
2943                                 <td class="dBug_objectKey" valign="top">_timeout</td>
2944                                 <td>[empty]</td>
2945 </tr>
2946 <tr>
2947                                 <td class="dBug_objectKey" valign="top">SGL_Session</td>
2948                                 <td>[function]</td>
2949 </tr>
2950 <tr>
2951                                 <td class="dBug_objectKey" valign="top">_init</td>
2952                                 <td>[function]</td>
2953 </tr>
2954 <tr>
2955                                 <td class="dBug_objectKey" valign="top">exists</td>
2956                                 <td>[function]</td>
2957 </tr>
2958 <tr>
2959                                 <td class="dBug_objectKey" valign="top">isValid</td>
2960                                 <td>[function]</td>
2961 </tr>
2962 <tr>
2963                                 <td class="dBug_objectKey" valign="top">isTimedOut</td>
2964                                 <td>[function]</td>
2965 </tr>
2966 <tr>
2967                                 <td class="dBug_objectKey" valign="top">hasPerms</td>
2968                                 <td>[function]</td>
2969 </tr>
2970 <tr>
2971                                 <td class="dBug_objectKey" valign="top">currentUserIsOwner</td>
2972                                 <td>[function]</td>
2973 </tr>
2974 <tr>
2975                                 <td class="dBug_objectKey" valign="top">getUid</td>
2976                                 <td>[function]</td>
2977 </tr>
2978 <tr>
2979                                 <td class="dBug_objectKey" valign="top">getUsername</td>
2980                                 <td>[function]</td>
2981 </tr>
2982 <tr>
2983                                 <td class="dBug_objectKey" valign="top">getRoleId</td>
2984                                 <td>[function]</td>
2985 </tr>
2986 <tr>
2987                                 <td class="dBug_objectKey" valign="top">getOrganisationId</td>
2988                                 <td>[function]</td>
2989 </tr>
2990 <tr>
2991                                 <td class="dBug_objectKey" valign="top">remove</td>
2992                                 <td>[function]</td>
2993 </tr>
2994 <tr>
2995                                 <td class="dBug_objectKey" valign="top">get</td>
2996                                 <td>[function]</td>
2997 </tr>
2998 <tr>
2999                                 <td class="dBug_objectKey" valign="top">set</td>
3000                                 <td>[function]</td>
3001 </tr>
3002 <tr>
3003                                 <td class="dBug_objectKey" valign="top">debug</td>
3004                                 <td>[function]</td>
3005 </tr>
3006 <tr>
3007                                 <td class="dBug_objectKey" valign="top">getId</td>
3008                                 <td>[function]</td>
3009 </tr>
3010 <tr>
3011                                 <td class="dBug_objectKey" valign="top">destroy</td>
3012                                 <td>[function]</td>
3013 </tr>
3014 <tr>
3015                                 <td class="dBug_objectKey" valign="top">getUserSessionCount</td>
3016                                 <td>[function]</td>
3017 </tr>
3018 <tr>
3019                                 <td class="dBug_objectKey" valign="top">destroyUserSessions</td>
3020                                 <td>[function]</td>
3021 </tr>
3022 <tr>
3023                                 <td class="dBug_objectKey" valign="top">getGuestSessionCount</td>
3024                                 <td>[function]</td>
3025 </tr>
3026 <tr>
3027                                 <td class="dBug_objectKey" valign="top">getMemberSessionCount</td>
3028                                 <td>[function]</td>
3029 </tr>
3030 <tr>
3031                                 <td class="dBug_objectKey" valign="top">getSessionCount</td>
3032                                 <td>[function]</td>
3033 </tr>
3034 <tr>
3035                                 <td class="dBug_objectKey" valign="top">dbOpen</td>
3036                                 <td>[function]</td>
3037 </tr>
3038 <tr>
3039                                 <td class="dBug_objectKey" valign="top">dbClose</td>
3040                                 <td>[function]</td>
3041 </tr>
3042 <tr>
3043                                 <td class="dBug_objectKey" valign="top">dbRead</td>
3044                                 <td>[function]</td>
3045 </tr>
3046 <tr>
3047                                 <td class="dBug_objectKey" valign="top">dbWrite</td>
3048                                 <td>[function]</td>
3049 </tr>
3050 <tr>
3051                                 <td class="dBug_objectKey" valign="top">dbDestroy</td>
3052                                 <td>[function]</td>
3053 </tr>
3054 <tr>
3055                                 <td class="dBug_objectKey" valign="top">dbGc</td>
3056                                 <td>[function]</td>
3057 </tr>
3058 </tbody></table></td>
3059 </tr>
3060 </tbody></table></td>
3061 </tr>
3062 <tr>
3063                                 <td class="dBug_objectKey" valign="top">moduleName</td>
3064                                 <td>default</td>
3065 </tr>
3066 <tr>
3067                                 <td class="dBug_objectKey" valign="top">masterTemplate</td>
3068                                 <td>master.html</td>
3069 </tr>
3070 <tr>
3071                                 <td class="dBug_objectKey" valign="top">template</td>
3072                                 <td>home.html</td>
3073 </tr>
3074 <tr>
3075                                 <td class="dBug_objectKey" valign="top">pageTitle</td>
3076                                 <td>Home</td>
3077 </tr>
3078 <tr>
3079                                 <td class="dBug_objectKey" valign="top">welcome</td>
3080                                 <td>[empty]</td>
3081 </tr>
3082 <tr>
3083                                 <td class="dBug_objectKey" valign="top">action</td>
3084                                 <td>list</td>
3085 </tr>
3086 <tr>
3087                                 <td class="dBug_objectKey" valign="top">singleton</td>
3088                                 <td>[function]</td>
3089 </tr>
3090 <tr>
3091                                 <td class="dBug_objectKey" valign="top">get</td>
3092                                 <td>[function]</td>
3093 </tr>
3094 <tr>
3095                                 <td class="dBug_objectKey" valign="top">set</td>
3096                                 <td>[function]</td>
3097 </tr>
3098 <tr>
3099                                 <td class="dBug_objectKey" valign="top">exists</td>
3100                                 <td>[function]</td>
3101 </tr>
3102 <tr>
3103                                 <td class="dBug_objectKey" valign="top">getRequest</td>
3104                                 <td>[function]</td>
3105 </tr>
3106 <tr>
3107                                 <td class="dBug_objectKey" valign="top">setRequest</td>
3108                                 <td>[function]</td>
3109 </tr>
3110 <tr>
3111                                 <td class="dBug_objectKey" valign="top">getCurrentUrl</td>
3112                                 <td>[function]</td>
3113 </tr>
3114 <tr>
3115                                 <td class="dBug_objectKey" valign="top">setCurrentUrl</td>
3116                                 <td>[function]</td>
3117 </tr>
3118 <tr>
3119                                 <td class="dBug_objectKey" valign="top">setFilters</td>
3120                                 <td>[function]</td>
3121 </tr>
3122 <tr>
3123                                 <td class="dBug_objectKey" valign="top">getFilters</td>
3124                                 <td>[function]</td>
3125 </tr>
3126 <tr>
3127                                 <td class="dBug_objectKey" valign="top">getConfig</td>
3128                                 <td>[function]</td>
3129 </tr>
3130 <tr>
3131                                 <td class="dBug_objectKey" valign="top">aggregate</td>
3132                                 <td>[function]</td>
3133 </tr>
3134 </tbody></table></body></html>